UNPKG

760 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.es.js","sources":["../src/compile/sb/JumpTable.ts","../src/compile/pc/ProgramCounter.ts","../src/compile/pc/DeferredProgramCounter.ts","../src/compile/pc/Jump.ts","../src/compile/pc/Call.ts","../src/compile/pc/Jmp.ts","../src/compile/pc/KnownProgramCounter.ts","../src/compile/pc/LastProgramCounter.ts","../src/compile/pc/ProgramCounterHelper.ts","../src/compile/NodeCompiler.ts","../src/compile/helper/Helper.ts","../src/compile/helper/common/ArrFilterHelper.ts","../src/compile/helper/common/ArrForEachHelper.ts","../src/compile/helper/common/ArrMapHelper.ts","../src/compile/helper/common/CloneArrayHelper.ts","../src/compile/helper/common/ExtendArrayHelper.ts","../src/compile/helper/common/ForTypeHelper.ts","../src/compile/helper/common/serialize.ts","../src/compile/helper/function/ArgumentsHelper.ts","../src/compile/helper/function/InternalFunctionProperties.ts","../src/compile/helper/function/BindFunctionObjectThisHelper.ts","../src/compile/helper/function/BindFunctionThisHelper.ts","../src/compile/helper/function/CallHelper.ts","../src/compile/helper/function/CloneFunctionHelper.ts","../src/compile/helper/function/CloneFunctionObjectHelper.ts","../src/compile/helper/function/CreateCallArrayHelper.ts","../src/compile/helper/function/CreateConstructArrayHelper.ts","../src/compile/helper/function/CreateFunctionArrayHelper.ts","../src/compile/helper/function/CreateFunctionObjectHelper.ts","../src/compile/helper/function/FunctionHelper.ts","../src/compile/helper/function/InvokeCallHelper.ts","../src/compile/helper/function/InvokeConstructHelper.ts","../src/compile/helper/function/NewHelper.ts","../src/compile/helper/function/ParametersHelper.ts","../src/compile/helper/common/GenericDeserializeHelper.ts","../src/compile/helper/common/GenericSerializeHelper.ts","../src/compile/helper/common/TypedHelper.ts","../src/compile/helper/completionRecord/CreateCompletionHelper.ts","../src/compile/helper/completionRecord/CreateNormalCompletionHelper.ts","../src/compile/helper/completionRecord/CreateThrowCompletionHelper.ts","../src/compile/helper/completionRecord/GetCompletionBaseHelper.ts","../src/compile/helper/completionRecord/GetCompletionErrorHelper.ts","../src/compile/helper/completionRecord/GetCompletionValHelper.ts","../src/DiagnosticCode.ts","../src/constants.ts","../src/compile/helper/completionRecord/HandleCompletionHelper.ts","../src/compile/helper/completionRecord/PickCompletionValHelper.ts","../src/compile/helper/error/ThrowHelper.ts","../src/compile/helper/error/ThrowTypeErrorHelper.ts","../src/compile/helper/statement/CaseHelper.ts","../src/compile/helper/statement/ForLoopHelper.ts","../src/compile/helper/statement/IfHelper.ts","../src/compile/helper/statement/ProcessStatementsHelper.ts","../src/compile/helper/types/CreatePrimitiveHelper.ts","../src/compile/helper/types/Types.ts","../src/compile/helper/types/boolean/CreateBooleanHelper.ts","../src/compile/helper/types/GetPrimitiveHelper.ts","../src/compile/helper/types/boolean/GetBooleanHelper.ts","../src/compile/helper/types/IsHelper.ts","../src/compile/helper/types/boolean/IsBooleanHelper.ts","../src/typeUtils.ts","../src/compile/helper/types/boolean/ToBooleanHelper.ts","../src/compile/helper/types/null/CreateNullHelper.ts","../src/compile/helper/types/null/IsNullHelper.ts","../src/compile/helper/types/number/CreateNumberHelper.ts","../src/compile/helper/types/number/GetNumberHelper.ts","../src/compile/helper/types/number/IsNumberHelper.ts","../src/compile/helper/types/number/ToNumberHelper.ts","../src/compile/helper/types/object/CreateObjectHelper.ts","../src/compile/helper/types/object/CreatePropertyObjectHelper.ts","../src/compile/helper/types/object/ElementAccessHelper.ts","../src/compile/helper/types/object/FindObjectPropertyHelper.ts","../src/compile/helper/types/object/GetObjectHelperBase.ts","../src/compile/helper/types/object/GetInternalObjectHelper.ts","../src/compile/helper/types/object/GetInternalObjectPropertyHelper.ts","../src/compile/helper/types/object/GetObjectHelper.ts","../src/compile/helper/types/object/GetPropertyObjectHelper.ts","../src/compile/helper/types/object/GetObjectPropertyHelperBase.ts","../src/compile/helper/types/object/GetPropertyObjectPropertyHelper.ts","../src/compile/helper/types/object/GetSymbolObjectHelper.ts","../src/compile/helper/types/object/GetSymbolObjectPropertyHelper.ts","../src/compile/helper/types/object/InstanceofHelper.ts","../src/compile/helper/types/object/IsObjectHelper.ts","../src/compile/helper/types/object/SetObjectAccessorPropertyHelperBase.ts","../src/compile/helper/types/object/SetAccessorPropertyObjectPropertyHelper.ts","../src/compile/helper/types/object/SetAccessorSymbolObjectPropertyHelper.ts","../src/compile/helper/types/object/SetObjectDataPropertyHelperBase.ts","../src/compile/helper/types/object/SetDataPropertyObjectPropertyHelper.ts","../src/compile/helper/types/object/SetDataSymbolObjectPropertyHelper.ts","../src/compile/helper/types/object/SetInternalObjectPropertyHelper.ts","../src/compile/helper/types/object/SetObjectPropertyHelperBase.ts","../src/compile/helper/types/object/SetPropertyObjectPropertyHelper.ts","../src/compile/helper/types/object/SetSymbolObjectPropertyHelper.ts","../src/compile/helper/types/object/ShallowCloneObjectHelper.ts","../src/compile/helper/types/object/ShallowCloneObjHelper.ts","../src/compile/helper/types/object/ToObjectHelper.ts","../src/compile/helper/types/string/CreateStringHelper.ts","../src/compile/helper/types/string/GetStringHelper.ts","../src/compile/helper/types/string/IsStringHelper.ts","../src/compile/helper/types/string/ToStringHelper.ts","../src/compile/helper/types/symbol/CreateSymbolHelper.ts","../src/compile/helper/types/symbol/GetSymbolHelper.ts","../src/compile/helper/types/symbol/IsSymbolHelper.ts","../src/compile/helper/types/undefined/CreateUndefinedHelper.ts","../src/compile/helper/types/undefined/IsUndefinedHelper.ts","../src/compile/helper/types/IsNullOrUndefinedHelper.ts","../src/compile/helper/types/IsSameTypeHelper.ts","../src/compile/helper/types/ToPrimitiveHelper.ts","../src/compile/helper/types/UnwrapTypeHelper.ts","../src/compile/helper/types/UnwrapValHelper.ts","../src/compile/helper/relational/EqualsEqualsEqualsHelper.ts","../src/compile/helper/relational/EqualsEqualsEqualsNumberHelper.ts","../src/compile/helper/relational/EqualsEqualsEqualsSameTypeHelper.ts","../src/compile/helper/relational/EqualsEqualsEqualsUnknownHelper.ts","../src/compile/helper/relational/EqualsEqualsHelper.ts","../src/compile/helper/relational/LessThanHelper.ts","../src/compile/helper/global/constants.ts","../src/compile/helper/global/InternalGlobalProperties.ts","../src/compile/helper/global/AddArgumentsHelper.ts","../src/compile/helper/global/AddConstructorObjectHelper.ts","../src/compile/helper/global/AddArrayObjectHelper.ts","../src/compile/helper/global/AddBufferObjectHelper.ts","../src/compile/helper/global/AddBooleanObjectHelper.ts","../src/compile/helper/global/AddErrorObjectHelper.ts","../src/compile/helper/global/AddModulesHelper.ts","../src/compile/helper/global/AddNumberObjectHelper.ts","../src/compile/helper/global/AddObjectObjectHelper.ts","../src/compile/helper/global/AddStringObjectHelper.ts","../src/compile/helper/global/AddSymbolObjectHelper.ts","../src/compile/helper/global/SetGlobalObjectHelper.ts","../src/compile/helper/global/GetArgumentHelper.ts","../src/compile/helper/global/GetGlobalPropertyHelper.ts","../src/compile/helper/array/CreateArrayHelper.ts","../src/compile/helper/array/GetArrayIndexHelper.ts","../src/compile/helper/array/InternalArrayProperties.ts","../src/compile/helper/array/GetArrayValueHelper.ts","../src/compile/helper/array/SetArrayIndexHelper.ts","../src/compile/helper/array/SetArrayValueHelper.ts","../src/compile/helper/array/UnwrapArrayHelper.ts","../src/compile/helper/array/WrapArrayHelper.ts","../src/compile/helper/module/AddEmptyModuleHelper.ts","../src/compile/helper/module/ExportHelper.ts","../src/compile/helper/module/ExportSingleHelper.ts","../src/compile/helper/module/GetCurrentModuleHelper.ts","../src/compile/helper/module/GetModuleHelper.ts","../src/compile/helper/module/GetModulesHelper.ts","../src/compile/helper/blockchain/InternalBlockchainInterfaceProperties.ts","../src/compile/helper/blockchain/IsBlockchainInterfaceHelper.ts","../src/compile/helper/blockchain/UnwrapBlockchainInterfaceHelper.ts","../src/compile/helper/blockchain/WrapBlockchainInterfaceHelper.ts","../src/compile/helper/buffer/CreateBufferHelper.ts","../src/compile/helper/buffer/InternalBufferProperties.ts","../src/compile/helper/buffer/GetBufferValueHelper.ts","../src/compile/helper/buffer/SetBufferValueHelper.ts","../src/compile/helper/buffer/UnwrapBufferHelper.ts","../src/compile/helper/buffer/WrapBufferHelper.ts","../src/compile/helper/createHelpers.ts","../src/compile/declaration/ClassDeclarationCompiler.ts","../src/compile/declaration/EnumDeclarationCompiler.ts","../src/compile/declaration/EnumMemberCompiler.ts","../src/compile/declaration/ExportAssignmentCompiler.ts","../src/compile/declaration/ExportDeclarationCompiler.ts","../src/compile/declaration/FunctionDeclarationCompiler.ts","../src/compile/declaration/ImportDeclarationCompiler.ts","../src/compile/declaration/TypeAliasDeclarationCompiler.ts","../src/compile/declaration/VariableDeclarationCompiler.ts","../src/compile/declaration/VariableDeclarationListCompiler.ts","../src/compile/declaration/index.ts","../src/compile/decorator/DecoratorCompiler.ts","../src/compile/decorator/index.ts","../src/compile/expression/ArrayLiteralExpressionCompiler.ts","../src/compile/expression/ArrowFunctionCompiler.ts","../src/compile/expression/AsExpressionCompiler.ts","../src/compile/expression/AwaitExpressionCompiler.ts","../src/compile/expression/BinaryExpressionCompiler.ts","../src/compile/expression/BooleanLiteralCompiler.ts","../src/compile/syscalls.ts","../src/compile/expression/CallExpressionCompiler.ts","../src/compile/expression/CommaListExpressionCompiler.ts","../src/compile/expression/ConditionalExpressionCompiler.ts","../src/compile/expression/DeleteExpressionCompiler.ts","../src/compile/expression/ElementAccessExpressionCompiler.ts","../src/compile/expression/FunctionExpressionCompiler.ts","../src/compile/expression/IdentifierCompiler.ts","../src/compile/expression/ImportExpressionCompiler.ts","../src/compile/expression/MetaPropertyCompiler.ts","../src/compile/expression/NewExpressionCompiler.ts","../src/compile/expression/NonNullExpressionCompiler.ts","../src/compile/expression/NoSubstitutionTemplateLiteralCompiler.ts","../src/compile/expression/NullLiteralCompiler.ts","../src/compile/expression/NumericLiteralCompiler.ts","../src/compile/expression/ObjectLiteralExpressionCompiler.ts","../src/compile/expression/OmittedExpressionCompiler.ts","../src/compile/expression/ParenthesizedExpressionCompiler.ts","../src/compile/expression/PartiallyEmittedExpressionCompiler.ts","../src/compile/expression/PostfixUnaryExpressionCompiler.ts","../src/compile/expression/PrefixUnaryExpressionCompiler.ts","../src/compile/expression/PropertyAccessExpressionCompiler.ts","../src/compile/expression/RegularExpressionLiteralCompiler.ts","../src/compile/expression/SpreadElementCompiler.ts","../src/compile/expression/StringLiteralCompiler.ts","../src/compile/expression/SuperExpressionCompiler.ts","../src/compile/expression/TaggedTemplateExpressionCompiler.ts","../src/compile/expression/ThisExpressionCompiler.ts","../src/compile/expression/TypeAssertionCompiler.ts","../src/compile/expression/TypeOfExpressionCompiler.ts","../src/compile/expression/VoidExpressionCompiler.ts","../src/compile/expression/YieldExpressionCompiler.ts","../src/compile/expression/index.ts","../src/compile/file/SourceFileCompiler.ts","../src/compile/file/index.ts","../src/compile/statement/BlockCompiler.ts","../src/compile/statement/BreakStatementCompiler.ts","../src/compile/statement/CaseBlockCompiler.ts","../src/compile/statement/CaseClauseCompiler.ts","../src/compile/statement/CatchClauseCompiler.ts","../src/compile/statement/ContinueStatementCompiler.ts","../src/compile/statement/DebuggerStatementCompiler.ts","../src/compile/statement/DefaultClauseCompiler.ts","../src/compile/statement/DoStatementCompiler.ts","../src/compile/statement/EmptyStatementCompiler.ts","../src/compile/statement/ExpressionStatementCompiler.ts","../src/compile/statement/ForInStatementCompiler.ts","../src/compile/statement/ForOfStatementCompiler.ts","../src/compile/statement/ForStatementCompiler.ts","../src/compile/statement/IfStatementCompiler.ts","../src/compile/statement/LabeledStatementCompiler.ts","../src/compile/statement/NotEmittedStatementCompiler.ts","../src/compile/statement/ReturnStatementCompiler.ts","../src/compile/statement/SwitchStatementCompiler.ts","../src/compile/statement/ThrowStatementCompiler.ts","../src/compile/statement/TryStatementCompiler.ts","../src/compile/statement/VariableStatementCompiler.ts","../src/compile/statement/WhileStatementCompiler.ts","../src/compile/statement/WithStatementCompiler.ts","../src/compile/statement/index.ts","../src/compile/sb/JumpResolver.ts","../src/compile/sb/BaseScriptBuilder.ts","../src/compile/scope/ResolvedScope.ts","../src/compile/scope/CapturingScope.ts","../src/compile/sb/ScopeCapturingScriptBuilder.ts","../src/compile/sb/EmittingScriptBuilder.ts","../src/compile/sb/HelperCapturingScriptBuilder.ts","../src/CompilerDiagnostic.ts","../src/Context.ts","../src/symbols.ts","../src/compile/compile.ts","../src/utils.ts","../src/compile/compileScript.ts","../src/transpile/NodeTranspiler.ts","../src/transpile/declaration/ClassDeclarationTranspiler.ts","../src/transpile/declaration/index.ts","../src/nodeUtils.ts","../src/transpile/transpiler/NEOTranspiler.ts","../src/transpile/transpile.ts","../src/compileContract.ts","../src/executeScript.ts","../src/scan.ts","../src/findContract.ts"],"sourcesContent":["import { Node } from 'ts-simple-ast';\n\nimport { Bytecode, ScriptBuilder } from '../sb';\n\ninterface JumpResult {\n node: Node;\n jumpNumber: number;\n bytecode: Bytecode;\n}\n\nexport class JumpTable {\n private jumpNumber: number = 0;\n private readonly table: JumpResult[] = [];\n\n public add(sb: ScriptBuilder, node: Node, body: () => void): number {\n const jumpNumber = this.jumpNumber;\n this.jumpNumber += 1;\n const { bytecode } = sb.capture(() => {\n body();\n });\n this.table.push({ jumpNumber, node, bytecode });\n\n return jumpNumber;\n }\n\n public emitTable(sb: ScriptBuilder, outerNode: Node): void {\n this.table.forEach(({ node, jumpNumber, bytecode }) => {\n sb.emitHelper(\n node,\n {},\n sb.helpers.if({\n condition: () => {\n sb.emitOp(node, 'DUP');\n sb.emitPushInt(node, jumpNumber);\n sb.emitOp(node, 'NUMEQUAL');\n },\n whenTrue: () => {\n sb.emitOp(node, 'DROP');\n sb.emitBytecode(bytecode);\n },\n }),\n );\n });\n\n sb.emitOp(outerNode, 'THROW');\n }\n}\n","export abstract class ProgramCounter {\n public abstract plus(value: number): ProgramCounter;\n public abstract equals(other: ProgramCounter): boolean;\n public abstract getPC(): number;\n}\n","import { ProgramCounter } from './ProgramCounter';\n\nexport class DeferredProgramCounter extends ProgramCounter {\n private pc: ProgramCounter | undefined;\n\n constructor(private readonly offset?: number) {\n super();\n }\n\n public plus(offset: number): ProgramCounter {\n return new DeferredProgramCounter((this.offset || 0) + offset);\n }\n\n public equals(other: ProgramCounter): boolean {\n return this === other;\n }\n\n public setPC(pc: ProgramCounter): void {\n this.pc = pc;\n }\n\n public getPC(): number {\n if (this.pc == null) {\n throw new Error('Unknown PC');\n }\n\n return this.pc.getPC() + (this.offset || 0);\n }\n}\n","import { ProgramCounter } from './ProgramCounter';\n\nexport type JumpOp = 'CALL' | 'JMP' | 'JMPIF' | 'JMPIFNOT';\n\nexport abstract class Jump<TOp extends JumpOp = JumpOp> {\n constructor(public readonly op: TOp, public readonly pc: ProgramCounter) {}\n\n public abstract plus(pc: number): Jump<TOp>;\n}\n","import { Jump } from './Jump';\nimport { ProgramCounter } from './ProgramCounter';\n\nexport class Call extends Jump {\n constructor(pc: ProgramCounter) {\n super('CALL', pc);\n }\n\n public plus(pc: number): Call {\n return new Call(this.pc.plus(pc));\n }\n}\n","import { Jump } from './Jump';\nimport { ProgramCounter } from './ProgramCounter';\n\nexport type JmpOp = 'JMP' | 'JMPIF' | 'JMPIFNOT';\n\nexport class Jmp extends Jump<JmpOp> {\n constructor(op: JmpOp, pc: ProgramCounter) {\n super(op, pc);\n }\n\n public plus(pc: number): Jmp {\n return new Jmp(this.op, this.pc.plus(pc));\n }\n}\n","import { ProgramCounter } from './ProgramCounter';\n\nexport class KnownProgramCounter extends ProgramCounter {\n constructor(private readonly pc: number) {\n super();\n }\n\n public plus(offset: number): ProgramCounter {\n return new KnownProgramCounter(this.pc + offset);\n }\n\n public equals(other: ProgramCounter): boolean {\n return other instanceof KnownProgramCounter && this.pc === other.pc;\n }\n\n public getPC(): number {\n return this.pc;\n }\n}\n","import { ProgramCounter } from './ProgramCounter';\n\nexport class LastProgramCounter extends ProgramCounter {\n private pc: number | undefined;\n private readonly children: LastProgramCounter[] = [];\n\n constructor(\n private readonly startPC: number,\n private readonly offset?: number,\n ) {\n super();\n }\n\n public plus(offset: number): ProgramCounter {\n const pc = new LastProgramCounter(\n this.startPC,\n (this.offset || 0) + offset,\n );\n this.children.push(pc);\n if (this.pc != null) {\n pc.setPC(this.pc);\n }\n return pc;\n }\n\n public equals(other: ProgramCounter): boolean {\n return (\n other instanceof LastProgramCounter &&\n this.startPC === other.startPC &&\n this.offset === other.offset\n );\n }\n\n public setPC(pc: number): void {\n this.pc = pc;\n this.children.forEach((child) => {\n child.setPC(pc);\n });\n }\n\n public getPC(): number {\n if (this.pc == null) {\n throw new Error('Unknown PC');\n }\n\n return this.pc + (this.offset || 0);\n }\n}\n","import { KnownProgramCounter } from './KnownProgramCounter';\nimport { LastProgramCounter } from './LastProgramCounter';\nimport { ProgramCounter } from './ProgramCounter';\n\nexport class ProgramCounterHelper {\n private readonly pc: () => number;\n private readonly first: KnownProgramCounter;\n private readonly last: LastProgramCounter;\n\n constructor(pc: () => number) {\n this.pc = pc;\n this.first = new KnownProgramCounter(this.pc());\n this.last = new LastProgramCounter(this.pc());\n }\n\n public getFirst(): ProgramCounter {\n return this.first;\n }\n\n public getCurrent(): ProgramCounter {\n return new KnownProgramCounter(this.pc());\n }\n\n public getLast(): ProgramCounter {\n return this.last;\n }\n\n public setLast(): void {\n this.last.setPC(this.pc());\n }\n}\n","import { SyntaxKind } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from './sb';\nimport { VisitOptions } from './types';\n\nexport abstract class NodeCompiler<TNode> {\n public abstract readonly kind: SyntaxKind;\n\n public abstract visitNode(\n sb: ScriptBuilder,\n node: TNode,\n options: VisitOptions,\n ): void;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport abstract class Helper<T extends Node = Node> {\n public emitGlobal(sb: ScriptBuilder, node: T, options: VisitOptions): void {\n // do nothing\n }\n\n public abstract emit(sb: ScriptBuilder, node: T, options: VisitOptions): void;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ArrFilterHelperOptions {\n map: () => void;\n withIndex?: boolean;\n}\n\n// Input: [array]\n// Output: [array]\nexport class ArrFilterHelper extends Helper {\n private readonly map: () => void;\n private readonly withIndex: boolean;\n\n constructor(options: ArrFilterHelperOptions) {\n super();\n this.map = options.map;\n this.withIndex = options.withIndex || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [size, ...array]\n sb.emitOp(node, 'UNPACK');\n // [0, size, ...array]\n sb.emitPushInt(node, 0);\n // [arr, size, ...array]\n sb.emitOp(node, 'NEWARRAY');\n // [size, arr, ...array]\n sb.emitOp(node, 'SWAP');\n // [idx, size, arr, ...array]\n sb.emitPushInt(node, 0);\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [size, idx, arr, ...array]\n sb.emitOp(node, 'SWAP');\n // [size, idx, size, arr, ...array]\n sb.emitOp(node, 'TUCK');\n // [idx, size, idx, size, arr, ...array]\n sb.emitOp(node, 'OVER');\n // size > idx\n // [size > idx, idx, size, arr, ...array]\n sb.emitOp(node, 'GT');\n },\n each: () => {\n // [arr, idx, size, ...array]\n sb.emitOp(node, 'ROT');\n // [idx, arr, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n if (this.withIndex) {\n // [4, idx, arr, idx, size, ...array]\n sb.emitPushInt(node, 4);\n // [value, idx, arr, idx, size, ...array]\n sb.emitOp(node, 'ROLL');\n // [value, idx, value, arr, idx, size, ...array]\n sb.emitOp(node, 'TUCK');\n } else {\n // [3, arr, idx, size, ...array]\n sb.emitPushInt(node, 3);\n // [value, arr, idx, size, ...array]\n sb.emitOp(node, 'ROLL');\n // [value, value, arr, idx, size, ...array]\n sb.emitOp(node, 'DUP');\n }\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [keepVal, value, arr, idx, size, ...array]\n this.map();\n // [keep, value, arr, idx, size, ...array]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toBoolean({ type: undefined }),\n );\n },\n whenTrue: () => {\n // [arr, value, arr, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n // [value, arr, arr, idx, size, ...array]\n sb.emitOp(node, 'SWAP');\n // [arr, idx, size, ...array]\n sb.emitOp(node, 'APPEND');\n },\n whenFalse: () => {\n // [arr, idx, size, ...array]\n sb.emitOp(node, 'DROP');\n },\n }),\n );\n // [size, arr, idx, ...array]\n sb.emitOp(node, 'ROT');\n // [idx, size, arr, ...array]\n sb.emitOp(node, 'ROT');\n },\n incrementor: () => {\n // [idx, size, arr, ...array]\n sb.emitOp(node, 'INC');\n },\n }),\n );\n // [size, arr]\n sb.emitOp(node, 'DROP');\n // [arr]\n sb.emitOp(node, 'DROP');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ArrForEachHelperOptions {\n each: () => void;\n withIndex?: boolean;\n}\n\n// Input: [array]\n// Output: []\nexport class ArrForEachHelper extends Helper {\n private readonly each: () => void;\n private readonly withIndex: boolean;\n\n constructor(options: ArrForEachHelperOptions) {\n super();\n this.each = options.each;\n this.withIndex = options.withIndex || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [size, ...array]\n sb.emitOp(node, 'UNPACK');\n // [idx, size, ...array]\n sb.emitPushInt(node, 0);\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [size, idx, ...array]\n sb.emitOp(node, 'SWAP');\n // [size, idx, size, ...array]\n sb.emitOp(node, 'TUCK');\n // [idx, size, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n // size > idx\n // [size > idx, idx, size, ...array]\n sb.emitOp(node, 'GT');\n },\n each: () => {\n // [value, idx, size, ...array]\n sb.emitOp(node, 'ROT');\n if (this.withIndex) {\n // [idx, value, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n // [value, idx, idx, size, ...array]\n sb.emitOp(node, 'SWAP');\n }\n // [idx, size, ...array]\n this.each();\n },\n incrementor: () => {\n // [idx, size, ...array]\n sb.emitOp(node, 'INC');\n },\n }),\n );\n // [size]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ArrMapHelperOptions {\n map: () => void;\n withIndex?: boolean;\n}\n\n// Input: [array]\n// Output: [array]\nexport class ArrMapHelper extends Helper {\n private readonly map: () => void;\n private readonly withIndex: boolean;\n\n constructor(options: ArrMapHelperOptions) {\n super();\n this.map = options.map;\n this.withIndex = options.withIndex || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [size, ...array]\n sb.emitOp(node, 'UNPACK');\n // [idx, size, ...array]\n sb.emitPushInt(node, 0);\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [size, idx, ...array]\n sb.emitOp(node, 'SWAP');\n // [size, idx, size, ...array]\n sb.emitOp(node, 'TUCK');\n // [idx, size, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n // size > idx\n // [size > idx, idx, size, ...array]\n sb.emitOp(node, 'GT');\n },\n each: () => {\n // [idx, idx, size, ...array]\n sb.emitOp(node, 'DUP');\n // [3, idx, idx, size, ...array]\n sb.emitPushInt(node, 3);\n // [idx + 3, idx, size, ...array]\n sb.emitOp(node, 'ADD');\n if (this.withIndex) {\n // [idx, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n // [idx, idx, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'DUP');\n // [4, idx, idx, idx + 3, idx, size, ...array]\n sb.emitPushInt(node, 4);\n // [idx + 4, idx, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'ADD');\n // [value, idx, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'ROLL');\n } else {\n // [idx + 3, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'DUP');\n // [value, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'ROLL');\n }\n // [value, idx + 3, idx, size, ...array]\n this.map();\n // [idx + 3, value, idx, size, ...array]\n sb.emitOp(node, 'SWAP');\n // [value, idx, size, ...array]\n sb.emitOp(node, 'XTUCK');\n // [idx, size, ...array]\n sb.emitOp(node, 'DROP');\n },\n incrementor: () => {\n // [idx, size, ...array]\n sb.emitOp(node, 'INC');\n },\n }),\n );\n // [size, ...array]\n sb.emitOp(node, 'DROP');\n // [array]\n sb.emitOp(node, 'PACK');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [array]\n// Output: [array]\nexport class CloneArrayHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [array]\n sb.emitOp(node, 'UNPACK');\n // [...array]\n sb.emitOp(node, 'PACK');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [length, arr]\n// Output: []\nexport class ExtendArrayHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n\n // [arr, length, arr]\n sb.emitOp(node, 'OVER');\n // [currentLength, length, arr]\n sb.emitOp(node, 'ARRAYSIZE');\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [currentLength, length, currentLength, arr]\n sb.emitOp(node, 'TUCK');\n // [length, currentLength, length, currentLength, arr]\n sb.emitOp(node, 'OVER');\n // [expectedLengthGTCurrentLength, length, currentLength, arr]\n sb.emitOp(node, 'LT');\n },\n each: () => {\n // [arr, length, currentLength]\n sb.emitOp(node, 'ROT');\n // [arr, arr, length, currentLength]\n sb.emitOp(node, 'DUP');\n // [undefinedVal, arr, arr, length, currentLength]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n // [arr, length, currentLength]\n sb.emitOp(node, 'APPEND');\n },\n incrementor: () => {\n // [currentLength, arr, length]\n sb.emitOp(node, 'ROT');\n // [currentLength, arr, length]\n sb.emitOp(node, 'INC');\n // [length, currentLength, arr]\n sb.emitOp(node, 'ROT');\n // [currentLength, length, arr]\n sb.emitOp(node, 'SWAP');\n },\n }),\n );\n // [length, arr]\n sb.emitOp(node, 'DROP');\n // [arr]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n }\n}\n","import { Node, Type } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ForType {\n isType: (type?: Type) => boolean;\n isRuntimeType: (options: VisitOptions) => void;\n process: (options: VisitOptions) => void;\n}\n\nexport interface ForTypeHelperOptions {\n types: ForType[];\n defaultCase?: (options: VisitOptions) => void;\n}\n\n// Input: [val]\n// Output: []\nexport class ForTypeHelper extends Helper {\n private readonly types: ForType[];\n private readonly defaultCase: ((options: VisitOptions) => void) | undefined;\n\n constructor({ types, defaultCase }: ForTypeHelperOptions) {\n super();\n this.types = types;\n this.defaultCase = defaultCase;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const noCastOptions = sb.noCastOptions(optionsIn);\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n let type = optionsIn.cast;\n if (type == null) {\n type = sb.getType(node);\n }\n\n const types = this.types.filter((testType) => testType.isType(type));\n const defaultCase =\n this.defaultCase ||\n ((innerOptions) => {\n sb.emitOp(node, 'DROP');\n sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);\n });\n if (types.length === 0) {\n defaultCase(noCastOptions);\n } else if (types.length === 1) {\n types[0].process(noCastOptions);\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n types.map((forType) => ({\n condition: () => {\n sb.emitOp(node, 'DUP');\n forType.isRuntimeType(options);\n },\n whenTrue: () => {\n forType.process(noCastOptions);\n },\n })),\n () => {\n defaultCase(noCastOptions);\n },\n ),\n );\n }\n }\n}\n","import { Node, ts } from 'ts-simple-ast';\n\nimport { VisitOptions } from '../../types';\nimport { ScriptBuilder } from '../../sb';\n\nexport enum SerializableType {\n Array = 7,\n Buffer = 8,\n}\n\nconst invokeGlobal = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n name: string,\n) => {\n // [1, val]\n sb.emitPushInt(node, 1);\n // [argsarr]\n sb.emitOp(node, 'PACK');\n // [globalObjectVal, argsarr]\n sb.scope.getGlobal(sb, node, options);\n // [name, globalObjectVal, argsarr]\n sb.emitPushString(node, name);\n // [objectVal, argsarr]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n // [val]\n sb.emitHelper(node, options, sb.helpers.invokeCall());\n};\n\nexport const SERIALIZE_NAME = 'genericSerialize';\n\nexport const invokeSerialize = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n) => invokeGlobal(sb, node, options, SERIALIZE_NAME);\n\nexport const DESERIALIZE_NAME = 'genericDeserialize';\n\nexport const invokeDeserialize = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n) => invokeGlobal(sb, node, options, DESERIALIZE_NAME);\n\nexport const serializeType = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n type: SerializableType,\n) => {\n // [type, arr]\n sb.emitPushInt(node, type);\n // [2, type, arr]\n sb.emitPushInt(node, 2);\n // [arr]\n sb.emitOp(node, 'PACK');\n};\n\nexport const deserializeType = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n) => {\n // [1, arr]\n sb.emitPushInt(node, 1);\n // [value]\n sb.emitOp(node, 'PICKITEM');\n};\n\nconst isSerializedType = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n type: SerializableType,\n) => {\n // [0, val]\n sb.emitPushInt(node, 0);\n // [type]\n sb.emitOp(node, 'PICKITEM');\n // [type, type]\n sb.emitPushInt(node, type);\n // [isSerializedType]\n sb.emitOp(node, 'NUMEQUAL');\n};\n\nexport const getTypes = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n) => [\n {\n isRuntimeType: () => {\n // [isBoolean]\n sb.emitHelper(node, options, sb.helpers.isBoolean);\n },\n serialize: () => {\n // do nothing\n },\n isSerializedType: () => {\n // [isBoolean]\n sb.emitHelper(node, options, sb.helpers.isBoolean);\n },\n deserialize: () => {\n // do nothing\n },\n },\n {\n isRuntimeType: () => {\n // [isString]\n sb.emitHelper(node, options, sb.helpers.isString);\n },\n serialize: () => {\n // do nothing\n },\n isSerializedType: () => {\n // [isString]\n sb.emitHelper(node, options, sb.helpers.isString);\n },\n deserialize: () => {\n // do nothing\n },\n },\n {\n isRuntimeType: () => {\n // [isNumber]\n sb.emitHelper(node, options, sb.helpers.isNumber);\n },\n serialize: () => {\n // do nothing\n },\n isSerializedType: () => {\n // [isNumber]\n sb.emitHelper(node, options, sb.helpers.isNumber);\n },\n deserialize: () => {\n // do nothing\n },\n },\n {\n isRuntimeType: () => {\n // [Array, val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Buffer' }),\n );\n // [val instanceof Array]\n sb.emitHelper(node, options, sb.helpers.instanceof);\n },\n serialize: () => {\n // [bytearray]\n sb.emitHelper(node, options, sb.helpers.unwrapBuffer);\n // [arr]\n serializeType(sb, node, options, SerializableType.Buffer);\n },\n isSerializedType: () => {\n isSerializedType(sb, node, options, SerializableType.Buffer);\n },\n deserialize: () => {\n deserializeType(sb, node, options);\n // [val]\n sb.emitHelper(node, options, sb.helpers.wrapBuffer);\n },\n },\n {\n isRuntimeType: () => {\n // [Array, val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n // [val instanceof Array]\n sb.emitHelper(node, options, sb.helpers.instanceof);\n },\n serialize: () => {\n // [arr]\n sb.emitHelper(node, options, sb.helpers.unwrapArray);\n // [arr]\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrMap({\n map: () => {\n invokeSerialize(sb, node, options);\n },\n }),\n );\n // [value]\n serializeType(sb, node, options, SerializableType.Array);\n },\n isSerializedType: () => {\n isSerializedType(sb, node, options, SerializableType.Array);\n },\n deserialize: () => {\n // [arr]\n deserializeType(sb, node, options);\n // [arr]\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrMap({\n map: () => {\n invokeDeserialize(sb, node, options);\n },\n }),\n );\n // [val]\n sb.emitHelper(node, options, sb.helpers.wrapArray);\n },\n },\n];\n","import { ArgumentedNode, Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [argsArray]\nexport class ArgumentsHelper extends Helper<Node & ArgumentedNode> {\n public emit(\n sb: ScriptBuilder,\n node: Node & ArgumentedNode,\n options: VisitOptions,\n ): void {\n // Push the arguments\n const args = [...node.getArguments()].reverse();\n for (const arg of args) {\n sb.visit(arg, sb.pushValueOptions(options));\n }\n // [length, ...args]\n sb.emitPushInt(node, args.length);\n // [argsarr]\n sb.emitOp(node, 'PACK');\n }\n}\n","export type FuncProperty = 'call' | 'construct';\n\nexport enum InternalFunctionProperties {\n CALL = 'call',\n CONSTRUCT = 'construct',\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport {\n FuncProperty,\n InternalFunctionProperties,\n} from './InternalFunctionProperties';\n\n// Input: [objectVal, this]\n// Output: [objectVal]\nexport interface BindSingleFunctionHelperOptions {\n type: 'single';\n property: FuncProperty;\n overwrite: boolean;\n}\nexport interface BindBothFunctionHelperOptions {\n type: 'both';\n overwrite: boolean;\n}\n\nexport type BindFunctionObjectThisHelperOptions =\n | BindSingleFunctionHelperOptions\n | BindBothFunctionHelperOptions;\n\n// Input: [objectVal, this]\n// Output: [objectVal]\nexport class BindFunctionObjectThisHelper extends Helper {\n private property: FuncProperty;\n private both: boolean;\n private overwrite: boolean;\n\n constructor(options: BindFunctionObjectThisHelperOptions) {\n super();\n if (options.type === 'both') {\n this.property = InternalFunctionProperties.CALL;\n this.both = true;\n } else {\n this.property = options.property;\n this.both = false;\n }\n this.overwrite = options.overwrite;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [objectVal, this]\n sb.emitHelper(\n node,\n options,\n sb.helpers.cloneFunctionObject(\n this.both\n ? { type: 'both' }\n : { type: 'single', property: this.property },\n ),\n );\n // [this, objectVal]\n sb.emitOp(node, 'SWAP');\n\n if (this.both) {\n this.bindThis(sb, node, options, InternalFunctionProperties.CALL);\n this.bindThis(sb, node, options, InternalFunctionProperties.CONSTRUCT);\n } else {\n this.bindThis(sb, node, options, this.property);\n }\n\n sb.emitOp(node, 'DROP');\n }\n\n private bindThis(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n property: FuncProperty,\n ): void {\n // [this, objectVal, this]\n sb.emitOp(node, 'TUCK');\n // [objectVal, this, objectVal, this]\n sb.emitOp(node, 'OVER');\n // [property, objectVal, this, objectVal, this]\n sb.emitPushString(node, property);\n // [func, this, objectVal, this]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n // [func, objectVal, this]\n sb.emitHelper(\n node,\n options,\n sb.helpers.bindFunctionThis({ overwrite: this.overwrite }),\n );\n // [objectVal, this]\n sb.emitOp(node, 'DROP');\n // [this, objectVal]\n sb.emitOp(node, 'SWAP');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface BindFunctionThisHelperOptions {\n overwrite: boolean;\n}\n\n// Input: [func, this]\n// Output: [func]\nexport class BindFunctionThisHelper extends Helper {\n private overwrite: boolean;\n\n constructor(options: BindFunctionThisHelperOptions) {\n super();\n this.overwrite = options.overwrite;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n let whenTrue;\n if (this.overwrite) {\n whenTrue = () => {\n // [this, func, func]\n sb.emitOp(node, 'SWAP');\n // [2, this, func, func]\n sb.emitPushInt(node, 2);\n // [func]\n sb.emitOp(node, 'SETITEM');\n };\n } else {\n whenTrue = () => {\n // [this, func]\n sb.emitOp(node, 'DROP');\n // [func]\n sb.emitOp(node, 'DROP');\n };\n }\n\n // [func, this]\n sb.emitHelper(node, options, sb.helpers.cloneFunction);\n // [func, this, func]\n sb.emitOp(node, 'TUCK');\n // [func, func, this, func]\n sb.emitOp(node, 'DUP');\n // [func]\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [size, func, this, func]\n sb.emitOp(node, 'ARRAYSIZE');\n // [3, size, func, this, func]\n sb.emitPushInt(node, 3);\n // [hasThis, func, this, func]\n sb.emitOp(node, 'NUMEQUAL');\n },\n whenTrue,\n whenFalse: () => {\n // [this, func, func]\n sb.emitOp(node, 'SWAP');\n // [func]\n sb.emitOp(node, 'APPEND');\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport class CallHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // Push the scopes and this to the alt stack\n // [func, func]\n sb.emitOp(node, 'DUP');\n // [1, func, func]\n sb.emitPushInt(node, 1);\n // [[scopes, this], func]\n sb.emitOp(node, 'PICKITEM');\n // [[scopes, this], func]\n sb.emitHelper(node, options, sb.helpers.cloneArray);\n // [[scopes, this], [scopes, this], func]\n sb.emitOp(node, 'DUP');\n // [0, [scopes, this], [scopes, this], func]\n sb.emitPushInt(node, 0);\n // [[scopes, this], 0, [scopes, this], [scopes, this], func]\n sb.emitOp(node, 'OVER');\n // [0, [scopes, this], 0, [scopes, this], [scopes, this], func]\n sb.emitPushInt(node, 0);\n // [scopes, 0, [scopes, this], [scopes, this], func]\n sb.emitOp(node, 'PICKITEM');\n // [scopes, 0, [scopes, this], [scopes, this], func]\n sb.emitHelper(node, options, sb.helpers.cloneArray);\n // [[scopes, this], func]\n sb.emitOp(node, 'SETITEM');\n // [func, [scopes, this], func]\n sb.emitOp(node, 'OVER');\n // [[scopes, this], func]\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [size, [scopes, this], func]\n sb.emitOp(node, 'ARRAYSIZE');\n // [3, size, [scopes, this], func]\n sb.emitPushInt(node, 3);\n // [size === 3, [scopes, this], func]\n sb.emitOp(node, 'NUMEQUAL');\n },\n whenTrue: () => {\n // [func, [scopes, this], func]\n sb.emitOp(node, 'OVER');\n // [2, func, [scopes, this], func]\n sb.emitPushInt(node, 2);\n // [this, [scopes, this], func]\n sb.emitOp(node, 'PICKITEM');\n // [[scopes, this], this, [scopes, this], func]\n sb.emitOp(node, 'OVER');\n // [1, [scopes, this], this, [scopes, this], func]\n sb.emitPushInt(node, 1);\n // [this, 1, [scopes, this], [scopes, this], func]\n sb.emitOp(node, 'ROT');\n // [[scopes, this], func]\n sb.emitOp(node, 'SETITEM');\n },\n }),\n );\n\n // [func]\n sb.emitOp(node, 'TOALTSTACK');\n\n // Push the target on the stack\n // [0, func]\n sb.emitPushInt(node, 0);\n // [target]\n sb.emitOp(node, 'PICKITEM');\n\n // Call function\n sb.emitCall(node);\n\n // Remove scope\n sb.emitOp(node, 'FROMALTSTACK');\n sb.emitOp(node, 'DROP');\n\n if (optionsIn.pushValue) {\n sb.emitOp(node, 'DUP');\n }\n sb.emitHelper(node, options, sb.helpers.handleCompletion);\n if (optionsIn.pushValue) {\n sb.emitHelper(node, options, sb.helpers.getCompletionVal);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [func]\n// Output: [func]\nexport class CloneFunctionHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n sb.emitHelper(node, options, sb.helpers.cloneArray);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport {\n FuncProperty,\n InternalFunctionProperties,\n} from './InternalFunctionProperties';\n\nexport interface CloneSingleFunctionHelperOptions {\n type: 'single';\n property: FuncProperty;\n}\nexport interface CloneBothFunctionHelperOptions {\n type: 'both';\n}\n\nexport type CloneFunctionObjectHelperOptions =\n | CloneSingleFunctionHelperOptions\n | CloneBothFunctionHelperOptions;\n\n// Input: [objectVal]\n// Output: [objectVal]\nexport class CloneFunctionObjectHelper extends Helper {\n private property: FuncProperty;\n private both: boolean;\n\n constructor(options: CloneFunctionObjectHelperOptions) {\n super();\n if (options.type === 'both') {\n this.property = InternalFunctionProperties.CALL;\n this.both = true;\n } else {\n this.property = options.property;\n this.both = false;\n }\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.shallowCloneObject);\n\n if (this.both) {\n // [objectVal]\n this.cloneFunction(sb, node, options, InternalFunctionProperties.CALL);\n // [objectVal]\n this.cloneFunction(\n sb,\n node,\n options,\n InternalFunctionProperties.CONSTRUCT,\n );\n } else {\n // [objectVal]\n this.cloneFunction(sb, node, options, this.property);\n }\n }\n\n public cloneFunction(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n property: FuncProperty,\n ): void {\n // [objectVal, objectVal]\n sb.emitOp(node, 'DUP');\n // [property, objectVal, objectVal]\n sb.emitPushString(node, property);\n // [func, objectVal]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n // [func, objectVal]\n sb.emitHelper(node, options, sb.helpers.cloneFunction);\n // [objectVal, func, objectVal]\n sb.emitOp(node, 'OVER');\n // [property, objectVal, func, objectVal]\n sb.emitPushString(node, property);\n // [func, property, objectVal, objectVal]\n sb.emitOp(node, 'ROT');\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import {\n Node,\n SignaturedDeclaration,\n StatementedNode,\n TypeGuards,\n BodiedNode,\n BodyableNode,\n} from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [farr]\nexport class CreateCallArrayHelper extends Helper<\n Node & StatementedNode & SignaturedDeclaration & (BodiedNode | BodyableNode)\n> {\n public emit(\n sb: ScriptBuilder,\n node: Node &\n StatementedNode &\n SignaturedDeclaration &\n (BodiedNode | BodyableNode),\n outerOptions: VisitOptions,\n ): void {\n if (!outerOptions.pushValue) {\n return;\n }\n\n sb.emitHelper(\n node,\n outerOptions,\n sb.helpers.createFunctionArray({\n body: () => {\n sb.withScope(node, outerOptions, (options) => {\n sb.emitHelper(node, options, sb.helpers.parameters);\n let body;\n if (TypeGuards.isBodyableNode(node)) {\n body = node.getBodyOrThrow();\n } else {\n body = node.getBody();\n }\n if (TypeGuards.isExpression(body)) {\n // [val]\n sb.visit(body, options);\n // [completion]\n sb.emitHelper(node, options, sb.helpers.createNormalCompletion);\n // [completion]\n sb.emitOp(node, 'RET');\n } else {\n sb.visit(body, options);\n // [undefinedVal]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n // [completion]\n sb.emitHelper(node, options, sb.helpers.createNormalCompletion);\n // [completion]\n sb.emitOp(node, 'RET');\n }\n });\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface CreateConstructArrayHelperOptions {\n body: () => void;\n withoutScope?: boolean;\n}\n\n// Input: []\n// Output: [farr]\nexport class CreateConstructArrayHelper extends Helper<Node> {\n private readonly body: () => void;\n private readonly withoutScope: boolean;\n\n constructor({ body, withoutScope }: CreateConstructArrayHelperOptions) {\n super();\n this.body = body;\n this.withoutScope = withoutScope || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, outerOptions: VisitOptions): void {\n if (!outerOptions.pushValue) {\n return;\n }\n\n const emit = (options: VisitOptions) => {\n // []\n this.body();\n // [undefinedVal]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n // [completion]\n sb.emitHelper(node, options, sb.helpers.createNormalCompletion);\n // [completion]\n sb.emitOp(node, 'RET');\n };\n\n sb.emitHelper(\n node,\n outerOptions,\n sb.helpers.createFunctionArray({\n body: () => {\n if (this.withoutScope) {\n emit(outerOptions);\n } else {\n sb.withScope(node, outerOptions, (options) => {\n emit(options);\n });\n }\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface CreateFunctionArrayHelperOptions {\n body: () => void;\n}\n\n// Input: []\n// Output: [farr]\nexport class CreateFunctionArrayHelper extends Helper<Node> {\n private body: () => void;\n\n constructor({ body }: CreateFunctionArrayHelperOptions) {\n super();\n this.body = body;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n /* create function */\n // [[scopes, this]]\n sb.scope.pushAll(sb, node, options);\n // [[scopes, this]]\n sb.emitHelper(node, options, sb.helpers.cloneArray);\n // [[scopes, this], [scopes, this]]\n sb.emitOp(node, 'DUP');\n // [0, [scopes, this], [scopes, this]]\n sb.emitPushInt(node, 0);\n // [[scopes, this], 0, [scopes, this], [scopes, this]]\n sb.emitOp(node, 'OVER');\n // [0, [scopes, this], 0, [scopes, this], [scopes, this]]\n sb.emitOp(node, 'OVER');\n // [scopes, 0, [scopes, this], [scopes, this]]\n sb.emitOp(node, 'PICKITEM');\n // [scopes, 0, [scopes, this], [scopes, this]]\n sb.emitHelper(node, options, sb.helpers.cloneArray);\n // [[scopes, this]]\n sb.emitOp(node, 'SETITEM');\n // [target, scopes]\n sb.emitHelper(node, options, sb.helpers.function({ body: this.body }));\n // [2, target, scopes]\n sb.emitPushInt(node, 2);\n // [arr]\n sb.emitOp(node, 'PACK');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { FuncProperty } from './InternalFunctionProperties';\n\nexport interface CreateFunctionObjectHelperOptions {\n property: FuncProperty;\n}\n\n// Input: [farr]\n// Output: [objectVal]\nexport class CreateFunctionObjectHelper extends Helper<Node> {\n private property: FuncProperty;\n\n constructor({ property }: CreateFunctionObjectHelperOptions) {\n super();\n this.property = property;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [objectVal, farr]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectVal, farr, objectVal]\n sb.emitOp(node, 'TUCK');\n // ['call', objectVal, farr, objectVal]\n sb.emitPushString(node, this.property);\n // [farr, 'call', objectVal, objectVal]\n sb.emitOp(node, 'ROT');\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface FunctionHelperOptions {\n body: () => void;\n}\n\n// Input: []\n// Output: [jumpTarget]\nexport class FunctionHelper extends Helper {\n private readonly body: () => void;\n\n constructor({ body }: FunctionHelperOptions) {\n super();\n this.body = body;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n const jump = sb.jumpTable.add(sb, node, () => {\n this.body();\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createUndefined,\n );\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createNormalCompletion,\n );\n sb.emitOp(node, 'RET');\n });\n sb.emitPushInt(node, jump);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\nimport stringify from 'safe-stable-stringify';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalFunctionProperties } from './InternalFunctionProperties';\n\nexport interface InvokeCallHelperOptions {\n bindThis?: boolean;\n overwriteThis?: boolean;\n noArgs?: boolean;\n}\n\n// Input: [objectVal, ?thisVal, ?argsarray]\n// Output: [val]\nexport class InvokeCallHelper extends Helper {\n public static getKey(\n options: InvokeCallHelperOptions = { bindThis: false, noArgs: false },\n ): string {\n const bindThis = options.bindThis || false;\n const overwriteThis = options.overwriteThis || false;\n const noArgs = options.noArgs || false;\n return stringify({ bindThis, overwriteThis, noArgs });\n }\n\n private bindThis: boolean;\n private overwriteThis: boolean;\n private noArgs: boolean;\n\n constructor(\n options: InvokeCallHelperOptions = { bindThis: false, noArgs: false },\n ) {\n super();\n this.bindThis = options.bindThis || false;\n this.overwriteThis = options.overwriteThis || false;\n this.noArgs = options.noArgs || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // ['call', objectVal, ?thisVal, ?argsarray]\n sb.emitPushString(node, InternalFunctionProperties.CALL);\n // [func, ?thisVal, ?argsarray]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n if (this.bindThis) {\n // [func, ?argsarray]\n sb.emitHelper(\n node,\n options,\n sb.helpers.bindFunctionThis({ overwrite: this.overwriteThis }),\n );\n }\n if (this.noArgs) {\n // [0, func]\n sb.emitPushInt(node, 0);\n // [argsarray, func]\n sb.emitOp(node, 'NEWARRAY');\n // [func, argsarray]\n sb.emitOp(node, 'SWAP');\n }\n // [val]\n sb.emitHelper(node, optionsIn, sb.helpers.call);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalFunctionProperties } from './InternalFunctionProperties';\n\nexport interface InvokeConstructHelperOptions {\n noArgs?: boolean;\n}\n\n// Input: [objectVal, thisObjectVal, ?argsarray]\n// Output: []\nexport class InvokeConstructHelper extends Helper {\n private noArgs: boolean;\n\n constructor(options: InvokeConstructHelperOptions = { noArgs: false }) {\n super();\n this.noArgs = options.noArgs || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // ['construct', objectVal, thisObjectVal, ?argsarray]\n sb.emitPushString(node, InternalFunctionProperties.CONSTRUCT);\n // [func, thisObjectVal, ?argsarray]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n // [func, ?argsarray]\n sb.emitHelper(\n node,\n options,\n sb.helpers.bindFunctionThis({ overwrite: true }),\n );\n if (this.noArgs) {\n // [0, func]\n sb.emitPushInt(node, 0);\n // [argsarray, func]\n sb.emitOp(node, 'NEWARRAY');\n // [func, argsarray]\n sb.emitOp(node, 'SWAP');\n }\n // []\n sb.emitHelper(node, sb.noPushValueOptions(optionsIn), sb.helpers.call);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface NewHelperOptions {\n noArgs?: boolean;\n}\n\n// Input: [objectVal, ?argsarr]\n// Output: [thisVal]\nexport class NewHelper extends Helper {\n private noArgs: boolean;\n\n constructor(options: NewHelperOptions = { noArgs: false }) {\n super();\n this.noArgs = options.noArgs || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [thisVal, objectVal, ?argsarr]\n sb.emitHelper(node, options, sb.helpers.createObject);\n if (this.noArgs) {\n // [thisVal, objectVal, thisVal]\n sb.emitOp(node, 'TUCK');\n } else {\n // [3, thisVal, objectVal, argsarr]\n sb.emitPushInt(node, 3);\n // [thisVal, objectVal, argsarr, thisVal]\n sb.emitOp(node, 'XTUCK');\n }\n // [thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitOp(node, 'TUCK');\n // [objectVal, thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitOp(node, 'OVER');\n // ['prototype', objectVal, thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitPushString(node, 'prototype');\n // [objectVal, 'prototype', thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitOp(node, 'SWAP');\n // ['prototype', objectVal, 'prototype', thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitPushString(node, 'prototype');\n // [prototype, 'prototype', thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [objectVal, thisVal, ?argsarr, thisVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [thisVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeConstruct({ noArgs: this.noArgs }),\n );\n\n if (!optionsIn.pushValue) {\n // []\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { SignaturedDeclaration, Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [argsArray]\n// Output: []\nexport class ParametersHelper extends Helper<Node & SignaturedDeclaration> {\n public emit(\n sb: ScriptBuilder,\n node: Node & SignaturedDeclaration,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n // [argsarr]\n node.getParameters().forEach((param, idx) => {\n const name = sb.scope.add(param.getNameOrThrow());\n\n const initializer = param.getInitializer();\n if (param.isRestParameter()) {\n sb.reportUnsupported(param);\n } else if (initializer != null) {\n sb.emitHelper(\n param,\n sb.noPushValueOptions(options),\n sb.helpers.if({\n condition: () => {\n // [argsarr, argsarr]\n sb.emitOp(param, 'DUP');\n // [size, argsarr]\n sb.emitOp(param, 'ARRAYSIZE');\n // [idx, size, argsarr]\n sb.emitPushInt(param, idx);\n // [lt, argsarr]\n sb.emitOp(param, 'LTE');\n },\n whenTrue: () => {\n // [default, argsarr]\n sb.visit(initializer, sb.pushValueOptions(options));\n },\n whenFalse: () => {\n // [argsarr, argsarr]\n sb.emitOp(param, 'DUP');\n // [idx, argsarr, argsarr]\n sb.emitPushInt(param, idx);\n // [arg, argsarr]\n sb.emitOp(param, 'PICKITEM');\n // [arg, arg, argsarr]\n sb.emitOp(param, 'DUP');\n sb.emitHelper(\n param,\n sb.noPushValueOptions(options),\n sb.helpers.if({\n condition: () => {\n // [isUndefined, arg, argsarr]\n sb.emitHelper(\n param,\n sb.pushValueOptions(options),\n sb.helpers.isUndefined,\n );\n },\n whenTrue: () => {\n // [argsarr]\n sb.emitOp(param, 'DROP');\n // [default, argsarr]\n sb.visit(initializer, sb.pushValueOptions(options));\n },\n }),\n );\n },\n }),\n );\n } else if (param.isOptional()) {\n sb.emitHelper(\n param,\n sb.noPushValueOptions(options),\n sb.helpers.if({\n condition: () => {\n // [argsarr, argsarr]\n sb.emitOp(param, 'DUP');\n // [size, argsarr]\n sb.emitOp(param, 'ARRAYSIZE');\n // [idx, size, argsarr]\n sb.emitPushInt(param, idx);\n // [lt, argsarr]\n sb.emitOp(param, 'LT');\n },\n whenTrue: () => {\n // [undefinedVal, argsarr]\n sb.emitHelper(\n param,\n sb.pushValueOptions(options),\n sb.helpers.createUndefined,\n );\n },\n whenFalse: () => {\n // [argsarr, argsarr]\n sb.emitOp(param, 'DUP');\n // [idx, argsarr, argsarr]\n sb.emitPushInt(param, idx);\n // [arg, argsarr]\n sb.emitOp(param, 'PICKITEM');\n },\n }),\n );\n } else {\n // [argsarr, argsarr]\n sb.emitOp(param, 'DUP');\n // [idx, argsarr, argsarr]\n sb.emitPushInt(param, idx);\n // [arg, argsarr]\n sb.emitOp(param, 'PICKITEM');\n }\n\n const decorators = param.getDecorators();\n if (decorators.length > 0) {\n sb.reportUnsupported(param);\n }\n\n // [argsarr]\n sb.scope.set(sb, param, sb.plainOptions(options), name);\n });\n // []\n sb.emitOp(node, 'DROP');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { getTypes, DESERIALIZE_NAME, invokeDeserialize } from './serialize';\nimport { InternalFunctionProperties } from '../function';\n\n// Input: [val]\n// Output: []\nexport class GenericDeserializeHelper extends Helper {\n public emitGlobal(\n sb: ScriptBuilder,\n node: Node,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n\n // [globalObjectVal]\n sb.scope.getGlobal(sb, node, options);\n // [name, globalObjectVal]\n sb.emitPushString(node, DESERIALIZE_NAME);\n // [farr, name, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionArray({\n body: () => {\n // [0, argsarr]\n sb.emitPushInt(node, 0);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n getTypes(sb, node, options).map((forType) => ({\n condition: () => {\n sb.emitOp(node, 'DUP');\n forType.isSerializedType();\n },\n whenTrue: () => {\n forType.deserialize();\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createNormalCompletion,\n );\n sb.emitOp(node, 'RET');\n },\n })),\n () => {\n sb.emitOp(node, 'DROP');\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n },\n ),\n );\n },\n }),\n );\n // [objectVal, name, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n // []\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n invokeDeserialize(sb, node, options);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { getTypes, SERIALIZE_NAME, invokeSerialize } from './serialize';\nimport { InternalFunctionProperties } from '../function';\n\n// Input: [val]\n// Output: []\nexport class GenericSerializeHelper extends Helper {\n public emitGlobal(\n sb: ScriptBuilder,\n node: Node,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n\n // [globalObjectVal]\n sb.scope.getGlobal(sb, node, options);\n // [name, globalObjectVal]\n sb.emitPushString(node, SERIALIZE_NAME);\n // [farr, name, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionArray({\n body: () => {\n // [0, argsarr]\n sb.emitPushInt(node, 0);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n getTypes(sb, node, options).map((forType) => ({\n condition: () => {\n sb.emitOp(node, 'DUP');\n forType.isRuntimeType();\n },\n whenTrue: () => {\n forType.serialize();\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createNormalCompletion,\n );\n sb.emitOp(node, 'RET');\n },\n })),\n () => {\n sb.emitOp(node, 'DROP');\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n },\n ),\n );\n },\n }),\n );\n // [objectVal, name, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n // []\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n invokeSerialize(sb, node, options);\n }\n}\n","import { Type } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { Types } from '../types/Types';\n\nexport interface TypedHelperOptions {\n type: Type | undefined;\n knownType?: Types;\n}\n\nexport abstract class TypedHelper extends Helper {\n protected readonly type: Type | undefined;\n protected readonly knownType: Types | undefined;\n\n constructor({ knownType, type }: TypedHelperOptions) {\n super();\n this.type = type;\n this.knownType = knownType;\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val, errorVal]\n// Output: [completion]\nexport class CreateCompletionHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [2, val, errorVal]\n sb.emitPushInt(node, 2);\n // [completion]\n sb.emitOp(node, 'PACK');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val]\n// Output: [completion]\nexport class CreateNormalCompletionHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [undefinedVal, val]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n // [val, undefinedVal]\n sb.emitOp(node, 'SWAP');\n // [completion]\n sb.emitHelper(node, options, sb.helpers.createCompletion);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [errorVal]\n// Output: [completion]\nexport class CreateThrowCompletionHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [undefinedVal, errorVal]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n // [completion]\n sb.emitHelper(node, options, sb.helpers.createCompletion);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [completion]\n// Output: [val]\nexport abstract class GetCompletionBaseHelper extends Helper<Node> {\n protected abstract index: number;\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [index, completion]\n sb.emitPushInt(node, this.index);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { GetCompletionBaseHelper } from './GetCompletionBaseHelper';\n\n// Input: [completion]\n// Output: [errorVal]\nexport class GetCompletionErrorHelper extends GetCompletionBaseHelper {\n protected index = 1;\n}\n","import { GetCompletionBaseHelper } from './GetCompletionBaseHelper';\n\n// Input: [completion]\n// Output: [errorVal]\nexport class GetCompletionValHelper extends GetCompletionBaseHelper {\n protected index = 0;\n}\n","export enum DiagnosticCode {\n UNSUPPORTED_SYNTAX = 0,\n UNKNOWN_TYPE,\n EXPECTED_NUMBER,\n EXPECTED_STRING,\n REFERENCE_ERROR,\n SOMETHING_WENT_WRONG,\n EXPECTED_PROPERTY,\n EXPECTED_CAST,\n TRANSPILATION_ERROR,\n INVALID_CONTRACT_PARAMETER,\n INVALID_CONTRACT_TYPE,\n INVALID_CONTRACT_METHOD,\n INVALID_VALUE_TYPE,\n INVALID_SYS_CALL,\n UNKNOWN_SYMBOL,\n}\n","import { SyntaxKind } from 'ts-simple-ast';\n\nexport const MAIN_FUNCTION = 'main';\nexport const NORMAL_COMPLETION = 0;\nexport const BREAK_COMPLETION = 1;\nexport const CONTINUE_COMPLETION = 2;\nexport const CATCH_COMPLETION = 3;\n\nexport const ASSIGNMENT_OPERATORS = new Set([\n SyntaxKind.EqualsToken,\n SyntaxKind.PlusEqualsToken,\n SyntaxKind.MinusEqualsToken,\n SyntaxKind.AsteriskAsteriskEqualsToken,\n SyntaxKind.AsteriskEqualsToken,\n SyntaxKind.SlashEqualsToken,\n SyntaxKind.PercentEqualsToken,\n SyntaxKind.AmpersandEqualsToken,\n SyntaxKind.BarEqualsToken,\n SyntaxKind.CaretEqualsToken,\n SyntaxKind.LessThanLessThanEqualsToken,\n SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,\n SyntaxKind.GreaterThanGreaterThanEqualsToken,\n]);\n","import { Node, TypeGuards } from 'ts-simple-ast';\n\nimport { DiagnosticCode } from '../../../DiagnosticCode';\nimport { ScriptBuilder } from '../../sb';\nimport { Helper } from '../Helper';\nimport { VisitOptions } from '../../types';\n\nimport * as constants from '../../../constants';\n\nconst isValidParent = (node?: Node) =>\n node != null &&\n (TypeGuards.isTryStatement(node) ||\n TypeGuards.isFunctionLikeDeclaration(node) ||\n TypeGuards.isArrowFunction(node) ||\n TypeGuards.isSourceFile(node));\n\n// Input: [completion]\n// Output: []\nexport class HandleCompletionHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [completion, completion]\n sb.emitOp(node, 'DUP');\n // [errorVal, completion]\n sb.emitHelper(node, options, sb.helpers.getCompletionError);\n // [isUndefined, completion]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n },\n whenTrue: () => {\n sb.emitOp(node, 'DROP');\n },\n whenFalse: () => {\n let parent = node.getParent();\n if (!isValidParent(parent)) {\n parent = node.getParentWhile(\n (parentNode) => !isValidParent(parentNode),\n );\n if (parent != null) {\n parent = parent.getParent();\n }\n }\n\n if (\n TypeGuards.isSourceFile(node) ||\n (parent != null && TypeGuards.isSourceFile(parent))\n ) {\n sb.emitOp(node, 'THROW');\n } else if (parent == null) {\n sb.reportError(\n node,\n 'Something went wrong, could not find a valid parent node.',\n DiagnosticCode.SOMETHING_WENT_WRONG,\n );\n } else if (TypeGuards.isTryStatement(parent)) {\n if (options.catchPC == null) {\n sb.reportError(\n node,\n 'Something went wrong. Expected a catch jump location.',\n DiagnosticCode.SOMETHING_WENT_WRONG,\n );\n } else {\n sb.emitPushInt(node, constants.CATCH_COMPLETION);\n sb.emitJmp(node, 'JMP', options.catchPC);\n }\n } else {\n sb.emitOp(node, 'RET');\n }\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [completion]\n// Output: [val]\nexport class PickCompletionValHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [completion, completion]\n sb.emitOp(node, 'DUP');\n }\n\n sb.emitHelper(node, options, sb.helpers.handleCompletion);\n\n if (options.pushValue) {\n sb.emitHelper(node, options, sb.helpers.getCompletionVal);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [errorVal]\n// Output: []\nexport class ThrowHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [throwCompletion]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createThrowCompletion,\n );\n // []\n sb.emitHelper(node, options, sb.helpers.handleCompletion);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: []\nexport class ThrowTypeErrorHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // ['TypeError']\n sb.emitPushString(node, 'TypeError');\n // [value]\n sb.emitHelper(node, options, sb.helpers.createString);\n // []\n sb.emitHelper(node, options, sb.helpers.throw);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface Case {\n condition: () => void;\n whenTrue: () => void;\n}\n\n// Input: []\n// Output: []\nexport class CaseHelper extends Helper {\n private readonly cases: Case[];\n private readonly defaultCase: () => void;\n\n constructor(cases: Case[], defaultCase: () => void) {\n super();\n this.cases = cases;\n this.defaultCase = defaultCase;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n this.addCase(sb, node, options);\n }\n\n public addCase(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n idx: number = 0,\n ): void {\n if (idx >= this.cases.length) {\n this.defaultCase();\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: this.cases[idx].condition,\n whenTrue: this.cases[idx].whenTrue,\n whenFalse: () => this.addCase(sb, node, options, idx + 1),\n }),\n );\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport type ForLoopHelperFunction = (() => void) | undefined;\nexport interface ForLoopHelperOptions {\n each: (options: VisitOptions) => void;\n initializer?: ForLoopHelperFunction;\n condition: ForLoopHelperFunction;\n incrementor?: ForLoopHelperFunction;\n withScope?: boolean;\n}\n\nexport class ForLoopHelper extends Helper {\n private readonly each: (options: VisitOptions) => void;\n private readonly initializer: ForLoopHelperFunction;\n private readonly condition: ForLoopHelperFunction;\n private readonly incrementor: ForLoopHelperFunction;\n private readonly withScope: boolean;\n\n constructor({\n each,\n initializer,\n condition,\n incrementor,\n withScope,\n }: ForLoopHelperOptions) {\n super();\n this.each = each;\n this.initializer = initializer;\n this.condition = condition;\n this.incrementor = incrementor;\n this.withScope = withScope == null ? true : withScope;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (this.withScope) {\n sb.withScope(node, options, (innerOptions) => {\n this.emitLoop(sb, node, innerOptions);\n });\n } else {\n this.emitLoop(sb, node, options);\n }\n }\n\n private emitLoop(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (this.initializer != null) {\n this.initializer();\n }\n\n sb.withProgramCounter((loopPC) => {\n if (this.condition != null) {\n this.condition();\n }\n\n if (!loopPC.getFirst().equals(loopPC.getCurrent())) {\n sb.emitJmp(node, 'JMPIFNOT', loopPC.getLast());\n }\n\n sb.withProgramCounter((breakPC) => {\n sb.withProgramCounter((innerPC) => {\n sb.withProgramCounter((continuePC) => {\n this.each(\n sb.breakPCOptions(\n sb.continuePCOptions(options, continuePC.getLast()),\n breakPC.getLast(),\n ),\n );\n sb.emitJmp(node, 'JMP', innerPC.getLast());\n });\n\n // Drop continue completion\n sb.emitOp(node, 'DROP');\n });\n\n if (this.incrementor != null) {\n this.incrementor();\n }\n\n sb.emitJmp(node, 'JMP', loopPC.getFirst());\n });\n\n // Drop break completion\n sb.emitOp(node, 'DROP');\n });\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface IfHelperOptions {\n condition: () => void;\n whenTrue?: () => void;\n whenFalse?: (() => void) | undefined;\n}\n\nexport class IfHelper extends Helper {\n private readonly condition: () => void;\n private readonly whenTrue: (() => void) | undefined;\n private readonly whenFalse: (() => void) | undefined;\n\n constructor({ condition, whenTrue, whenFalse }: IfHelperOptions) {\n super();\n this.condition = condition;\n this.whenTrue = whenTrue;\n this.whenFalse = whenFalse;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n this.condition();\n const { whenTrue, whenFalse } = this;\n if (whenTrue == null) {\n if (whenFalse == null) {\n throw new Error('If statement must have a true or false value');\n }\n sb.withProgramCounter((endPC) => {\n sb.emitJmp(node, 'JMPIF', endPC.getLast());\n whenFalse();\n });\n } else {\n sb.withProgramCounter((whenFalsePC) => {\n sb.withProgramCounter((whenTruePC) => {\n sb.emitJmp(node, 'JMPIFNOT', whenTruePC.getLast());\n whenTrue();\n if (this.whenFalse != null) {\n sb.emitJmp(node, 'JMP', whenFalsePC.getLast());\n }\n });\n\n if (this.whenFalse != null) {\n this.whenFalse();\n }\n });\n }\n }\n}\n","import { Node, StatementedNode } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ProcessStatementsHelperOptions {\n createScope: boolean;\n}\n\nexport class ProcessStatementsHelper extends Helper<Node & StatementedNode> {\n private readonly createScope: boolean;\n constructor({ createScope }: ProcessStatementsHelperOptions) {\n super();\n this.createScope = createScope;\n }\n public emit(\n sb: ScriptBuilder,\n node: Node & StatementedNode,\n options: VisitOptions,\n ): void {\n if (this.createScope) {\n sb.withScope(node, options, (innerOptions) => {\n this.emitStatements(sb, node, innerOptions);\n });\n } else {\n this.emitStatements(sb, node, options);\n }\n }\n\n private emitStatements(\n sb: ScriptBuilder,\n node: Node & StatementedNode,\n options: VisitOptions,\n ): void {\n node.getFunctions().forEach((func) => {\n sb.scope.add(func.getName());\n });\n node.getVariableDeclarations().forEach((decl) => {\n sb.scope.add(decl.getName());\n });\n\n const compilerStatements = (node.compilerNode as any).statements;\n let statements;\n if (compilerStatements == null) {\n statements = node.getStatements();\n } else {\n statements = compilerStatements.map((statement: any) =>\n (node as any).getNodeFromCompilerNode(statement),\n );\n }\n statements.forEach((statement: any) => {\n sb.visit(statement, sb.noValueOptions(options));\n });\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { Types } from './Types';\n\n// Input: [value]\n// Output: [val]\nexport abstract class CreatePrimitiveHelper extends Helper<Node> {\n protected length = 2;\n protected abstract type: Types;\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [type, value]\n sb.emitPushInt(node, this.type);\n // [2, type, value]\n sb.emitPushInt(node, this.length);\n // [[type, value]]\n sb.emitOp(node, 'PACK');\n }\n}\n","export enum Types {\n Undefined = 0,\n Null = 1,\n Boolean = 2,\n String = 3,\n Symbol = 4,\n Number = 5,\n Object = 6,\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: [boolean]\n// Output: [booleanVal]\nexport class CreateBooleanHelper extends CreatePrimitiveHelper {\n protected type = Types.Boolean;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val]\n// Output: [value]\nexport abstract class GetPrimitiveHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [1, val]\n sb.emitPushInt(node, 1);\n // [value]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { GetPrimitiveHelper } from '../GetPrimitiveHelper';\n\n// Input: [booleanVal]\n// Output: [boolean]\nexport class GetBooleanHelper extends GetPrimitiveHelper {}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { Types } from './Types';\n\n// Input: [val]\n// Output: [boolean]\nexport abstract class IsHelper extends Helper<Node> {\n protected abstract type: Types;\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [0, value]\n sb.emitPushInt(node, 0);\n // [type]\n sb.emitOp(node, 'PICKITEM');\n // [type, type]\n sb.emitPushInt(node, this.type);\n // [isType]\n sb.emitOp(node, 'EQUAL');\n }\n}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsBooleanHelper extends IsHelper {\n protected type = Types.Boolean;\n}\n","import { Type, TypeFlags, ts } from 'ts-simple-ast';\n\nfunction getType(type: undefined): undefined;\nfunction getType(type: Type<ts.Type>): Type<ts.Type>;\nfunction getType(type: Type<ts.Type> | undefined): Type<ts.Type> | undefined {\n if (type == null) {\n return undefined;\n }\n\n const constraint = type.getConstraint();\n return constraint == null ? type : constraint;\n}\n\nexport const hasUnionType = (\n type: Type<ts.Type>,\n isType: (type: Type<ts.Type>) => boolean,\n): boolean =>\n getType(type).isUnionType() &&\n getType(type)\n .getUnionTypes()\n .some(isType);\n\nexport const hasIntersectionType = (\n type: Type<ts.Type>,\n isType: (type: Type<ts.Type>) => boolean,\n): boolean =>\n getType(type).isIntersectionType() &&\n getType(type)\n .getIntersectionTypes()\n .some(isType);\n\nexport const hasType = (\n type: Type<ts.Type>,\n isType: (type: Type<ts.Type>) => boolean,\n): boolean =>\n isType(type) ||\n hasUnionType(type, isType) ||\n hasIntersectionType(type, isType);\n\nexport const isOnly = (\n type: Type<ts.Type> | undefined,\n isType: (type: Type<ts.Type> | undefined) => boolean,\n): boolean =>\n type != null &&\n !getType(type).isNullable() &&\n (isType(type) ||\n (getType(type).isUnionType() &&\n getType(type)\n .getUnionTypes()\n .every((unionType) => isOnly(unionType, isType))) ||\n (getType(type).isIntersectionType() &&\n getType(type)\n .getIntersectionTypes()\n .every((intersectionType) => isOnly(intersectionType, isType))));\n\nexport const isUndefined = (type?: Type<ts.Type>): boolean =>\n type != null && getType(type).isUndefinedType();\n\nexport const isOnlyUndefined = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isUndefined);\n\nexport const hasUndefined = (type: Type<ts.Type>): boolean =>\n hasType(type, isUndefined);\n\nexport const isNull = (type?: Type<ts.Type>): boolean =>\n type != null && (getType(type).isNullType() || getType(type).isNullable());\n\nexport const isOnlyNull = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isNull);\n\nexport const hasNull = (type: Type<ts.Type>): boolean =>\n hasType(type, isNull) || getType(type).isNullable();\n\nexport const isOnlyNumberLiteral = (type?: Type<ts.Type>): boolean =>\n type != null &&\n isOnly(type, (tpe) => tpe != null && tpe.isNumberLiteralType());\n\nexport const isNumber = (type?: Type<ts.Type>): boolean =>\n type != null &&\n (getType(type).isNumberType() || getType(type).isNumberLiteralType());\n\nexport const isOnlyNumber = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isNumber);\n\nexport const hasNumber = (type: Type<ts.Type>): boolean =>\n hasType(type, isNumber);\n\nexport const isString = (type?: Type<ts.Type>): boolean =>\n type != null &&\n (getType(type).isStringType() || getType(type).isStringLiteralType());\n\nexport const isOnlyString = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isString);\n\nexport const hasString = (type: Type<ts.Type>): boolean =>\n hasType(type, isString);\n\nexport const isBoolean = (type?: Type<ts.Type>): boolean =>\n type != null &&\n (getType(type).isBooleanType() || getType(type).isBooleanLiteralType());\n\nexport const isOnlyBoolean = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isBoolean);\n\nexport const hasBoolean = (type: Type<ts.Type>): boolean =>\n hasType(type, isBoolean);\n\nconst hasTypeFlag = (type: Type<ts.Type>, flag: TypeFlags): boolean =>\n // tslint:disable-next-line\n (getType(type).compilerType.flags & flag) === flag;\n\nexport const isSymbol = (type?: Type<ts.Type>): boolean =>\n type != null &&\n (hasTypeFlag(type, TypeFlags.ESSymbol) ||\n hasTypeFlag(type, TypeFlags.ESSymbolLike));\n\nexport const isOnlySymbol = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isSymbol);\n\nexport const hasSymbol = (type: Type<ts.Type>): boolean =>\n hasType(type, isSymbol);\n\nexport const isPrimitive = (type?: Type<ts.Type>): boolean =>\n isUndefined(type) ||\n isNull(type) ||\n isString(type) ||\n isNumber(type) ||\n isBoolean(type) ||\n isSymbol(type);\n\nexport const isOnlyPrimitive = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isPrimitive);\n\nexport const hasPrimitive = (type: Type<ts.Type>): boolean =>\n hasType(type, isPrimitive);\n\nexport const isOnlyObject = (type?: Type<ts.Type>): boolean =>\n isOnly(type, (tpe) => !isPrimitive(tpe));\n\nexport const isArray = (type?: Type<ts.Type>): boolean =>\n type != null && getType(type).isArrayType();\n\nexport const isOnlyArray = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isArray);\n\nexport const isTuple = (type?: Type<ts.Type>): boolean =>\n type != null && getType(type).isTupleType();\n\nexport const isOnlyTuple = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isTuple);\n\nexport const isSame = (type0?: Type<ts.Type>, type1?: Type<ts.Type>): boolean =>\n type0 != null &&\n type1 != null &&\n (type0 === type1 ||\n (isOnlyBoolean(type0) && isOnlyBoolean(type1)) ||\n (isOnlyNumber(type0) && isOnlyNumber(type1)) ||\n (isOnlyString(type0) && isOnlyString(type1)));\n\nexport const isUnion = (type?: Type<ts.Type>): boolean =>\n type != null && getType(type).isUnionType();\n\nexport const isIntersection = (type?: Type<ts.Type>): boolean =>\n type != null && getType(type).isIntersectionType();\n\nexport const isLiteral = (type?: Type): boolean =>\n type != null && getType(type).isLiteralType();\n\nexport const isAnyType = (type?: Type): boolean =>\n type != null && hasTypeFlag(type, TypeFlags.Any);\n\nexport const isVoid = (type?: Type): boolean =>\n type != null && hasTypeFlag(type, TypeFlags.Void);\n","import { Node, Type } from 'ts-simple-ast';\n\nimport { TypedHelper } from '../../common';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nimport * as typeUtils from '../../../../typeUtils';\n\n// Input: [val]\n// Output: [boolean]\nexport class ToBooleanHelper extends TypedHelper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n if (this.type != null) {\n this.convertType(sb, node, options, this.type);\n } else {\n this.convertUnknownType(sb, node, options);\n }\n }\n\n private convertType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type: Type,\n ): void {\n if (typeUtils.isOnlyUndefined(type) || typeUtils.isOnlyNull(type)) {\n sb.emitPushBoolean(node, false);\n } else if (typeUtils.isOnlyBoolean(type)) {\n this.convertBoolean(sb, node, options);\n } else if (typeUtils.isOnlyNumber(type)) {\n this.convertNumber(sb, node, options);\n } else if (typeUtils.isOnlyString(type)) {\n this.convertString(sb, node, options);\n } else if (\n // It's a symbol or an object\n !typeUtils.hasUndefined(type) &&\n !typeUtils.hasNull(type) &&\n !typeUtils.hasBoolean(type) &&\n !typeUtils.hasNumber(type) &&\n !typeUtils.hasString(type)\n ) {\n sb.emitPushBoolean(node, true);\n } else {\n this.convertUnknownType(sb, node, options);\n }\n }\n\n private convertBoolean(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n }\n\n private convertNumber(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.getNumber);\n sb.emitPushInt(node, 0);\n sb.emitOp(node, 'NUMNOTEQUAL');\n }\n\n private convertString(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.getString);\n sb.emitPushString(node, '');\n sb.emitOp(node, 'EQUAL');\n sb.emitOp(node, 'NOT');\n }\n\n private convertUnknownType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n [\n {\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isBoolean, value]\n sb.emitHelper(node, options, sb.helpers.isBoolean);\n },\n whenTrue: () => {\n // [value]\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n },\n },\n {\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isNull, value]\n sb.emitHelper(node, options, sb.helpers.isNull);\n // [value, isNull, value]\n sb.emitOp(node, 'OVER');\n // [isUndefined, isNull, value]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n // [isUndefinedOrNull, value]\n sb.emitOp(node, 'OR');\n },\n whenTrue: () => {\n sb.emitPushBoolean(node, false);\n },\n },\n {\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isObject, value]\n sb.emitHelper(node, options, sb.helpers.isObject);\n // [value, isObject, value]\n sb.emitOp(node, 'OVER');\n // [isSymbol, isObject, value]\n sb.emitHelper(node, options, sb.helpers.isSymbol);\n // [isSymbolOrObject, value]\n sb.emitOp(node, 'OR');\n },\n whenTrue: () => {\n sb.emitPushBoolean(node, true);\n },\n },\n {\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isNumber, value]\n sb.emitHelper(node, options, sb.helpers.isNumber);\n },\n whenTrue: () => {\n this.convertNumber(sb, node, options);\n },\n },\n ],\n () => {\n this.convertString(sb, node, options);\n },\n ),\n );\n }\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: []\n// Output: [nullVal]\nexport class CreateNullHelper extends CreatePrimitiveHelper {\n protected length = 1;\n protected type = Types.Null;\n}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsNullHelper extends IsHelper {\n protected type = Types.Null;\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: [number]\n// Output: [numberVal]\nexport class CreateNumberHelper extends CreatePrimitiveHelper {\n protected type = Types.Number;\n}\n","import { GetPrimitiveHelper } from '../GetPrimitiveHelper';\n\n// Input: [numberVal]\n// Output: [number]\nexport class GetNumberHelper extends GetPrimitiveHelper {}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsNumberHelper extends IsHelper {\n protected type = Types.Number;\n}\n","import { Node, Type } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { TypedHelper } from '../../common';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nimport * as typeUtils from '../../../../typeUtils';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [number]\nexport class ToNumberHelper extends TypedHelper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n if (this.type != null) {\n this.convertType(sb, node, options, this.type);\n } else {\n this.convertUnknown(sb, node, options);\n }\n }\n\n private convertType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type: Type,\n ): void {\n if (typeUtils.isOnlyUndefined(type)) {\n this.convertUndefined(sb, node, options);\n } else if (typeUtils.isOnlyNull(type)) {\n this.convertNull(sb, node, options);\n } else if (typeUtils.isOnlyBoolean(type)) {\n this.convertBoolean(sb, node, options);\n } else if (typeUtils.isOnlyNumber(type)) {\n this.convertNumber(sb, node, options);\n } else if (typeUtils.isOnlyString(type)) {\n this.convertString(sb, node, options);\n } else if (typeUtils.isOnlySymbol(type)) {\n this.convertSymbol(sb, node, options);\n } else if (typeUtils.isOnlyObject(type)) {\n this.convertObject(sb, node, options);\n } else {\n this.convertUnknown(sb, node, options);\n }\n }\n\n private convertUndefined(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n }\n\n private convertNull(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // []\n sb.emitOp(node, 'DROP');\n // [0]\n sb.emitPushInt(node, 0);\n }\n\n private convertBoolean(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n },\n whenTrue: () => {\n // [1]\n sb.emitPushInt(node, 1);\n },\n whenFalse: () => {\n // [0]\n sb.emitPushInt(node, 0);\n },\n }),\n );\n }\n\n private convertNumber(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [value]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n }\n\n private convertString(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n }\n\n private convertSymbol(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n }\n\n private convertObject(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [primitive]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toPrimitive({\n type: this.type,\n knownType: Types.Object,\n preferredType: 'number',\n }),\n );\n // [value]\n this.convertUnknown(sb, node, options, true);\n }\n\n private convertUnknown(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n shouldThrowOnObject: boolean = false,\n ): void {\n const emitIf = (\n check: Helper<Node>,\n whenTrue: () => void,\n whenFalse: () => void,\n ) =>\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isValue, value]\n sb.emitHelper(node, options, check);\n },\n whenTrue,\n whenFalse,\n }),\n );\n\n emitIf(\n sb.helpers.isNumber,\n () => this.convertNumber(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isUndefined,\n () => this.convertUndefined(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isNull,\n () => this.convertNull(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isBoolean,\n () => this.convertBoolean(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isString,\n () => this.convertString(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isSymbol,\n () => this.convertSymbol(sb, node, options),\n () =>\n shouldThrowOnObject\n ? sb.emitHelper(\n node,\n options,\n sb.helpers.throwTypeError,\n )\n : this.convertObject(sb, node, options),\n ),\n ),\n ),\n ),\n ),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\nimport { Types } from '../Types';\n\n// Input: []\n// Output: [objectVal]\nexport class CreateObjectHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n /* create internal object */\n // [iobj]\n sb.emitOp(node, 'NEWMAP');\n\n /* create symbol obj */\n // [sobj, iobj]\n sb.emitOp(node, 'NEWMAP');\n\n /* create obj */\n // [pobj, sobj, iobj]\n sb.emitOp(node, 'NEWMAP');\n\n /* create object array */\n // [3, pobj, sobj, iobj]\n sb.emitPushInt(node, 3);\n // [object]\n sb.emitOp(node, 'PACK');\n\n // [objectType, object]\n sb.emitPushInt(node, Types.Object);\n\n /* create object */\n // [2, objectType, object]\n sb.emitPushInt(node, 2);\n // [objectVal]\n sb.emitOp(node, 'PACK');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [pobj]\n// Output: [objectVal]\nexport class CreatePropertyObjectHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n const obj = sb.scope.addUnique();\n const pobj = sb.scope.addUnique();\n // [pobj, pobj]\n sb.emitOp(node, 'DUP');\n // [pobj]\n sb.scope.set(sb, node, options, pobj);\n // [objectVal, pobj]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectVal, pobj, objectVal]\n sb.emitOp(node, 'TUCK');\n // [pobj, objectVal]\n sb.scope.set(sb, node, options, obj);\n // [keysArr, objectVal]\n sb.emitOp(node, 'KEYS');\n // [objectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrForEach({\n each: () => {\n // [objectVal, key]\n sb.scope.get(sb, node, options, obj);\n // [pobj, objectVal, key]\n sb.scope.get(sb, node, options, pobj);\n // [key, pobj, objectVal]\n sb.emitOp(node, 'ROT');\n // [key, pobj, key, objectVal]\n sb.emitOp(node, 'TUCK');\n // [val, key, objectVal]\n sb.emitOp(node, 'PICKITEM');\n // []\n sb.emitHelper(\n node,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n },\n }),\n );\n }\n }\n}\n","import { ElementAccessExpression, Node, Type, ts } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nimport * as typeUtils from '../../../../typeUtils';\n\n// Input: [val]\n// Output: [val]\nexport class ElementAccessHelper extends Helper<ElementAccessExpression> {\n public emit(\n sb: ScriptBuilder,\n expr: ElementAccessExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noSetValueOptions(optionsIn));\n const value = expr.getExpression();\n const valueType = sb.getType(value);\n const prop = expr.getArgumentExpressionOrThrow();\n const propType = sb.getType(prop);\n\n // [objectVal]\n sb.emitHelper(\n value,\n options,\n sb.helpers.toObject({ type: sb.getType(value) }),\n );\n\n // [propVal, objectVal]\n sb.visit(prop, options);\n\n if (optionsIn.setValue) {\n let valueIndex = 2;\n if (optionsIn.pushValue) {\n // [objectVal, propVal]\n sb.emitOp(expr, 'SWAP');\n // [objectVal, propVal, objectVal]\n sb.emitOp(expr, 'TUCK');\n // [propVal, objectVal, propVal, objectVal]\n sb.emitOp(expr, 'OVER');\n valueIndex = 4;\n }\n\n if (typeUtils.isOnlyString(propType)) {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getString);\n // []\n this.setProperty(sb, prop, options, valueIndex);\n } else if (typeUtils.isOnlyNumber(propType)) {\n // []\n this.setNumberProperty(\n sb,\n prop,\n options,\n propType,\n valueType,\n valueIndex,\n );\n } else if (typeUtils.isOnlySymbol(propType)) {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getSymbol);\n // []\n this.setSymbol(sb, prop, options, valueIndex);\n } else {\n // []\n sb.emitHelper(\n prop,\n options,\n sb.helpers.case(\n [\n {\n condition: () => {\n // [propVal, propVal, objectVal]\n sb.emitOp(prop, 'DUP');\n // [isString, propVal, objectVal]\n sb.emitHelper(prop, options, sb.helpers.isString);\n },\n whenTrue: () => {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getString);\n // []\n this.setProperty(sb, prop, options, valueIndex);\n },\n },\n {\n condition: () => {\n // [propVal, propVal, objectVal]\n sb.emitOp(prop, 'DUP');\n // [isNumber, propVal, objectVal]\n sb.emitHelper(prop, options, sb.helpers.isNumber);\n },\n whenTrue: () => {\n // []\n this.setNumberProperty(\n sb,\n prop,\n options,\n propType,\n valueType,\n valueIndex,\n );\n },\n },\n ],\n () => {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getSymbol);\n // []\n this.setSymbol(sb, prop, options, valueIndex);\n },\n ),\n );\n }\n }\n\n if (optionsIn.pushValue || !optionsIn.setValue) {\n if (typeUtils.isOnlyString(propType)) {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getString);\n // [val]\n sb.emitHelper(expr, options, sb.helpers.getPropertyObjectProperty);\n } else if (typeUtils.isOnlyNumber(propType)) {\n // [val]\n this.getNumberProperty(sb, prop, options, propType, valueType);\n } else if (typeUtils.isOnlySymbol(propType)) {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getSymbol);\n // [val]\n sb.emitHelper(expr, options, sb.helpers.getSymbolObjectProperty);\n } else {\n // [val]\n sb.emitHelper(\n prop,\n options,\n sb.helpers.case(\n [\n {\n condition: () => {\n // [propVal, propVal, objectVal]\n sb.emitOp(prop, 'DUP');\n // [propVal, objectVal]\n sb.emitHelper(prop, options, sb.helpers.isString);\n },\n whenTrue: () => {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getString);\n // [val]\n sb.emitHelper(\n expr,\n options,\n sb.helpers.getPropertyObjectProperty,\n );\n },\n },\n {\n condition: () => {\n // [propVal, propVal, objectVal]\n sb.emitOp(prop, 'DUP');\n // [propVal, objectVal]\n sb.emitHelper(prop, options, sb.helpers.isNumber);\n },\n whenTrue: () => {\n // [val]\n this.getNumberProperty(\n sb,\n prop,\n options,\n propType,\n valueType,\n );\n },\n },\n ],\n () => {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getSymbol);\n // [val]\n sb.emitHelper(expr, options, sb.helpers.getSymbolObjectProperty);\n },\n ),\n );\n }\n }\n\n if (!optionsIn.pushValue && !optionsIn.setValue) {\n sb.emitOp(expr, 'DROP');\n }\n }\n\n private getNumberProperty(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n propType: Type<ts.Type> | undefined,\n valueType: Type<ts.Type> | undefined,\n ): void {\n if (typeUtils.isOnlyArray(valueType) || typeUtils.isOnlyTuple(valueType)) {\n sb.emitHelper(node, options, sb.helpers.getNumber);\n sb.emitHelper(node, options, sb.helpers.getArrayIndex);\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [isArray, propVal, objectVal]\n this.isArrayInstance(sb, node, options);\n },\n whenTrue: () => {\n // [propNumber, objectVal]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [val]\n sb.emitHelper(node, options, sb.helpers.getArrayIndex);\n },\n whenFalse: () => {\n // [propString, objectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toString({ type: propType }),\n );\n // [val]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n },\n }),\n );\n }\n }\n\n private setProperty(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n index: number,\n ): void {\n // [val, propString, objectVal]\n this.pickValue(sb, node, options, index);\n // []\n sb.emitHelper(node, options, sb.helpers.setPropertyObjectProperty);\n }\n\n private setNumberProperty(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n propType: Type<ts.Type> | undefined,\n valueType: Type<ts.Type> | undefined,\n index: number,\n ): void {\n if (typeUtils.isOnlyArray(valueType) || typeUtils.isOnlyTuple(valueType)) {\n sb.emitHelper(node, options, sb.helpers.getNumber);\n this.setArrayIndex(sb, node, options, index);\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [isArray, propVal, objectVal]\n this.isArrayInstance(sb, node, options);\n },\n whenTrue: () => {\n sb.emitHelper(node, options, sb.helpers.getNumber);\n this.setArrayIndex(sb, node, options, index);\n },\n whenFalse: () => {\n // [propString, objectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toString({ type: propType }),\n );\n // []\n this.setProperty(sb, node, options, index);\n },\n }),\n );\n }\n }\n\n private setArrayIndex(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n index: number,\n ): void {\n // [val, propNumber, objectVal]\n this.pickValue(sb, node, options, index);\n // []\n sb.emitHelper(node, options, sb.helpers.setArrayIndex);\n }\n\n private setSymbol(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n index: number,\n ): void {\n // [val, propString, objectVal]\n this.pickValue(sb, node, options, index);\n // []\n sb.emitHelper(node, options, sb.helpers.setSymbolObjectProperty);\n }\n\n private isArrayInstance(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [objectVal, propVal, objectVal]\n sb.emitOp(node, 'OVER');\n // [Array, objectVal, propVal, objectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n // [isArray, propVal, objectVal]\n sb.emitHelper(node, options, sb.helpers.instanceof);\n }\n\n private pickValue(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n index: number,\n ): void {\n if (index === 2) {\n sb.emitOp(node, 'ROT');\n } else {\n // [index, ...]\n sb.emitPushInt(node, index);\n // [val, ...]\n sb.emitOp(node, 'ROLL');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nexport interface FindObjectPropertyHelperOptions {\n accessor: () => void;\n dataExists: () => void;\n data: () => void;\n getObject: (sb: ScriptBuilder) => Helper<Node>;\n}\n\n// Input: [stringProp, objectVal]\n// Output: [val]\nexport class FindObjectPropertyHelper extends Helper<Node> {\n private readonly accessor: () => void;\n private readonly dataExists: () => void;\n private readonly data: () => void;\n private readonly getObject: (sb: ScriptBuilder) => Helper<Node>;\n\n constructor({\n accessor,\n dataExists,\n data,\n getObject,\n }: FindObjectPropertyHelperOptions) {\n super();\n this.accessor = accessor;\n this.dataExists = dataExists;\n this.data = data;\n this.getObject = getObject;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [objectVal, prop]\n sb.emitOp(node, 'SWAP');\n\n const prepareLoop = () => {\n // [objectVal, objectVal, prop]\n sb.emitOp(node, 'DUP');\n // [pobj, objectVal, prop]\n sb.emitHelper(node, options, sb.helpers.getPropertyObject);\n // [pobj, pobj, objectVal, prop]\n sb.emitOp(node, 'DUP');\n // [objectVal, pobj, pobj, prop]\n sb.emitOp(node, 'ROT');\n // [obj, pobj, pobj, prop]\n sb.emitHelper(node, options, this.getObject(sb));\n // [obj, obj, pobj, pobj, prop]\n sb.emitOp(node, 'DUP');\n // [4, obj, obj, pobj, pobj, prop]\n sb.emitPushInt(node, 4);\n // [prop, obj, obj, pobj, pobj, prop]\n sb.emitOp(node, 'PICK');\n };\n\n // [prop, obj, obj, pobj, pobj, prop]\n prepareLoop();\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [hasKey, obj, pobj, pobj, prop]\n sb.emitOp(node, 'HASKEY');\n // [notHasKey, obj, pobj, pobj, prop]\n sb.emitOp(node, 'NOT');\n // [pobj, notHasKey, obj, pobj, prop]\n sb.emitOp(node, 'ROT');\n // ['prototype', pobj, notHasKey, obj, pobj, prop]\n sb.emitPushString(node, 'prototype');\n // [hasPrototypeKey, notHasKey, obj, pobj, prop]\n sb.emitOp(node, 'HASKEY');\n // [condition, obj, pobj, prop]\n sb.emitOp(node, 'AND');\n },\n each: () => {\n // [pobj, prop]\n sb.emitOp(node, 'DROP');\n // ['prototype', pobj, prop]\n sb.emitPushString(node, 'prototype');\n // [propVal, prop]\n sb.emitOp(node, 'PICKITEM');\n // [0, propVal, prop]\n sb.emitPushInt(node, 0);\n // [objectVal, prop]\n sb.emitOp(node, 'PICKITEM');\n // [prop, obj, obj, pobj, pobj, prop]\n prepareLoop();\n },\n withScope: false,\n }),\n );\n // [obj, prop]\n sb.emitOp(node, 'NIP');\n // [obj, prop, obj]\n sb.emitOp(node, 'TUCK');\n // [prop, obj, prop, obj]\n sb.emitOp(node, 'OVER');\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [hasKey, prop, obj]\n sb.emitOp(node, 'HASKEY');\n },\n whenTrue: () => {\n // [propVal]\n sb.emitOp(node, 'PICKITEM');\n // [propVal, propVal]\n sb.emitOp(node, 'DUP');\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [size, propVal]\n sb.emitOp(node, 'ARRAYSIZE');\n // [2, size, propVal]\n sb.emitPushInt(node, 2);\n // [size === 2, propVal]\n sb.emitOp(node, 'EQUAL');\n },\n whenTrue: () => {\n this.accessor();\n },\n whenFalse: () => {\n this.dataExists();\n },\n }),\n );\n },\n whenFalse: () => {\n // [obj]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n this.data();\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [objectVal]\n// Output: [obj]\nexport abstract class GetObjectHelperBase extends Helper<Node> {\n protected abstract index: number;\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [object]\n sb.emitHelper(node, options, sb.helpers.getObject);\n // [2, object]\n sb.emitPushInt(node, this.index);\n // [obj]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { GetObjectHelperBase } from './GetObjectHelperBase';\n\n// Input: [objectVal]\n// Output: [iobj]\nexport class GetInternalObjectHelper extends GetObjectHelperBase {\n protected index = 2;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [stringProp, objectVal]\n// Output: [val]\nexport class GetInternalObjectPropertyHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [objectVal, stringProp]\n sb.emitOp(node, 'SWAP');\n // [iobj, stringProp]\n sb.emitHelper(node, options, sb.helpers.getInternalObject);\n // [stringProp, iobj]\n sb.emitOp(node, 'SWAP');\n // [val]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { GetPrimitiveHelper } from '../GetPrimitiveHelper';\n\n// Input: [objectVal]\n// Output: [object]\nexport class GetObjectHelper extends GetPrimitiveHelper {}\n","import { GetObjectHelperBase } from './GetObjectHelperBase';\n\n// Input: [objectVal]\n// Output: [pobj]\nexport class GetPropertyObjectHelper extends GetObjectHelperBase {\n protected index = 0;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [stringProp, objectVal]\n// Output: [val]\nexport abstract class GetObjectPropertyHelperBase extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [objectVal, stringProp, objectVal]\n sb.emitOp(node, 'OVER');\n // [stringProp, objectVal, objectVal]\n sb.emitOp(node, 'SWAP');\n sb.emitHelper(\n node,\n options,\n sb.helpers.findObjectProperty({\n accessor: () => {\n // [0, propVal, objectVal]\n sb.emitPushInt(node, 0);\n // [getObjectVal, objectVal]\n sb.emitOp(node, 'PICKITEM');\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeCall({ bindThis: true, noArgs: true }),\n );\n },\n dataExists: () => {\n // [propVal]\n sb.emitOp(node, 'NIP');\n if (options.pushValue) {\n // [0, propVal]\n sb.emitPushInt(node, 0);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n } else {\n // []\n sb.emitOp(node, 'DROP');\n }\n },\n data: () => {\n // []\n sb.emitOp(node, 'DROP');\n if (options.pushValue) {\n // [val]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n }\n },\n getObject: this.getObject.bind(this),\n }),\n );\n }\n\n protected abstract getObject(sb: ScriptBuilder): Helper<Node>;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { GetObjectPropertyHelperBase } from './GetObjectPropertyHelperBase';\n\n// Input: [stringProp, objectVal]\n// Output: [val]\nexport class GetPropertyObjectPropertyHelper extends GetObjectPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper<Node> {\n return sb.helpers.getPropertyObject;\n }\n}\n","import { GetObjectHelperBase } from './GetObjectHelperBase';\n\n// Input: [objectVal]\n// Output: [sobj]\nexport class GetSymbolObjectHelper extends GetObjectHelperBase {\n protected index = 1;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { GetObjectPropertyHelperBase } from './GetObjectPropertyHelperBase';\n\n// Input: [stringProp, objectVal]\n// Output: [val]\nexport class GetSymbolObjectPropertyHelper extends GetObjectPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper<Node> {\n return sb.helpers.getSymbolObject;\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [constructorObjectVal, objectVal]\n// Output: [boolean]\nexport class InstanceofHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // ['prototype', constructorObjectVal, objectVal]\n sb.emitPushString(node, 'prototype');\n // [prototypeVal, objectVal]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [objectVal, prototypeVal]\n sb.emitOp(node, 'SWAP');\n\n const prepareLoop = () => {\n // [objectVal, objectVal, prototypeVal]\n sb.emitOp(node, 'DUP');\n // ['prototype', objectVal, objectVal, prototypeVal]\n sb.emitPushString(node, 'prototype');\n // [nextPrototypeVal, objectVal, prototypeVal]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [nextPrototypeVal, nextPrototypeVal, objectVal, prototypeVal]\n sb.emitOp(node, 'DUP');\n // [objectVal, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'ROT');\n // [3, objectVal, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitPushInt(node, 3);\n // [prototypeVal, objectVal, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'PICK');\n };\n\n // [prototypeVal, objectVal, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n prepareLoop();\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [samePrototype, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'EQUAL');\n // [samePrototype, samePrototype, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'DUP');\n // [notSamePrototype, samePrototype, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'NOT');\n // [nextPrototypeVal, notSamePrototype, samePrototype, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'ROT');\n // [isUndefined, notSamePrototype, samePrototype, nextPrototypeVal, prototypeVal]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n // [hasPrototype, notSamePrototype, samePrototype, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'NOT');\n // [hasPrototypeAndNotSame, samePrototype, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'AND');\n },\n each: () => {\n // [nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'DROP');\n // [prototypeVal, objectVal, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n prepareLoop();\n },\n }),\n );\n\n // [samePrototype, prototypeVal]\n sb.emitOp(node, 'NIP');\n // [samePrototype]\n sb.emitOp(node, 'NIP');\n }\n}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsObjectHelper extends IsHelper {\n protected type = Types.Object;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nexport interface SetObjectAccessorPropertyHelperBaseOptions {\n hasSet?: boolean;\n hasGet?: boolean;\n}\n\n// Input: [?getObjectVal, ?setObjectVal, stringProp, objectVal]\n// Output: []\nexport abstract class SetObjectAccessorPropertyHelperBase extends Helper<Node> {\n private readonly hasSet: boolean;\n private readonly hasGet: boolean;\n\n constructor({ hasSet, hasGet }: SetObjectAccessorPropertyHelperBaseOptions) {\n super();\n this.hasSet = hasSet == null ? false : hasSet;\n this.hasGet = hasGet == null ? false : hasGet;\n\n if (!(this.hasSet || this.hasGet)) {\n throw new Error(\n 'Something went wrong. Must have either a getter or setter',\n );\n }\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n\n if (!(this.hasSet && this.hasGet)) {\n // [val, ?getObjectVal, ?setObjectVal, stringProp, objectVal]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n if (this.hasGet) {\n // [getObjectVal, setObjectVal, stringProp, objectVal]\n sb.emitOp(node, 'SWAP');\n }\n }\n // [2, getObjectVal, setObjectVal, stringProp, objectVal]\n sb.emitPushInt(node, 2);\n // [val, stringProp, objectVal]\n sb.emitOp(node, 'PACK');\n // [objectVal, val, stringProp]\n sb.emitOp(node, 'ROT');\n // [obj, val, stringProp]\n sb.emitHelper(node, options, this.getObject(sb));\n // [stringProp, obj, val]\n sb.emitOp(node, 'ROT');\n // [val, stringProp, obj]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n\n protected abstract getObject(sb: ScriptBuilder): Helper<Node>;\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectAccessorPropertyHelperBase } from './SetObjectAccessorPropertyHelperBase';\n\n// Input: [?getObjectVal, ?setObjectVal, stringProp, objectVal]\n// Output: []\nexport class SetAccessorPropertyObjectPropertyHelper extends SetObjectAccessorPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getPropertyObject;\n }\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectAccessorPropertyHelperBase } from './SetObjectAccessorPropertyHelperBase';\n\n// Input: [?getObjectVal, ?setObjectVal, stringProp, objectVal]\n// Output: []\nexport class SetAccessorSymbolObjectPropertyHelper extends SetObjectAccessorPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getSymbolObject;\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport abstract class SetObjectDataPropertyHelperBase extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [objectVal, val, stringProp]\n sb.emitOp(node, 'ROT');\n // [obj, val, stringProp]\n sb.emitHelper(node, sb.pushValueOptions(options), this.getObject(sb));\n // [stringProp, obj, val]\n sb.emitOp(node, 'ROT');\n // [val, stringProp, obj]\n sb.emitOp(node, 'ROT');\n // [1, val, stringProp, obj]\n sb.emitPushInt(node, 1);\n // [propVal, stringProp, obj]\n sb.emitOp(node, 'PACK');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n\n protected abstract getObject(sb: ScriptBuilder): Helper<Node>;\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectDataPropertyHelperBase } from './SetObjectDataPropertyHelperBase';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport class SetDataPropertyObjectPropertyHelper extends SetObjectDataPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getPropertyObject;\n }\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectDataPropertyHelperBase } from './SetObjectDataPropertyHelperBase';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport class SetDataSymbolObjectPropertyHelper extends SetObjectDataPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getSymbolObject;\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport class SetInternalObjectPropertyHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [objectVal, val, stringProp]\n sb.emitOp(node, 'ROT');\n // [obj, val, stringProp]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.getInternalObject,\n );\n // [stringProp, obj, val]\n sb.emitOp(node, 'ROT');\n // [val, stringProp, obj]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [val, stringProp, objectVal]\n// Output: [val]\nexport abstract class SetObjectPropertyHelperBase extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [objectVal, val, stringProp]\n sb.emitOp(node, 'ROT');\n // [stringProp, objectVal, val]\n sb.emitOp(node, 'ROT');\n // [stringProp, objectVal, stringProp, val]\n sb.emitOp(node, 'TUCK');\n // [objectVal, stringProp, objectVal, stringProp, val]\n sb.emitOp(node, 'OVER');\n // [stringProp, objectVal, objectVal, stringProp, val]\n sb.emitOp(node, 'SWAP');\n sb.emitHelper(\n node,\n options,\n sb.helpers.findObjectProperty({\n accessor: () => {\n // [1, propVal, objectVal, stringProp, val]\n sb.emitPushInt(node, 1);\n // [setObjectVal, objectVal, stringProp, val]\n sb.emitOp(node, 'PICKITEM');\n // [stringProp, setObjectVal, objectVal, val]\n sb.emitOp(node, 'ROT');\n // [setObjectVal, objectVal, val]\n sb.emitOp(node, 'DROP');\n // [val, setObjectVal, objectVal]\n sb.emitOp(node, 'ROT');\n // [1, val, setObjectVal, objectVal]\n sb.emitPushInt(node, 1);\n // [argsarr, setObjectVal, objectVal]\n sb.emitOp(node, 'PACK');\n // [objectVal, argsarr, setObjectVal]\n sb.emitOp(node, 'ROT');\n // [setObjectVal, objectVal, argsarr]\n sb.emitOp(node, 'ROT');\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeCall({ bindThis: true, noArgs: false }),\n );\n },\n dataExists: () => {\n // [propVal, stringProp, val]\n sb.emitOp(node, 'NIP');\n // [propVal, val]\n sb.emitOp(node, 'NIP');\n // [0, propVal, val]\n sb.emitPushInt(node, 0);\n // [val, 0, propVal]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n },\n data: () => {\n // [stringProp, objectVal, val]\n sb.emitOp(node, 'SWAP');\n // [val, stringProp, objectVal]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitHelper(node, options, this.setDataProperty(sb));\n },\n getObject: this.getObject.bind(this),\n }),\n );\n }\n\n protected abstract getObject(sb: ScriptBuilder): Helper<Node>;\n protected abstract setDataProperty(sb: ScriptBuilder): Helper<Node>;\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectPropertyHelperBase } from './SetObjectPropertyHelperBase';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport class SetPropertyObjectPropertyHelper extends SetObjectPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getPropertyObject;\n }\n\n protected setDataProperty(sb: ScriptBuilder): Helper {\n return sb.helpers.setDataPropertyObjectProperty;\n }\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectPropertyHelperBase } from './SetObjectPropertyHelperBase';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport class SetSymbolObjectPropertyHelper extends SetObjectPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getSymbolObject;\n }\n\n protected setDataProperty(sb: ScriptBuilder): Helper {\n return sb.helpers.setDataSymbolObjectProperty;\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\nimport { Types } from '../Types';\n\n// Input: [objectVal]\n// Output: [objectVal]\nexport class ShallowCloneObjectHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [object]\n sb.emitHelper(node, options, sb.helpers.getObject);\n // [length, pobj, sobj, iobj, ...]\n sb.emitOp(node, 'UNPACK');\n\n const roll = () => {\n // [3, length, pobj, sobj, iobj, ...]\n sb.emitPushInt(node, 3);\n // [iobj, length, pobj, sobj, ...]\n sb.emitOp(node, 'ROLL');\n };\n\n const clone = () => {\n roll();\n // [iobj, length, pobj, sobj, ...]\n sb.emitHelper(node, options, sb.helpers.shallowCloneObj);\n };\n\n // [iobj, length, pobj, sobj, ...]\n clone();\n // [sobj, iobj, length, pobj, ...]\n clone();\n // [pobj, sobj, iobj, length, ...]\n clone();\n // [length, pobj, sobj, iobj, ...]\n roll();\n // [object]\n sb.emitOp(node, 'PACK');\n\n // [objectType, object]\n sb.emitPushInt(node, Types.Object);\n\n /* create object */\n // [2, objectType, object]\n sb.emitPushInt(node, 2);\n // [objectVal]\n sb.emitOp(node, 'PACK');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [obj]\n// Output: [obj]\nexport class ShallowCloneObjHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n /* create new obj */\n // [newObj, oldObj]\n sb.emitOp(node, 'NEWMAP');\n // [oldObj, newObj]\n sb.emitOp(node, 'SWAP');\n\n /* get keys and values */\n // [oldObj, oldObj, newObj]\n sb.emitOp(node, 'DUP');\n // [valuesArray, oldObj, newObj]\n sb.emitOp(node, 'VALUES');\n // [oldObj, valuesArray, newObj]\n sb.emitOp(node, 'SWAP');\n // [keysArray, valuesArray, newObj]\n sb.emitOp(node, 'KEYS');\n\n /* set keys/values on new obj */\n sb.withScope(node, options, (scopeOptions) => {\n const counter = sb.scope.addUnique();\n const length = sb.scope.addUnique();\n\n sb.emitHelper(\n node,\n scopeOptions,\n sb.helpers.forLoop({\n initializer: () => {\n // [keysArray, keysArray, valuesArray, newObj]\n sb.emitOp(node, 'DUP');\n // [length, keysArray, valuesArray, newObj]\n sb.emitOp(node, 'ARRAYSIZE');\n // [keysArray, valuesArray, newObj]\n sb.scope.set(sb, node, scopeOptions, length);\n // [counter, keysArray, valuesArray, newObj]\n sb.emitPushInt(node, 0);\n // [keysArray, valuesArray, newObj]\n sb.scope.set(sb, node, scopeOptions, counter);\n },\n condition: () => {\n // [counter]\n sb.scope.get(sb, node, scopeOptions, counter);\n // [length, counter]\n sb.scope.get(sb, node, scopeOptions, length);\n // [lt]\n sb.emitOp(node, 'LT');\n },\n incrementor: () => {\n // [counter]\n sb.scope.get(sb, node, scopeOptions, counter);\n // [counter]\n sb.emitOp(node, 'INC');\n // []\n sb.scope.set(sb, node, scopeOptions, counter);\n },\n each: (innerOptions) => {\n // [keysArray, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'TUCK');\n // [valuesArray, keysArray, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'OVER');\n // [counter, valuesArray, keysArray, valuesArray, keysArray, newObj]\n sb.scope.get(sb, node, innerOptions, counter);\n // [counter, valuesArray, counter, keysArray, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'TUCK');\n // [value, counter, keysArray, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'PICKITEM');\n // [keysArray, value, counter, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'ROT');\n // [counter, keysArray, value, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'ROT');\n // [key, value, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'PICKITEM');\n // [4, key, value, valuesArray, keysArray, newObj]\n sb.emitPushInt(node, 4);\n // [newObj, key, value, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'PICK');\n // [key, newObj, value, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'SWAP');\n // [value, key, newObj, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'ROT');\n // [valuesArray, keysArray, newObj]\n sb.emitOp(node, 'SETITEM');\n },\n }),\n );\n });\n\n // [keysArray, newObj]\n sb.emitOp(node, 'DROP');\n // [newObj]\n sb.emitOp(node, 'DROP');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { TypedHelper } from '../../common';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nimport * as typeUtils from '../../../../typeUtils';\n\n// Input: [val]\n// Output: [objectVal]\nexport class ToObjectHelper extends TypedHelper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const type = this.type;\n if (typeUtils.isOnlyBoolean(type)) {\n this.convertPrimitive(sb, node, options, 'Boolean');\n } else if (typeUtils.isOnlyNumber(type)) {\n this.convertPrimitive(sb, node, options, 'Number');\n } else if (typeUtils.isOnlyString(type)) {\n this.convertPrimitive(sb, node, options, 'String');\n } else if (typeUtils.isOnlySymbol(type)) {\n this.convertPrimitive(sb, node, options, 'Symbol');\n } else if (typeUtils.isOnlyObject(type)) {\n return;\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n [\n {\n condition: () => {\n // [val, val]\n sb.emitOp(node, 'DUP');\n // [isObject, val]\n sb.emitHelper(node, options, sb.helpers.isObject);\n },\n whenTrue: () => {\n // do nothing\n },\n },\n ].concat(\n [\n { helper: sb.helpers.isBoolean, primitive: 'Boolean' },\n { helper: sb.helpers.isNumber, primitive: 'Number' },\n { helper: sb.helpers.isString, primitive: 'String' },\n { helper: sb.helpers.isSymbol, primitive: 'Symbol' },\n ].map(({ helper, primitive }) => ({\n condition: () => {\n // [val, val]\n sb.emitOp(node, 'DUP');\n // [isObject, val]\n sb.emitHelper(node, options, sb.helpers.isObject);\n },\n whenTrue: () => {\n this.convertPrimitive(sb, node, options, primitive);\n },\n })),\n ),\n () => {\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n },\n ),\n );\n }\n }\n\n public convertPrimitive(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n primitive: string,\n ): void {\n // [1, val]\n sb.emitPushInt(node, 1);\n // [valArgsArray]\n sb.emitOp(node, 'PACK');\n // [globalObjectVal, valArgsArray]\n sb.scope.getGlobal(sb, node, options);\n // [primitiveString, globalObjectVal, valArgsArray]\n sb.emitPushString(node, primitive);\n // [primitiveObjectVal, valArgsArray]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [val]\n sb.emitHelper(node, options, sb.helpers.invokeCall());\n }\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: [string]\n// Output: [stringVal]\nexport class CreateStringHelper extends CreatePrimitiveHelper {\n protected type = Types.String;\n}\n","import { GetPrimitiveHelper } from '../GetPrimitiveHelper';\n\n// Input: [stringVal]\n// Output: [string]\nexport class GetStringHelper extends GetPrimitiveHelper {}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsStringHelper extends IsHelper {\n protected type = Types.String;\n}\n","import { Node, Type } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { TypedHelper } from '../../common';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nimport * as typeUtils from '../../../../typeUtils';\n\n// Input: [val]\n// Output: [string]\nexport class ToStringHelper extends TypedHelper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n if (this.type != null) {\n this.convertType(sb, node, options, this.type);\n } else {\n this.convertUnknown(sb, node, options);\n }\n }\n\n private convertType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type: Type,\n ): void {\n if (typeUtils.isOnlyUndefined(type)) {\n this.convertUndefined(sb, node, options);\n } else if (typeUtils.isOnlyNull(type)) {\n this.convertNull(sb, node, options);\n } else if (typeUtils.isOnlyBoolean(type)) {\n this.convertBoolean(sb, node, options);\n } else if (typeUtils.isOnlyNumber(type)) {\n this.convertNumber(sb, node, options);\n } else if (typeUtils.isOnlyString(type)) {\n this.convertString(sb, node, options);\n } else if (typeUtils.isOnlySymbol(type)) {\n this.convertSymbol(sb, node, options);\n } else if (typeUtils.isOnlyObject(type)) {\n this.convertObject(sb, node, options);\n } else {\n this.convertUnknown(sb, node, options);\n }\n }\n\n private convertUndefined(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitPushString(node, 'undefined');\n }\n\n private convertNull(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitPushString(node, 'null');\n }\n\n private convertBoolean(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n },\n whenTrue: () => {\n sb.emitPushString(node, 'true');\n },\n whenFalse: () => {\n sb.emitPushString(node, 'false');\n },\n }),\n );\n }\n\n private convertNumber(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n }\n\n private convertString(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.getString);\n }\n\n private convertSymbol(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n }\n\n private convertObject(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [primitive]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toPrimitive({ type: this.type, preferredType: 'string' }),\n );\n // [value]\n this.convertUnknown(sb, node, options, true);\n }\n\n private convertUnknown(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n shouldThrowOnObject: boolean = false,\n ): void {\n const emitIf = (\n check: Helper<Node>,\n whenTrue: () => void,\n whenFalse: () => void,\n ) =>\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isValue, value]\n sb.emitHelper(node, options, check);\n },\n whenTrue,\n whenFalse,\n }),\n );\n\n emitIf(\n sb.helpers.isString,\n () => this.convertString(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isUndefined,\n () => this.convertUndefined(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isNull,\n () => this.convertNull(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isBoolean,\n () => this.convertBoolean(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isNumber,\n () => this.convertNumber(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isSymbol,\n () => this.convertSymbol(sb, node, options),\n () =>\n shouldThrowOnObject\n ? sb.emitHelper(\n node,\n options,\n sb.helpers.throwTypeError,\n )\n : this.convertObject(sb, node, options),\n ),\n ),\n ),\n ),\n ),\n );\n }\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: [string]\n// Output: [symbolVal]\nexport class CreateSymbolHelper extends CreatePrimitiveHelper {\n protected type = Types.Symbol;\n}\n","import { GetPrimitiveHelper } from '../GetPrimitiveHelper';\n\n// Input: [symbolVal]\n// Output: [string]\nexport class GetSymbolHelper extends GetPrimitiveHelper {}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsSymbolHelper extends IsHelper {\n protected type = Types.Symbol;\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: []\n// Output: [undefinedVal]\nexport class CreateUndefinedHelper extends CreatePrimitiveHelper {\n protected length = 1;\n protected type = Types.Undefined;\n}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsUndefinedHelper extends IsHelper {\n protected type = Types.Undefined;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsNullOrUndefinedHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [val, val]\n sb.emitOp(node, 'DUP');\n // [isNullBoolean, val]\n sb.emitHelper(node, options, sb.helpers.isNull);\n // [val, isNullBoolean]\n sb.emitOp(node, 'SWAP');\n // [isUndefinedBoolean, isNullBoolean]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n // [boolean]\n sb.emitOp(node, 'BOOLOR');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val0, val1]\n// Output: [boolean]\nexport class IsSameTypeHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [type0, val1]\n sb.emitHelper(node, options, sb.helpers.unwrapType);\n // [val1, type0]\n sb.emitOp(node, 'SWAP');\n // [type1, type0]\n sb.emitHelper(node, options, sb.helpers.unwrapType);\n // [boolean]\n sb.emitOp(node, 'EQUAL');\n }\n}\n","import { Node, Type } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nimport * as typeUtils from '../../../typeUtils';\nimport { Types } from './Types';\n\nexport type PreferredType = 'default' | 'string' | 'number';\nexport interface ToPrimitiveHelperOptions {\n type: Type | undefined;\n knownType?: Types;\n preferredType?: PreferredType;\n}\n\n// NOTE: Unlike the other To* methods, this returns a wrapped value.\n// Input: [val]\n// Output: [val]\nexport class ToPrimitiveHelper extends Helper<Node> {\n private readonly type: Type | undefined;\n private readonly knownType: Types | undefined;\n private readonly preferredType: PreferredType;\n\n constructor({ type, knownType, preferredType }: ToPrimitiveHelperOptions) {\n super();\n this.type = type;\n this.knownType = knownType;\n this.preferredType = preferredType || 'default';\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n if (!typeUtils.isOnlyPrimitive(this.type)) {\n if (this.type == null && this.knownType !== Types.Object) {\n this.toPrimitive(sb, node, options);\n } else {\n this.toPrimitiveObject(sb, node, options);\n }\n }\n }\n\n private toPrimitive(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isObject, value]\n sb.emitHelper(node, options, sb.helpers.isObject);\n },\n whenTrue: () => {\n this.toPrimitiveObject(sb, node, options);\n },\n }),\n );\n }\n\n private toPrimitiveObject(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [symbol, value, value]\n sb.emitPushString(node, '@@toPrimitive');\n // [toPrimitive, value]\n sb.emitHelper(node, options, sb.helpers.getSymbolObjectProperty);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [toPrimitive, toPrimitive, value]\n sb.emitOp(node, 'DUP');\n // [isUndefined, toPrimitive, value]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n },\n whenTrue: () => {\n // [value]\n sb.emitOp(node, 'DROP');\n // [value]\n this.tryConvert(sb, node, options, this.preferredType);\n },\n whenFalse: () => {\n // [preferredType, toPrimitiveVal, val]\n sb.emitPushString(node, this.preferredType);\n // [1, preferredType, toPrimitiveVal, val]\n sb.emitPushInt(node, 1);\n // [args, toPrimitiveVal, val]\n sb.emitOp(node, 'PACK');\n // [val, args, toPrimitiveVal]\n sb.emitOp(node, 'ROT');\n // [toPrimitiveVal, val, args]\n sb.emitOp(node, 'ROT');\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeCall({ bindThis: true }),\n );\n },\n }),\n );\n }\n\n private tryConvert(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n preferredType: 'string' | 'number' | 'default',\n ): void {\n const methods =\n preferredType === 'string'\n ? ['toString', 'valueOf']\n : ['valueOf', 'toString'];\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [method, value]\n sb.emitPushString(node, methods[0]);\n // [func, value]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [func, func, value]\n sb.emitOp(node, 'DUP');\n // [isUndefined, func, value]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n },\n whenTrue: () => {\n // [value]\n sb.emitOp(node, 'DROP');\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [method, value]\n sb.emitPushString(node, methods[1]);\n // [func, value]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [func, func, value]\n sb.emitOp(node, 'DUP');\n // [isUndefined, func, value]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n },\n whenTrue: () => {\n // [value]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // []\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n },\n whenFalse: () => {\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeCall({ bindThis: true, noArgs: true }),\n );\n },\n }),\n );\n },\n whenFalse: () => {\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeCall({ bindThis: true, noArgs: true }),\n );\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val]\n// Output: [type]\nexport class UnwrapTypeHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [0, val]\n sb.emitPushInt(node, 0);\n // [value]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val]\n// Output: [value]\n// Must not be undefined or null\nexport class UnwrapValHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [1, val]\n sb.emitPushInt(node, 1);\n // [value]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nimport * as typeUtils from '../../../typeUtils';\n\nexport interface EqualsEqualsEqualsHelperOptions {\n left: Node;\n right: Node;\n}\n\n// Input: []\n// Output: [boolean]\nexport class EqualsEqualsEqualsHelper extends Helper<Node> {\n private left: Node;\n private right: Node;\n\n constructor(options: EqualsEqualsEqualsHelperOptions) {\n super();\n this.left = options.left;\n this.right = options.right;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n sb.visit(this.left, options);\n sb.visit(this.right, options);\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n if (typeUtils.isSame(sb.getType(this.left), sb.getType(this.right))) {\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsSameType);\n } else {\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsUnknown);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [numberVal, numberVal]\n// Output: [boolean]\nexport class EqualsEqualsEqualsNumberHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [number, numberVal]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [numberVal, number]\n sb.emitOp(node, 'SWAP');\n // [number, number]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [boolean]\n sb.emitOp(node, 'NUMEQUAL');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val0, val1]\n// Output: [boolean]\nexport class EqualsEqualsEqualsSameTypeHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [val0, val0, val1]\n sb.emitOp(node, 'DUP');\n // [isNullOrUndefined]\n sb.emitHelper(node, options, sb.helpers.isNullOrUndefined);\n },\n whenTrue: () => {\n // [val1]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [boolean]\n sb.emitPushBoolean(node, true);\n },\n whenFalse: () => {\n // [value0, val1]\n sb.emitHelper(node, options, sb.helpers.unwrapVal);\n // [val1, value0]\n sb.emitOp(node, 'SWAP');\n // [value1, value0]\n sb.emitHelper(node, options, sb.helpers.unwrapVal);\n // [boolean]\n sb.emitOp(node, 'EQUAL');\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val0, val1]\n// Output: [boolean]\nexport class EqualsEqualsEqualsUnknownHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [val1, val0, val1]\n sb.emitOp(node, 'TUCK');\n // [val0, val1, val0, val1]\n sb.emitOp(node, 'OVER');\n sb.emitHelper(node, options, sb.helpers.isSameType);\n },\n whenTrue: () => {\n // [boolean]\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsSameType);\n },\n whenFalse: () => {\n // [val1]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [boolean]\n sb.emitPushBoolean(node, false);\n },\n }),\n );\n }\n}\n","import { Node, Type, ts } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nimport * as typeUtils from '../../../typeUtils';\n\nexport interface EqualsEqualsHelperOptions {\n left: Node;\n right: Node;\n}\n\n// Input: []\n// Output: [boolean]\nexport class EqualsEqualsHelper extends Helper<Node> {\n private left: Node;\n private right: Node;\n\n constructor(options: EqualsEqualsHelperOptions) {\n super();\n this.left = options.left;\n this.right = options.right;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.visit(this.left, options);\n sb.visit(this.right, options);\n return;\n }\n\n const leftType = sb.getType(this.left);\n const rightType = sb.getType(this.right);\n if (leftType != null && rightType != null) {\n this.equalsEqualsType(sb, node, options, leftType, rightType);\n } else {\n this.equalsEqualsUnknown(sb, node, options);\n }\n }\n\n public equalsEqualsType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n leftType: Type<ts.Type>,\n rightType: Type<ts.Type>,\n ): void {\n if (typeUtils.isSame(leftType, rightType)) {\n sb.emitHelper(\n node,\n options,\n sb.helpers.equalsEqualsEquals({ left: this.left, right: this.right }),\n );\n } else if (\n (typeUtils.hasNull(leftType) || typeUtils.hasUndefined(leftType)) &&\n (typeUtils.isOnlyUndefined(rightType) || typeUtils.isOnlyNull(rightType))\n ) {\n // [left]\n sb.visit(this.left, options);\n // [right, left]\n sb.visit(this.right, options);\n // [left]\n sb.emitOp(this.right, 'DROP');\n // [equals]\n sb.emitHelper(node, options, sb.helpers.isNullOrUndefined);\n } else if (\n typeUtils.isOnlyNumber(leftType) &&\n (typeUtils.isOnlyString(rightType) || typeUtils.isOnlyBoolean(rightType))\n ) {\n // [left]\n sb.visit(this.left, options);\n // [right, left]\n sb.visit(this.right, options);\n // [equals]\n this.equalsEqualsLeftNumberRightBooleanOrString(sb, node, options);\n } else if (\n typeUtils.isOnlyBoolean(leftType) &&\n (typeUtils.isOnlyString(rightType) || typeUtils.isOnlyBoolean(rightType))\n ) {\n // [left]\n sb.visit(this.left, options);\n // [leftNumber]\n sb.emitHelper(\n this.left,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.left) }),\n );\n // [leftNumberVal]\n sb.emitHelper(this.left, options, sb.helpers.createNumber);\n // [right, leftNumberVal]\n sb.visit(this.right, options);\n // [equals]\n this.equalsEqualsLeftNumberRightBooleanOrString(sb, node, options);\n } else if (\n (typeUtils.isOnlyString(leftType) || typeUtils.isOnlyBoolean(leftType)) &&\n typeUtils.isOnlyNumber(rightType)\n ) {\n // [left]\n sb.visit(this.left, options);\n // [right, left]\n sb.visit(this.right, options);\n // [equals]\n this.equalsEqualsRightNumberLeftBooleanOrString(sb, node, options);\n } else if (\n (typeUtils.isOnlyString(leftType) || typeUtils.isOnlyBoolean(leftType)) &&\n typeUtils.isOnlyBoolean(rightType)\n ) {\n // [left]\n sb.visit(this.left, options);\n // [right, left]\n sb.visit(this.right, options);\n // [rightNumber, left]\n sb.emitHelper(\n this.right,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.right) }),\n );\n // [rightNumberVal, left]\n sb.emitHelper(this.right, options, sb.helpers.createNumber);\n // [equals]\n this.equalsEqualsRightNumberLeftBooleanOrString(sb, node, options);\n } else {\n this.equalsEqualsUnknown(sb, node, options);\n }\n }\n\n public equalsEqualsLeftNumberRightBooleanOrString(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [rightNumber, left]\n sb.emitHelper(\n this.right,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.right) }),\n );\n // [rightNumber, left]\n sb.emitHelper(this.right, options, sb.helpers.createNumber);\n // [equals]\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsNumber);\n }\n\n public equalsEqualsRightNumberLeftBooleanOrString(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [left, right]\n sb.emitOp(node, 'SWAP');\n // [leftNumber, right]\n sb.emitHelper(\n this.left,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.left) }),\n );\n // [leftNumber, right]\n sb.emitHelper(this.left, options, sb.helpers.createNumber);\n // [right, leftNumber]\n sb.emitOp(node, 'SWAP');\n // [equals]\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsNumber);\n }\n\n public equalsEqualsUnknown(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n const copy = () => {\n // [right, left, right]\n sb.emitOp(this.right, 'TUCK');\n // [left, right, left, right]\n sb.emitOp(this.right, 'OVER');\n };\n\n // [left]\n sb.visit(this.left, options);\n // [right, left]\n sb.visit(this.right, options);\n\n const cases = [\n {\n condition: () => {\n copy();\n // [right, left]\n sb.emitHelper(node, options, sb.helpers.isSameType);\n },\n whenTrue: () => {\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsSameType);\n },\n },\n {\n condition: () => {\n copy();\n // [rightIsNullOrUndefined, left, right, left]\n sb.emitHelper(node, options, sb.helpers.isNullOrUndefined);\n // [left, rightIsNullOrUndefined, right, left]\n sb.emitOp(node, 'SWAP');\n // [leftIsNullOrUndefined, rightIsNullOrUndefined, right, left]\n sb.emitHelper(node, options, sb.helpers.isNullOrUndefined);\n // [equals, right, left]\n sb.emitOp(node, 'BOOLOR');\n },\n whenTrue: () => {\n // [left]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [equals]\n sb.emitPushBoolean(node, true);\n },\n },\n {\n condition: () => {\n copy();\n // [right, right, left, right, left]\n sb.emitOp(node, 'DUP');\n // [isString, right, left, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isString);\n // [right, isString, left, right, left]\n sb.emitOp(node, 'SWAP');\n // [isBoolean, isString, left, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isBoolean);\n // [isBooleanOrString, left, right, left]\n sb.emitOp(node, 'BOOLOR');\n // [left, isBooleanOrString, right, left]\n sb.emitOp(node, 'SWAP');\n // [left, left, isBooleanOrString, right, left]\n sb.emitOp(node, 'DUP');\n // [isNumber, left, isBooleanOrString, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isNumber);\n // [left, isNumber, isBooleanOrString, right, left]\n sb.emitOp(node, 'SWAP');\n // [isBoolean, isNumber, isBooleanOrString, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isBoolean);\n // [isBooleanOrNumber, isBooleanOrString, right, left]\n sb.emitOp(node, 'BOOLOR');\n // [is(BooleanOrNumber)And(BooleanOrString), right, left]\n sb.emitOp(node, 'BOOLAND');\n },\n whenTrue: () => {\n // [left, right]\n sb.emitOp(node, 'SWAP');\n // [leftNumber, right]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.left) }),\n );\n // [leftNumber, right]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // [right, leftNumber]\n sb.emitOp(node, 'SWAP');\n this.equalsEqualsLeftNumberRightBooleanOrString(sb, node, options);\n },\n },\n {\n condition: () => {\n copy();\n // [left, right, right, left]\n sb.emitOp(node, 'SWAP');\n // [left, left, right, right, left]\n sb.emitOp(node, 'DUP');\n // [isString, left, right, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isString);\n // [left, isString, right, right, left]\n sb.emitOp(node, 'SWAP');\n // [isBoolean, isString, right, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isBoolean);\n // [isBooleanOrString, right, right, left]\n sb.emitOp(node, 'BOOLOR');\n // [right, isBooleanOrString, right, left]\n sb.emitOp(node, 'SWAP');\n // [right, right, isBooleanOrString, right, left]\n sb.emitOp(node, 'DUP');\n // [isNumber, right, isBooleanOrString, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isNumber);\n // [right, isNumber, isBooleanOrString, right, left]\n sb.emitOp(node, 'SWAP');\n // [isBoolean, isNumber, isBooleanOrString, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isBoolean);\n // [isBooleanOrNumber, isBooleanOrString, right, left]\n sb.emitOp(node, 'BOOLOR');\n // [is(BooleanOrNumber)And(BooleanOrString), right, left]\n sb.emitOp(node, 'BOOLAND');\n },\n whenTrue: () => {\n // [rightNumber, left]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.right) }),\n );\n // [rightNumber, left]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n this.equalsEqualsRightNumberLeftBooleanOrString(sb, node, options);\n },\n },\n ];\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(cases, () => {\n // [rightPrim, left]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toPrimitive({ type: sb.getType(this.right) }),\n );\n // [left, rightPrim]\n sb.emitOp(node, 'SWAP');\n // [leftPrim, rightPrim]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toPrimitive({ type: sb.getType(this.left) }),\n );\n // [rightPrim, leftPrim]\n sb.emitOp(node, 'SWAP');\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(cases, () => {\n // [leftPrim]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [equals]\n sb.emitPushBoolean(node, false);\n }),\n );\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nimport * as typeUtils from '../../../typeUtils';\n\nexport interface LessThanHelperOptions {\n leftFirst: boolean;\n left: Node;\n right: Node;\n}\n\n// Input: []\n// Output: [boolean]\nexport class LessThanHelper extends Helper<Node> {\n private leftFirst: boolean;\n private left: Node;\n private right: Node;\n\n constructor(options: LessThanHelperOptions) {\n super();\n this.leftFirst = options.leftFirst;\n this.left = options.left;\n this.right = options.right;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n if (this.leftFirst) {\n sb.visit(this.left, options);\n sb.visit(this.right, options);\n } else {\n sb.visit(this.right, options);\n sb.visit(this.left, options);\n }\n return;\n }\n\n if (this.leftFirst) {\n // [left]\n sb.visit(this.left, options);\n // [leftPrim]\n sb.emitHelper(\n this.left,\n options,\n sb.helpers.toPrimitive({\n type: sb.getType(this.left),\n preferredType: 'number',\n }),\n );\n // [right, leftPrim]\n sb.visit(this.right, options);\n // [rightPrim, leftPrim]\n sb.emitHelper(\n this.right,\n options,\n sb.helpers.toPrimitive({\n type: sb.getType(this.right),\n preferredType: 'number',\n }),\n );\n } else {\n // [right]\n sb.visit(this.right, options);\n // [rightPrim]\n sb.emitHelper(\n this.right,\n options,\n sb.helpers.toPrimitive({\n type: sb.getType(this.right),\n preferredType: 'number',\n }),\n );\n // [left, rightPrim]\n sb.visit(this.left, options);\n // [leftPrim, rightPrim]\n sb.emitHelper(\n this.left,\n options,\n sb.helpers.toPrimitive({\n type: sb.getType(this.left),\n preferredType: 'number',\n }),\n );\n // [rightPrim, leftPrim]\n sb.emitOp(node, 'SWAP');\n }\n\n if (\n typeUtils.isOnlyString(sb.getType(this.left)) &&\n typeUtils.isOnlyString(sb.getType(this.right))\n ) {\n sb.reportUnsupported(node);\n } else {\n // [rightNumber, leftPrim]\n sb.emitHelper(\n this.right,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.right) }),\n );\n // [leftPrim, rightNumber]\n sb.emitOp(node, 'SWAP');\n // [leftNumber, rightNumber]\n sb.emitHelper(\n this.left,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.left) }),\n );\n // [rightNumber, leftNumber]\n sb.emitOp(node, 'SWAP');\n // [lt]\n sb.emitOp(node, 'LT');\n\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n }\n}\n","export const GLOBAL_PROPERTIES = new Set([\n 'Array',\n 'Boolean',\n 'Buffer',\n 'Error',\n 'Number',\n 'Object',\n 'String',\n 'Symbol',\n 'process',\n]);\n","export enum InternalGlobalProperties {\n MODULES = 'modules',\n ARGUMENTS = 'arguments',\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalGlobalProperties } from './InternalGlobalProperties';\n\n// Input: [argv, globalObjectVal]\n// Output: []\nexport class AddArgumentsHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // ['arguments', argv, globalObjectVal]\n sb.emitPushString(node, InternalGlobalProperties.ARGUMENTS);\n // [argv, 'arguments', globalObjectVal]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalFunctionProperties } from '../function';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport abstract class AddConstructorObjectHelper extends Helper<Node> {\n protected abstract name: string;\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [globalObjectVal, objectPrototypeVal]\n sb.emitOp(node, 'SWAP');\n // [globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // [objectPrototypeVal, globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitOp(node, 'OVER');\n\n /* create constructor prototype */\n // [prototypeVal, objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [prototypeVal, objectPrototypeVal, prototypeVal, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // ['prototype', prototypeVal, objectPrototypeVal, prototypeVal, globalObjectVal]\n sb.emitPushString(node, 'prototype');\n // [objectPrototypeVal, 'prototype', prototypeVal, prototypeVal, globalObjectVal]\n sb.emitOp(node, 'ROT');\n // [prototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [prototypeVal, globalObjectVal]\n this.addPrototypeProperties(sb, node, options);\n\n /* create object */\n // [objectVal, prototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // [prototypeVal, objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'OVER');\n // ['prototype', prototypeVal, objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitPushString(node, 'prototype');\n // [prototypeVal, 'prototype', objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'SWAP');\n // [prototypeVal, objectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'OVER');\n // ['constructor', objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitPushString(node, 'constructor');\n // [objectVal, 'constructor', prototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'SWAP');\n // [objectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [objectVal, globalObjectVal]\n this.addConstructorProperties(sb, node, options);\n // [name, objectVal, globalObjectVal]\n sb.emitPushString(node, this.name);\n // [objectVal, name, globalObjectVal]\n sb.emitOp(node, 'SWAP');\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n }\n\n protected addPrototypeProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // do nothing\n }\n\n protected addConstructorProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // do nothing\n }\n\n protected addMethod(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n name: string,\n body: (options: VisitOptions) => void,\n ): void {\n // [prototypeVal, prototypeVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n // [name, prototypeVal, prototypeVal, globalObjectVal]\n sb.emitPushString(node, name);\n // [farr, name, prototypeVal, prototypeVal, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionArray({\n body: () => {\n sb.withScope(node, options, body);\n sb.emitHelper(node, options, sb.helpers.createNormalCompletion);\n sb.emitOp(node, 'RET');\n },\n }),\n );\n // [fobjectVal, name, prototypeVal, prototypeVal, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n // [prototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\nimport { InternalFunctionProperties } from '../function';\nimport { Helper } from '../Helper';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddArrayObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Array';\n\n protected addPrototypeProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n this.addMap(sb, node, options);\n this.addFilter(sb, node, options);\n this.addReduce(sb, node, options);\n }\n\n protected addConstructorProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [objectVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n // ['construct', objectVal, objectVal, globalObjectVal]\n sb.emitPushString(node, InternalFunctionProperties.CONSTRUCT);\n // [func, 'construct', objectVal, objectVal, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createConstructArray({\n withoutScope: true,\n body: () => {\n // [argsarray, argsarray]\n sb.emitOp(node, 'DUP');\n // [size, argsarray]\n sb.emitOp(node, 'ARRAYSIZE');\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n [\n {\n condition: () => {\n // [size, size, argsarray]\n sb.emitOp(node, 'DUP');\n // [0, size, size, argsarray]\n sb.emitPushInt(node, 0);\n // [size === 0, size, argsarray]\n sb.emitOp(node, 'EQUAL');\n },\n whenTrue: () => {\n // [argsarray]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [length]\n sb.emitPushInt(node, 0);\n // [0, length]\n sb.emitPushInt(node, 0);\n // [array, length]\n sb.emitOp(node, 'NEWARRAY');\n },\n },\n {\n condition: () => {\n // [size, size, argsarray]\n sb.emitOp(node, 'DUP');\n // [1, size, size, argsarray]\n sb.emitPushInt(node, 1);\n // [size === 1, size, argsarray]\n sb.emitOp(node, 'EQUAL');\n },\n whenTrue: () => {\n // [argsarray]\n sb.emitOp(node, 'DROP');\n // [0, argsarray]\n sb.emitPushInt(node, 0);\n // [lengthVal]\n sb.emitOp(node, 'PICKITEM');\n // [length]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [length, length]\n sb.emitOp(node, 'DUP');\n // [0, length, length]\n sb.emitPushInt(node, 0);\n // [arr, length, length]\n sb.emitOp(node, 'NEWARRAY');\n // [arr, length, arr, length]\n sb.emitOp(node, 'TUCK');\n // [length, arr, arr, length]\n sb.emitOp(node, 'SWAP');\n // [array, length]\n sb.emitHelper(node, options, sb.helpers.extendArray);\n },\n },\n ],\n () => {\n // [array, length]\n sb.emitOp(node, 'SWAP');\n },\n ),\n );\n // [objectVal, arr, length]\n sb.scope.getThis(sb, node, options);\n // [objectVal, objectVal, arr, length]\n sb.emitOp(node, 'DUP');\n // [arr, objectVal, objectVal, length]\n sb.emitOp(node, 'ROT');\n // [objectVal, length]\n sb.emitHelper(node, options, sb.helpers.setArrayValue);\n // ['length', objectVal, length]\n sb.emitPushString(node, 'length');\n // [length, 'length', objectVal]\n sb.emitOp(node, 'ROT');\n // [lengthVal, 'length', objectVal]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // []\n sb.emitHelper(\n node,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n },\n }),\n );\n // [objectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n\n private addMap(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n this.addMapLike(sb, node, options, 'map', sb.helpers.arrMap);\n }\n\n private addFilter(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n this.addMapLike(sb, node, options, 'filter', sb.helpers.arrFilter);\n }\n\n private addReduce(\n sb: ScriptBuilder,\n node: Node,\n outerOptions: VisitOptions,\n ): void {\n this.addMethod(sb, node, outerOptions, 'reduce', (options) => {\n const func = sb.scope.addUnique();\n const accum = sb.scope.addUnique();\n // [argsarr, argsarr]\n sb.emitOp(node, 'DUP');\n // [0, argsarr, argsarr]\n sb.emitPushInt(node, 0);\n // [fObjectVal, argsarr]\n sb.emitOp(node, 'PICKITEM');\n // [argsarr]\n sb.scope.set(sb, node, options, func);\n // [argsarr, argsarr]\n sb.emitOp(node, 'DUP');\n // [size, argsarr]\n sb.emitOp(node, 'ARRAYSIZE');\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [2, size, argsarr]\n sb.emitPushInt(node, 2);\n // [size === 2, argsarr]\n sb.emitOp(node, 'NUMEQUAL');\n },\n whenTrue: () => {\n // [1, argsarr]\n sb.emitPushInt(node, 1);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n },\n whenFalse: () => {\n // []\n sb.emitOp(node, 'DROP');\n // [val]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n },\n }),\n );\n // []\n sb.scope.set(sb, node, options, accum);\n // [arrayObjectVal]\n sb.scope.getThis(sb, node, options);\n // [arr]\n sb.emitHelper(node, options, sb.helpers.unwrapArray);\n // [arr]\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrForEach({\n each: () => {\n // [accum, val, index]\n sb.scope.get(sb, node, options, accum);\n // [index, accum, val]\n sb.emitOp(node, 'ROT');\n // [indexVal, accum, val]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // [accum, indexVal, val]\n sb.emitOp(node, 'SWAP');\n // [val, accum, indexVal]\n sb.emitOp(node, 'ROT');\n // [3, val, accum, indexVal]\n sb.emitPushInt(node, 3);\n // [argsarr]\n sb.emitOp(node, 'PACK');\n // [fObjectVal, argsarr]\n sb.scope.get(sb, node, options, func);\n // [val]\n sb.emitHelper(node, options, sb.helpers.invokeCall());\n // []\n sb.scope.set(sb, node, options, accum);\n },\n withIndex: true,\n }),\n );\n // [val]\n sb.scope.get(sb, node, options, accum);\n });\n }\n\n private addMapLike(\n sb: ScriptBuilder,\n node: Node,\n outerOptions: VisitOptions,\n name: string,\n helper: ((options: { map: () => void; withIndex: boolean }) => Helper),\n ): void {\n this.addMethod(sb, node, outerOptions, name, (options) => {\n const func = sb.scope.addUnique();\n // [0, argsarr]\n sb.emitPushInt(node, 0);\n // [fObjectVal]\n sb.emitOp(node, 'PICKITEM');\n // []\n sb.scope.set(sb, node, options, func);\n // [arrayObjectVal]\n sb.scope.getThis(sb, node, options);\n // [arr]\n sb.emitHelper(node, options, sb.helpers.unwrapArray);\n // [arr]\n sb.emitHelper(\n node,\n options,\n helper({\n map: () => {\n // [index, val]\n sb.emitOp(node, 'SWAP');\n // [indexVal, val]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // [val, indexVal]\n sb.emitOp(node, 'SWAP');\n // [2, val, indexVal]\n sb.emitPushInt(node, 2);\n // [argsarr]\n sb.emitOp(node, 'PACK');\n // [fObjectVal, argsarr]\n sb.scope.get(sb, node, options, func);\n // [val]\n sb.emitHelper(node, options, sb.helpers.invokeCall());\n },\n withIndex: true,\n }),\n );\n // [arrayObjectVal]\n sb.emitHelper(node, options, sb.helpers.wrapArray);\n });\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\nimport { InternalFunctionProperties } from '../function';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddBufferObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Buffer';\n\n protected addConstructorProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n this.addConstructor(sb, node, options);\n this.addConcat(sb, node, options);\n }\n\n private addConstructor(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [objectVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n // ['construct', objectVal, objectVal, globalObjectVal]\n sb.emitPushString(node, InternalFunctionProperties.CONSTRUCT);\n // [func, 'construct', objectVal, objectVal, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createConstructArray({\n withoutScope: true,\n body: () => {\n // Drop the args array\n // []\n sb.emitOp(node, 'DROP');\n },\n }),\n );\n // [objectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n\n private addConcat(\n sb: ScriptBuilder,\n node: Node,\n outerOptions: VisitOptions,\n ): void {\n this.addMethod(sb, node, outerOptions, 'concat', (options) => {\n // [0, argsarr]\n sb.emitPushInt(node, 0);\n // [arrayObjectVal]\n sb.emitOp(node, 'PICKITEM');\n // [array]\n sb.emitHelper(node, options, sb.helpers.unwrapArray);\n // [buffer, array]\n sb.emitOp(node, 'PUSH0');\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [array, buffer, array]\n sb.emitOp(node, 'OVER');\n // [size, buffer, array]\n sb.emitOp(node, 'ARRAYSIZE');\n // [0, size, buffer, array]\n sb.emitPushInt(node, 0);\n // [size > 0, buffer, array]\n sb.emitOp(node, 'GT');\n },\n each: () => {\n // [array, buffer, array]\n sb.emitOp(node, 'OVER');\n // [0, array, buffer, array]\n sb.emitPushInt(node, 0);\n // [rightBufferVal, buffer, array]\n sb.emitOp(node, 'PICKITEM');\n // [rightBuffer, buffer, array]\n sb.emitHelper(node, options, sb.helpers.unwrapBuffer);\n // [buffer + rightBuffer, array]\n sb.emitOp(node, 'CAT');\n // [array, buffer, array]\n sb.emitOp(node, 'OVER');\n // [0, array, buffer, array]\n sb.emitPushInt(node, 0);\n // [buffer, array]\n sb.emitOp(node, 'REMOVE');\n },\n }),\n );\n // [buffer]\n sb.emitOp(node, 'NIP');\n // [bufferVal]\n sb.emitHelper(node, options, sb.helpers.wrapBuffer);\n });\n }\n}\n","import { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddBooleanObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Boolean';\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\nimport { InternalFunctionProperties } from '../function';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddErrorObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Error';\n\n protected addConstructorProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [objectVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n // ['construct', objectVal, objectVal, globalObjectVal]\n sb.emitPushString(node, InternalFunctionProperties.CONSTRUCT);\n // [func, 'construct', objectVal, objectVal, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createConstructArray({\n withoutScope: true,\n body: () => {\n // Drop the args array\n // []\n sb.emitOp(node, 'DROP');\n },\n }),\n );\n // [objectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalGlobalProperties } from './InternalGlobalProperties';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddModulesHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitOp(node, 'OVER');\n // ['modules', globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitPushString(node, InternalGlobalProperties.MODULES);\n // [0, 'modules', globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitPushInt(node, 0);\n // [arr, 'modules', globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitOp(node, 'NEWARRAY');\n // [objectPrototypeVal, globalObjectVal]]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddNumberObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Number';\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddObjectObjectHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n\n /* create object prototype */\n // [objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectPrototypeVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n\n /* create object */\n // [objectVal, objectPrototypeVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectVal, objectPrototypeVal, objectVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // ['prototype', objectVal, objectPrototypeVal, objectVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitPushString(node, 'prototype');\n // [objectPrototypeVal, 'prototype', objectVal, objectVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'ROT');\n // [objectVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [objectVal, objectPrototypeVal, objectVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // [objectPrototypeVal, objectVal, objectPrototypeVal, objectVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'OVER');\n // ['constructor', objectPrototypeVal, objectVal, objectPrototypeVal, objectVal, globalObjectVal, globalObjectVal]\n sb.emitPushString(node, 'constructor');\n // [objectVal, 'constructor', objectPrototypeVal, objectPrototypeVal, objectVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'ROT');\n // [objectPrototypeVal, objectVal, globalObjectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [globalObjectVal, objectPrototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'ROT');\n // ['Object', globalObjectVal, objectPrototypeVal, objectVal, globalObjectVal]\n sb.emitPushString(node, 'Object');\n // ['Object', globalObjectVal, objectPrototypeVal, objectVal, globalObjectVal]\n sb.emitPushInt(node, 3);\n // [objectVal, 'Object', globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitOp(node, 'ROLL');\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n }\n}\n","import { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddStringObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'String';\n}\n","import { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddSymbolObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Symbol';\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [globalObjectVal]\nexport class SetGlobalObjectHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n\n // [length, ...args]\n sb.emitOp(node, 'DEPTH');\n // [argv]\n sb.emitOp(node, 'PACK');\n // [globalObjectVal, argv]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [globalObjectVal, globalObjectVal, argv]\n sb.emitOp(node, 'DUP');\n // [globalObjectVal, argv]\n sb.scope.setGlobal(sb, node, options);\n // [globalObjectVal, argv, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // [argv, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'SWAP');\n // [globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addArguments);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addObjectObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addBooleanObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addNumberObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addStringObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addSymbolObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addArrayObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addBufferObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addErrorObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addModules);\n // [globalObjectVal]\n sb.emitOp(node, 'DROP');\n\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalGlobalProperties } from './InternalGlobalProperties';\nimport { TypedHelper } from '../common';\n\n// Input: [numberVal]\n// Output: [value]\nexport class GetArgumentHelper extends TypedHelper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n // [globalObjectVal, numberVal]\n sb.scope.getGlobal(sb, node, options);\n // [arguments, globalObjectVal, numberVal]\n sb.emitPushString(node, InternalGlobalProperties.ARGUMENTS);\n // [argv, numberVal]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n // [numberVal, argv]\n sb.emitOp(node, 'SWAP');\n // [number, argv]\n sb.emitHelper(node, options, sb.helpers.toNumber({ type: this.type }));\n // [value]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface GetGlobalPropertyHelperOptions {\n property: string;\n}\n\n// Input: []\n// Output: [val]\nexport class GetGlobalPropertyHelper extends Helper<Node> {\n private readonly property: string;\n\n constructor(options: GetGlobalPropertyHelperOptions) {\n super();\n this.property = options.property;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [globalObjectVal]\n sb.scope.getGlobal(sb, node, options);\n // [propertyString, globalObjectVal]\n sb.emitPushString(node, this.property);\n // [val]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [objectVal]\nexport class CreateArrayHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [Array]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.new({ noArgs: true }));\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [indexNumber, objectVal]\n// Output: [val]\nexport class GetArrayIndexHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [objectVal, indexNumber, objectVal]\n sb.emitOp(node, 'OVER');\n // ['length', objectVal, indexNumber, objectVal]\n sb.emitPushString(node, 'length');\n // [lengthNumberVal, indexNumber, objectVal]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [lengthNumber, indexNumber, objectVal]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [indexNumber, lengthNumber, indexNumber, objectVal]\n sb.emitOp(node, 'OVER');\n // [lessThanLength, indexNumber, objectVal]\n sb.emitOp(node, 'GT');\n },\n whenTrue: () => {\n // [objectVal, indexNumber]\n sb.emitOp(node, 'SWAP');\n // [arr, indexNumber]\n sb.emitHelper(node, options, sb.helpers.getArrayValue);\n // [indexNumber, arr]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitOp(node, 'PICKITEM');\n },\n whenFalse: () => {\n // [indexNumber]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [val]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n },\n }),\n );\n }\n}\n","export enum InternalArrayProperties {\n DATA_ARRAY = 'DataArray',\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalArrayProperties } from './InternalArrayProperties';\n\n// Input: [objectVal]\n// Output: [arr]\nexport class GetArrayValueHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // ['DataArray', objectVal]\n sb.emitPushString(node, InternalArrayProperties.DATA_ARRAY);\n // [arr]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val, indexNumber, objectVal]\n// Output: []\nexport class SetArrayIndexHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [objectVal, val, indexNumber]\n sb.emitOp(node, 'ROT');\n // [indexNumber, objectVal, val]\n sb.emitOp(node, 'ROT');\n // [objectVal, indexNumber, objectVal, val]\n sb.emitOp(node, 'OVER');\n // ['length', objectVal, indexNumber, objectVal, val]\n sb.emitPushString(node, 'length');\n // [lengthNumberVal, indexNumber, objectVal, val]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [lengthNumber, indexNumber, objectVal, val]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [indexNumber, lengthNumber, indexNumber, objectVal, val]\n sb.emitOp(node, 'OVER');\n // [lessThanLength, indexNumber, objectVal, val]\n sb.emitOp(node, 'GT');\n },\n whenTrue: () => {\n // [objectVal, indexNumber, val]\n sb.emitOp(node, 'SWAP');\n // []\n this.setIndex(sb, node, options);\n },\n whenFalse: () => {\n // [objectVal, indexNumber, objectVal, val]\n sb.emitOp(node, 'OVER');\n // [arr, indexNumber, objectVal, val]\n sb.emitHelper(node, options, sb.helpers.getArrayValue);\n // [indexNumber, arr, indexNumber, objectVal, val]\n sb.emitOp(node, 'OVER');\n // [indexNumber + 1, arr, indexNumber, objectVal, val]\n sb.emitOp(node, 'INC');\n // [length, arr, length, indexNumber, objectVal, val]\n sb.emitOp(node, 'TUCK');\n // [length, indexNumber, objectVal, val]\n sb.emitHelper(node, options, sb.helpers.extendArray);\n // [objectVal, length, indexNumber, val]\n sb.emitOp(node, 'ROT');\n // [objectVal, length, objectVal, indexNumber, val]\n sb.emitOp(node, 'TUCK');\n // ['length', objectVal, length, objectVal, indexNumber, val]\n sb.emitPushString(node, 'length');\n // [length, 'length', objectVal, objectVal, indexNumber, val]\n sb.emitOp(node, 'ROT');\n // [lengthVal, 'length', objectVal, objectVal, indexNumber, val]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // [objectVal, indexNumber, val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n // []\n this.setIndex(sb, node, options);\n },\n }),\n );\n }\n\n private setIndex(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [arr, indexNumber, val]\n sb.emitHelper(node, options, sb.helpers.getArrayValue);\n // [indexNumber, arr, val]\n sb.emitOp(node, 'SWAP');\n // [val, indexNumber, arr]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalArrayProperties } from './InternalArrayProperties';\n\n// Input: [arr, objectVal]\n// Output: []\nexport class SetArrayValueHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n\n // ['DataArray', arr, objectVal]\n sb.emitPushString(node, InternalArrayProperties.DATA_ARRAY);\n // [arr, 'DataArray', objectVal]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [objectVal]\n// Output: [arr]\nexport class UnwrapArrayHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const options = sb.pushValueOptions(optionsIn);\n // [arr]\n sb.emitHelper(node, options, sb.helpers.getArrayValue);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [arr]\n// Output: [objectVal]\nexport class WrapArrayHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const invokeArrayConstruct = () => {\n // [Array, argsarr]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.new());\n };\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [arr, arr]\n sb.emitOp(node, 'DUP');\n // [size, arr]\n sb.emitOp(node, 'ARRAYSIZE');\n // [1, size, arr]\n sb.emitPushInt(node, 1);\n // [size === 1, arr]\n sb.emitOp(node, 'EQUAL');\n },\n whenTrue: () => {\n // [0, arr]\n sb.emitPushInt(node, 0);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n // [1, val]\n sb.emitPushInt(node, 1);\n // [lengthVal, val]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // [1, lengthVal, val]\n sb.emitPushInt(node, 1);\n // [argsarr, val]\n sb.emitOp(node, 'PACK');\n // [arrayObjectVal, val]\n invokeArrayConstruct();\n // [arrayObjectVal, val, arrayObjectVal]\n sb.emitOp(node, 'TUCK');\n // [0, arrayObjectVal, val, arrayObjectVal]\n sb.emitPushInt(node, 0);\n // [val, 0, arrayObjectVal, arrayObjectVal]\n sb.emitOp(node, 'ROT');\n // [arrayObjectVal]\n sb.emitHelper(node, options, sb.helpers.setArrayIndex);\n },\n whenFalse: () => {\n // [arrayObjectVal]\n invokeArrayConstruct();\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [globalObjectVal]\n// Output: []\nexport class AddEmptyModuleHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [modules]\n sb.emitHelper(node, options, sb.helpers.getModules);\n // [exports, modules]\n sb.emitOp(node, 'NEWMAP');\n // []\n sb.emitOp(node, 'APPEND');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ExportHelperOptions {\n name?: string;\n defaultExport?: boolean;\n}\n\n// Input: [val, exports]\n// Output: []\nexport class ExportHelper extends Helper {\n private readonly name: string | undefined;\n private readonly defaultExport: boolean;\n\n constructor({ name, defaultExport }: ExportHelperOptions) {\n super();\n this.name = name;\n this.defaultExport = defaultExport || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n if (this.name != null) {\n sb.addExport(this.name);\n // [name, val, exports]\n sb.emitPushString(node, this.name);\n } else if (this.defaultExport) {\n // [name, val, exports]\n sb.emitPushString(node, 'default');\n } else {\n sb.reportUnsupported(node);\n }\n\n // [val, name, exports]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { ExportHelperOptions } from './ExportHelper';\n\n// Input: [val]\n// Output: []\nexport class ExportSingleHelper extends Helper {\n private readonly options: ExportHelperOptions;\n\n constructor(options: ExportHelperOptions) {\n super();\n this.options = options;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [exports, val]\n sb.emitHelper(node, options, sb.helpers.getCurrentModule);\n // [val, exports]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitHelper(node, options, sb.helpers.export(this.options));\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [exports]\nexport class GetCurrentModuleHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [globalObjectVal]\n sb.scope.getGlobal(sb, node, options);\n // [exports]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getModule({ moduleIndex: sb.moduleIndex }),\n );\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface GetModuleHelperOptions {\n moduleIndex: number;\n}\n\n// Input: [globalObjectVal]\n// Output: [exports]\nexport class GetModuleHelper extends Helper {\n private moduleIndex: number;\n\n constructor(options: GetModuleHelperOptions) {\n super();\n this.moduleIndex = options.moduleIndex;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [modules, index]\n sb.emitHelper(node, options, sb.helpers.getModules);\n // [index, modules]\n sb.emitPushInt(node, this.moduleIndex);\n // [exports]\n sb.emitOp(node, 'PICKITEM');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalGlobalProperties } from '../global';\n\n// Input: [globalObjectVal]\n// Output: [modules]\nexport class GetModulesHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // ['modules', globalObjectVal]\n sb.emitPushString(node, InternalGlobalProperties.MODULES);\n // [modules]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n }\n }\n}\n","export type BlockchainInterfaceName =\n | 'AccountBase'\n | 'AssetBase'\n | 'AttributeBase'\n | 'BlockBase'\n | 'ContractBase'\n | 'HeaderBase'\n | 'InputBase'\n | 'OutputBase'\n | 'TransactionBase'\n | 'ValidatorBase'\n | 'StorageContextBase'\n | 'StorageIteratorBase';\n\nexport enum InternalBlockchainInterfaceProperties {\n BLOCKCHAIN_INTERFACE = 'BlockchainInterface',\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { BlockchainInterfaceName } from './InternalBlockchainInterfaceProperties';\n\nexport interface IsBlockchainInterfaceHelperOptions {\n name: BlockchainInterfaceName;\n}\n\n// Input: [objectVal]\n// Output: [boolean]\nexport class IsBlockchainInterfaceHelper extends Helper {\n private readonly name: BlockchainInterfaceName;\n\n constructor(options: IsBlockchainInterfaceHelperOptions) {\n super();\n this.name = options.name;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const options = sb.pushValueOptions(optionsIn);\n // ['__brand', objectVal]\n sb.emitPushString(node, '__brand');\n // [brandVal]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [brand]\n sb.emitHelper(node, options, sb.helpers.getString);\n // [name, brand]\n sb.emitPushString(node, this.name);\n // [boolean]\n sb.emitOp(node, 'EQUAL');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalBlockchainInterfaceProperties } from './InternalBlockchainInterfaceProperties';\n\n// Input: [objectVal]\n// Output: [blockchainInterface]\nexport class UnwrapBlockchainInterfaceHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const options = sb.pushValueOptions(optionsIn);\n // ['blockchain_interface', objectVal]\n sb.emitPushString(\n node,\n InternalBlockchainInterfaceProperties.BLOCKCHAIN_INTERFACE,\n );\n // [blockchainInterface]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport {\n BlockchainInterfaceName,\n InternalBlockchainInterfaceProperties,\n} from './InternalBlockchainInterfaceProperties';\n\nexport interface WrapBlockchainInterfaceHelperOptions {\n name: BlockchainInterfaceName;\n}\n\n// Input: [blockchainInterface]\n// Output: [objectVal]\nexport class WrapBlockchainInterfaceHelper extends Helper {\n private readonly name: BlockchainInterfaceName;\n\n constructor(options: WrapBlockchainInterfaceHelperOptions) {\n super();\n this.name = options.name;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const options = sb.pushValueOptions(optionsIn);\n // [objectVal, blockchainInterface]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectVal, blockchainInterface, objectVal]\n sb.emitOp(node, 'TUCK');\n // ['__brand', objectVal, blockchainInterface, objectVal]\n sb.emitPushString(node, '__brand');\n // [name, '__brand', objectVal, blockchainInterface, objectVal]\n sb.emitPushString(node, this.name);\n // [nameVal, '__brand', objectVal, blockchainInterface, objectVal]\n sb.emitHelper(node, options, sb.helpers.createString);\n // [blockchainInterface, objectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [objectVal, blockchainInterface, objectVal]\n sb.emitOp(node, 'OVER');\n // ['blockchain_interface', objectVal, blockchainInterface, objectVal]\n sb.emitPushString(\n node,\n InternalBlockchainInterfaceProperties.BLOCKCHAIN_INTERFACE,\n );\n // [blockchainInterface, 'blockchain_interface', objectVal, objectVal]\n sb.emitOp(node, 'ROT');\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [objectVal]\nexport class CreateBufferHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [Buffer]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Buffer' }),\n );\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.new({ noArgs: true }));\n }\n }\n}\n","export enum InternalBufferProperties {\n DATA = 'Data',\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalBufferProperties } from './InternalBufferProperties';\n\n// Input: [objectVal]\n// Output: [byteArray]\nexport class GetBufferValueHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // ['data', objectVal]\n sb.emitPushString(node, InternalBufferProperties.DATA);\n // [byteArray]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalBufferProperties } from './InternalBufferProperties';\n\n// Input: [byteArray, objectVal]\n// Output: []\nexport class SetBufferValueHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // ['data', byteArray, objectVal]\n sb.emitPushString(node, InternalBufferProperties.DATA);\n // [byteArray, 'data', objectVal]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [objectVal]\n// Output: [byteArray]\nexport class UnwrapBufferHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [byteArray]\n sb.emitHelper(node, options, sb.helpers.getBufferValue);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [byteArray]\n// Output: [objectVal]\nexport class WrapBufferHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [objectVal, byteArray]\n sb.emitHelper(node, options, sb.helpers.createBuffer);\n // [objectVal, byteArray, objectVal]\n sb.emitOp(node, 'TUCK');\n // [byteArray, objectVal, objectVal]\n sb.emitOp(node, 'SWAP');\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.setBufferValue);\n }\n}\n","import { Helper } from './Helper';\nimport {\n CloneArrayHelper,\n ExtendArrayHelper,\n ArrMapHelper,\n ArrMapHelperOptions,\n ArrForEachHelperOptions,\n ArrForEachHelper,\n ForTypeHelper,\n ForTypeHelperOptions,\n GenericSerializeHelper,\n GenericDeserializeHelper,\n ArrFilterHelperOptions,\n ArrFilterHelper,\n TypedHelperOptions,\n} from './common';\nimport {\n HandleCompletionHelper,\n CreateCompletionHelper,\n CreateNormalCompletionHelper,\n CreateThrowCompletionHelper,\n GetCompletionErrorHelper,\n GetCompletionValHelper,\n PickCompletionValHelper,\n} from './completionRecord';\nimport { ThrowHelper, ThrowTypeErrorHelper } from './error';\nimport {\n CallHelper,\n CreateFunctionObjectHelper,\n FunctionHelper,\n FunctionHelperOptions,\n ParametersHelper,\n CloneFunctionHelper,\n ArgumentsHelper,\n CloneFunctionObjectHelperOptions,\n CloneFunctionObjectHelper,\n BindFunctionThisHelper,\n BindFunctionObjectThisHelperOptions,\n BindFunctionObjectThisHelper,\n BindFunctionThisHelperOptions,\n InvokeCallHelper,\n InvokeConstructHelper,\n InvokeCallHelperOptions,\n InvokeConstructHelperOptions,\n CreateCallArrayHelper,\n CreateConstructArrayHelperOptions,\n CreateConstructArrayHelper,\n CreateFunctionObjectHelperOptions,\n CreateFunctionArrayHelperOptions,\n CreateFunctionArrayHelper,\n NewHelperOptions,\n NewHelper,\n} from './function';\nimport {\n ForLoopHelper,\n ForLoopHelperOptions,\n ProcessStatementsHelper,\n ProcessStatementsHelperOptions,\n IfHelper,\n IfHelperOptions,\n Case,\n CaseHelper,\n} from './statement';\nimport {\n CreateBooleanHelper,\n CreateNullHelper,\n CreateNumberHelper,\n CreateObjectHelper,\n CreateStringHelper,\n CreateSymbolHelper,\n CreateUndefinedHelper,\n IsBooleanHelper,\n IsNullHelper,\n IsNumberHelper,\n IsObjectHelper,\n IsStringHelper,\n IsSymbolHelper,\n IsUndefinedHelper,\n GetBooleanHelper,\n GetNumberHelper,\n GetSymbolHelper,\n GetPropertyObjectHelper,\n GetStringHelper,\n ToBooleanHelper,\n ToNumberHelper,\n ToStringHelper,\n GetSymbolObjectHelper,\n GetSymbolObjectPropertyHelper,\n GetInternalObjectHelper,\n GetInternalObjectPropertyHelper,\n GetPropertyObjectPropertyHelper,\n SetAccessorPropertyObjectPropertyHelper,\n SetDataPropertyObjectPropertyHelper,\n ToPrimitiveHelper,\n ToPrimitiveHelperOptions,\n IsSameTypeHelper,\n UnwrapTypeHelper,\n UnwrapValHelper,\n IsNullOrUndefinedHelper,\n GetObjectHelper,\n SetInternalObjectPropertyHelper,\n SetAccessorSymbolObjectPropertyHelper,\n SetDataSymbolObjectPropertyHelper,\n ShallowCloneObjectHelper,\n ShallowCloneObjHelper,\n ToObjectHelper,\n InstanceofHelper,\n CreatePropertyObjectHelper,\n ElementAccessHelper,\n SetObjectAccessorPropertyHelperBaseOptions,\n FindObjectPropertyHelperOptions,\n FindObjectPropertyHelper,\n SetPropertyObjectPropertyHelper,\n SetSymbolObjectPropertyHelper,\n} from './types';\nimport {\n LessThanHelperOptions,\n LessThanHelper,\n EqualsEqualsEqualsHelperOptions,\n EqualsEqualsEqualsHelper,\n EqualsEqualsEqualsNumberHelper,\n EqualsEqualsEqualsSameTypeHelper,\n EqualsEqualsEqualsUnknownHelper,\n EqualsEqualsHelper,\n EqualsEqualsHelperOptions,\n} from './relational';\nimport {\n GLOBAL_PROPERTIES,\n SetGlobalObjectHelper,\n AddBooleanObjectHelper,\n AddNumberObjectHelper,\n AddObjectObjectHelper,\n AddStringObjectHelper,\n AddSymbolObjectHelper,\n AddArrayObjectHelper,\n AddModulesHelper,\n GetGlobalPropertyHelper,\n GetGlobalPropertyHelperOptions,\n AddBufferObjectHelper,\n AddErrorObjectHelper,\n AddArgumentsHelper,\n GetArgumentHelper,\n} from './global';\nimport {\n CreateArrayHelper,\n GetArrayValueHelper,\n SetArrayIndexHelper,\n SetArrayValueHelper,\n GetArrayIndexHelper,\n WrapArrayHelper,\n UnwrapArrayHelper,\n} from './array';\nimport {\n AddEmptyModuleHelper,\n GetModuleHelperOptions,\n GetModuleHelper,\n GetModulesHelper,\n GetCurrentModuleHelper,\n ExportHelperOptions,\n ExportHelper,\n ExportSingleHelper,\n} from './module';\nimport {\n IsBlockchainInterfaceHelperOptions,\n IsBlockchainInterfaceHelper,\n WrapBlockchainInterfaceHelperOptions,\n WrapBlockchainInterfaceHelper,\n UnwrapBlockchainInterfaceHelper,\n} from './blockchain';\nimport {\n CreateBufferHelper,\n GetBufferValueHelper,\n SetBufferValueHelper,\n UnwrapBufferHelper,\n WrapBufferHelper,\n} from './buffer';\nimport { KeyedHelper } from './KeyedHelper';\n\nexport interface Helpers {\n arrFilter: (options: ArrFilterHelperOptions) => ArrFilterHelper;\n arrMap: (options: ArrMapHelperOptions) => ArrMapHelper;\n arrForEach: (options: ArrForEachHelperOptions) => ArrForEachHelper;\n cloneArray: CloneArrayHelper;\n extendArray: ExtendArrayHelper;\n forType: (options: ForTypeHelperOptions) => ForTypeHelper;\n genericDeserialize: GenericDeserializeHelper;\n genericSerialize: GenericSerializeHelper;\n\n equalsEqualsEquals: (\n options: EqualsEqualsEqualsHelperOptions,\n ) => EqualsEqualsEqualsHelper;\n equalsEqualsEqualsNumber: EqualsEqualsEqualsNumberHelper;\n equalsEqualsEqualsSameType: EqualsEqualsEqualsSameTypeHelper;\n equalsEqualsEqualsUnknown: EqualsEqualsEqualsUnknownHelper;\n equalsEquals: (options: EqualsEqualsHelperOptions) => EqualsEqualsHelper;\n lessThan: (options: LessThanHelperOptions) => LessThanHelper;\n processStatements: (\n options: ProcessStatementsHelperOptions,\n ) => ProcessStatementsHelper;\n\n args: ArgumentsHelper;\n bindFunctionObjectThis: (\n options: BindFunctionObjectThisHelperOptions,\n ) => BindFunctionObjectThisHelper;\n bindFunctionThis: (\n options: BindFunctionThisHelperOptions,\n ) => BindFunctionThisHelper;\n call: CallHelper;\n cloneFunction: CloneFunctionHelper;\n cloneFunctionObject: (\n options: CloneFunctionObjectHelperOptions,\n ) => CloneFunctionObjectHelper;\n createCallArray: CreateCallArrayHelper;\n createConstructArray: (\n options: CreateConstructArrayHelperOptions,\n ) => CreateConstructArrayHelper;\n createFunctionArray: (\n options: CreateFunctionArrayHelperOptions,\n ) => CreateFunctionArrayHelper;\n createFunctionObject: (\n options: CreateFunctionObjectHelperOptions,\n ) => CreateFunctionObjectHelper;\n function: (options: FunctionHelperOptions) => FunctionHelper;\n invokeCall: (options?: InvokeCallHelperOptions) => InvokeCallHelper;\n invokeConstruct: (\n options?: InvokeConstructHelperOptions,\n ) => InvokeConstructHelper;\n new: (options?: NewHelperOptions) => NewHelper;\n parameters: ParametersHelper;\n\n forLoop: (options: ForLoopHelperOptions) => ForLoopHelper;\n if: (options: IfHelperOptions) => IfHelper;\n case: (cases: Case[], defaultCase: () => void) => CaseHelper;\n createCompletion: CreateCompletionHelper;\n createNormalCompletion: CreateNormalCompletionHelper;\n createThrowCompletion: CreateThrowCompletionHelper;\n getCompletionError: GetCompletionErrorHelper;\n getCompletionVal: GetCompletionValHelper;\n handleCompletion: HandleCompletionHelper;\n pickCompletionVal: PickCompletionValHelper;\n throw: ThrowHelper;\n throwTypeError: ThrowTypeErrorHelper;\n createBoolean: CreateBooleanHelper;\n createNull: CreateNullHelper;\n createNumber: CreateNumberHelper;\n createObject: CreateObjectHelper;\n createString: CreateStringHelper;\n createSymbol: CreateSymbolHelper;\n createUndefined: CreateUndefinedHelper;\n isBoolean: IsBooleanHelper;\n isNull: IsNullHelper;\n isNumber: IsNumberHelper;\n isObject: IsObjectHelper;\n isString: IsStringHelper;\n isSymbol: IsSymbolHelper;\n isUndefined: IsUndefinedHelper;\n isNullOrUndefined: IsNullOrUndefinedHelper;\n isSameType: IsSameTypeHelper;\n getBoolean: GetBooleanHelper;\n getNumber: GetNumberHelper;\n getString: GetStringHelper;\n getSymbol: GetSymbolHelper;\n getObject: GetObjectHelper;\n toBoolean: (options: TypedHelperOptions) => ToBooleanHelper;\n toString: (options: TypedHelperOptions) => ToStringHelper;\n toNumber: (options: TypedHelperOptions) => ToNumberHelper;\n toObject: (options: TypedHelperOptions) => ToObjectHelper;\n toPrimitive: (options: ToPrimitiveHelperOptions) => ToPrimitiveHelper;\n getSymbolObject: GetSymbolObjectHelper;\n getSymbolObjectProperty: GetSymbolObjectPropertyHelper;\n setSymbolObjectProperty: SetSymbolObjectPropertyHelper;\n setDataSymbolObjectProperty: SetDataSymbolObjectPropertyHelper;\n setAccessorSymbolObjectProperty: (\n options: SetObjectAccessorPropertyHelperBaseOptions,\n ) => SetAccessorSymbolObjectPropertyHelper;\n getPropertyObject: GetPropertyObjectHelper;\n getPropertyObjectProperty: GetPropertyObjectPropertyHelper;\n setPropertyObjectProperty: SetPropertyObjectPropertyHelper;\n setDataPropertyObjectProperty: SetDataPropertyObjectPropertyHelper;\n setAccessorPropertyObjectProperty: (\n options: SetObjectAccessorPropertyHelperBaseOptions,\n ) => SetAccessorPropertyObjectPropertyHelper;\n getInternalObject: GetInternalObjectHelper;\n getInternalObjectProperty: GetInternalObjectPropertyHelper;\n setInternalObjectProperty: SetInternalObjectPropertyHelper;\n shallowCloneObject: ShallowCloneObjectHelper;\n shallowCloneObj: ShallowCloneObjHelper;\n elementAccess: ElementAccessHelper;\n unwrapType: UnwrapTypeHelper;\n unwrapVal: UnwrapValHelper;\n instanceof: InstanceofHelper;\n createPropertyObject: CreatePropertyObjectHelper;\n findObjectProperty: (\n options: FindObjectPropertyHelperOptions,\n ) => FindObjectPropertyHelper;\n\n getArrayValue: GetArrayValueHelper;\n createArray: CreateArrayHelper;\n setArrayValue: SetArrayValueHelper;\n getArrayIndex: GetArrayIndexHelper;\n setArrayIndex: SetArrayIndexHelper;\n wrapArray: WrapArrayHelper;\n unwrapArray: UnwrapArrayHelper;\n\n createBuffer: CreateBufferHelper;\n getBufferValue: GetBufferValueHelper;\n setBufferValue: SetBufferValueHelper;\n unwrapBuffer: UnwrapBufferHelper;\n wrapBuffer: WrapBufferHelper;\n\n export: (options: ExportHelperOptions) => ExportHelper;\n exportSingle: (options: ExportHelperOptions) => ExportSingleHelper;\n getModule: (options: GetModuleHelperOptions) => GetModuleHelper;\n getCurrentModule: GetCurrentModuleHelper;\n getModules: GetModulesHelper;\n addEmptyModule: AddEmptyModuleHelper;\n\n isBlockchainInterface: (\n options: IsBlockchainInterfaceHelperOptions,\n ) => IsBlockchainInterfaceHelper;\n wrapBlockchainInterface: (\n options: WrapBlockchainInterfaceHelperOptions,\n ) => WrapBlockchainInterfaceHelper;\n unwrapBlockchainInterface: UnwrapBlockchainInterfaceHelper;\n\n addArguments: AddArgumentsHelper;\n addArrayObject: AddArrayObjectHelper;\n addBooleanObject: AddBooleanObjectHelper;\n addBufferObject: AddBufferObjectHelper;\n addErrorObject: AddErrorObjectHelper;\n addModules: AddModulesHelper;\n addNumberObject: AddNumberObjectHelper;\n addObjectObject: AddObjectObjectHelper;\n addStringObject: AddStringObjectHelper;\n addSymbolObject: AddSymbolObjectHelper;\n setGlobalObject: SetGlobalObjectHelper;\n getArgument: (options: TypedHelperOptions) => GetArgumentHelper;\n getGlobalProperty: (\n options: GetGlobalPropertyHelperOptions,\n ) => GetGlobalPropertyHelper;\n globalProperties: Set<string>;\n}\n\nexport const createHelpers = (): Helpers => {\n const cache: { [key: string]: Helper } = {};\n\n function memoized<Options, T extends Helper>(\n HelperClass: (new (options: Options) => T) & KeyedHelper<Options>,\n ): (options: Options) => T {\n return (options: Options) => {\n const key = HelperClass.getKey(options);\n if (cache[key] == null) {\n cache[key] = new HelperClass(options);\n }\n\n return cache[key] as T;\n };\n }\n\n return {\n arrFilter: (options: ArrFilterHelperOptions) =>\n new ArrFilterHelper(options),\n arrMap: (options: ArrMapHelperOptions) => new ArrMapHelper(options),\n arrForEach: (options: ArrForEachHelperOptions) =>\n new ArrForEachHelper(options),\n cloneArray: new CloneArrayHelper(),\n extendArray: new ExtendArrayHelper(),\n forType: (options: ForTypeHelperOptions) => new ForTypeHelper(options),\n genericDeserialize: new GenericDeserializeHelper(),\n genericSerialize: new GenericSerializeHelper(),\n\n equalsEqualsEquals: (options: EqualsEqualsEqualsHelperOptions) =>\n new EqualsEqualsEqualsHelper(options),\n equalsEqualsEqualsNumber: new EqualsEqualsEqualsNumberHelper(),\n equalsEqualsEqualsSameType: new EqualsEqualsEqualsSameTypeHelper(),\n equalsEqualsEqualsUnknown: new EqualsEqualsEqualsUnknownHelper(),\n equalsEquals: (options: EqualsEqualsHelperOptions) =>\n new EqualsEqualsHelper(options),\n lessThan: (options: LessThanHelperOptions) => new LessThanHelper(options),\n processStatements: (options) => new ProcessStatementsHelper(options),\n\n args: new ArgumentsHelper(),\n bindFunctionObjectThis: (options: BindFunctionObjectThisHelperOptions) =>\n new BindFunctionObjectThisHelper(options),\n bindFunctionThis: (options: BindFunctionThisHelperOptions) =>\n new BindFunctionThisHelper(options),\n call: new CallHelper(),\n cloneFunction: new CloneFunctionHelper(),\n cloneFunctionObject: (options: CloneFunctionObjectHelperOptions) =>\n new CloneFunctionObjectHelper(options),\n createCallArray: new CreateCallArrayHelper(),\n createConstructArray: (options: CreateConstructArrayHelperOptions) =>\n new CreateConstructArrayHelper(options),\n createFunctionArray: (options: CreateFunctionArrayHelperOptions) =>\n new CreateFunctionArrayHelper(options),\n createFunctionObject: (options: CreateFunctionObjectHelperOptions) =>\n new CreateFunctionObjectHelper(options),\n function: (options: FunctionHelperOptions) => new FunctionHelper(options),\n invokeCall: memoized(InvokeCallHelper),\n invokeConstruct: (options?: InvokeConstructHelperOptions) =>\n new InvokeConstructHelper(options),\n new: (options?: NewHelperOptions) => new NewHelper(options),\n parameters: new ParametersHelper(),\n\n forLoop: (options) => new ForLoopHelper(options),\n if: (options) => new IfHelper(options),\n case: (cases: Case[], defaultCase: () => void) =>\n new CaseHelper(cases, defaultCase),\n createCompletion: new CreateCompletionHelper(),\n createNormalCompletion: new CreateNormalCompletionHelper(),\n createThrowCompletion: new CreateThrowCompletionHelper(),\n getCompletionError: new GetCompletionErrorHelper(),\n getCompletionVal: new GetCompletionValHelper(),\n handleCompletion: new HandleCompletionHelper(),\n pickCompletionVal: new PickCompletionValHelper(),\n throw: new ThrowHelper(),\n throwTypeError: new ThrowTypeErrorHelper(),\n createBoolean: new CreateBooleanHelper(),\n createNull: new CreateNullHelper(),\n createNumber: new CreateNumberHelper(),\n createObject: new CreateObjectHelper(),\n createString: new CreateStringHelper(),\n createSymbol: new CreateSymbolHelper(),\n createUndefined: new CreateUndefinedHelper(),\n isBoolean: new IsBooleanHelper(),\n isNull: new IsNullHelper(),\n isNumber: new IsNumberHelper(),\n isObject: new IsObjectHelper(),\n isString: new IsStringHelper(),\n isSymbol: new IsSymbolHelper(),\n isUndefined: new IsUndefinedHelper(),\n isNullOrUndefined: new IsNullOrUndefinedHelper(),\n isSameType: new IsSameTypeHelper(),\n getBoolean: new GetBooleanHelper(),\n getNumber: new GetNumberHelper(),\n getString: new GetStringHelper(),\n getSymbol: new GetSymbolHelper(),\n getObject: new GetObjectHelper(),\n toBoolean: (options: TypedHelperOptions) => new ToBooleanHelper(options),\n toString: (options: TypedHelperOptions) => new ToStringHelper(options),\n toNumber: (options: TypedHelperOptions) => new ToNumberHelper(options),\n toObject: (options: TypedHelperOptions) => new ToObjectHelper(options),\n toPrimitive: (options) => new ToPrimitiveHelper(options),\n getSymbolObject: new GetSymbolObjectHelper(),\n getSymbolObjectProperty: new GetSymbolObjectPropertyHelper(),\n setSymbolObjectProperty: new SetSymbolObjectPropertyHelper(),\n setDataSymbolObjectProperty: new SetDataSymbolObjectPropertyHelper(),\n setAccessorSymbolObjectProperty: (\n options: SetObjectAccessorPropertyHelperBaseOptions,\n ) => new SetAccessorSymbolObjectPropertyHelper(options),\n getPropertyObject: new GetPropertyObjectHelper(),\n getPropertyObjectProperty: new GetPropertyObjectPropertyHelper(),\n setPropertyObjectProperty: new SetPropertyObjectPropertyHelper(),\n setDataPropertyObjectProperty: new SetDataPropertyObjectPropertyHelper(),\n setAccessorPropertyObjectProperty: (\n options: SetObjectAccessorPropertyHelperBaseOptions,\n ) => new SetAccessorPropertyObjectPropertyHelper(options),\n getInternalObject: new GetInternalObjectHelper(),\n getInternalObjectProperty: new GetInternalObjectPropertyHelper(),\n setInternalObjectProperty: new SetInternalObjectPropertyHelper(),\n shallowCloneObject: new ShallowCloneObjectHelper(),\n shallowCloneObj: new ShallowCloneObjHelper(),\n elementAccess: new ElementAccessHelper(),\n unwrapType: new UnwrapTypeHelper(),\n unwrapVal: new UnwrapValHelper(),\n instanceof: new InstanceofHelper(),\n createPropertyObject: new CreatePropertyObjectHelper(),\n findObjectProperty: (options: FindObjectPropertyHelperOptions) =>\n new FindObjectPropertyHelper(options),\n\n getArrayValue: new GetArrayValueHelper(),\n createArray: new CreateArrayHelper(),\n setArrayValue: new SetArrayValueHelper(),\n getArrayIndex: new GetArrayIndexHelper(),\n setArrayIndex: new SetArrayIndexHelper(),\n wrapArray: new WrapArrayHelper(),\n unwrapArray: new UnwrapArrayHelper(),\n\n createBuffer: new CreateBufferHelper(),\n getBufferValue: new GetBufferValueHelper(),\n setBufferValue: new SetBufferValueHelper(),\n unwrapBuffer: new UnwrapBufferHelper(),\n wrapBuffer: new WrapBufferHelper(),\n\n export: (options: ExportHelperOptions) => new ExportHelper(options),\n exportSingle: (options: ExportHelperOptions) =>\n new ExportSingleHelper(options),\n getModule: (options: GetModuleHelperOptions) =>\n new GetModuleHelper(options),\n getCurrentModule: new GetCurrentModuleHelper(),\n getModules: new GetModulesHelper(),\n addEmptyModule: new AddEmptyModuleHelper(),\n\n isBlockchainInterface: (options: IsBlockchainInterfaceHelperOptions) =>\n new IsBlockchainInterfaceHelper(options),\n wrapBlockchainInterface: (options: WrapBlockchainInterfaceHelperOptions) =>\n new WrapBlockchainInterfaceHelper(options),\n unwrapBlockchainInterface: new UnwrapBlockchainInterfaceHelper(),\n\n addArguments: new AddArgumentsHelper(),\n addArrayObject: new AddArrayObjectHelper(),\n addBooleanObject: new AddBooleanObjectHelper(),\n addBufferObject: new AddBufferObjectHelper(),\n addErrorObject: new AddErrorObjectHelper(),\n addModules: new AddModulesHelper(),\n addNumberObject: new AddNumberObjectHelper(),\n addObjectObject: new AddObjectObjectHelper(),\n addStringObject: new AddStringObjectHelper(),\n addSymbolObject: new AddSymbolObjectHelper(),\n setGlobalObject: new SetGlobalObjectHelper(),\n getArgument: (options: TypedHelperOptions) =>\n new GetArgumentHelper(options),\n getGlobalProperty: (options: GetGlobalPropertyHelperOptions) =>\n new GetGlobalPropertyHelper(options),\n globalProperties: GLOBAL_PROPERTIES,\n };\n};\n","import { ClassDeclaration, SyntaxKind, TypeGuards } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\nimport { InternalFunctionProperties } from '../helper';\n\nexport class ClassDeclarationCompiler extends NodeCompiler<ClassDeclaration> {\n public readonly kind: SyntaxKind = SyntaxKind.ClassDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n decl: ClassDeclaration,\n optionsIn: VisitOptions,\n ): void {\n let options = sb.pushValueOptions(sb.noSuperClassOptions(optionsIn));\n const name = sb.scope.add(decl.getNameOrThrow());\n const extendsExpr = decl.getExtends();\n let superClassIn;\n if (extendsExpr != null) {\n superClassIn = sb.scope.addUnique();\n options = sb.superClassOptions(options, superClassIn);\n // [superClass]\n sb.visit(extendsExpr.getExpression(), options);\n // []\n sb.scope.set(sb, extendsExpr, options, superClassIn);\n }\n const superClass = superClassIn;\n\n /* Create constructor function */\n // [farr]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createConstructArray({\n body: () => {\n // [argsarr]\n const ctorImpl = decl\n .getConstructors()\n .find((ctor) => ctor.isImplementation());\n // Default value assignments\n if (ctorImpl != null) {\n // []\n sb.emitHelper(ctorImpl, options, sb.helpers.parameters);\n // Super call statement\n } else if (superClass != null && extendsExpr != null) {\n // [thisObjectVal, argsarr]\n sb.scope.getThis(sb, decl, options);\n // [ctor, thisObjectVal, argsarr]\n sb.scope.get(sb, decl, options, superClass);\n // []\n sb.emitHelper(decl, options, sb.helpers.invokeConstruct());\n // Drop the argsarray, we must not use it\n } else {\n // []\n sb.emitOp(decl, 'DROP');\n }\n // Parameter property assignments\n // Member variable assignments\n // [thisObjectVal]\n sb.scope.getThis(sb, decl, options);\n decl\n .getInstanceProperties()\n .filter(TypeGuards.isPropertyDeclaration)\n .forEach((property) => {\n const initializer = property.getInitializer();\n if (initializer != null) {\n sb.emitOp(decl, 'DUP');\n // [prop, thisObjectVal, thisObjectVal]\n sb.emitPushString(initializer, property.getName());\n // [init, prop, thisObjectVal, thisObjectVal]\n sb.visit(initializer, options);\n // [thisObjectVal]\n sb.emitHelper(\n initializer,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n }\n });\n // []\n sb.emitOp(decl, 'DROP');\n // Constructor statements\n if (ctorImpl != null) {\n sb.visit(ctorImpl.getBodyOrThrow(), options);\n }\n },\n }),\n );\n\n // [fobjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CONSTRUCT,\n }),\n );\n\n /* Create prototype */\n // [fobjectVal, fobjectVal]\n sb.emitOp(decl, 'DUP');\n // ['prototype', fobjectVal, fobjectVal]\n sb.emitPushString(decl, 'prototype');\n // [fobjectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(decl, 'OVER');\n // [objectVal, fobjectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(decl, options, sb.helpers.createObject);\n // [objectVal, fobjectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(decl, 'TUCK');\n // ['constructor', objectVal, fobjectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(decl, 'constructor');\n // [fobjectVal, 'constructor', objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(decl, 'ROT');\n // [objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(decl, options, sb.helpers.setDataPropertyObjectProperty);\n decl.getInstanceMethods().forEach((method) => {\n if (method.isImplementation()) {\n // [objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(method, 'DUP');\n // [name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(method, method.getName());\n // [farr, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(method, options, sb.helpers.createCallArray);\n // [methodObjectVal, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n // [objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n method,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n }\n });\n\n decl\n .getSetAccessors()\n .filter((accessor) => !accessor.isStatic())\n .forEach((accessor) => {\n // [objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(accessor, 'DUP');\n // [name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(accessor, accessor.getName());\n // [farr, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(accessor, options, sb.helpers.createCallArray);\n // [methodObjectVal, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n const getAccessor = accessor.getGetAccessor();\n const hasGet = getAccessor != null;\n if (getAccessor != null) {\n sb.emitHelper(getAccessor, options, sb.helpers.createCallArray);\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n }\n // [objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n accessor,\n options,\n sb.helpers.setAccessorPropertyObjectProperty({\n hasSet: true,\n hasGet,\n }),\n );\n });\n\n decl\n .getGetAccessors()\n .filter(\n (accessor) => !accessor.isStatic() && accessor.getSetAccessor() == null,\n )\n .forEach((accessor) => {\n // [objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(accessor, 'DUP');\n // [name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(accessor, accessor.getName());\n // [farr, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(accessor, options, sb.helpers.createCallArray);\n // [methodObjectVal, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n // [objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n accessor,\n options,\n sb.helpers.setAccessorPropertyObjectProperty({\n hasSet: false,\n hasGet: true,\n }),\n );\n });\n\n /* Set superclass prototype */\n if (superClass != null && extendsExpr != null) {\n // [objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(extendsExpr, 'DUP');\n // ['prototype', objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(extendsExpr, 'prototype');\n // [superobjectVal, 'prototype', objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.scope.get(sb, extendsExpr, options, superClass);\n // ['prototype', superobjectVal, 'prototype', objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(extendsExpr, 'prototype');\n // [superprototype, 'prototype', objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(extendsExpr, options, sb.helpers.getPropertyObjectProperty);\n // [objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n extendsExpr,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n }\n\n // [fobjectVal]\n sb.emitHelper(decl, options, sb.helpers.setDataPropertyObjectProperty);\n\n if (decl.isNamedExport() || decl.isDefaultExport()) {\n // [fobjectVal, fobjectVal]\n sb.emitOp(decl, 'DUP');\n // [fobjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.exportSingle({\n name: decl.isNamedExport() ? decl.getNameOrThrow() : undefined,\n defaultExport: decl.isDefaultExport(),\n }),\n );\n }\n // []\n sb.scope.set(sb, decl, options, name);\n }\n}\n","import { EnumDeclaration, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class EnumDeclarationCompiler extends NodeCompiler<EnumDeclaration> {\n public readonly kind: SyntaxKind = SyntaxKind.EnumDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n decl: EnumDeclaration,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(decl);\n }\n}\n","import { EnumMember, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class EnumMemberCompiler extends NodeCompiler<EnumMember> {\n public readonly kind: SyntaxKind = SyntaxKind.EnumMember;\n\n public visitNode(\n sb: ScriptBuilder,\n decl: EnumMember,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(decl);\n }\n}\n","import { SyntaxKind, ExportAssignment } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ExportAssignmentCompiler extends NodeCompiler<ExportAssignment> {\n public readonly kind: SyntaxKind = SyntaxKind.ExportAssignment;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ExportAssignment,\n optionsIn: VisitOptions,\n ): void {\n if (node.isExportEquals()) {\n sb.reportUnsupported(node);\n } else {\n const options = sb.pushValueOptions(optionsIn);\n // [val]\n sb.visit(node.getExpression(), options);\n // []\n sb.emitHelper(\n node,\n options,\n sb.helpers.exportSingle({ defaultExport: true }),\n );\n }\n }\n}\n","import {\n SyntaxKind,\n ExportDeclaration,\n ExportSpecifier,\n TypeGuards,\n} from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ExportDeclarationCompiler extends NodeCompiler<ExportDeclaration> {\n public readonly kind: SyntaxKind = SyntaxKind.ExportDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ExportDeclaration,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n\n const getName = (namedExport: ExportSpecifier) => {\n let name = namedExport.getNameNode().getText();\n const alias = namedExport.getAliasIdentifier();\n if (alias != null) {\n name = alias.getText();\n }\n\n return name;\n };\n\n const moduleSpecifier = node.getModuleSpecifierSourceFile();\n\n // [exports]\n sb.emitHelper(node, options, sb.helpers.getCurrentModule);\n if (moduleSpecifier == null) {\n node\n .getNamedExports()\n .filter((namedExport) =>\n namedExport\n .getLocalTargetDeclarations()\n .some((decl) => !TypeGuards.isTypeAliasDeclaration(decl)),\n )\n .forEach((namedExport) => {\n // [exports, exports]\n sb.emitOp(node, 'DUP');\n // [val, exports, exports]\n sb.scope.get(sb, node, options, namedExport.getNameNode().getText());\n // [exports]\n sb.emitHelper(\n node,\n options,\n sb.helpers.export({ name: getName(namedExport) }),\n );\n });\n } else {\n // [moduleExports, exports]\n sb.loadModule(moduleSpecifier);\n node\n .getNamedExports()\n .filter((namedExport) =>\n sb.hasExport(moduleSpecifier, namedExport.getNameNode().getText()),\n )\n .forEach((namedExport) => {\n // [exports, moduleExports]\n sb.emitOp(node, 'SWAP');\n // [exports, moduleExports, exports]\n sb.emitOp(node, 'TUCK');\n // [moduleExports, exports, moduleExports, exports]\n sb.emitOp(node, 'OVER');\n // [name, moduleExports, exports, moduleExports, exports]\n sb.emitPushString(node, namedExport.getNameNode().getText());\n // [val, exports, moduleExports, exports]\n sb.emitOp(node, 'PICKITEM');\n // [moduleExports, exports]\n sb.emitHelper(\n node,\n options,\n sb.helpers.export({ name: getName(namedExport) }),\n );\n });\n // [exports]\n sb.emitOp(node, 'DROP');\n }\n\n // []\n sb.emitOp(node, 'DROP');\n }\n}\n","import { FunctionDeclaration, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\nimport { InternalFunctionProperties } from '../helper';\n\nexport class FunctionDeclarationCompiler extends NodeCompiler<\n FunctionDeclaration\n> {\n public readonly kind: SyntaxKind = SyntaxKind.FunctionDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n decl: FunctionDeclaration,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n const name = sb.scope.add(decl.getName());\n // [callArray]\n sb.emitHelper(decl, options, sb.helpers.createCallArray);\n // [callObjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n if (decl.isNamedExport() || decl.isDefaultExport()) {\n // [callObjectVal, callObjectVal]\n sb.emitOp(decl, 'DUP');\n // [callObjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.exportSingle({\n name: decl.isNamedExport() ? decl.getName() : undefined,\n defaultExport: decl.isDefaultExport(),\n }),\n );\n }\n // []\n sb.scope.set(sb, decl, options, name);\n }\n}\n","import { SyntaxKind, ImportDeclaration } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ImportDeclarationCompiler extends NodeCompiler<ImportDeclaration> {\n public readonly kind: SyntaxKind = SyntaxKind.ImportDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ImportDeclaration,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n // [exports]\n sb.loadModule(node.getModuleSpecifierSourceFileOrThrow());\n\n const namespaceImport = node.getNamespaceImport();\n if (namespaceImport != null) {\n const name = namespaceImport.getText();\n sb.scope.add(name);\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.createPropertyObject);\n\n // []\n sb.scope.set(sb, node, options, name);\n } else {\n const defaultImport = node.getDefaultImport();\n const namedImports = node\n .getNamedImports()\n .filter((namedImport) =>\n sb.hasExport(\n namedImport\n .getImportDeclaration()\n .getModuleSpecifierSourceFileOrThrow(),\n namedImport.getName(),\n ),\n );\n if (defaultImport != null) {\n if (namedImports.length > 0) {\n // [exports, exports]\n sb.emitOp(node, 'DUP');\n }\n\n // ['default', exports]\n sb.emitPushString(node, 'default');\n // [val]\n sb.emitOp(node, 'PICKITEM');\n\n const name = defaultImport.getText();\n sb.scope.add(name);\n\n // []\n sb.scope.set(sb, node, options, name);\n }\n\n if (namedImports.length > 0) {\n for (const namedImport of namedImports) {\n // [exports, exports]\n sb.emitOp(node, 'DUP');\n // [name, exports, exports]\n sb.emitPushString(node, namedImport.getName());\n // [val, exports]\n sb.emitOp(node, 'PICKITEM');\n\n let name = namedImport.getName();\n const alias = namedImport.getAliasIdentifier();\n if (alias != null) {\n name = alias.getText();\n }\n sb.scope.add(name);\n\n // [exports]\n sb.scope.set(sb, node, options, name);\n }\n\n sb.emitOp(node, 'DROP');\n }\n }\n }\n}\n","import { SyntaxKind, TypeAliasDeclaration } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class TypeAliasDeclarationCompiler extends NodeCompiler<\n TypeAliasDeclaration\n> {\n public readonly kind: SyntaxKind = SyntaxKind.TypeAliasDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n node: TypeAliasDeclaration,\n optionsIn: VisitOptions,\n ): void {\n // do nothing\n }\n}\n","import { SyntaxKind, VariableDeclaration } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class VariableDeclarationCompiler extends NodeCompiler<\n VariableDeclaration\n> {\n public readonly kind: SyntaxKind = SyntaxKind.VariableDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n node: VariableDeclaration,\n options: VisitOptions,\n ): void {\n const name = sb.scope.add(node.getName());\n const expr = node.getInitializer();\n if (expr != null) {\n sb.visit(expr, sb.pushValueOptions(options));\n sb.scope.set(sb, node, options, name);\n }\n }\n}\n","import { SyntaxKind, VariableDeclarationList } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class VariableDeclarationListCompiler extends NodeCompiler<\n VariableDeclarationList\n> {\n public readonly kind: SyntaxKind = SyntaxKind.VariableDeclarationList;\n\n public visitNode(\n sb: ScriptBuilder,\n node: VariableDeclarationList,\n options: VisitOptions,\n ): void {\n node.getDeclarations().forEach((decl) => {\n sb.visit(decl, options);\n });\n }\n}\n","import { ClassDeclarationCompiler } from './ClassDeclarationCompiler';\nimport { EnumDeclarationCompiler } from './EnumDeclarationCompiler';\nimport { EnumMemberCompiler } from './EnumMemberCompiler';\nimport { ExportAssignmentCompiler } from './ExportAssignmentCompiler';\nimport { ExportDeclarationCompiler } from './ExportDeclarationCompiler';\nimport { FunctionDeclarationCompiler } from './FunctionDeclarationCompiler';\nimport { ImportDeclarationCompiler } from './ImportDeclarationCompiler';\nimport { TypeAliasDeclarationCompiler } from './TypeAliasDeclarationCompiler';\nimport { VariableDeclarationCompiler } from './VariableDeclarationCompiler';\nimport { VariableDeclarationListCompiler } from './VariableDeclarationListCompiler';\n\nexport default [\n ClassDeclarationCompiler,\n EnumDeclarationCompiler,\n EnumMemberCompiler,\n ExportAssignmentCompiler,\n ExportDeclarationCompiler,\n FunctionDeclarationCompiler,\n ImportDeclarationCompiler,\n TypeAliasDeclarationCompiler,\n VariableDeclarationCompiler,\n VariableDeclarationListCompiler,\n];\n","import { Decorator, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class DecoratorCompiler extends NodeCompiler<Decorator> {\n public readonly kind: SyntaxKind = SyntaxKind.Decorator;\n\n public visitNode(\n sb: ScriptBuilder,\n decl: Decorator,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(decl);\n }\n}\n","import { DecoratorCompiler } from './DecoratorCompiler';\n\nexport default [DecoratorCompiler];\n","import { ArrayLiteralExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ArrayLiteralExpressionCompiler extends NodeCompiler<\n ArrayLiteralExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ArrayLiteralExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ArrayLiteralExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n\n const elements = [...node.getElements()].reverse();\n for (const element of elements) {\n sb.visit(element, options);\n }\n // [length, ...vals]\n sb.emitPushInt(node, elements.length);\n // [valArr]\n sb.emitOp(node, 'PACK');\n // [arrayObjectVal]\n sb.emitHelper(node, options, sb.helpers.wrapArray);\n\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { ArrowFunction, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\nimport { InternalFunctionProperties } from '../helper';\n\nexport default class ArrowFunctionCompiler extends NodeCompiler<ArrowFunction> {\n public readonly kind: SyntaxKind = SyntaxKind.ArrowFunction;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ArrowFunction,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n // [this]\n sb.scope.getThis(sb, expr, options);\n // [callArray, this]\n sb.emitHelper(expr, options, sb.helpers.createCallArray);\n // [callArray]\n sb.emitHelper(\n expr,\n options,\n sb.helpers.bindFunctionThis({ overwrite: true }),\n );\n // [callObjectVal]\n sb.emitHelper(\n expr,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n }\n }\n}\n","import { AsExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nimport * as typeUtils from '../../typeUtils';\n\nexport default class AsExpressionCompiler extends NodeCompiler<AsExpression> {\n public readonly kind: SyntaxKind = SyntaxKind.AsExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: AsExpression,\n options: VisitOptions,\n ): void {\n const type = sb.getType(expr);\n if (options.cast != null && typeUtils.isAnyType(type)) {\n sb.visit(expr.getExpression(), options);\n } else {\n sb.visit(expr.getExpression(), sb.castOptions(options, type));\n }\n }\n}\n","import { AwaitExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\n\nexport default class AwaitExpressionCompiler extends NodeCompiler<\n AwaitExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.AwaitExpression;\n\n public visitNode(sb: ScriptBuilder, expr: AwaitExpression): void {\n sb.reportUnsupported(expr);\n }\n}\n","import {\n BinaryExpression,\n Node,\n Expression,\n SyntaxKind,\n ts,\n} from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nimport * as typeUtils from '../../typeUtils';\nimport { Helper } from '../helper';\nimport { TypedHelperOptions } from '../helper/common';\n\ntype ExpressionOperatorKind =\n | ts.BitwiseOperatorOrHigher\n | SyntaxKind.CommaToken;\nexport default class BinaryExpressionCompiler extends NodeCompiler<\n BinaryExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.BinaryExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: BinaryExpression,\n options: VisitOptions,\n ): void {\n const kind = expr.getOperatorToken().getKind() as ts.BinaryOperator;\n\n switch (kind) {\n case SyntaxKind.EqualsToken:\n case SyntaxKind.PlusEqualsToken:\n case SyntaxKind.MinusEqualsToken:\n case SyntaxKind.AsteriskAsteriskEqualsToken:\n case SyntaxKind.AsteriskEqualsToken:\n case SyntaxKind.SlashEqualsToken:\n case SyntaxKind.PercentEqualsToken:\n case SyntaxKind.AmpersandEqualsToken:\n case SyntaxKind.BarEqualsToken:\n case SyntaxKind.CaretEqualsToken:\n case SyntaxKind.LessThanLessThanEqualsToken:\n case SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:\n case SyntaxKind.GreaterThanGreaterThanEqualsToken:\n this.visitAssignmentOperator(sb, kind, expr, options);\n break;\n case SyntaxKind.AsteriskToken:\n case SyntaxKind.SlashToken:\n case SyntaxKind.PercentToken:\n case SyntaxKind.PlusToken:\n case SyntaxKind.MinusToken:\n case SyntaxKind.GreaterThanGreaterThanToken:\n case SyntaxKind.LessThanLessThanToken:\n case SyntaxKind.LessThanToken:\n case SyntaxKind.LessThanEqualsToken:\n case SyntaxKind.GreaterThanToken:\n case SyntaxKind.GreaterThanEqualsToken:\n case SyntaxKind.ExclamationEqualsToken:\n case SyntaxKind.EqualsEqualsToken:\n case SyntaxKind.AmpersandToken:\n case SyntaxKind.BarToken:\n case SyntaxKind.CaretToken:\n case SyntaxKind.GreaterThanGreaterThanGreaterThanToken:\n case SyntaxKind.InKeyword:\n case SyntaxKind.InstanceOfKeyword:\n case SyntaxKind.CommaToken:\n case SyntaxKind.AsteriskAsteriskToken:\n case SyntaxKind.EqualsEqualsEqualsToken:\n case SyntaxKind.ExclamationEqualsEqualsToken:\n this.visitExpressionOperator(sb, kind, expr, options);\n break;\n case SyntaxKind.AmpersandAmpersandToken:\n case SyntaxKind.BarBarToken:\n this.visitLogicalExpressionOperator(sb, kind, expr, options);\n break;\n default:\n sb.assertUnreachable(kind);\n }\n }\n\n private visitAssignmentOperator(\n sb: ScriptBuilder,\n kind: ts.AssignmentOperator,\n expr: BinaryExpression,\n options: VisitOptions,\n ): void {\n const left = expr.getLeft();\n const right = expr.getRight();\n const token = expr.getOperatorToken();\n const pushValueOptions = sb.pushValueOptions(options);\n switch (kind) {\n case SyntaxKind.EqualsToken:\n sb.visit(expr.getRight(), pushValueOptions);\n break;\n case SyntaxKind.PlusEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.PlusToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.MinusEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.MinusToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.AsteriskAsteriskEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.AsteriskAsteriskToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.AsteriskEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.AsteriskToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.SlashEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.SlashToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.PercentEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.PercentToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.AmpersandEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.AmpersandToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.BarEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.BarToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.CaretEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.CaretToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.LessThanLessThanEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.LessThanLessThanToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.GreaterThanGreaterThanGreaterThanToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.GreaterThanGreaterThanEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.GreaterThanGreaterThanToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n default:\n sb.assertUnreachable(kind);\n }\n\n sb.visit(expr.getLeft(), sb.setValueOptions(options));\n }\n\n private visitExpressionOperator(\n sb: ScriptBuilder,\n kind: ExpressionOperatorKind,\n expr: BinaryExpression,\n options: VisitOptions,\n ): void {\n this.visitExpressionOperatorBase(\n sb,\n expr.getOperatorToken(),\n kind,\n expr.getLeft(),\n expr.getRight(),\n options,\n );\n }\n\n private visitLogicalExpressionOperator(\n sb: ScriptBuilder,\n kind: ts.LogicalOperator,\n expr: BinaryExpression,\n options: VisitOptions,\n ): void {\n this.visitLogicalExpressionOperatorBase(\n sb,\n expr.getOperatorToken(),\n kind,\n expr.getLeft(),\n expr.getRight(),\n options,\n );\n }\n\n private visitExpressionOperatorBase(\n sb: ScriptBuilder,\n node: Node,\n kind: ExpressionOperatorKind,\n left: Expression,\n right: Expression,\n options: VisitOptions,\n ): void {\n if (!options.pushValue) {\n sb.visit(left, options);\n sb.visit(right, options);\n return;\n }\n\n const visit = (\n leftHelper: (options: TypedHelperOptions) => Helper<Node>,\n rightHelper?: (options: TypedHelperOptions) => Helper<Node>,\n ) => {\n sb.visit(left, options);\n sb.emitHelper(left, options, leftHelper({ type: sb.getType(left) }));\n sb.visit(right, options);\n sb.emitHelper(\n right,\n options,\n (rightHelper || leftHelper)({ type: sb.getType(right) }),\n );\n };\n\n const visitNumeric = () => visit(sb.helpers.toNumber);\n\n const leftType = sb.getType(left);\n const rightType = sb.getType(right);\n\n const isBinaryNumeric =\n typeUtils.isOnlyNumber(leftType) && typeUtils.isOnlyNumber(rightType);\n\n switch (kind) {\n case SyntaxKind.AsteriskToken:\n visitNumeric();\n sb.emitOp(node, 'MUL');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.SlashToken:\n visitNumeric();\n sb.emitOp(node, 'DIV');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.PercentToken:\n visitNumeric();\n sb.emitOp(node, 'MOD');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.PlusToken:\n if (isBinaryNumeric) {\n visitNumeric();\n sb.emitOp(node, 'ADD');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n } else if (\n typeUtils.isOnlyString(leftType) &&\n typeUtils.isOnlyString(rightType)\n ) {\n visit(() => sb.helpers.getString);\n sb.emitOp(node, 'CAT');\n sb.emitHelper(node, options, sb.helpers.createString);\n } else if (typeUtils.isOnlyString(leftType)) {\n visit(() => sb.helpers.getString, sb.helpers.toString);\n sb.emitOp(node, 'CAT');\n sb.emitHelper(node, options, sb.helpers.createString);\n } else if (typeUtils.isOnlyString(rightType)) {\n visit(sb.helpers.toString, () => sb.helpers.getString);\n sb.emitOp(node, 'CAT');\n sb.emitHelper(node, options, sb.helpers.createString);\n } else {\n // [right, left]\n visit(sb.helpers.toPrimitive);\n // [left, right]\n sb.emitOp(node, 'SWAP');\n // [left, right, left]\n sb.emitOp(node, 'TUCK');\n // [right, left, right, left]\n sb.emitOp(node, 'TUCK');\n // [isString, left, right, left]\n sb.emitHelper(node, options, sb.helpers.isString);\n // [left, isString, right, left]\n sb.emitOp(node, 'SWAP');\n // [isString, isString, right, left]\n sb.emitHelper(node, options, sb.helpers.isString);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [isEitherString, right, left]\n sb.emitOp(node, 'BOOLOR');\n },\n whenTrue: () => {\n // [string0, left]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toString({ type: sb.getType(right) }),\n );\n // [left, string0]\n sb.emitOp(node, 'SWAP');\n // [string1, string0]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toString({ type: sb.getType(left) }),\n );\n // [string0, string1]\n sb.emitOp(node, 'SWAP');\n // [string]\n sb.emitOp(node, 'CAT');\n // [string]\n sb.emitHelper(node, options, sb.helpers.createString);\n },\n whenFalse: () => {\n // [number0, left]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toNumber({ type: sb.getType(right) }),\n );\n // [left, number0]\n sb.emitOp(node, 'SWAP');\n // [number1, number0]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toNumber({ type: sb.getType(left) }),\n );\n // [number0, number1]\n sb.emitOp(node, 'SWAP');\n // [number]\n sb.emitOp(node, 'ADD');\n // [number]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n },\n }),\n );\n }\n break;\n case SyntaxKind.MinusToken:\n visitNumeric();\n sb.emitOp(node, 'SUB');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.GreaterThanGreaterThanToken:\n visitNumeric();\n sb.emitOp(node, 'SHR');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.GreaterThanGreaterThanGreaterThanToken:\n visitNumeric();\n sb.emitOp(node, 'SHR');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.LessThanLessThanToken:\n visitNumeric();\n sb.emitOp(node, 'SHL');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.LessThanToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.lessThan({ leftFirst: true, left, right }),\n );\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.LessThanEqualsToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.lessThan({ leftFirst: false, left: right, right: left }),\n );\n sb.emitOp(node, 'NOT');\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.GreaterThanToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.lessThan({ leftFirst: false, left: right, right: left }),\n );\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.GreaterThanEqualsToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.lessThan({ leftFirst: true, left, right }),\n );\n sb.emitOp(node, 'NOT');\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.ExclamationEqualsToken:\n sb.emitHelper(node, options, sb.helpers.equalsEquals({ left, right }));\n sb.emitOp(node, 'NOT');\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.EqualsEqualsToken:\n sb.emitHelper(node, options, sb.helpers.equalsEquals({ left, right }));\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.AmpersandToken:\n visitNumeric();\n sb.emitOp(node, 'AND');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.BarToken:\n visitNumeric();\n sb.emitOp(node, 'OR');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.CaretToken:\n visitNumeric();\n sb.emitOp(node, 'XOR');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.InKeyword:\n sb.reportUnsupported(node);\n break;\n case SyntaxKind.InstanceOfKeyword:\n // [left]\n sb.visit(left, options);\n // [right, left]\n sb.visit(right, options);\n // [left instanceof right]\n sb.emitHelper(node, options, sb.helpers.instanceof);\n // [booleanVal]\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.CommaToken:\n sb.emitOp(node, 'DROP');\n break;\n case SyntaxKind.AsteriskAsteriskToken:\n sb.reportUnsupported(node);\n break;\n case SyntaxKind.EqualsEqualsEqualsToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.equalsEqualsEquals({ left, right }),\n );\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.ExclamationEqualsEqualsToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.equalsEqualsEquals({ left, right }),\n );\n sb.emitOp(node, 'NOT');\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n default:\n sb.assertUnreachable(kind);\n }\n }\n\n private visitLogicalExpressionOperatorBase(\n sb: ScriptBuilder,\n node: Node,\n kind: ts.LogicalOperator,\n left: Expression,\n right: Expression,\n options: VisitOptions,\n ): void {\n switch (kind) {\n case SyntaxKind.AmpersandAmpersandToken: {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [left]\n sb.visit(left, sb.pushValueOptions(options));\n if (options.pushValue) {\n // [left, left]\n sb.emitOp(left, 'DUP');\n }\n // [leftBoolean, ?left]\n sb.emitHelper(\n left,\n sb.pushValueOptions(options),\n sb.helpers.toBoolean({ type: sb.getType(left) }),\n );\n },\n whenTrue: () => {\n if (options.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n sb.visit(right, options);\n },\n }),\n );\n break;\n }\n case SyntaxKind.BarBarToken: {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [left]\n sb.visit(left, sb.pushValueOptions(options));\n if (options.pushValue) {\n // [left, left]\n sb.emitOp(left, 'DUP');\n }\n // [leftBoolean, ?left]\n sb.emitHelper(\n left,\n sb.pushValueOptions(options),\n sb.helpers.toBoolean({ type: sb.getType(left) }),\n );\n },\n whenFalse: () => {\n if (options.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n sb.visit(right, options);\n },\n }),\n );\n break;\n }\n default:\n sb.assertUnreachable(kind);\n }\n }\n}\n","import { BooleanLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport abstract class BooleanLiteralCompiler extends NodeCompiler<\n BooleanLiteral\n> {\n protected abstract value: boolean;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: BooleanLiteral,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitPushBoolean(expr, this.value);\n sb.emitHelper(expr, options, sb.helpers.createBoolean);\n }\n }\n}\n\nexport class TrueBooleanLiteralCompiler extends BooleanLiteralCompiler {\n public readonly kind: SyntaxKind = SyntaxKind.TrueKeyword;\n protected value = true;\n}\n\nexport class FalseBooleanLiteralCompiler extends BooleanLiteralCompiler {\n public readonly kind: SyntaxKind = SyntaxKind.FalseKeyword;\n protected value = false;\n}\n","import { SysCallName } from '@neo-one/client-core';\nimport { ScriptBuilder } from './sb';\nimport { CallExpression, Node, Type, ts } from 'ts-simple-ast';\nimport { VisitOptions } from './types';\n\nimport * as typeUtils from '../typeUtils';\nimport { DiagnosticCode } from '../DiagnosticCode';\nimport { BlockchainInterfaceName } from './helper/blockchain';\nimport { serializeType, SerializableType, deserializeType } from './helper';\n\nexport interface SysCallType {\n name: string;\n\n toSignature(): string;\n handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n ): void;\n handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n ): void;\n}\n\nabstract class SimpleSysCallType implements SysCallType {\n public abstract name: string;\n\n public abstract isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean;\n public abstract isType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean;\n public abstract isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void;\n public abstract handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native?: boolean,\n ): void;\n public abstract handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native?: boolean,\n ): void;\n\n public toSignature(): string {\n return this.name;\n }\n}\n\nclass VoidClass extends SimpleSysCallType {\n public name: string = 'void';\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return false;\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return false;\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n throw new Error('Should not check void at runtime');\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n ): void {\n throw new Error('void should not be an argument');\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n }\n}\n\nconst VoidValue = new VoidClass();\n\nclass NumberClass extends SimpleSysCallType {\n public name: string = 'number';\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return typeUtils.isOnlyNumber(type);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return typeUtils.isNumber(type);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.isNumber);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.getNumber);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.createNumber);\n }\n }\n}\n\nconst NumberValue = new NumberClass();\n\nclass StringClass extends SimpleSysCallType {\n public name: string = 'string';\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return typeUtils.isOnlyString(type);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return typeUtils.isString(type);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.isString);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.getString);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.createString);\n }\n }\n}\n\nconst StringValue = new StringClass();\n\nclass BooleanClass extends SimpleSysCallType {\n public name: string = 'boolean';\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return typeUtils.isOnlyBoolean(type);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return typeUtils.isBoolean(type);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.isBoolean);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n }\n }\n}\n\nconst BooleanValue = new BooleanClass();\n\nclass BlockchainInterface extends SimpleSysCallType {\n public name: BlockchainInterfaceName;\n\n constructor(name: BlockchainInterfaceName) {\n super();\n this.name = name;\n }\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return sb.isOnlyGlobal(node, type, this.name);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return sb.isGlobal(node, type, this.name);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.isBlockchainInterface({ name: this.name }),\n );\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (native) {\n throw new Error(\n 'BlockchainInterface should not be serialized/deserialized from storage',\n );\n }\n sb.emitHelper(node, options, sb.helpers.unwrapBlockchainInterface);\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (native) {\n throw new Error(\n 'BlockchainInterface should not be serialized/deserialized from storage',\n );\n }\n sb.emitHelper(\n node,\n options,\n sb.helpers.wrapBlockchainInterface({ name: this.name }),\n );\n }\n}\n\nconst AccountValue = new BlockchainInterface('AccountBase');\nconst AssetValue = new BlockchainInterface('AssetBase');\nconst AttributeValue = new BlockchainInterface('AttributeBase');\nconst BlockValue = new BlockchainInterface('BlockBase');\nconst ContractValue = new BlockchainInterface('ContractBase');\nconst HeaderValue = new BlockchainInterface('HeaderBase');\nconst InputValue = new BlockchainInterface('InputBase');\nconst OutputValue = new BlockchainInterface('OutputBase');\nconst TransactionValue = new BlockchainInterface('TransactionBase');\nconst ValidatorValue = new BlockchainInterface('ValidatorBase');\nconst StorageContextValue = new BlockchainInterface('StorageContextBase');\nconst StorageIteratorValue = new BlockchainInterface('StorageIteratorBase');\n\nexport const BLOCKCHAIN_INTERFACES = [\n AccountValue,\n AssetValue,\n AttributeValue,\n BlockValue,\n ContractValue,\n HeaderValue,\n InputValue,\n OutputValue,\n TransactionValue,\n ValidatorValue,\n StorageContextValue,\n StorageIteratorValue,\n].map((value) => value.name);\n\nclass BufferClass extends SimpleSysCallType {\n public name: 'Buffer' = 'Buffer';\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return sb.isOnlyGlobal(node, type, this.name);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return sb.isGlobal(node, type, this.name);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: this.name }),\n );\n sb.emitHelper(node, options, sb.helpers.instanceof);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n sb.emitHelper(node, options, sb.helpers.unwrapBuffer);\n if (native) {\n serializeType(sb, node, options, SerializableType.Buffer);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (native) {\n deserializeType(sb, node, options);\n }\n sb.emitHelper(node, options, sb.helpers.wrapBuffer);\n }\n}\n\nconst BufferValue = new BufferClass();\n\nclass ArrayValue extends SimpleSysCallType {\n public readonly name: string;\n private readonly valueType: () => SimpleSysCallType;\n\n constructor(valueType: SimpleSysCallType | (() => SimpleSysCallType)) {\n super();\n this.name = `Array<${valueType.name}>`;\n this.valueType =\n typeof valueType === 'function' ? valueType : () => valueType;\n }\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return (\n typeUtils.isOnlyArray(type) &&\n !typeUtils.isOnlyTuple(type) &&\n type != null &&\n this.valueType().isOnlyType(sb, node, type.getArrayType())\n );\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return (\n typeUtils.isArray(type) &&\n !typeUtils.isTuple(type) &&\n type != null &&\n this.valueType().isType(sb, node, type.getArrayType())\n );\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n sb.emitHelper(node, options, sb.helpers.instanceof);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n sb.emitHelper(node, options, sb.helpers.unwrapArray);\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrMap({\n map: () => {\n this.valueType().handleArgument(\n sb,\n node,\n options,\n type == null ? type : type.getArrayType(),\n native,\n );\n },\n }),\n );\n if (native) {\n serializeType(sb, node, options, SerializableType.Array);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type,\n native: boolean = false,\n ): void {\n if (native) {\n deserializeType(sb, node, options);\n }\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrMap({\n map: () => {\n this.valueType().handleResult(\n sb,\n node,\n options,\n type == null ? type : type.getArrayType(),\n native,\n );\n },\n }),\n );\n sb.emitHelper(node, options, sb.helpers.wrapArray);\n }\n}\n\nclass TupleValue extends SimpleSysCallType {\n public readonly name: string;\n private readonly valueType: () => SimpleSysCallType;\n\n constructor(valueType: SimpleSysCallType | (() => SimpleSysCallType)) {\n super();\n this.name = 'any';\n this.valueType =\n typeof valueType === 'function' ? valueType : () => valueType;\n }\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return (\n typeUtils.isOnlyTuple(type) &&\n type != null &&\n type\n .getTupleElements()\n .every((tupleType) => this.valueType().isOnlyType(sb, node, tupleType))\n );\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return (\n typeUtils.isTuple(type) &&\n type != null &&\n type\n .getTupleElements()\n .every((tupleType) => this.valueType().isType(sb, node, tupleType))\n );\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n sb.emitHelper(node, options, sb.helpers.instanceof);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n throw new Error('Not Implemented');\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type,\n native: boolean = false,\n ): void {\n if (type == null) {\n sb.reportError(\n node,\n 'Syscall return type must be explicitly casted to expected type.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n } else {\n // [length, ...value]\n sb.emitOp(node, 'UNPACK');\n // [...value]\n sb.emitOp(node, 'DROP');\n // [0, ...value]\n sb.emitPushInt(node, 0);\n // [arr, ...value]\n sb.emitOp(node, 'NEWARRAY');\n for (const tupleType of type.getTupleElements()) {\n // [arr, arr, ...value]\n sb.emitOp(node, 'DUP');\n // [value, arr, arr, ...value]\n sb.emitOp(node, 'ROT');\n // [val, arr, arr, ...value]\n this.valueType().handleResult(sb, node, options, tupleType, native);\n // [arr, ...value]\n sb.emitOp(node, 'APPEND');\n }\n // [arrayObjectValue]\n sb.emitHelper(node, options, sb.helpers.wrapArray);\n }\n }\n}\n\nclass UnionValue extends SimpleSysCallType {\n public readonly name: string;\n private readonly valueTypes: SimpleSysCallType[];\n\n constructor(valueTypes: SimpleSysCallType[]) {\n super();\n this.name = valueTypes.map((valueType) => valueType.name).join(' | ');\n this.valueTypes = valueTypes;\n }\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return (\n (typeUtils.isUnion(type) &&\n type != null &&\n type\n .getUnionTypes()\n .every((unionType) =>\n this.valueTypes.some((valueType) =>\n valueType.isOnlyType(sb, node, unionType),\n ),\n )) ||\n (!typeUtils.isUnion(type) &&\n type != null &&\n this.valueTypes.some((valueType) =>\n valueType.isOnlyType(sb, node, type),\n ))\n );\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return (\n (typeUtils.isUnion(type) &&\n type != null &&\n type\n .getUnionTypes()\n .every((unionType) =>\n this.valueTypes.some((valueType) =>\n valueType.isType(sb, node, unionType),\n ),\n )) ||\n (!typeUtils.isUnion(type) &&\n type != null &&\n this.valueTypes.some((valueType) => valueType.isType(sb, node, type)))\n );\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n throw new Error('Union should not be checked at runtime');\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n const foundType = this.valueTypes.find((valueType) =>\n valueType.isOnlyType(sb, node, type),\n );\n if (foundType == null) {\n if (native) {\n sb.emitHelper(node, options, sb.helpers.genericSerialize);\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.forType({\n types: this.valueTypes.map((valueType) => ({\n isType: (innerType: Type | undefined) =>\n valueType.isType(sb, node, innerType),\n isRuntimeType: (innerOptions: VisitOptions) =>\n valueType.isRuntimeType(sb, node, innerOptions),\n process: (innerOptions: VisitOptions) =>\n valueType.handleArgument(sb, node, innerOptions, type, native),\n })),\n }),\n );\n }\n } else {\n foundType.handleArgument(sb, node, options, type, native);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n const foundType = this.valueTypes.find((valueType) =>\n valueType.isOnlyType(sb, node, type),\n );\n if (foundType == null) {\n if (native) {\n sb.emitHelper(node, options, sb.helpers.genericDeserialize);\n } else {\n sb.reportError(\n node,\n 'Syscall return type must be explicitly casted to expected type.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n }\n } else {\n foundType.handleResult(sb, node, options, type, native);\n }\n }\n}\n\nconst StorageKey = new UnionValue([BufferValue, StringValue]);\n\nconst StorageValue = new UnionValue([\n BufferValue,\n NumberValue,\n StringValue,\n BooleanValue,\n]);\n\nexport class TypeAlias {\n constructor(\n private readonly name: string,\n private readonly declaration: string,\n ) {\n this.name = name;\n this.declaration = declaration;\n }\n\n public toSignature(): string {\n return this.name;\n }\n\n public toDeclaration(): string {\n return this.declaration;\n }\n}\n\nconst SerializableValueArrayAlias = new TypeAlias(\n 'SerializableValueArray',\n 'interface SerializableValueArray extends Array<SerializableValue> { }',\n);\nconst SerializableValueObjectAlias = new TypeAlias(\n 'SerializableValueObject',\n `interface SerializableValueObject {\n [key: string]: SerializableValue;\n}`,\n);\nconst SerializableValueAlias = new TypeAlias(\n 'SerializableValue',\n 'type SerializableValue = undefined | number | string | boolean | Buffer | ' +\n `${SerializableValueArrayAlias.toSignature()} | ${SerializableValueObjectAlias.toSignature()}`,\n);\n\nexport const TYPE_ALIASES: TypeAlias[] = [\n SerializableValueArrayAlias,\n SerializableValueObjectAlias,\n SerializableValueAlias,\n];\n\nclass Serializable extends SimpleSysCallType {\n public readonly name: string;\n\n constructor(\n private readonly shouldSerialize: boolean = false,\n private readonly shouldHandleNull: boolean = false,\n ) {\n super();\n this.name = SerializableValueAlias.toSignature();\n }\n\n get type(): SimpleSysCallType {\n return new UnionValue([\n BooleanValue,\n StringValue,\n NumberValue,\n BufferValue,\n new ArrayValue(() => this.type),\n ]);\n }\n\n public toDeclaration(): string {\n return SerializableValueAlias.toDeclaration();\n }\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return this.type.isOnlyType(sb, node, type);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return this.type.isType(sb, node, type);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n this.type.isRuntimeType(sb, node, options);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n ): void {\n this.type.handleArgument(sb, node, options, type, true);\n\n if (this.shouldSerialize) {\n sb.emitSysCall(node, 'Neo.Runtime.Serialize');\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n typeIn?: Type<ts.Type>,\n ): void {\n let type = typeIn;\n if (\n type != null &&\n this.shouldHandleNull &&\n type.isUnionType() &&\n type\n .getUnionTypes()\n .some((unionType) => typeUtils.isOnlyUndefined(unionType))\n ) {\n type = type\n .getUnionTypes()\n .find((unionType) => !typeUtils.isOnlyUndefined(unionType));\n }\n\n const handleValue = () => {\n if (this.shouldSerialize) {\n sb.emitSysCall(node, 'Neo.Runtime.Deserialize');\n }\n\n this.type.handleResult(sb, node, options, type, true);\n };\n\n if (this.shouldHandleNull) {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [length, value]\n sb.emitOp(node, 'SIZE');\n // [0, length, value]\n sb.emitPushInt(node, 0);\n // [length === 0, value]\n sb.emitOp(node, 'NUMEQUAL');\n },\n whenTrue: () => {\n // []\n sb.emitOp(node, 'DROP');\n // [val]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n },\n whenFalse: () => {\n handleValue();\n },\n }),\n );\n } else {\n handleValue();\n }\n }\n\n public addSerialize(): Serializable {\n return new Serializable(true, this.shouldHandleNull);\n }\n\n public handleNull(): Serializable {\n return new Serializable(this.shouldSerialize, true);\n }\n}\n\nconst SerializableValue = new Serializable();\n\nexport class SysCallArgument {\n private readonly name: string;\n private readonly type: SysCallType;\n\n constructor(name: string, type: SysCallType) {\n this.name = name;\n this.type = type;\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n ): void {\n this.type.handleArgument(sb, node, options, type);\n }\n\n public toSignature(): string {\n return `${this.name}: ${this.type.toSignature()}`;\n }\n}\n\nexport interface SysCall {\n name: string;\n toDeclaration(): string;\n handleCall(\n sb: ScriptBuilder,\n node: CallExpression,\n options: VisitOptions,\n ): void;\n}\n\nexport interface SimpleSysCallOptions {\n name: SysCallName;\n args?: SysCallArgument[];\n returnType?: SysCallType;\n}\n\nexport class SimpleSysCall implements SysCall {\n public readonly name: SysCallName;\n private readonly args: SysCallArgument[];\n private readonly returnType: SysCallType;\n\n constructor(options: SimpleSysCallOptions) {\n this.name = options.name;\n this.args = options.args || [];\n this.returnType = options.returnType || VoidValue;\n }\n\n public toDeclaration(): string {\n const args = [`name: '${this.name}'`].concat(\n this.args.map((arg) => arg.toSignature()),\n );\n return `function syscall(${args.join(\n ', ',\n )}): ${this.returnType.toSignature()};`;\n }\n\n public handleCall(\n sb: ScriptBuilder,\n node: CallExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n const args = [...node.getArguments().slice(1)].reverse();\n for (const [idx, arg] of args.entries()) {\n sb.visit(arg, options);\n this.args[args.length - idx - 1].handleArgument(\n sb,\n arg,\n options,\n sb.getType(arg),\n );\n }\n\n sb.emitSysCall(node, this.name);\n\n if (optionsIn.pushValue) {\n this.returnType.handleResult(sb, node, options, optionsIn.cast);\n } else if (this.returnType !== VoidValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n}\n\nexport const SYSCALLS = {\n 'Neo.Runtime.GetTrigger': new SimpleSysCall({\n name: 'Neo.Runtime.GetTrigger',\n returnType: NumberValue,\n }),\n 'Neo.Runtime.CheckWitness': new SimpleSysCall({\n name: 'Neo.Runtime.CheckWitness',\n args: [new SysCallArgument('witness', BufferValue)],\n returnType: BooleanValue,\n }),\n 'Neo.Runtime.Notify': (() => {\n const name = 'Neo.Runtime.Notify';\n const valueType = new UnionValue([\n BufferValue,\n NumberValue,\n StringValue,\n BooleanValue,\n ]);\n const arrayType = new ArrayValue(valueType);\n const returnType = VoidValue;\n return {\n name,\n toDeclaration(): string {\n const sig = arrayType.toSignature();\n return `function syscall(name: '${name}', ...args: ${sig}): ${returnType.toSignature()};`;\n },\n handleCall(\n sb: ScriptBuilder,\n node: CallExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n const args = [...node.getArguments().slice(1)].reverse();\n for (const arg of args) {\n sb.visit(arg, options);\n valueType.handleArgument(sb, arg, options, sb.getType(arg));\n }\n\n // [length, ...]\n sb.emitPushInt(node, args.length);\n // [arr]\n sb.emitOp(node, 'PACK');\n\n sb.emitSysCall(node, name);\n\n if (optionsIn.pushValue) {\n returnType.handleResult(sb, node, options, optionsIn.cast);\n }\n },\n };\n })(),\n 'Neo.Runtime.Log': new SimpleSysCall({\n name: 'Neo.Runtime.Log',\n args: [new SysCallArgument('value', StringValue)],\n }),\n 'Neo.Runtime.GetTime': new SimpleSysCall({\n name: 'Neo.Runtime.GetTime',\n returnType: NumberValue,\n }),\n 'Neo.Runtime.Serialize': new SimpleSysCall({\n name: 'Neo.Runtime.Serialize',\n args: [new SysCallArgument('value', SerializableValue)],\n returnType: BufferValue,\n }),\n 'Neo.Runtime.Deserialize': new SimpleSysCall({\n name: 'Neo.Runtime.Deserialize',\n args: [new SysCallArgument('value', BufferValue)],\n returnType: SerializableValue,\n }),\n 'Neo.Blockchain.GetHeight': new SimpleSysCall({\n name: 'Neo.Blockchain.GetHeight',\n returnType: NumberValue,\n }),\n 'Neo.Blockchain.GetHeader': new SimpleSysCall({\n name: 'Neo.Blockchain.GetHeader',\n args: [\n new SysCallArgument(\n 'hashOrIndex',\n new UnionValue([BufferValue, NumberValue]),\n ),\n ],\n returnType: HeaderValue,\n }),\n 'Neo.Blockchain.GetBlock': new SimpleSysCall({\n name: 'Neo.Blockchain.GetBlock',\n args: [\n new SysCallArgument(\n 'hashOrIndex',\n new UnionValue([BufferValue, NumberValue]),\n ),\n ],\n returnType: BlockValue,\n }),\n 'Neo.Blockchain.GetTransaction': new SimpleSysCall({\n name: 'Neo.Blockchain.GetTransaction',\n args: [new SysCallArgument('hash', BufferValue)],\n returnType: TransactionValue,\n }),\n 'Neo.Blockchain.GetAccount': new SimpleSysCall({\n name: 'Neo.Blockchain.GetAccount',\n args: [new SysCallArgument('hash', BufferValue)],\n returnType: AccountValue,\n }),\n 'Neo.Blockchain.GetValidators': new SimpleSysCall({\n name: 'Neo.Blockchain.GetValidators',\n returnType: new ArrayValue(BufferValue),\n }),\n 'Neo.Blockchain.GetAsset': new SimpleSysCall({\n name: 'Neo.Blockchain.GetAsset',\n args: [new SysCallArgument('hash', BufferValue)],\n returnType: AssetValue,\n }),\n 'Neo.Blockchain.GetContract': new SimpleSysCall({\n name: 'Neo.Blockchain.GetContract',\n args: [new SysCallArgument('hash', BufferValue)],\n returnType: ContractValue,\n }),\n 'Neo.Header.GetHash': new SimpleSysCall({\n name: 'Neo.Header.GetHash',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: BufferValue,\n }),\n 'Neo.Header.GetVersion': new SimpleSysCall({\n name: 'Neo.Header.GetVersion',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Header.GetPrevHash': new SimpleSysCall({\n name: 'Neo.Header.GetPrevHash',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: BufferValue,\n }),\n 'Neo.Header.GetIndex': new SimpleSysCall({\n name: 'Neo.Header.GetIndex',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Header.GetMerkleRoot': new SimpleSysCall({\n name: 'Neo.Header.GetMerkleRoot',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: BufferValue,\n }),\n 'Neo.Header.GetTimestamp': new SimpleSysCall({\n name: 'Neo.Header.GetTimestamp',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Header.GetConsensusData': new SimpleSysCall({\n name: 'Neo.Header.GetConsensusData',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Header.GetNextConsensus': new SimpleSysCall({\n name: 'Neo.Header.GetNextConsensus',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: BufferValue,\n }),\n 'Neo.Block.GetTransactionCount': new SimpleSysCall({\n name: 'Neo.Block.GetTransactionCount',\n args: [new SysCallArgument('block', BlockValue)],\n returnType: NumberValue,\n }),\n 'Neo.Block.GetTransactions': new SimpleSysCall({\n name: 'Neo.Block.GetTransactions',\n args: [new SysCallArgument('block', BlockValue)],\n returnType: new ArrayValue(TransactionValue),\n }),\n 'Neo.Block.GetTransaction': new SimpleSysCall({\n name: 'Neo.Block.GetTransaction',\n args: [\n new SysCallArgument('block', BlockValue),\n new SysCallArgument('index', NumberValue),\n ],\n returnType: TransactionValue,\n }),\n 'Neo.Transaction.GetHash': new SimpleSysCall({\n name: 'Neo.Transaction.GetHash',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: BufferValue,\n }),\n 'Neo.Transaction.GetType': new SimpleSysCall({\n name: 'Neo.Transaction.GetType',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: NumberValue,\n }),\n 'Neo.Transaction.GetAttributes': new SimpleSysCall({\n name: 'Neo.Transaction.GetAttributes',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: new ArrayValue(AttributeValue),\n }),\n 'Neo.Transaction.GetInputs': new SimpleSysCall({\n name: 'Neo.Transaction.GetInputs',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: new ArrayValue(InputValue),\n }),\n 'Neo.Transaction.GetOutputs': new SimpleSysCall({\n name: 'Neo.Transaction.GetOutputs',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: new ArrayValue(OutputValue),\n }),\n 'Neo.Transaction.GetReferences': new SimpleSysCall({\n name: 'Neo.Transaction.GetReferences',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: new ArrayValue(OutputValue),\n }),\n 'Neo.Transaction.GetUnspentCoins': new SimpleSysCall({\n name: 'Neo.Transaction.GetUnspentCoins',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: new ArrayValue(OutputValue),\n }),\n 'Neo.InvocationTransaction.GetScript': new SimpleSysCall({\n name: 'Neo.InvocationTransaction.GetScript',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: BufferValue,\n }),\n 'Neo.Attribute.GetUsage': new SimpleSysCall({\n name: 'Neo.Attribute.GetUsage',\n args: [new SysCallArgument('attribute', AttributeValue)],\n returnType: NumberValue,\n }),\n 'Neo.Attribute.GetData': new SimpleSysCall({\n name: 'Neo.Attribute.GetData',\n args: [new SysCallArgument('attribute', AttributeValue)],\n returnType: BufferValue,\n }),\n 'Neo.Input.GetHash': new SimpleSysCall({\n name: 'Neo.Input.GetHash',\n args: [new SysCallArgument('input', InputValue)],\n returnType: BufferValue,\n }),\n 'Neo.Input.GetIndex': new SimpleSysCall({\n name: 'Neo.Input.GetIndex',\n args: [new SysCallArgument('input', InputValue)],\n returnType: NumberValue,\n }),\n 'Neo.Output.GetAssetId': new SimpleSysCall({\n name: 'Neo.Output.GetAssetId',\n args: [new SysCallArgument('output', OutputValue)],\n returnType: BufferValue,\n }),\n 'Neo.Output.GetValue': new SimpleSysCall({\n name: 'Neo.Output.GetValue',\n args: [new SysCallArgument('output', OutputValue)],\n returnType: NumberValue,\n }),\n 'Neo.Output.GetScriptHash': new SimpleSysCall({\n name: 'Neo.Output.GetScriptHash',\n args: [new SysCallArgument('output', OutputValue)],\n returnType: BufferValue,\n }),\n 'Neo.Account.GetScriptHash': new SimpleSysCall({\n name: 'Neo.Account.GetScriptHash',\n args: [new SysCallArgument('account', AccountValue)],\n returnType: BufferValue,\n }),\n 'Neo.Account.GetVotes': new SimpleSysCall({\n name: 'Neo.Account.GetVotes',\n args: [new SysCallArgument('account', AccountValue)],\n returnType: new ArrayValue(BufferValue),\n }),\n 'Neo.Account.GetBalance': new SimpleSysCall({\n name: 'Neo.Account.GetBalance',\n args: [\n new SysCallArgument('account', AccountValue),\n new SysCallArgument('assetHash', BufferValue),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Asset.GetAssetId': new SimpleSysCall({\n name: 'Neo.Asset.GetAssetId',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: BufferValue,\n }),\n 'Neo.Asset.GetAssetType': new SimpleSysCall({\n name: 'Neo.Asset.GetAssetType',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: NumberValue,\n }),\n 'Neo.Asset.GetAmount': new SimpleSysCall({\n name: 'Neo.Asset.GetAmount',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: NumberValue,\n }),\n 'Neo.Asset.GetAvailable': new SimpleSysCall({\n name: 'Neo.Asset.GetAvailable',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: NumberValue,\n }),\n 'Neo.Asset.GetPrecision': new SimpleSysCall({\n name: 'Neo.Asset.GetPrecision',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: NumberValue,\n }),\n 'Neo.Asset.GetOwner': new SimpleSysCall({\n name: 'Neo.Asset.GetOwner',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: BufferValue,\n }),\n 'Neo.Asset.GetAdmin': new SimpleSysCall({\n name: 'Neo.Asset.GetAdmin',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: BufferValue,\n }),\n 'Neo.Asset.GetIssuer': new SimpleSysCall({\n name: 'Neo.Asset.GetIssuer',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: BufferValue,\n }),\n 'Neo.Contract.GetScript': new SimpleSysCall({\n name: 'Neo.Contract.GetScript',\n args: [new SysCallArgument('contract', ContractValue)],\n returnType: BufferValue,\n }),\n 'Neo.Storage.GetContext': new SimpleSysCall({\n name: 'Neo.Storage.GetContext',\n returnType: StorageContextValue,\n }),\n 'Neo.Storage.Get': new SimpleSysCall({\n name: 'Neo.Storage.Get',\n args: [\n new SysCallArgument('context', StorageContextValue),\n new SysCallArgument('key', StorageKey),\n ],\n returnType: SerializableValue.addSerialize().handleNull(),\n }),\n 'Neo.Storage.Find': new SimpleSysCall({\n name: 'Neo.Storage.Find',\n args: [\n new SysCallArgument('context', StorageContextValue),\n new SysCallArgument('prefix', StorageKey),\n ],\n returnType: StorageIteratorValue,\n }),\n 'Neo.Iterator.Next': new SimpleSysCall({\n name: 'Neo.Iterator.Next',\n args: [new SysCallArgument('iterator', StorageIteratorValue)],\n returnType: BooleanValue,\n }),\n 'Neo.Iterator.Key': new SimpleSysCall({\n name: 'Neo.Iterator.Key',\n args: [new SysCallArgument('iterator', StorageIteratorValue)],\n returnType: StorageKey,\n }),\n 'Neo.Iterator.Value': new SimpleSysCall({\n name: 'Neo.Iterator.Value',\n args: [new SysCallArgument('iterator', StorageIteratorValue)],\n returnType: StorageValue,\n }),\n 'Neo.Account.SetVotes': new SimpleSysCall({\n name: 'Neo.Account.SetVotes',\n args: [\n new SysCallArgument('account', AccountValue),\n new SysCallArgument('votes', new ArrayValue(BufferValue)),\n ],\n }),\n 'Neo.Validator.Register': new SimpleSysCall({\n name: 'Neo.Validator.Register',\n args: [new SysCallArgument('publicKey', BufferValue)],\n returnType: ValidatorValue,\n }),\n 'Neo.Asset.Create': new SimpleSysCall({\n name: 'Neo.Asset.Create',\n args: [\n new SysCallArgument('assetType', NumberValue),\n new SysCallArgument('assetName', StringValue),\n new SysCallArgument('amount', NumberValue),\n new SysCallArgument('precision', NumberValue),\n new SysCallArgument('owner', BufferValue),\n new SysCallArgument('admin', BufferValue),\n new SysCallArgument('issuer', BufferValue),\n ],\n returnType: AssetValue,\n }),\n 'Neo.Asset.Renew': new SimpleSysCall({\n name: 'Neo.Asset.Renew',\n args: [\n new SysCallArgument('asset', AssetValue),\n new SysCallArgument('years', NumberValue),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Contract.Create': new SimpleSysCall({\n name: 'Neo.Contract.Create',\n args: [\n new SysCallArgument('script', BufferValue),\n new SysCallArgument('parameterList', BufferValue),\n new SysCallArgument('returnType', NumberValue),\n new SysCallArgument('properties', NumberValue),\n new SysCallArgument('contractName', StringValue),\n new SysCallArgument('codeVersion', StringValue),\n new SysCallArgument('author', StringValue),\n new SysCallArgument('email', StringValue),\n new SysCallArgument('description', StringValue),\n ],\n returnType: ContractValue,\n }),\n 'Neo.Contract.Migrate': new SimpleSysCall({\n name: 'Neo.Contract.Migrate',\n args: [\n new SysCallArgument('script', BufferValue),\n new SysCallArgument('parameterList', BufferValue),\n new SysCallArgument('returnType', NumberValue),\n new SysCallArgument('properties', NumberValue),\n new SysCallArgument('contractName', StringValue),\n new SysCallArgument('codeVersion', StringValue),\n new SysCallArgument('author', StringValue),\n new SysCallArgument('email', StringValue),\n new SysCallArgument('description', StringValue),\n ],\n returnType: ContractValue,\n }),\n 'Neo.Contract.GetStorageContext': new SimpleSysCall({\n name: 'Neo.Contract.GetStorageContext',\n args: [new SysCallArgument('contract', ContractValue)],\n returnType: StorageContextValue,\n }),\n 'Neo.Contract.Destroy': new SimpleSysCall({\n name: 'Neo.Contract.Destroy',\n }),\n 'Neo.Storage.Put': new SimpleSysCall({\n name: 'Neo.Storage.Put',\n args: [\n new SysCallArgument('context', StorageContextValue),\n new SysCallArgument('key', StorageKey),\n new SysCallArgument('value', SerializableValue.addSerialize()),\n ],\n }),\n 'Neo.Storage.Delete': new SimpleSysCall({\n name: 'Neo.Storage.Delete',\n args: [\n new SysCallArgument('context', StorageContextValue),\n new SysCallArgument('key', StorageKey),\n ],\n }),\n 'System.ExecutionEngine.GetScriptContainer': new SimpleSysCall({\n name: 'System.ExecutionEngine.GetScriptContainer',\n returnType: TransactionValue,\n }),\n 'System.ExecutionEngine.GetExecutingScriptHash': new SimpleSysCall({\n name: 'System.ExecutionEngine.GetExecutingScriptHash',\n returnType: BufferValue,\n }),\n 'System.ExecutionEngine.GetCallingScriptHash': new SimpleSysCall({\n name: 'System.ExecutionEngine.GetCallingScriptHash',\n returnType: BufferValue,\n }),\n 'System.ExecutionEngine.GetEntryScriptHash': new SimpleSysCall({\n name: 'System.ExecutionEngine.GetEntryScriptHash',\n returnType: BufferValue,\n }),\n 'Neo.Runtime.Return': (() => {\n const name = 'Neo.Runtime.Return';\n const valueType = new UnionValue([\n BufferValue,\n NumberValue,\n StringValue,\n BooleanValue,\n ]);\n const returnType = VoidValue;\n return {\n name,\n toDeclaration(): string {\n const sig = valueType.toSignature();\n return `function syscall(name: '${name}', value: ${sig}): ${returnType.toSignature()};`;\n },\n handleCall(\n sb: ScriptBuilder,\n node: CallExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n const arg = node.getArguments()[1];\n sb.visit(arg, options);\n valueType.handleArgument(sb, arg, options, sb.getType(arg));\n },\n };\n })(),\n 'Neo.Runtime.GetArgument': (() => {\n const name = 'Neo.Runtime.GetArgument';\n const valueType = NumberValue;\n const returnType: UnionValue = new UnionValue([\n BufferValue,\n BooleanValue,\n NumberValue,\n StringValue,\n new ArrayValue(() => returnType),\n new TupleValue(() => returnType),\n ]);\n return {\n name,\n toDeclaration(): string {\n const sig = valueType.toSignature();\n return `function syscall(name: '${name}', idx: ${sig}): any;`;\n },\n handleCall(\n sb: ScriptBuilder,\n node: CallExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n const arg = node.getArguments()[1];\n sb.visit(arg, options);\n sb.emitHelper(\n arg,\n options,\n sb.helpers.getArgument({ type: sb.getType(arg) }),\n );\n if (optionsIn.pushValue) {\n returnType.handleResult(sb, node, optionsIn, optionsIn.cast);\n } else {\n sb.emitOp(node, 'DROP');\n }\n },\n };\n })(),\n};\n","import { CallExpression, SyntaxKind, TypeGuards } from 'ts-simple-ast';\n\nimport { SYSCALLS } from '../syscalls';\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\nimport { DiagnosticCode } from '../../DiagnosticCode';\n\nexport default class CallExpressionCompiler extends NodeCompiler<\n CallExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.CallExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: CallExpression,\n optionsIn: VisitOptions,\n ): void {\n const func = expr.getExpression();\n if (\n TypeGuards.isIdentifier(func) &&\n sb.isGlobalSymbol(func, sb.getSymbol(func), 'syscall')\n ) {\n this.handleSysCall(sb, expr, optionsIn);\n return;\n }\n\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n // [argsarr]\n sb.emitHelper(expr, options, sb.helpers.args);\n\n if (TypeGuards.isSuperExpression(func)) {\n this.handleSuperConstruct(sb, expr, options);\n return;\n }\n\n let bindThis;\n if (\n TypeGuards.isElementAccessExpression(func) ||\n TypeGuards.isPropertyAccessExpression(func)\n ) {\n bindThis = true;\n\n const lhs = func.getExpression();\n if (TypeGuards.isSuperExpression(lhs)) {\n // [thisValue, argsarr]\n sb.scope.getThis(sb, lhs, options);\n // [superPrototype, thisValue, argsarr]\n sb.visit(lhs, options);\n } else {\n // [expr, argsarr]\n sb.visit(lhs, options);\n // [expr, expr, argsarr]\n sb.emitOp(func, 'DUP');\n }\n\n if (TypeGuards.isElementAccessExpression(func)) {\n // [objectVal, expr, argsarr]\n sb.emitHelper(func, options, sb.helpers.elementAccess);\n } else {\n // [name, expr, expr, argsarr]\n sb.emitPushString(func.getNameNode(), func.getName());\n // [objectVal, expr, argsarr]\n sb.emitHelper(expr, options, sb.helpers.getPropertyObjectProperty);\n }\n } else {\n bindThis = false;\n // [objectVal, argsarr]\n sb.visit(func, options);\n }\n\n sb.emitHelper(expr, options, sb.helpers.invokeCall({ bindThis }));\n\n if (!optionsIn.pushValue) {\n sb.emitOp(expr, 'DROP');\n }\n }\n\n private handleSysCall(\n sb: ScriptBuilder,\n node: CallExpression,\n options: VisitOptions,\n ): void {\n const sysCallName = node.getArguments()[0];\n\n const reportError = () => {\n sb.reportError(\n node,\n 'First argument to syscall must be a string literal corresponding to a NEO syscall.',\n DiagnosticCode.INVALID_SYS_CALL,\n );\n };\n if (sysCallName == null || !TypeGuards.isStringLiteral(sysCallName)) {\n reportError();\n return;\n }\n\n const sysCallKey = sysCallName.getLiteralValue() as keyof typeof SYSCALLS;\n const sysCall = SYSCALLS[sysCallKey];\n if (sysCall == null) {\n reportError();\n } else {\n sysCall.handleCall(sb, node, options);\n }\n }\n\n private handleSuperConstruct(\n sb: ScriptBuilder,\n node: CallExpression,\n options: VisitOptions,\n ): void {\n const superClass = options.superClass;\n if (superClass == null) {\n throw new Error(\n 'Something went wrong, expected super class to be defined.',\n );\n }\n // [thisValue, argsarr]\n sb.scope.getThis(sb, node, options);\n // [ctor, thisValue, argsarr]\n sb.scope.get(sb, node, options, superClass);\n // []\n sb.emitHelper(node, options, sb.helpers.invokeConstruct());\n }\n}\n","import { CommaListExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class CommaListExpressionCompiler extends NodeCompiler<\n CommaListExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.CommaListExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: CommaListExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { ConditionalExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ConditionalExpressionCompiler extends NodeCompiler<\n ConditionalExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ConditionalExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ConditionalExpression,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n expr,\n options,\n sb.helpers.if({\n condition: () => {\n // [val]\n sb.visit(expr.getCondition(), sb.pushValueOptions(options));\n // [boolean]\n sb.emitHelper(\n expr.getCondition(),\n sb.pushValueOptions(options),\n sb.helpers.toBoolean({\n type: sb.getType(expr.getCondition()),\n }),\n );\n },\n whenTrue: () => {\n sb.visit(expr.getWhenTrue(), options);\n },\n whenFalse: () => {\n sb.visit(expr.getWhenFalse(), options);\n },\n }),\n );\n }\n}\n","import { DeleteExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class DeleteExpressionCompiler extends NodeCompiler<\n DeleteExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.DeleteExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: DeleteExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { ElementAccessExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ElementAccessExpressionCompiler extends NodeCompiler<\n ElementAccessExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ElementAccessExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ElementAccessExpression,\n options: VisitOptions,\n ): void {\n const value = expr.getExpression();\n\n // [val]\n sb.visit(value, sb.pushValueOptions(sb.noSetValueOptions(options)));\n // [val]\n sb.emitHelper(expr, options, sb.helpers.elementAccess);\n }\n}\n","import { FunctionExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class FunctionExpressionCompiler extends NodeCompiler<\n FunctionExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.FunctionExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: FunctionExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { Identifier, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class IdentifierCompiler extends NodeCompiler<Identifier> {\n public readonly kind: SyntaxKind = SyntaxKind.Identifier;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: Identifier,\n options: VisitOptions,\n ): void {\n if (options.setValue) {\n sb.scope.set(sb, expr, sb.noSetValueOptions(options), expr.getText());\n }\n\n if (options.pushValue) {\n if (\n expr.compilerNode.originalKeywordKind != null &&\n expr.compilerNode.originalKeywordKind === SyntaxKind.UndefinedKeyword\n ) {\n sb.emitHelper(expr, options, sb.helpers.createUndefined);\n } else {\n sb.scope.get(sb, expr, options, expr.getText());\n }\n }\n }\n}\n","import { ImportExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ImportExpressionCompiler extends NodeCompiler<\n ImportExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ImportKeyword;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ImportExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { MetaProperty, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class MetaPropertyCompiler extends NodeCompiler<MetaProperty> {\n public readonly kind: SyntaxKind = SyntaxKind.MetaProperty;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: MetaProperty,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { NewExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class NewExpressionCompiler extends NodeCompiler<NewExpression> {\n public readonly kind: SyntaxKind = SyntaxKind.NewExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: NewExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n // [argsarr]\n sb.emitHelper(expr, options, sb.helpers.args);\n // [objectVal, argsarr]\n sb.visit(expr.getExpression(), options);\n // [thisVal]\n sb.emitHelper(expr, options, sb.helpers.new());\n }\n}\n","import { NonNullExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class NonNullExpressionCompiler extends NodeCompiler<\n NonNullExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.NonNullExpression;\n public visitNode(\n sb: ScriptBuilder,\n expr: NonNullExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { NoSubstitutionTemplateLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class NoSubstitutionTemplateLiteralCompiler extends NodeCompiler<\n NoSubstitutionTemplateLiteral\n> {\n public readonly kind: SyntaxKind = SyntaxKind.NoSubstitutionTemplateLiteral;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: NoSubstitutionTemplateLiteral,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { NullLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class NullLiteralCompiler extends NodeCompiler<NullLiteral> {\n public readonly kind: SyntaxKind = SyntaxKind.NullKeyword;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: NullLiteral,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitHelper(expr, options, sb.helpers.createNull);\n }\n }\n}\n","import { NumericLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class NumericLiteralCompiler extends NodeCompiler<\n NumericLiteral\n> {\n public readonly kind: SyntaxKind = SyntaxKind.NumericLiteral;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: NumericLiteral,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitPushInt(expr, expr.getLiteralValue());\n sb.emitHelper(expr, options, sb.helpers.createNumber);\n }\n }\n}\n","import { ObjectLiteralExpression, SyntaxKind, TypeGuards } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\nimport { InternalFunctionProperties } from '../helper';\n\nexport default class ObjectLiteralExpressionCompiler extends NodeCompiler<\n ObjectLiteralExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ObjectLiteralExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ObjectLiteralExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.createObject);\n node.getProperties().forEach((prop) => {\n // [objectVal, objectVal]\n sb.emitOp(node, 'DUP');\n if (\n TypeGuards.isPropertyAssignment(prop) ||\n TypeGuards.isShorthandPropertyAssignment(prop) ||\n TypeGuards.isMethodDeclaration(prop)\n ) {\n // [propString, objectVal, objectVal]\n sb.emitPushString(prop, prop.getName());\n if (TypeGuards.isPropertyAssignment(prop)) {\n // [val, propString, objectVal, objectVal]\n sb.visit(prop.getInitializerOrThrow(), options);\n } else if (TypeGuards.isShorthandPropertyAssignment(prop)) {\n // [val, propString, objectVal, objectVal]\n sb.visit(prop.getNameNode(), options);\n } else if (TypeGuards.isMethodDeclaration(prop)) {\n // [callArr, propString, objectVal, objectVal]\n sb.emitHelper(prop, options, sb.helpers.createCallArray);\n // [callObj, propString, objectVal, objectVal]\n sb.emitHelper(\n prop,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n } else {\n sb.reportUnsupported(prop);\n }\n // [objectVal]\n sb.emitHelper(prop, options, sb.helpers.setDataPropertyObjectProperty);\n } else {\n sb.reportUnsupported(prop);\n }\n });\n\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { OmittedExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class OmittedExpressionCompiler extends NodeCompiler<\n OmittedExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.OmittedExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: OmittedExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { ParenthesizedExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ParenthesizedExpressionCompiler extends NodeCompiler<\n ParenthesizedExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ParenthesizedExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ParenthesizedExpression,\n options: VisitOptions,\n ): void {\n sb.visit(expr.getExpression(), options);\n }\n}\n","import { PartiallyEmittedExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class PartiallyEmittedExpressionCompiler extends NodeCompiler<\n PartiallyEmittedExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.PartiallyEmittedExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: PartiallyEmittedExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { PostfixUnaryExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\ntype AssignmentLike = SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken;\nexport default class PostfixUnaryExpressionCompiler extends NodeCompiler<\n PostfixUnaryExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.PostfixUnaryExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: PostfixUnaryExpression,\n options: VisitOptions,\n ): void {\n sb.visit(\n expr.getOperand(),\n sb.noSetValueOptions(sb.pushValueOptions(options)),\n );\n const token = expr.getOperatorToken();\n switch (token) {\n case SyntaxKind.PlusPlusToken:\n case SyntaxKind.MinusMinusToken:\n this.visitAssignment(sb, token, expr, options);\n break;\n default:\n sb.assertUnreachable(token);\n }\n }\n\n private visitAssignment(\n sb: ScriptBuilder,\n token: AssignmentLike,\n expr: PostfixUnaryExpression,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitOp(expr, 'DUP');\n }\n\n switch (token) {\n case SyntaxKind.PlusPlusToken:\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.toNumber({\n type: sb.getType(expr),\n }),\n );\n sb.emitOp(expr, 'INC');\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.createNumber,\n );\n break;\n case SyntaxKind.MinusMinusToken:\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.toNumber({\n type: sb.getType(expr),\n }),\n );\n sb.emitOp(expr, 'DEC');\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.createNumber,\n );\n break;\n default:\n sb.assertUnreachable(token);\n }\n\n sb.visit(\n expr.getOperand(),\n sb.noPushValueOptions(sb.setValueOptions(options)),\n );\n }\n}\n","import { PrefixUnaryExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\ntype AssignmentLike = SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken;\ntype ValueLike =\n | SyntaxKind.PlusToken\n | SyntaxKind.MinusToken\n | SyntaxKind.TildeToken\n | SyntaxKind.ExclamationToken;\nexport default class PrefixUnaryExpressionCompiler extends NodeCompiler<\n PrefixUnaryExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.PrefixUnaryExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: PrefixUnaryExpression,\n options: VisitOptions,\n ): void {\n const token = expr.getOperatorToken();\n switch (token) {\n case SyntaxKind.PlusPlusToken:\n case SyntaxKind.MinusMinusToken:\n this.visitAssignment(sb, token, expr, options);\n break;\n case SyntaxKind.PlusToken:\n case SyntaxKind.MinusToken:\n case SyntaxKind.TildeToken:\n case SyntaxKind.ExclamationToken:\n this.visitValue(sb, token, expr, options);\n break;\n default:\n sb.assertUnreachable(token);\n }\n }\n\n private visitAssignment(\n sb: ScriptBuilder,\n token: AssignmentLike,\n expr: PrefixUnaryExpression,\n options: VisitOptions,\n ): void {\n sb.visit(\n expr.getOperand(),\n sb.noSetValueOptions(sb.pushValueOptions(options)),\n );\n\n switch (token) {\n case SyntaxKind.PlusPlusToken:\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.toNumber({ type: sb.getType(expr) }),\n );\n sb.emitOp(expr, 'INC');\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.createNumber,\n );\n break;\n case SyntaxKind.MinusMinusToken:\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.toNumber({ type: sb.getType(expr) }),\n );\n sb.emitOp(expr, 'DEC');\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.createNumber,\n );\n break;\n default:\n sb.assertUnreachable(token);\n }\n\n sb.visit(expr.getOperand(), sb.setValueOptions(options));\n }\n\n private visitValue(\n sb: ScriptBuilder,\n token: ValueLike,\n expr: PrefixUnaryExpression,\n options: VisitOptions,\n ): void {\n const operand = expr.getOperand();\n sb.visit(operand, sb.noSetValueOptions(sb.pushValueOptions(options)));\n if (!options.pushValue) {\n sb.emitOp(expr, 'DROP');\n return;\n }\n\n switch (token) {\n case SyntaxKind.PlusToken:\n sb.emitHelper(\n expr,\n options,\n sb.helpers.toNumber({ type: sb.getType(expr) }),\n );\n sb.emitHelper(expr, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.MinusToken:\n sb.emitHelper(\n expr,\n options,\n sb.helpers.toNumber({ type: sb.getType(expr) }),\n );\n sb.emitOp(expr, 'NEGATE');\n sb.emitHelper(expr, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.TildeToken:\n sb.emitHelper(\n expr,\n options,\n sb.helpers.toNumber({ type: sb.getType(expr) }),\n );\n sb.emitOp(expr, 'INVERT');\n sb.emitHelper(expr, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.ExclamationToken:\n sb.emitHelper(\n operand,\n options,\n sb.helpers.toBoolean({ type: sb.getType(operand) }),\n );\n sb.emitOp(expr, 'NOT');\n sb.emitHelper(operand, options, sb.helpers.createBoolean);\n break;\n default:\n sb.assertUnreachable(token);\n }\n }\n}\n","import { PropertyAccessExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class PropertyAccessExpressionCompiler extends NodeCompiler<\n PropertyAccessExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.PropertyAccessExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: PropertyAccessExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noSetValueOptions(optionsIn));\n const expression = expr.getExpression();\n // [val]\n sb.visit(expression, options);\n // [objectVal]\n sb.emitHelper(\n expression,\n options,\n sb.helpers.toObject({ type: sb.getType(expression) }),\n );\n\n if (optionsIn.setValue) {\n if (optionsIn.pushValue) {\n // [objectVal, value, objectVal]\n sb.emitOp(expression, 'TUCK');\n }\n // [name, objectVal, value, objectVal]\n sb.emitPushString(expr, expr.getName());\n // [value, name, objectVal, objectVal]\n sb.emitOp(expr, 'ROT');\n // [objectVal]\n sb.emitHelper(expr, options, sb.helpers.setPropertyObjectProperty);\n }\n\n if (optionsIn.pushValue || !optionsIn.setValue) {\n // [name, objectVal]\n sb.emitPushString(expr, expr.getName());\n // [value]\n sb.emitHelper(expr, options, sb.helpers.getPropertyObjectProperty);\n\n if (!optionsIn.pushValue) {\n sb.emitOp(expr, 'DROP');\n }\n }\n }\n}\n","import { RegularExpressionLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class RegularExpressionLiteralCompiler extends NodeCompiler<\n RegularExpressionLiteral\n> {\n public readonly kind: SyntaxKind = SyntaxKind.RegularExpressionLiteral;\n public visitNode(\n sb: ScriptBuilder,\n expr: RegularExpressionLiteral,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { SpreadElement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class SpreadElementCompiler extends NodeCompiler<SpreadElement> {\n public readonly kind: SyntaxKind = SyntaxKind.SpreadElement;\n public visitNode(\n sb: ScriptBuilder,\n expr: SpreadElement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { StringLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class StringLiteralCompiler extends NodeCompiler<StringLiteral> {\n public readonly kind: SyntaxKind = SyntaxKind.StringLiteral;\n public visitNode(\n sb: ScriptBuilder,\n expr: StringLiteral,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitPushString(expr, expr.getLiteralValue());\n sb.emitHelper(expr, options, sb.helpers.createString);\n }\n }\n}\n","import { SuperExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class SuperExpressionCompiler extends NodeCompiler<\n SuperExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.SuperKeyword;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: SuperExpression,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n const superClass = options.superClass;\n if (superClass == null) {\n throw new Error(\n 'Something went wrong, expected super class to be defined.',\n );\n }\n\n // [superClass]\n sb.scope.get(sb, expr, options, superClass);\n // ['prototype', superClass]\n sb.emitPushString(expr, 'prototype');\n // [superPrototype]\n sb.emitHelper(expr, options, sb.helpers.getPropertyObjectProperty);\n }\n }\n}\n","import { TaggedTemplateExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class TaggedTemplateExpressionCompiler extends NodeCompiler<\n TaggedTemplateExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.TaggedTemplateExpression;\n public visitNode(\n sb: ScriptBuilder,\n expr: TaggedTemplateExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { ThisExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ThisExpressionCompiler extends NodeCompiler<\n ThisExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ThisKeyword;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ThisExpression,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.scope.getThis(sb, expr, options);\n }\n }\n}\n","import { TypeAssertion, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class TypeAssertionCompiler extends NodeCompiler<TypeAssertion> {\n public readonly kind: SyntaxKind = SyntaxKind.TypeAssertionExpression;\n public visitNode(\n sb: ScriptBuilder,\n expr: TypeAssertion,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { TypeOfExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class TypeOfExpressionCompiler extends NodeCompiler<\n TypeOfExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.TypeOfExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: TypeOfExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { VoidExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class VoidExpressionCompiler extends NodeCompiler<\n VoidExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.VoidExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: VoidExpression,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitHelper(expr, options, sb.helpers.createUndefined);\n }\n }\n}\n","import { YieldExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class YieldExpressionCompiler extends NodeCompiler<\n YieldExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.YieldExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: YieldExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import ArrayLiteralExpressionCompiler from './ArrayLiteralExpressionCompiler';\nimport ArrowFunctionCompiler from './ArrowFunctionCompiler';\nimport AsExpressionCompiler from './AsExpressionCompiler';\nimport AwaitExpressionCompiler from './AwaitExpressionCompiler';\nimport BinaryExpressionCompiler from './BinaryExpressionCompiler';\nimport {\n TrueBooleanLiteralCompiler,\n FalseBooleanLiteralCompiler,\n} from './BooleanLiteralCompiler';\nimport CallExpressionCompiler from './CallExpressionCompiler';\nimport CommaListExpressionCompiler from './CommaListExpressionCompiler';\nimport ConditionalExpressionCompiler from './ConditionalExpressionCompiler';\nimport DeleteExpressionCompiler from './DeleteExpressionCompiler';\nimport ElementAccessExpressionCompiler from './ElementAccessExpressionCompiler';\nimport FunctionExpressionCompiler from './FunctionExpressionCompiler';\nimport IdentifierCompiler from './IdentifierCompiler';\nimport ImportExpressionCompiler from './ImportExpressionCompiler';\nimport MetaPropertyCompiler from './MetaPropertyCompiler';\nimport NewExpressionCompiler from './NewExpressionCompiler';\nimport NonNullExpressionCompiler from './NonNullExpressionCompiler';\nimport NoSubstitutionTemplateLiteralCompiler from './NoSubstitutionTemplateLiteralCompiler';\nimport NullLiteralCompiler from './NullLiteralCompiler';\nimport NumericLiteralCompiler from './NumericLiteralCompiler';\nimport ObjectLiteralExpressionCompiler from './ObjectLiteralExpressionCompiler';\nimport OmittedExpressionCompiler from './OmittedExpressionCompiler';\nimport ParenthesizedExpressionCompiler from './ParenthesizedExpressionCompiler';\nimport PartiallyEmittedExpressionCompiler from './PartiallyEmittedExpressionCompiler';\nimport PostfixUnaryExpressionCompiler from './PostfixUnaryExpressionCompiler';\nimport PrefixUnaryExpressionCompiler from './PrefixUnaryExpressionCompiler';\nimport PropertyAccessExpressionCompiler from './PropertyAccessExpressionCompiler';\nimport RegularExpressionLiteralCompiler from './RegularExpressionLiteralCompiler';\nimport SpreadElementCompiler from './SpreadElementCompiler';\nimport StringLiteralCompiler from './StringLiteralCompiler';\nimport SuperExpressionCompiler from './SuperExpressionCompiler';\nimport TaggedTemplateExpressionCompiler from './TaggedTemplateExpressionCompiler';\nimport ThisExpressionCompiler from './ThisExpressionCompiler';\nimport TypeAssertionCompiler from './TypeAssertionCompiler';\nimport TypeOfExpressionCompiler from './TypeOfExpressionCompiler';\nimport VoidExpressionCompiler from './VoidExpressionCompiler';\nimport YieldExpressionCompiler from './YieldExpressionCompiler';\n\nexport default [\n ArrayLiteralExpressionCompiler,\n ArrowFunctionCompiler,\n AsExpressionCompiler,\n AwaitExpressionCompiler,\n BinaryExpressionCompiler,\n TrueBooleanLiteralCompiler,\n FalseBooleanLiteralCompiler,\n CallExpressionCompiler,\n CommaListExpressionCompiler,\n ConditionalExpressionCompiler,\n DeleteExpressionCompiler,\n ElementAccessExpressionCompiler,\n FunctionExpressionCompiler,\n IdentifierCompiler,\n ImportExpressionCompiler,\n MetaPropertyCompiler,\n NewExpressionCompiler,\n NonNullExpressionCompiler,\n NoSubstitutionTemplateLiteralCompiler,\n NullLiteralCompiler,\n NumericLiteralCompiler,\n ObjectLiteralExpressionCompiler,\n OmittedExpressionCompiler,\n ParenthesizedExpressionCompiler,\n PartiallyEmittedExpressionCompiler,\n PostfixUnaryExpressionCompiler,\n PrefixUnaryExpressionCompiler,\n PropertyAccessExpressionCompiler,\n RegularExpressionLiteralCompiler,\n SpreadElementCompiler,\n StringLiteralCompiler,\n SuperExpressionCompiler,\n TaggedTemplateExpressionCompiler,\n ThisExpressionCompiler,\n TypeAssertionCompiler,\n TypeOfExpressionCompiler,\n VoidExpressionCompiler,\n YieldExpressionCompiler,\n];\n","import { SourceFile, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class SourceFileCompiler extends NodeCompiler<SourceFile> {\n public readonly kind: SyntaxKind = SyntaxKind.SourceFile;\n\n public visitNode(\n sb: ScriptBuilder,\n node: SourceFile,\n options: VisitOptions,\n ): void {\n node.getImportDeclarations().forEach((decl) => {\n sb.visit(decl, options);\n });\n sb.emitHelper(\n node,\n options,\n sb.helpers.processStatements({ createScope: false }),\n );\n node.getExportDeclarations().forEach((decl) => {\n sb.visit(decl, options);\n });\n node.getExportAssignments().forEach((assignment) => {\n sb.visit(assignment, options);\n });\n }\n}\n","import { SourceFileCompiler } from './SourceFileCompiler';\n\nexport default [SourceFileCompiler];\n","import { Block, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class BlockCompiler extends NodeCompiler<Block> {\n public readonly kind: SyntaxKind = SyntaxKind.Block;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: Block,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n expr,\n options,\n sb.helpers.processStatements({ createScope: true }),\n );\n }\n}\n","import { BreakStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { DiagnosticCode } from '../../DiagnosticCode';\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nimport * as constants from '../../constants';\n\nexport class BreakStatementCompiler extends NodeCompiler<BreakStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.BreakStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: BreakStatement,\n options: VisitOptions,\n ): void {\n const label = node.getLabel();\n if (label != null) {\n sb.reportUnsupported(label);\n }\n\n if (options.breakPC == null) {\n sb.reportError(\n node,\n 'Something went wrong. Expected a break jump location.',\n DiagnosticCode.SOMETHING_WENT_WRONG,\n );\n } else {\n sb.emitPushInt(node, constants.BREAK_COMPLETION);\n sb.emitJmp(node, 'JMP', options.breakPC);\n }\n }\n}\n","import { CaseBlock, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class CaseBlockCompiler extends NodeCompiler<CaseBlock> {\n public readonly kind: SyntaxKind = SyntaxKind.CaseBlock;\n\n public visitNode(\n sb: ScriptBuilder,\n node: CaseBlock,\n options: VisitOptions,\n ): void {\n node.getClauses().forEach((clause) => {\n sb.visit(clause, options);\n });\n }\n}\n","import { CaseClause, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class CaseClauseCompiler extends NodeCompiler<CaseClause> {\n public readonly kind: SyntaxKind = SyntaxKind.CaseClause;\n\n public visitNode(\n sb: ScriptBuilder,\n node: CaseClause,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { CatchClause, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class CatchClauseCompiler extends NodeCompiler<CatchClause> {\n public readonly kind: SyntaxKind = SyntaxKind.CatchClause;\n\n public visitNode(\n sb: ScriptBuilder,\n node: CatchClause,\n options: VisitOptions,\n ): void {\n const variable = node.getVariableDeclaration();\n if (variable == null) {\n sb.visit(node.getBlock(), options);\n } else {\n sb.withScope(node, options, (innerOptions) => {\n sb.visit(variable, innerOptions);\n sb.visit(node.getBlock(), innerOptions);\n });\n }\n }\n}\n","import { ContinueStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { DiagnosticCode } from '../../DiagnosticCode';\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nimport * as constants from '../../constants';\n\nexport class ContinueStatementCompiler extends NodeCompiler<ContinueStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ContinueStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ContinueStatement,\n options: VisitOptions,\n ): void {\n const label = node.getLabel();\n if (label != null) {\n sb.reportUnsupported(label);\n }\n\n if (options.continuePC == null) {\n sb.reportError(\n node,\n 'Something went wrong. Expected a continue jump location.',\n DiagnosticCode.SOMETHING_WENT_WRONG,\n );\n } else {\n sb.emitPushInt(node, constants.CONTINUE_COMPLETION);\n sb.emitJmp(node, 'JMP', options.continuePC);\n }\n }\n}\n","import { DebuggerStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class DebuggerStatementCompiler extends NodeCompiler<DebuggerStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.DebuggerStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: DebuggerStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { DefaultClause, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class DefaultClauseCompiler extends NodeCompiler<DefaultClause> {\n public readonly kind: SyntaxKind = SyntaxKind.DefaultClause;\n\n public visitNode(\n sb: ScriptBuilder,\n node: DefaultClause,\n options: VisitOptions,\n ): void {\n sb.emitOp(node, 'DROP');\n sb.emitHelper(\n node,\n options,\n sb.helpers.processStatements({ createScope: false }),\n );\n }\n}\n","import { DoStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class DoStatementCompiler extends NodeCompiler<DoStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.DoStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: DoStatement,\n options: VisitOptions,\n ): void {\n sb.withProgramCounter((pc) => {\n sb.withProgramCounter((innerPC) => {\n sb.visit(\n node.getStatement(),\n sb.breakPCOptions(\n sb.continuePCOptions(options, innerPC.getLast()),\n pc.getLast(),\n ),\n );\n });\n\n sb.emitHelper(\n node.getExpression(),\n options,\n sb.helpers.if({\n condition: () => {\n sb.visit(node.getExpression(), sb.pushValueOptions(options));\n },\n whenTrue: () => {\n sb.emitJmp(node, 'JMP', pc.getFirst());\n },\n }),\n );\n });\n }\n}\n","import { EmptyStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class EmptyStatementCompiler extends NodeCompiler<EmptyStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.EmptyStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: EmptyStatement,\n options: VisitOptions,\n ): void {\n // tslint:disable-line\n }\n}\n","import { ExpressionStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ExpressionStatementCompiler extends NodeCompiler<\n ExpressionStatement\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ExpressionStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ExpressionStatement,\n options: VisitOptions,\n ): void {\n sb.visit(node.getExpression(), sb.noPushValueOptions(options));\n }\n}\n","import { ForInStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ForInStatementCompiler extends NodeCompiler<ForInStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ForInStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ForInStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { ForOfStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ForOfStatementCompiler extends NodeCompiler<ForOfStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ForOfStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ForOfStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { ForStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ForStatementCompiler extends NodeCompiler<ForStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ForStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ForStatement,\n options: VisitOptions,\n ): void {\n let initializer;\n const exprInitializer = node.getInitializer();\n if (exprInitializer != null) {\n initializer = () => {\n sb.visit(exprInitializer, sb.noPushValueOptions(options));\n };\n }\n\n let condition;\n const exprCondition = node.getCondition();\n if (exprCondition != null) {\n condition = () => {\n sb.visit(exprCondition, sb.pushValueOptions(options));\n sb.emitHelper(\n exprCondition,\n sb.pushValueOptions(options),\n sb.helpers.toBoolean({\n type: sb.getType(exprCondition),\n }),\n );\n };\n }\n\n let incrementor;\n const exprIncrementor = node.getIncrementor();\n if (exprIncrementor != null) {\n incrementor = () => {\n sb.visit(exprIncrementor, sb.noPushValueOptions(options));\n };\n }\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n initializer,\n condition,\n incrementor,\n each: (innerOptions) => {\n sb.visit(node.getStatement(), sb.noPushValueOptions(innerOptions));\n },\n }),\n );\n }\n}\n","import { IfStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class IfStatementCompiler extends NodeCompiler<IfStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.IfStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: IfStatement,\n options: VisitOptions,\n ): void {\n const condition = () => {\n const cond = node.getExpression();\n sb.visit(cond, sb.pushValueOptions(options));\n sb.emitHelper(\n cond,\n sb.pushValueOptions(options),\n sb.helpers.toBoolean({\n type: sb.getType(cond),\n }),\n );\n };\n\n const whenTrue = () => {\n sb.visit(node.getThenStatement(), options);\n };\n\n let whenFalse;\n const nodeWhenFalse = node.getElseStatement();\n if (nodeWhenFalse != null) {\n whenFalse = () => {\n sb.visit(nodeWhenFalse, options);\n };\n }\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition,\n whenTrue,\n whenFalse,\n }),\n );\n }\n}\n","import { LabeledStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class LabeledStatementCompiler extends NodeCompiler<LabeledStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.LabeledStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: LabeledStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { NotEmittedStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class NotEmittedStatementCompiler extends NodeCompiler<\n NotEmittedStatement\n> {\n public readonly kind: SyntaxKind = SyntaxKind.NotEmittedStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: NotEmittedStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { ReturnStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ReturnStatementCompiler extends NodeCompiler<ReturnStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ReturnStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ReturnStatement,\n options: VisitOptions,\n ): void {\n const expr = node.getExpression();\n if (expr == null) {\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createUndefined,\n );\n } else {\n sb.visit(expr, sb.pushValueOptions(options));\n }\n\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createNormalCompletion,\n );\n sb.emitOp(node, 'RET');\n }\n}\n","import { SwitchStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class SwitchStatementCompiler extends NodeCompiler<SwitchStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.SwitchStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: SwitchStatement,\n options: VisitOptions,\n ): void {\n sb.withProgramCounter((pc) => {\n sb.visit(node.getExpression(), sb.pushValueOptions(options));\n sb.visit(node.getCaseBlock(), sb.breakPCOptions(options, pc.getLast()));\n });\n }\n}\n","import { ThrowStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ThrowStatementCompiler extends NodeCompiler<ThrowStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ThrowStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ThrowStatement,\n options: VisitOptions,\n ): void {\n const expr = node.getExpression();\n sb.visit(expr, sb.pushValueOptions(options));\n sb.emitHelper(node, options, sb.helpers.throw);\n }\n}\n","import { TryStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class TryStatementCompiler extends NodeCompiler<TryStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.TryStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: TryStatement,\n options: VisitOptions,\n ): void {\n const catchClause = node.getCatchClause();\n if (catchClause == null) {\n sb.visit(node.getTryBlock(), options);\n } else {\n sb.withProgramCounter((pc) => {\n sb.withProgramCounter((innerPC) => {\n sb.visit(\n node.getTryBlock(),\n sb.catchPCOptions(options, innerPC.getLast()),\n );\n sb.emitJmp(node, 'JMP', pc.getLast());\n });\n\n sb.visit(catchClause, options);\n });\n }\n\n const finallyBlock = node.getFinallyBlock();\n if (finallyBlock != null) {\n sb.reportUnsupported(finallyBlock);\n }\n }\n}\n","import { VariableStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class VariableStatementCompiler extends NodeCompiler<VariableStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.VariableStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: VariableStatement,\n optionsIn: VisitOptions,\n ): void {\n sb.visit(node.getDeclarationList(), optionsIn);\n\n if (node.isNamedExport()) {\n const options = sb.pushValueOptions(optionsIn);\n\n // [exports]\n sb.emitHelper(node, options, sb.helpers.getCurrentModule);\n node\n .getDeclarationList()\n .getDeclarations()\n .forEach((decl) => {\n // [exports, exports]\n sb.emitOp(node, 'DUP');\n // [val, exports, exports]\n sb.scope.get(sb, node, options, decl.getName());\n // [exports]\n sb.emitHelper(\n node,\n options,\n sb.helpers.export({ name: decl.getName() }),\n );\n });\n // []\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { WhileStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class WhileStatementCompiler extends NodeCompiler<WhileStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.WhileStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: WhileStatement,\n options: VisitOptions,\n ): void {\n sb.withProgramCounter((pc) => {\n sb.visit(node.getExpression(), sb.pushValueOptions(options));\n sb.emitJmp(node, 'JMPIFNOT', pc.getLast());\n sb.visit(\n node.getStatement(),\n sb.breakPCOptions(\n sb.continuePCOptions(options, pc.getFirst()),\n pc.getLast(),\n ),\n );\n sb.emitJmp(node, 'JMP', pc.getFirst());\n });\n }\n}\n","import { WithStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class WithStatementCompiler extends NodeCompiler<WithStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.WithStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: WithStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { BlockCompiler } from './BlockCompiler';\nimport { BreakStatementCompiler } from './BreakStatementCompiler';\nimport { CaseBlockCompiler } from './CaseBlockCompiler';\nimport { CaseClauseCompiler } from './CaseClauseCompiler';\nimport { CatchClauseCompiler } from './CatchClauseCompiler';\nimport { ContinueStatementCompiler } from './ContinueStatementCompiler';\nimport { DebuggerStatementCompiler } from './DebuggerStatementCompiler';\nimport { DefaultClauseCompiler } from './DefaultClauseCompiler';\nimport { DoStatementCompiler } from './DoStatementCompiler';\nimport { EmptyStatementCompiler } from './EmptyStatementCompiler';\nimport { ExpressionStatementCompiler } from './ExpressionStatementCompiler';\nimport { ForInStatementCompiler } from './ForInStatementCompiler';\nimport { ForOfStatementCompiler } from './ForOfStatementCompiler';\nimport { ForStatementCompiler } from './ForStatementCompiler';\nimport { IfStatementCompiler } from './IfStatementCompiler';\nimport { LabeledStatementCompiler } from './LabeledStatementCompiler';\nimport { NotEmittedStatementCompiler } from './NotEmittedStatementCompiler';\nimport { ReturnStatementCompiler } from './ReturnStatementCompiler';\nimport { SwitchStatementCompiler } from './SwitchStatementCompiler';\nimport { ThrowStatementCompiler } from './ThrowStatementCompiler';\nimport { TryStatementCompiler } from './TryStatementCompiler';\nimport { VariableStatementCompiler } from './VariableStatementCompiler';\nimport { WhileStatementCompiler } from './WhileStatementCompiler';\nimport { WithStatementCompiler } from './WithStatementCompiler';\n\nexport default [\n BlockCompiler,\n BreakStatementCompiler,\n CaseBlockCompiler,\n CaseClauseCompiler,\n CatchClauseCompiler,\n ContinueStatementCompiler,\n DebuggerStatementCompiler,\n DefaultClauseCompiler,\n DoStatementCompiler,\n EmptyStatementCompiler,\n ExpressionStatementCompiler,\n ForInStatementCompiler,\n ForOfStatementCompiler,\n ForStatementCompiler,\n IfStatementCompiler,\n LabeledStatementCompiler,\n NotEmittedStatementCompiler,\n ReturnStatementCompiler,\n SwitchStatementCompiler,\n ThrowStatementCompiler,\n TryStatementCompiler,\n VariableStatementCompiler,\n WhileStatementCompiler,\n WithStatementCompiler,\n];\n","import _ from 'lodash';\n\nimport { Jump, Call, Jmp } from '../pc';\n\nimport { KnownProgramCounter } from '../pc/KnownProgramCounter';\n\nexport type Bytecode = Array<Buffer | Jump>;\n\nconst MAX_JUMP = 32767;\nconst JUMP_OFFSET = 20000;\n\nabstract class CodePoint {\n public abstract length: number;\n public readonly sources: Set<JumpCodePoint> = new Set();\n private pcInternal: number | undefined;\n private prevInternal: CodePoint | undefined;\n private nextInternal: CodePoint | undefined;\n\n public get pc(): number {\n return this.resolvePC();\n }\n\n public resolvePC(): number {\n if (this.pcInternal == null) {\n this.pcInternal = 0;\n if (this.prev == null) {\n this.pcInternal = 0;\n } else {\n this.pcInternal = this.prev.pc + this.prev.length;\n }\n }\n\n return this.pcInternal;\n }\n\n public resetPC(): void {\n if (this.pcInternal != null) {\n this.pcInternal = undefined;\n let next = this.next;\n while (next != null) {\n next.pcInternal = undefined;\n next = next.next;\n }\n }\n }\n\n public get totalLength(): number {\n let length = this.length;\n let next = this.next;\n while (next != null) {\n length += next.length;\n next = next.next;\n }\n return length;\n }\n\n public get prev(): CodePoint | undefined {\n return this.prevInternal;\n }\n\n public set prev(prev: CodePoint | undefined) {\n this.resetPC();\n this.prevInternal = prev;\n }\n\n public get next(): CodePoint | undefined {\n return this.nextInternal;\n }\n\n public set next(next: CodePoint | undefined) {\n this.nextInternal = next;\n }\n\n public insertJumps(targets: NewJump[]): CodePoint {\n let self: CodePoint | undefined = this;\n let skipJump = false;\n let ret: CodePoint = this;\n while (self != null) {\n const target = targets[0];\n if (target == null) {\n return ret;\n }\n\n let length = 0;\n if (self.next != null && !skipJump) {\n length = 3;\n }\n\n let next: CodePoint | undefined = self.next;\n let nextSkipJump = false;\n if (\n (target.isMax &&\n self.pc + self.length + length >\n target.pc + target.getPostOffset()) ||\n (!target.isMax &&\n self.pc >= target.pc + target.getPostOffset() - length)\n ) {\n next = self;\n if (skipJump) {\n const resolved = target.resolve();\n self.insertBefore(resolved);\n if (self === this) {\n ret = resolved;\n }\n } else {\n const resolved = target.resolve();\n const jump = new JumpCodePoint('JMP', self);\n self.insertBefore(jump);\n jump.insertAfter(resolved);\n if (self === this) {\n ret = resolved;\n }\n }\n nextSkipJump = true;\n targets.shift();\n }\n\n self = next;\n skipJump = nextSkipJump;\n }\n\n if (targets.length > 0) {\n throw new Error(\n `Failed to insert all targets. Something went wrong. Remaining: ${\n targets.length\n }`,\n );\n }\n\n return ret;\n }\n\n public insertBefore(point: CodePoint): void {\n if (this.prev != null) {\n this.prev.next = point;\n point.prev = this.prev;\n }\n\n this.prev = point;\n point.next = this;\n }\n\n public insertAfter(point: CodePoint): void {\n if (this.next != null) {\n this.next.prev = point;\n point.next = this.next;\n }\n\n this.next = point;\n point.prev = this;\n }\n\n public replace(point: CodePoint): void {\n if (this.prev != null) {\n this.prev.next = point;\n point.prevInternal = this.prev;\n }\n\n if (this.next != null) {\n if (point.length === this.length) {\n this.next.prevInternal = point;\n } else {\n this.next.prev = point;\n }\n\n point.next = this.next;\n }\n }\n}\n\nclass JumpCodePoint extends CodePoint {\n public length: number = 3;\n\n constructor(\n public readonly type: 'JMP' | 'JMPIF' | 'JMPIFNOT' | 'CALL',\n private targetInternal?: CodePoint | NewJump,\n ) {\n super();\n }\n\n public get target(): CodePoint | NewJump {\n if (this.targetInternal == null) {\n throw new Error('Target not set');\n }\n\n return this.targetInternal;\n }\n\n public set target(target: CodePoint | NewJump) {\n this.targetInternal = target;\n }\n\n public get isForwardJump(): boolean {\n return this.target.pc > this.pc;\n }\n\n public get isReverseJump(): boolean {\n return this.target.pc < this.pc;\n }\n\n public get offset(): number {\n if (this.target.pc === this.pc) {\n throw new Error(\n 'Something went wrong. Found equal target pc and current pc.',\n );\n }\n return this.target.pc - this.pc;\n }\n}\n\nclass BufferCodePoint extends CodePoint {\n public readonly length: number;\n\n constructor(public readonly value: Buffer) {\n super();\n this.length = value.length;\n }\n}\n\nclass NewJump {\n public length: number = 3;\n private sourceInternal: JumpCodePoint | NewJump | undefined;\n private internalPostOffset: number | undefined;\n\n constructor(\n public readonly pc: number,\n public readonly isMax: boolean,\n public target: CodePoint | NewJump,\n ) {}\n\n public get source(): JumpCodePoint | NewJump {\n if (this.sourceInternal == null) {\n throw new Error('NewJump source is not set');\n }\n\n return this.sourceInternal;\n }\n\n public set source(source: JumpCodePoint | NewJump) {\n this.sourceInternal = source;\n }\n\n public resolve(): JumpCodePoint {\n const jump = new JumpCodePoint('JMP', this.target);\n this.source.target = jump;\n if (this.target instanceof NewJump) {\n this.target.source = jump;\n } else {\n this.target.sources.add(jump);\n }\n\n if (this.source instanceof JumpCodePoint) {\n jump.sources.add(this.source);\n }\n\n return jump;\n }\n\n public get isForwardJump(): boolean {\n return this.isMax;\n }\n\n public get isReverseJump(): boolean {\n return !this.isMax;\n }\n\n public get offset(): number {\n if (this.target.pc === this.pc) {\n throw new Error(\n 'Something went wrong. Found equal target pc and current pc.',\n );\n }\n return this.target.pc - this.pc;\n }\n\n public getPostOffset(): number {\n if (this.internalPostOffset == null) {\n throw new Error('Not resolved');\n }\n\n return this.internalPostOffset;\n }\n\n public resolvePostOffset(targets: NewJump[]): void {\n const sourcePC = this.source.pc;\n if (this.isMax) {\n this.internalPostOffset = targets\n .filter((target) => sourcePC < target.pc && target.pc < this.pc)\n .reduce((acc) => acc - 6, 0);\n } else {\n this.internalPostOffset = targets\n .filter((target) => this.pc < target.pc && target.pc < sourcePC)\n .reduce((acc) => acc + 6, 0);\n }\n }\n}\n\nexport class JumpResolver {\n public process(bytecode: Array<Buffer | Jump>): Array<Buffer | Jump> {\n let first: CodePoint = this.getCodePoint(bytecode);\n let newTargets = [];\n do {\n this.resolvePC(first);\n const result = this.processOne(first);\n first = result[0];\n newTargets = result[1];\n const sortedNewTargets = _.sortBy(newTargets, (target) => target.pc);\n sortedNewTargets.forEach((target) =>\n target.resolvePostOffset(sortedNewTargets),\n );\n first = first.insertJumps(sortedNewTargets);\n } while (newTargets.length > 0);\n\n this.resolvePC(first);\n let current: CodePoint | undefined = first;\n const out: Array<Buffer | Jump> = [];\n while (current != null) {\n if (current instanceof JumpCodePoint) {\n const pc = new KnownProgramCounter(current.target.pc);\n if (current.type === 'CALL') {\n out.push(new Call(pc));\n } else {\n out.push(new Jmp(current.type, pc));\n }\n } else if (current instanceof BufferCodePoint) {\n out.push(current.value);\n } else {\n throw new Error('Something went wrong.');\n }\n current = current.next;\n }\n\n return out;\n }\n\n private processOne(codePoint: CodePoint): [CodePoint, NewJump[]] {\n const newTargets = [];\n\n let ret: CodePoint = codePoint;\n let value: CodePoint | undefined = codePoint;\n while (value != null) {\n if (value instanceof JumpCodePoint) {\n const result = this.getTarget(value);\n if (result == null) {\n value = value.next;\n } else {\n const [newValue, newValueTargets] = result;\n value.replace(newValue);\n if (value === codePoint) {\n ret = newValue;\n }\n newTargets.push(...newValueTargets);\n value = newValue.next;\n }\n } else {\n value = value.next;\n }\n }\n\n return [ret, newTargets];\n }\n\n private getTarget(\n value: JumpCodePoint,\n ): [JumpCodePoint, NewJump[]] | undefined {\n if (\n (value.isForwardJump && value.offset > MAX_JUMP) ||\n (value.isReverseJump && value.offset < -MAX_JUMP)\n ) {\n const isMax = value.isForwardJump;\n const newOffset = isMax ? JUMP_OFFSET : -JUMP_OFFSET;\n if (value.target instanceof NewJump) {\n throw new Error('Something went wrong. Unexpected jump target.');\n }\n const newValueTargets = this.getNewTarget(\n new NewJump(value.pc + newOffset, isMax, value.target),\n );\n const newValueTarget = newValueTargets[0];\n const newValue: JumpCodePoint = new JumpCodePoint(\n value.type,\n newValueTarget,\n );\n newValueTarget.source = newValue;\n value.target.sources.delete(value);\n [...value.sources].forEach((source) => {\n source.target = newValue;\n newValue.sources.add(source);\n });\n\n return [newValue, newValueTargets];\n }\n\n return undefined;\n }\n\n private getNewTarget(value: NewJump): NewJump[] {\n if (\n (value.isForwardJump && value.offset > MAX_JUMP) ||\n (value.isReverseJump && value.offset < -MAX_JUMP)\n ) {\n const isMax = value.isForwardJump;\n const newOffset = isMax ? JUMP_OFFSET : -JUMP_OFFSET;\n if (value.target instanceof NewJump) {\n throw new Error('Something went wrong. Unexpected jump target.');\n }\n const newValueTarget = new NewJump(\n value.pc + newOffset,\n isMax,\n value.target,\n );\n value.target = newValueTarget;\n newValueTarget.source = value;\n const newTargets = this.getNewTarget(newValueTarget);\n return [value].concat(newTargets);\n }\n\n return [value];\n }\n\n private getCodePoint(bytecode: Array<Buffer | Jump>): CodePoint {\n const sources: { [pc: number]: JumpCodePoint[] } = {};\n const codePoints: { [pc: number]: CodePoint } = {};\n const firstBytecode = bytecode[0];\n let first: CodePoint;\n if (firstBytecode instanceof Jump) {\n const jumpCodePoint = new JumpCodePoint(firstBytecode.op);\n sources[firstBytecode.pc.getPC()] = [jumpCodePoint];\n first = jumpCodePoint;\n } else {\n first = new BufferCodePoint(firstBytecode);\n }\n codePoints[0] = first;\n\n let pc = first.length;\n let prev: CodePoint = first;\n for (const value of bytecode.slice(1)) {\n let codePoint: CodePoint;\n if (value instanceof Jump) {\n const targetPC = value.pc.getPC();\n let jumpCodePoint;\n if (targetPC < pc) {\n jumpCodePoint = new JumpCodePoint(value.op, codePoints[targetPC]);\n codePoints[targetPC].sources.add(jumpCodePoint);\n } else {\n jumpCodePoint = new JumpCodePoint(value.op);\n if (sources[targetPC] == null) {\n sources[targetPC] = [];\n }\n sources[targetPC].push(jumpCodePoint);\n }\n codePoint = jumpCodePoint;\n } else {\n codePoint = new BufferCodePoint(value);\n }\n\n const pcSources = sources[pc];\n if (pcSources != null) {\n delete sources[pc];\n pcSources.forEach((source) => {\n source.target = codePoint;\n codePoint.sources.add(source);\n });\n }\n codePoints[pc] = codePoint;\n pc += codePoint.length;\n\n codePoint.prev = prev;\n prev.next = codePoint;\n prev = codePoint;\n }\n\n return first;\n }\n\n private resolvePC(codePoint: CodePoint): void {\n codePoint.resetPC();\n let current: CodePoint | undefined = codePoint;\n while (current != null) {\n current.resolvePC();\n current = current.next;\n }\n }\n}\n","// tslint:disable ban-types\nimport {\n BYTECODE_TO_BYTECODE_BUFFER,\n OPCODE_TO_BYTECODE,\n BinaryWriter,\n ByteCode,\n OpCode,\n UnknownOpError,\n utils,\n ScriptBuilder as ClientScriptBuilder,\n SysCallName,\n} from '@neo-one/client-core';\nimport BN from 'bn.js';\nimport Ast, { Node, SourceFile, Type, Symbol } from 'ts-simple-ast';\n\nimport { Context } from '../../Context';\nimport { DiagnosticCode } from '../../DiagnosticCode';\nimport { Helper, Helpers } from '../helper';\nimport { JumpTable } from './JumpTable';\nimport {\n DeferredProgramCounter,\n ProgramCounterHelper,\n ProgramCounter,\n Jump,\n Jmp,\n Call,\n} from '../pc';\nimport { NodeCompiler } from '../NodeCompiler';\nimport { Scope, Name } from '../scope';\nimport { Bytecode, CaptureResult, ScriptBuilder } from './ScriptBuilder';\nimport { VisitOptions } from '../types';\n\nimport declarations from '../declaration';\nimport decorator from '../decorator';\nimport expression from '../expression';\nimport file from '../file';\nimport statement from '../statement';\nimport { Globals } from '../../symbols';\nimport { JumpResolver } from './JumpResolver';\n\nconst compilers = [declarations, decorator, expression, file, statement];\n\ninterface Compilers {\n [kind: number]: NodeCompiler<any>;\n}\n\nexport abstract class BaseScriptBuilder<TScope extends Scope>\n implements ScriptBuilder {\n public readonly jumpTable: JumpTable = new JumpTable();\n private currentScope: TScope | undefined;\n private readonly compilers: Compilers;\n private bytecode: Bytecode;\n private pc: number;\n private jumpTablePC: DeferredProgramCounter = new DeferredProgramCounter();\n private capturedBytecode: Bytecode | undefined = undefined;\n private readonly nodes: Map<Node, number> = new Map();\n private readonly moduleMap: { [filePath: string]: number } = {};\n private readonly reverseModuleMap: { [index: number]: string } = {};\n private readonly exportMap: { [filePath: string]: Set<string> } = {};\n private nextModuleIndex = 0;\n private currentModuleIndex = 0;\n\n constructor(\n private readonly context: Context,\n public readonly helpers: Helpers,\n protected readonly ast: Ast,\n private readonly sourceFile: SourceFile,\n private readonly allHelpers: Helper[] = [],\n ) {\n this.bytecode = [];\n this.pc = 0;\n this.currentScope = undefined;\n this.compilers = (compilers as Array<Array<new () => NodeCompiler<any>>>)\n .reduce((acc, kindCompilers) => acc.concat(kindCompilers), [])\n .reduce(\n (acc, KindCompiler) => {\n const kindCompiler = new KindCompiler();\n if (acc[kindCompiler.kind] != null) {\n throw new Error(\n `Found duplicate compiler for kind ${kindCompiler.kind}`,\n );\n }\n\n acc[kindCompiler.kind] = kindCompiler;\n return acc;\n },\n {} as Compilers,\n );\n }\n\n get scope(): TScope {\n if (this.currentScope == null) {\n throw new Error('Scope has not been set');\n }\n return this.currentScope;\n }\n\n get moduleIndex(): number {\n return this.currentModuleIndex;\n }\n\n public process(): void {\n const sourceFile = this.sourceFile;\n const { bytecode } = this.capture(() => {\n this.moduleMap[sourceFile.getFilePath()] = this.nextModuleIndex;\n this.reverseModuleMap[this.nextModuleIndex] = sourceFile.getFilePath();\n this.currentModuleIndex = this.nextModuleIndex;\n this.nextModuleIndex += 1;\n\n this.currentScope = this.createScope(sourceFile, 0, undefined);\n this.nodes.set(sourceFile, 0);\n const options = {};\n this.currentScope.emit(this, sourceFile, options, (innerOptions) => {\n // []\n this.emitHelper(\n sourceFile,\n this.pushValueOptions(options),\n this.helpers.setGlobalObject,\n );\n // [globalObjectVal]\n this.scope.getGlobal(this, sourceFile, this.pushValueOptions(options));\n // []\n this.emitHelper(\n sourceFile,\n this.pushValueOptions(options),\n this.helpers.addEmptyModule,\n );\n // []\n this.allHelpers.forEach((helper) => {\n helper.emitGlobal(this, sourceFile, innerOptions);\n });\n this.visit(sourceFile, innerOptions);\n });\n });\n\n this.withProgramCounter((pc) => {\n this.emitJmp(sourceFile, 'JMP', pc.getLast());\n this.jumpTablePC.setPC(pc.getCurrent());\n this.jumpTable.emitTable(this, sourceFile);\n });\n this.emitBytecode(bytecode);\n }\n\n public getFinalBytecode(): Buffer {\n const bytecode = new JumpResolver().process(\n this.bytecode.map(([_, value]) => value),\n );\n let pc = 0;\n const buffers = bytecode.map((valueIn) => {\n let value = valueIn;\n if (value instanceof Jump) {\n const offsetPC = new BN(value.pc.getPC()).sub(new BN(pc));\n // @ts-ignore\n const jumpPC = offsetPC.toTwos(16);\n const byteCodeBuffer =\n BYTECODE_TO_BYTECODE_BUFFER[OPCODE_TO_BYTECODE[value.op]];\n if (byteCodeBuffer == null) {\n throw new Error(\n 'Something went wrong, could not find bytecode buffer',\n );\n }\n value = Buffer.concat([\n byteCodeBuffer,\n jumpPC.toArrayLike(Buffer, 'le', 2),\n ]);\n }\n\n pc += value.length;\n return value;\n }) as Buffer[];\n\n return Buffer.concat(buffers);\n }\n\n public visit(node: Node, options: VisitOptions): void {\n const compiler = this.compilers[node.compilerNode.kind];\n if (compiler == null) {\n this.reportUnsupported(node);\n } else {\n compiler.visitNode(this, node, options);\n }\n }\n\n public withScope(\n node: Node,\n options: VisitOptions,\n func: (options: VisitOptions) => void,\n ): void {\n let index = this.nodes.get(node);\n if (index == null) {\n index = 0;\n } else {\n index += 1;\n }\n\n this.nodes.set(node, index);\n\n const currentScope = this.currentScope;\n this.currentScope = this.createScope(node, index, currentScope);\n this.currentScope.emit(this, node, options, func);\n this.currentScope = currentScope;\n }\n\n public withProgramCounter(func: (pc: ProgramCounterHelper) => void): void {\n const pc = new ProgramCounterHelper(() => this.pc);\n func(pc);\n pc.setLast();\n }\n\n public emitOp(\n node: Node,\n code: OpCode,\n buffer?: Buffer | null | undefined,\n ): void {\n const bytecode = OPCODE_TO_BYTECODE[code];\n if (bytecode == null) {\n throw new UnknownOpError(code);\n }\n this.emitOpByte(node, bytecode, buffer);\n }\n\n public emitPushInt(node: Node, valueIn: number | BN): void {\n const value = new BN(valueIn);\n if (value.eq(utils.NEGATIVE_ONE)) {\n return this.emitOp(node, 'PUSHM1');\n } else if (value.eq(utils.ZERO)) {\n return this.emitPush(node, utils.toSignedBuffer(value));\n } else if (value.gt(utils.ZERO) && value.lt(utils.SIXTEEN)) {\n return this.emitOpByte(\n node,\n OPCODE_TO_BYTECODE.PUSH1 - 1 + value.toNumber(),\n );\n }\n\n return this.emitPush(node, utils.toSignedBuffer(value));\n }\n\n public emitPushBoolean(node: Node, value: boolean): void {\n this.emitOp(node, value ? 'PUSH1' : 'PUSH0');\n }\n\n public emitPushString(node: Node, value: string): void {\n return this.emitPush(node, this.toBuffer(value));\n }\n\n public emitJmp(\n node: Node,\n code: 'JMP' | 'JMPIF' | 'JMPIFNOT',\n pc: ProgramCounter,\n ): void {\n this.emitJump(node, new Jmp(code, pc));\n }\n\n public emitHelper<T extends Node>(\n node: T,\n options: VisitOptions,\n helper: Helper<T>,\n ): void {\n helper.emit(this, node, options);\n }\n\n public emitBytecode(bytecode: Bytecode): void {\n const pc = this.pc;\n bytecode.forEach(([node, code]) => {\n if (code instanceof Call) {\n this.emitJump(node, code);\n } else if (code instanceof Jmp) {\n this.emitJump(node, code.plus(pc));\n } else if (code instanceof Jump) {\n throw new Error('Something went wrong.');\n } else {\n this.emitRaw(node, code);\n }\n });\n }\n\n public emitCall(node: Node): void {\n this.emitJump(node, new Call(this.jumpTablePC));\n }\n\n public emitSysCall(node: Node, name: SysCallName): void {\n const sysCallBuffer = Buffer.from(name, 'ascii');\n const writer = new BinaryWriter();\n writer.writeVarBytesLE(sysCallBuffer);\n this.emitOp(node, 'SYSCALL', writer.toBuffer());\n }\n\n public loadModule(sourceFile: SourceFile): void {\n const options = {};\n\n let moduleIndex = this.moduleMap[sourceFile.getFilePath()];\n if (moduleIndex == null) {\n moduleIndex = this.nextModuleIndex;\n this.nextModuleIndex += 1;\n this.moduleMap[sourceFile.getFilePath()] = moduleIndex;\n this.reverseModuleMap[moduleIndex] = sourceFile.getFilePath();\n\n const currentScope = this.currentScope;\n this.currentScope = this.createScope(sourceFile, 0, undefined);\n\n const currentModuleIndex = this.currentModuleIndex;\n this.currentModuleIndex = moduleIndex;\n\n // [globalObjectVal]\n this.scope.getGlobal(this, sourceFile, this.pushValueOptions(options));\n // [globalObjectVal, globalObjectVal]\n this.emitOp(sourceFile, 'DUP');\n // [globalObjectVal]\n this.emitHelper(\n sourceFile,\n this.pushValueOptions(options),\n this.helpers.addEmptyModule,\n );\n\n this.currentScope.emit(this, sourceFile, options, (innerOptions) => {\n // []\n this.scope.setGlobal(this, sourceFile, options);\n this.visit(sourceFile, innerOptions);\n });\n\n this.currentScope = currentScope;\n this.currentModuleIndex = currentModuleIndex;\n }\n\n // [globalObjectVal]\n this.scope.getGlobal(this, sourceFile, this.pushValueOptions(options));\n // [exports]\n this.emitHelper(\n sourceFile,\n this.pushValueOptions(options),\n this.helpers.getModule({ moduleIndex }),\n );\n }\n\n public capture(func: () => void): CaptureResult {\n const originalCapturedBytecode = this.capturedBytecode;\n this.capturedBytecode = [];\n const originalPC = this.pc;\n this.pc = 0;\n func();\n const capturedBytecode = this.capturedBytecode;\n this.capturedBytecode = originalCapturedBytecode;\n const capturedLength = this.pc;\n this.pc = originalPC;\n return { length: capturedLength, bytecode: capturedBytecode };\n }\n\n public toBuffer(value: string): Buffer {\n return Buffer.from(value, 'utf8');\n }\n\n public plainOptions(options: VisitOptions): VisitOptions {\n return {\n ...options,\n pushValue: false,\n setValue: false,\n catchPC: undefined,\n };\n }\n\n public pushValueOptions(options: VisitOptions): VisitOptions {\n return { ...options, pushValue: true };\n }\n\n public noPushValueOptions(options: VisitOptions): VisitOptions {\n return { ...options, pushValue: false };\n }\n\n public setValueOptions(options: VisitOptions): VisitOptions {\n return { ...options, setValue: true };\n }\n\n public noSetValueOptions(options: VisitOptions): VisitOptions {\n return { ...options, setValue: false };\n }\n\n public noValueOptions(options: VisitOptions): VisitOptions {\n return { ...options, pushValue: false, setValue: false };\n }\n\n public breakPCOptions(\n options: VisitOptions,\n pc: ProgramCounter,\n ): VisitOptions {\n return { ...options, breakPC: pc };\n }\n\n public continuePCOptions(\n options: VisitOptions,\n pc: ProgramCounter,\n ): VisitOptions {\n return { ...options, continuePC: pc };\n }\n\n public catchPCOptions(\n options: VisitOptions,\n pc: ProgramCounter,\n ): VisitOptions {\n return { ...options, catchPC: pc };\n }\n\n public castOptions(options: VisitOptions, cast: Type): VisitOptions {\n return { ...options, cast };\n }\n\n public noCastOptions(options: VisitOptions): VisitOptions {\n return { ...options, cast: undefined };\n }\n\n public superClassOptions(\n options: VisitOptions,\n superClass: Name,\n ): VisitOptions {\n return { ...options, superClass };\n }\n\n public noSuperClassOptions(options: VisitOptions): VisitOptions {\n return { ...options, superClass: undefined };\n }\n\n public reportError(node: Node, message: string, code: DiagnosticCode): void {\n this.context.reportError(node, message, code);\n }\n\n public reportUnsupported(node: Node): void {\n this.context.reportUnsupported(node);\n }\n\n public getType(node: Node, required: boolean = false): Type | undefined {\n return this.context.getType(node, required);\n }\n\n public getSymbol(node: Node, required: boolean = false): Symbol | undefined {\n return this.context.getSymbol(node, required);\n }\n\n public isOnlyGlobal(\n node: Node,\n type: Type | undefined,\n name: keyof Globals,\n ): boolean {\n return this.context.isOnlyGlobal(node, type, name);\n }\n\n public isGlobal(\n node: Node,\n type: Type | undefined,\n name: keyof Globals,\n ): boolean {\n return this.context.isGlobal(node, type, name);\n }\n\n public isGlobalSymbol(\n node: Node,\n symbol: Symbol | undefined,\n name: keyof Globals,\n ): boolean {\n return this.context.isGlobalSymbol(node, symbol, name);\n }\n\n public hasExport(sourceFile: SourceFile, name: string): boolean {\n return (this.exportMap[sourceFile.getFilePath()] || new Set()).has(name);\n }\n\n public addExport(name: string): void {\n const filePath = this.assertNotNull(\n this.reverseModuleMap[this.currentModuleIndex],\n );\n let fileExports = this.exportMap[filePath];\n if (fileExports == null) {\n fileExports = new Set();\n this.exportMap[filePath] = fileExports;\n }\n\n fileExports.add(name);\n }\n\n public assertUnreachable(value: never): never {\n throw new Error('Should not be reached.');\n }\n\n public assertNotNull<T>(value: T | undefined | null): T {\n return this.context.assertNotNull(value);\n }\n\n public filterNotNull<T>(value: T | undefined | null): value is T {\n return value != null;\n }\n\n protected abstract createScope(\n node: Node,\n index: number,\n parent: TScope | undefined,\n ): TScope;\n\n private emitPush(node: Node, value: Buffer): void {\n if (value.length <= OPCODE_TO_BYTECODE.PUSHBYTES75) {\n this.emitOpByte(node, value.length, value);\n } else if (value.length < 0x100) {\n this.emitOp(\n node,\n 'PUSHDATA1',\n new ClientScriptBuilder()\n .emitUInt8(value.length)\n .emit(value)\n .build(),\n );\n } else if (value.length < 0x10000) {\n this.emitOp(\n node,\n 'PUSHDATA2',\n new ClientScriptBuilder()\n .emitUInt16LE(value.length)\n .emit(value)\n .build(),\n );\n } else if (value.length < 0x100000000) {\n this.emitOp(\n node,\n 'PUSHDATA4',\n new ClientScriptBuilder()\n .emitUInt32LE(value.length)\n .emit(value)\n .build(),\n );\n } else {\n throw new Error('Value too large.');\n }\n }\n\n private emitOpByte(\n node: Node,\n byteCodeIn: ByteCode | null,\n buffer?: Buffer | null | undefined,\n ): void {\n const byteCode = `${byteCodeIn == null ? '' : byteCodeIn}`;\n const byteCodeBuffer = BYTECODE_TO_BYTECODE_BUFFER[byteCode];\n if (byteCodeBuffer == null) {\n throw new UnknownOpError(byteCode);\n }\n let value = byteCodeBuffer;\n if (buffer != null) {\n value = Buffer.concat([byteCodeBuffer, buffer]);\n }\n this.emitRaw(node, value);\n }\n\n private emitRaw(node: Node, value: Buffer): void {\n this.push(node, value);\n this.pc += value.length;\n }\n\n private emitJump(node: Node, jump: Jump): void {\n this.push(node, jump);\n this.pc += 3;\n }\n\n private push(node: Node, value: Buffer | Jump): void {\n if (this.capturedBytecode != null) {\n this.capturedBytecode.push([node, value]);\n } else {\n this.bytecode.push([node, value]);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { DiagnosticCode } from '../../DiagnosticCode';\nimport { Name, Scope } from './Scope';\nimport { ProgramCounter } from '../pc';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nimport * as constants from '../../constants';\n\nclass IdentifierName implements Name {\n public nameBrand: number = 0;\n constructor(public readonly value: string) {}\n}\n\nexport class ResolvedScope implements Scope {\n private position: number = 0;\n private variables: { [name: string]: number } = {};\n private uniqueVariables: Map<Name, number> = new Map();\n private scopeLength: number;\n private addScope: boolean;\n private scopeCount: number;\n\n constructor(\n private readonly variableCount: number,\n private readonly parent?: ResolvedScope | undefined,\n ) {\n if (this.parent == null) {\n this.addScope = true;\n this.scopeCount = 1;\n this.scopeLength = 1;\n } else {\n this.addScope = variableCount > 0;\n this.scopeCount = this.addScope ? 1 : 0;\n this.scopeLength = this.parent.scopeLength + this.scopeCount;\n }\n }\n\n public add(name: string): Name {\n const identifier = new IdentifierName(name);\n const existing = this.variables[name];\n if (existing != null) {\n return identifier;\n }\n\n this.variables[identifier.value] = this.position;\n this.position += 1;\n if (this.position > this.variableCount) {\n throw new Error(\n `Something went wrong. Name: ${name} Position: ${\n this.position\n } Count: ${this.variableCount}`,\n );\n }\n return identifier;\n }\n\n public addUnique(): Name {\n const name = { nameBrand: 0 };\n this.uniqueVariables.set(name, this.position);\n this.position += 1;\n if (this.position > this.variableCount) {\n throw new Error(\n `Something went wrong. Position: ${this.position} Count: ${\n this.variableCount\n }`,\n );\n }\n return name;\n }\n\n // [value]\n public set(\n sb: ScriptBuilder,\n node: Node,\n optionsIn: VisitOptions,\n name: Name | string,\n scopeLength: number = this.scopeLength,\n scopePosition: number = 0,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n const position = this.getPosition(name);\n if (position == null) {\n if (this.parent == null) {\n sb.reportError(\n node,\n `Unknown reference: ${name}`,\n DiagnosticCode.REFERENCE_ERROR,\n );\n } else {\n this.parent.set(\n sb,\n node,\n options,\n name,\n scopeLength,\n scopePosition + this.scopeCount,\n );\n }\n } else {\n // [normal]\n sb.emitHelper(node, options, sb.helpers.createNormalCompletion);\n // [scope, normal]\n this.loadScope(sb, node, scopeLength, scopePosition);\n // [position, scope, normal]\n sb.emitPushInt(node, position);\n // [normal, position, scope]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n }\n\n public get(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n name: Name | string,\n scopeLength: number = this.scopeLength,\n scopePosition: number = 0,\n ): void {\n const position = this.getPosition(name);\n if (position == null) {\n if (this.parent == null) {\n if (typeof name === 'string' && sb.helpers.globalProperties.has(name)) {\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: name }),\n );\n } else {\n sb.reportError(\n node,\n `Unknown reference: ${name}`,\n DiagnosticCode.REFERENCE_ERROR,\n );\n }\n } else {\n this.parent.get(\n sb,\n node,\n options,\n name,\n scopeLength,\n scopePosition + this.scopeCount,\n );\n }\n } else {\n this.loadScope(sb, node, scopeLength, scopePosition);\n sb.emitPushInt(node, position);\n sb.emitOp(node, 'PICKITEM');\n sb.emitHelper(node, options, sb.helpers.pickCompletionVal);\n }\n }\n\n public getThis(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [[scopes, this]]\n this.loadAll(sb, node);\n // [1, [scopes, this]]\n sb.emitPushInt(node, 1);\n // [this]\n sb.emitOp(node, 'PICKITEM');\n }\n\n public setThis(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [[scopes, this], val]\n this.loadAll(sb, node);\n // [1, [scopes, this], val]\n sb.emitPushInt(node, 1);\n // [val, 1, [scopes, this]]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n\n public getGlobal(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (this.parent == null) {\n // [[scopes, this, global]]\n this.loadAll(sb, node);\n // [2, [scopes, this, global]]\n sb.emitPushInt(node, 2);\n // [this]\n sb.emitOp(node, 'PICKITEM');\n } else {\n this.parent.getGlobal(sb, node, options);\n }\n }\n\n public setGlobal(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (this.parent == null) {\n // [[scopes, this, global], val]\n this.loadAll(sb, node);\n // [[scopes, this, global], val, [scopes, this, global]]\n sb.emitOp(node, 'TUCK');\n // [val, [scopes, this, global], val, [scopes, this, global]]\n sb.emitOp(node, 'OVER');\n // [2, val, [scopes, this, global], val, [scopes, this, global]]\n sb.emitPushInt(node, 2);\n // [val, 2, [scopes, this, global], val, [scopes, this, global]]\n sb.emitOp(node, 'SWAP');\n // [val, [scopes, this, global]]\n sb.emitOp(node, 'SETITEM');\n // [1, val, [scopes, this, global]]\n sb.emitPushInt(node, 1);\n // [val, 1, [scopes, this, global]]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitOp(node, 'SETITEM');\n } else {\n this.parent.setGlobal(sb, node, options);\n }\n }\n\n public hasBinding(name: string): boolean {\n return (\n this.variables[name] != null ||\n (this.parent != null && this.parent.hasBinding(name))\n );\n }\n\n public pushAll(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n sb.emitOp(node, 'DUPFROMALTSTACK');\n }\n\n public emit(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n func: (options: VisitOptions) => void,\n ): void {\n if (this.addScope) {\n this.surround(sb, node, options, func);\n } else {\n func(options);\n }\n }\n\n private surround(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n func: (options: VisitOptions) => void,\n ): void {\n if (this.parent == null) {\n // [global]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createUndefined,\n );\n // [this, global]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createUndefined,\n );\n // [0, this, global]\n sb.emitPushInt(node, 0);\n // [scopes, this, global]\n sb.emitOp(node, 'NEWSTRUCT');\n // [3, scopes, this, global]\n sb.emitPushInt(node, 3);\n // [[scopes, this, global]]\n sb.emitOp(node, 'PACK');\n // [[scopes, this, global], [scopes, this, global]]\n sb.emitOp(node, 'DUP');\n // [[scopes, this, global]]\n sb.emitOp(node, 'TOALTSTACK');\n } else {\n // [[scopes, this]]\n sb.emitOp(node, 'DUPFROMALTSTACK');\n }\n // [0, [scopes, this]]\n sb.emitPushInt(node, 0);\n // [scopes]\n sb.emitOp(node, 'PICKITEM');\n // [0, scopes]\n sb.emitPushInt(node, 0);\n // [scope, scopes]\n sb.emitOp(node, 'NEWARRAY');\n // [idx, scope, scopes]\n sb.emitPushInt(node, 0);\n sb.withProgramCounter((loopPC) => {\n // [idx, idx, scope, scopes]\n sb.emitOp(node, 'DUP');\n // [count, idx, idx, scope, scopes]\n sb.emitPushInt(node, this.variableCount);\n // [idx < count, idx, scope, scopes]\n sb.emitOp(node, 'LT');\n // [idx, scope, scopes]\n sb.emitJmp(node, 'JMPIFNOT', loopPC.getLast());\n // [scope, idx, scope, scopes]\n sb.emitOp(node, 'OVER');\n // [errorString, scope, idx, scope, scopes]\n sb.emitPushString(node, 'Referenced variable before it was defined');\n // [error, scope, idx, scope, scopes]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createString,\n );\n // [throw, scope, idx, scope, scopes]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createThrowCompletion,\n );\n // [idx, scope, scopes]\n sb.emitOp(node, 'APPEND');\n // [idx, scope, scopes]\n sb.emitOp(node, 'INC');\n // [idx, scope, scopes]\n sb.emitJmp(node, 'JMP', loopPC.getFirst());\n });\n // [scope, scopes]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'APPEND');\n\n const { breakPC, continuePC, catchPC } = options;\n const nonLocal = breakPC != null || continuePC != null || catchPC != null;\n sb.withProgramCounter((pc) => {\n let innerOptions = options;\n if (breakPC != null) {\n innerOptions = sb.breakPCOptions(innerOptions, pc.getLast());\n }\n\n if (continuePC != null) {\n innerOptions = sb.continuePCOptions(innerOptions, pc.getLast());\n }\n\n if (catchPC != null) {\n innerOptions = sb.catchPCOptions(innerOptions, pc.getLast());\n }\n\n func(innerOptions);\n if (nonLocal) {\n sb.emitPushInt(node, constants.NORMAL_COMPLETION);\n }\n });\n\n if (this.parent == null) {\n // [[scopes, undefined]]\n sb.emitOp(node, 'FROMALTSTACK');\n sb.emitOp(node, 'DROP');\n } else {\n // [[scopes, undefined]]\n sb.emitOp(node, 'DUPFROMALTSTACK');\n // [0, [scopes, undefined]]\n sb.emitPushInt(node, 0);\n // [scopes]\n sb.emitOp(node, 'PICKITEM');\n // [scopes, scopes]\n sb.emitOp(node, 'DUP');\n // [size, scopes]\n sb.emitOp(node, 'ARRAYSIZE');\n // [size - 1, scopes]\n sb.emitOp(node, 'DEC');\n // []\n sb.emitOp(node, 'REMOVE');\n }\n\n this.emitNonLocal(sb, node, constants.BREAK_COMPLETION, breakPC);\n this.emitNonLocal(sb, node, constants.CONTINUE_COMPLETION, continuePC);\n this.emitNonLocal(sb, node, constants.CATCH_COMPLETION, catchPC);\n\n if (nonLocal) {\n sb.emitOp(node, 'DROP');\n }\n }\n\n private emitNonLocal(\n sb: ScriptBuilder,\n node: Node,\n completion: number,\n pc: ProgramCounter | undefined,\n ): void {\n if (pc != null) {\n sb.withProgramCounter((innerPC) => {\n sb.emitOp(node, 'DUP');\n sb.emitPushInt(node, completion);\n sb.emitOp(node, 'NUMEQUAL');\n sb.emitJmp(node, 'JMPIF', pc);\n });\n }\n }\n\n private getPosition(name: Name | string): number | null | undefined {\n if (typeof name === 'string') {\n return this.variables[name];\n } else if (name instanceof IdentifierName) {\n return this.variables[name.value];\n }\n\n return this.uniqueVariables.get(name);\n }\n\n private loadScope(\n sb: ScriptBuilder,\n node: Node,\n scopeLength: number,\n scopePosition: number,\n ): void {\n this.loadAll(sb, node);\n // [0,[scopes, this]]\n sb.emitPushInt(node, 0);\n // [scopes]\n sb.emitOp(node, 'PICKITEM');\n // [scopeIndex, scopes]\n sb.emitPushInt(node, scopeLength - scopePosition - 1);\n // [scope]\n sb.emitOp(node, 'PICKITEM');\n }\n\n private loadAll(sb: ScriptBuilder, node: Node): void {\n // [[scopes, this]]\n sb.emitOp(node, 'DUPFROMALTSTACK');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ResolvedScope } from './ResolvedScope';\nimport { Name, Scope } from './Scope';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class CapturingScope implements Scope {\n private variableCount: number = 0;\n private bindings: Set<string> = new Set();\n\n constructor(\n public readonly node: Node,\n public readonly index: number,\n public readonly parent?: CapturingScope | undefined,\n ) {}\n\n public add(name: string): Name {\n this.variableCount += 1;\n this.bindings.add(name);\n return { nameBrand: 0 };\n }\n\n public addUnique(): Name {\n this.variableCount += 1;\n return { nameBrand: 0 };\n }\n\n public set(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public get(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public getThis(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public setThis(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public getGlobal(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public setGlobal(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public hasBinding(name: string): boolean {\n return (\n this.bindings.has(name) ||\n (this.parent != null && this.parent.hasBinding(name))\n );\n }\n\n public pushAll(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public emit(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n func: (options: VisitOptions) => void,\n ): void {\n sb.emitOp(node, 'NOP');\n func(options);\n sb.emitOp(node, 'NOP');\n }\n\n public resolve(parent?: ResolvedScope | undefined): ResolvedScope {\n return new ResolvedScope(this.variableCount, parent);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { BaseScriptBuilder } from './BaseScriptBuilder';\nimport { CapturingScope, ResolvedScope } from '../scope';\nimport { ScriptBuilder } from './ScriptBuilder';\n\nexport class ScopeCapturingScriptBuilder\n extends BaseScriptBuilder<CapturingScope>\n implements ScriptBuilder {\n private readonly scopes: CapturingScope[] = [];\n private readonly resolvedScopes: Map<\n Node,\n Map<number, ResolvedScope>\n > = new Map();\n\n public process(): void {\n super.process();\n this.resolveScopes();\n }\n\n public getScopes(): Map<Node, Map<number, ResolvedScope>> {\n return this.resolvedScopes;\n }\n\n protected createScope(\n node: Node,\n index: number,\n parent?: CapturingScope | undefined,\n ): CapturingScope {\n const scope = new CapturingScope(node, index, parent);\n this.scopes.push(scope);\n return scope;\n }\n\n private resolveScopes(): void {\n this.scopes.forEach((scope) => {\n this.resolveScope(scope);\n });\n }\n\n private resolveScope(scope: CapturingScope): ResolvedScope {\n let forNode = this.resolvedScopes.get(scope.node);\n if (forNode == null) {\n forNode = new Map();\n this.resolvedScopes.set(scope.node, forNode);\n }\n\n let resolved = forNode.get(scope.index);\n if (resolved == null) {\n const parent = scope.parent;\n if (parent == null) {\n resolved = scope.resolve();\n } else {\n resolved = scope.resolve(this.resolveScope(parent));\n }\n\n forNode.set(scope.index, resolved);\n }\n\n return resolved;\n }\n}\n","import Ast, { Node, SourceFile } from 'ts-simple-ast';\n\nimport { BaseScriptBuilder } from './BaseScriptBuilder';\nimport { Context } from '../../Context';\nimport { ResolvedScope } from '../scope';\nimport { ScriptBuilder } from './ScriptBuilder';\nimport { Helper, Helpers } from '../helper';\n\nexport interface EmittingScriptBuilderOptions {\n context: Context;\n ast: Ast;\n sourceFile: SourceFile;\n scopes: Map<Node, Map<number, ResolvedScope>>;\n helpers: Helpers;\n allHelpers: Helper[];\n}\n\nexport class EmittingScriptBuilder extends BaseScriptBuilder<ResolvedScope>\n implements ScriptBuilder {\n private readonly scopes: Map<Node, Map<number, ResolvedScope>>;\n\n constructor({\n context,\n scopes,\n helpers,\n ast,\n sourceFile,\n allHelpers,\n }: EmittingScriptBuilderOptions) {\n super(context, helpers, ast, sourceFile, allHelpers);\n this.scopes = scopes;\n }\n\n protected createScope(node: Node, index: number): ResolvedScope {\n return this.assertNotNull(\n this.assertNotNull(this.scopes.get(node)).get(index),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from './ScriptBuilder';\nimport { ScopeCapturingScriptBuilder } from './ScopeCapturingScriptBuilder';\nimport { Helper } from '../helper';\nimport { VisitOptions } from '../types';\n\nexport class HelperCapturingScriptBuilder extends ScopeCapturingScriptBuilder\n implements ScriptBuilder {\n private readonly capturedHelpersSet: Set<Helper> = new Set();\n private readonly capturedHelpers: Helper[] = [];\n\n public getHelpers(): Helper[] {\n return [...this.capturedHelpers];\n }\n\n public emitHelper<T extends Node>(\n node: T,\n options: VisitOptions,\n helper: Helper<T>,\n ): void {\n if (!this.capturedHelpersSet.has(helper)) {\n this.capturedHelpersSet.add(helper);\n this.capturedHelpers.push(helper);\n helper.emitGlobal(this, node, options);\n }\n helper.emit(this, node, options);\n }\n}\n","import { DiagnosticCategory, Node, ts } from 'ts-simple-ast';\n\nexport class CompilerDiagnostic implements ts.Diagnostic {\n constructor(\n private readonly node: Node,\n public readonly messageText: string,\n public readonly code: number,\n public readonly category: DiagnosticCategory,\n ) {}\n\n public get file(): ts.SourceFile | undefined {\n return this.node.getSourceFile().compilerNode;\n }\n\n public get start(): number {\n return this.node.getStart();\n }\n\n public get length(): number {\n return this.node.getWidth();\n }\n\n public get source(): string {\n return this.node.getText();\n }\n}\n","// tslint:disable ban-types\nimport {\n DiagnosticCategory,\n Node,\n Symbol,\n Type,\n TypeFlags,\n TypeGuards,\n ts,\n Identifier,\n} from 'ts-simple-ast';\n\nimport { CompilerDiagnostic } from './CompilerDiagnostic';\nimport { DiagnosticCode } from './DiagnosticCode';\nimport { Globals, Libs, LibAliases } from './symbols';\n\nimport * as typeUtils from './typeUtils';\n\nexport class Context {\n public readonly diagnostics: ts.Diagnostic[] = [];\n\n constructor(\n private readonly globals: Globals,\n private readonly libs: Libs,\n private readonly libAliases: LibAliases,\n ) {}\n\n public reportError(node: Node, message: string, code: DiagnosticCode): void {\n this.diagnostics.push(\n new CompilerDiagnostic(node, message, code, DiagnosticCategory.Error),\n );\n }\n\n public reportWarning(\n node: Node,\n message: string,\n code: DiagnosticCode,\n ): void {\n this.diagnostics.push(\n new CompilerDiagnostic(node, message, code, DiagnosticCategory.Warning),\n );\n }\n\n public reportUnsupported(node: Node): void {\n this.reportError(\n node,\n 'Unsupported syntax',\n DiagnosticCode.UNSUPPORTED_SYNTAX,\n );\n }\n\n public reportTypeError(node: Node): void {\n this.reportError(\n node,\n 'Could not infer type. Please add an explicit type annotation.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n }\n\n public reportTypeWarning(node: Node): void {\n this.reportWarning(\n node,\n 'Could not infer type. Deoptimized implementation will be used. Add an explicit type annotation ' +\n 'to optimize the output.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n }\n\n public getType(node: Node, required: boolean = false): Type | undefined {\n let type = this.getNotAnyType(node.getType());\n\n if (type == null && TypeGuards.isExpression(node)) {\n type = this.getNotAnyType(node.getContextualType());\n }\n\n if (type == null) {\n if (required) {\n this.reportTypeError(node);\n } else {\n this.reportTypeWarning(node);\n }\n }\n\n return type;\n }\n\n public getTypeOfSymbol(\n symbol: Symbol | undefined,\n node: Node,\n required: boolean = false,\n ): Type | undefined {\n if (symbol == null) {\n return undefined;\n }\n\n const type = this.getNotAnyType(symbol.getTypeAtLocation(node));\n if (type == null) {\n if (required) {\n this.reportTypeError(node);\n } else {\n this.reportTypeWarning(node);\n }\n }\n\n return type;\n }\n\n public getSymbol(node: Node, required: boolean = false): Symbol | undefined {\n const symbol = node.getSymbol();\n if (symbol == null) {\n const message = 'Could not determine source symbol.';\n if (required) {\n this.reportError(node, message, DiagnosticCode.UNKNOWN_SYMBOL);\n } else {\n this.reportWarning(node, message, DiagnosticCode.UNKNOWN_SYMBOL);\n }\n\n return undefined;\n }\n\n const aliased = symbol.getAliasedSymbol();\n if (aliased != null) {\n return aliased;\n }\n\n return symbol;\n }\n\n public getSymbolForType(\n node: Node,\n type: Type | undefined,\n required: boolean = false,\n ): Symbol | undefined {\n if (type == null) {\n return undefined;\n }\n\n const symbol = type.getSymbol();\n if (symbol == null) {\n const message = `Could not determine source symbol for type: ${type.getText()}.`;\n if (required) {\n this.reportError(node, message, DiagnosticCode.UNKNOWN_SYMBOL);\n } else {\n this.reportWarning(node, message, DiagnosticCode.UNKNOWN_SYMBOL);\n }\n\n return undefined;\n }\n\n const aliased = symbol.getAliasedSymbol();\n if (aliased != null) {\n return aliased;\n }\n\n return symbol;\n }\n\n public assertUnreachable(value: never): never {\n throw new Error('Should not be reached.');\n }\n\n public assertNotNull<T>(value: T | undefined | null): T {\n if (value == null) {\n throw new Error('Something went wrong. Unexpected null.');\n }\n\n return value;\n }\n\n public isOnlyGlobal(\n node: Node,\n type: Type | undefined,\n name: keyof Globals,\n ): boolean {\n return (\n this.isSymbolic(type) &&\n this.isGlobalSymbol(node, this.getSymbolForType(node, type), name)\n );\n }\n\n public isGlobal(\n node: Node,\n type: Type | undefined,\n name: keyof Globals,\n ): boolean {\n return (\n this.isSymbolic(type) &&\n this.isGlobalSymbol(node, this.getSymbolForType(node, type), name)\n );\n }\n\n public isGlobalSymbol(\n node: Node,\n symbol: Symbol | undefined,\n name: keyof Globals,\n ): boolean {\n return symbol === this.globals[name];\n }\n\n public isOnlyLib(\n node: Node,\n type: Type | undefined,\n name: keyof Libs,\n ): boolean {\n return (\n this.isSymbolic(type) &&\n this.isLibSymbol(node, this.getSymbolForType(node, type), name)\n );\n }\n\n public isLibSymbol(\n node: Node,\n symbol: Symbol | undefined,\n name: keyof Libs,\n ): boolean {\n return symbol === this.libs[name];\n }\n\n public isLibAlias(\n identifier: Identifier | undefined,\n name: keyof LibAliases,\n ): boolean {\n if (identifier == null) {\n return false;\n }\n\n return this.libAliases[name].has(identifier);\n }\n\n private isSymbolic(type: Type | undefined): boolean {\n return (\n type == null ||\n (!typeUtils.isLiteral(type) &&\n !typeUtils.isPrimitive(type) &&\n !typeUtils.isTuple(type) &&\n !typeUtils.isUnion(type) &&\n !typeUtils.isIntersection(type))\n );\n }\n\n private getNotAnyType(type: Type | undefined): Type | undefined {\n // tslint:disable-next-line no-bitwise\n if (type == null || (type.getFlags() & TypeFlags.Any) !== 0) {\n return undefined;\n }\n\n return type;\n }\n}\n","// tslint:disable ban-types no-bitwise\nimport AST, { SourceFile, Symbol, ts, Identifier } from 'ts-simple-ast';\n\nimport path from 'path';\n\nexport interface Globals {\n readonly Array: Symbol;\n readonly Buffer: Symbol;\n readonly process: Symbol;\n readonly AccountBase: Symbol;\n readonly AssetBase: Symbol;\n readonly AttributeBase: Symbol;\n readonly BlockBase: Symbol;\n readonly ContractBase: Symbol;\n readonly HeaderBase: Symbol;\n readonly InputBase: Symbol;\n readonly OutputBase: Symbol;\n readonly TransactionBase: Symbol;\n readonly ValidatorBase: Symbol;\n readonly StorageContextBase: Symbol;\n readonly StorageIteratorBase: Symbol;\n readonly syscall: Symbol;\n}\n\nconst findInterfaceFile = (ast: AST, name: string): SourceFile | undefined => {\n const files = ast.getSourceFiles();\n return files.find((file) => {\n if (!file.isDeclarationFile()) {\n return false;\n }\n\n let bufferInterface = file.getInterface(name);\n const globalNamespace = file.getNamespace('global');\n let isGlobalAugmentation = false;\n if (bufferInterface == null && globalNamespace != null) {\n bufferInterface = globalNamespace.getInterface(name);\n isGlobalAugmentation = true;\n }\n\n if (bufferInterface == null) {\n return false;\n }\n\n return (\n isGlobalAugmentation ||\n (bufferInterface.compilerNode.flags & ts.NodeFlags.GlobalAugmentation) !==\n 0\n );\n });\n};\n\nexport const getGlobals = (ast: AST): Globals => {\n let bufferFile = findInterfaceFile(ast, 'Buffer');\n if (bufferFile == null) {\n bufferFile = ast.addExistingSourceFileIfExists(\n require.resolve('@types/node/index.d.ts'),\n );\n }\n if (bufferFile == null) {\n throw new Error('Could not find Buffer');\n }\n const buffer = bufferFile.getInterfaceOrThrow('Buffer');\n\n const typeChecker = ast.getTypeChecker().compilerObject as any;\n // @ts-ignore\n const array = new Symbol(\n // @ts-ignore\n ast.global,\n typeChecker.createArrayType(typeChecker.getAnyType()).symbol as ts.Symbol,\n ).getDeclaredType();\n\n let neoFile = findInterfaceFile(ast, 'AccountBase');\n if (neoFile == null) {\n ast.addExistingSourceFiles(\n path.join(\n path.dirname(require.resolve('@neo-one/smart-contract')),\n '**',\n '*.ts',\n ),\n );\n }\n\n neoFile = findInterfaceFile(ast, 'AccountBase');\n if (neoFile == null) {\n throw new Error('Could not find NEO type definition file');\n }\n\n const neoGlobal = neoFile.getNamespaceOrThrow('global');\n\n return {\n Array: array.getSymbolOrThrow(),\n Buffer: buffer.getSymbolOrThrow(),\n process: bufferFile\n .getVariableDeclarationOrThrow('process')\n .getSymbolOrThrow(),\n AccountBase: neoGlobal\n .getInterfaceOrThrow('AccountBase')\n .getSymbolOrThrow(),\n AssetBase: neoGlobal.getInterfaceOrThrow('AssetBase').getSymbolOrThrow(),\n AttributeBase: neoGlobal\n .getInterfaceOrThrow('AttributeBase')\n .getSymbolOrThrow(),\n BlockBase: neoGlobal.getInterfaceOrThrow('BlockBase').getSymbolOrThrow(),\n ContractBase: neoGlobal\n .getInterfaceOrThrow('ContractBase')\n .getSymbolOrThrow(),\n HeaderBase: neoGlobal.getInterfaceOrThrow('HeaderBase').getSymbolOrThrow(),\n InputBase: neoGlobal.getInterfaceOrThrow('InputBase').getSymbolOrThrow(),\n OutputBase: neoGlobal.getInterfaceOrThrow('OutputBase').getSymbolOrThrow(),\n TransactionBase: neoGlobal\n .getInterfaceOrThrow('TransactionBase')\n .getSymbolOrThrow(),\n ValidatorBase: neoGlobal\n .getInterfaceOrThrow('ValidatorBase')\n .getSymbolOrThrow(),\n StorageContextBase: neoGlobal\n .getInterfaceOrThrow('StorageContextBase')\n .getSymbolOrThrow(),\n StorageIteratorBase: neoGlobal\n .getInterfaceOrThrow('StorageIteratorBase')\n .getSymbolOrThrow(),\n syscall: neoGlobal.getFunctionOrThrow('syscall').getSymbolOrThrow(),\n };\n};\n\nexport interface Libs {\n readonly SmartContract: Symbol;\n readonly MapStorage: Symbol;\n readonly SetStorage: Symbol;\n readonly Fixed: Symbol;\n readonly constant: Symbol;\n readonly verify: Symbol;\n}\n\nconst findLibFile = (ast: AST): SourceFile | undefined => {\n const files = ast.getSourceFiles();\n return files.find((file) => file.getClass('MapStorage') != null);\n};\n\nexport const getLibs = (ast: AST): Libs => {\n let libFileIn = findLibFile(ast);\n if (libFileIn == null) {\n ast.addExistingSourceFiles(\n path.join(\n path.dirname(require.resolve('@neo-one/smart-contract')),\n '**',\n '*.ts',\n ),\n );\n }\n\n libFileIn = findLibFile(ast);\n if (libFileIn == null) {\n throw new Error('Could not find NEO lib file');\n }\n\n const libFile = libFileIn;\n\n return {\n get SmartContract(): Symbol {\n return libFile.getClassOrThrow('SmartContract').getSymbolOrThrow();\n },\n get MapStorage(): Symbol {\n return libFile.getClassOrThrow('MapStorage').getSymbolOrThrow();\n },\n get SetStorage(): Symbol {\n return libFile.getClassOrThrow('SetStorage').getSymbolOrThrow();\n },\n get Fixed(): Symbol {\n return libFile.getTypeAliasOrThrow('Fixed').getSymbolOrThrow();\n },\n get constant(): Symbol {\n return libFile.getFunctionOrThrow('constant').getSymbolOrThrow();\n },\n get verify(): Symbol {\n return libFile.getFunctionOrThrow('verify').getSymbolOrThrow();\n },\n };\n};\n\nexport interface LibAliases {\n readonly Address: Set<Identifier>;\n readonly Hash256: Set<Identifier>;\n readonly Signature: Set<Identifier>;\n readonly PublicKey: Set<Identifier>;\n}\n\nexport const getLibAliases = (ast: AST): LibAliases => {\n let libFileIn = findLibFile(ast);\n if (libFileIn == null) {\n ast.addExistingSourceFiles(\n path.join(\n path.dirname(require.resolve('@neo-one/smart-contract')),\n '**',\n '*.ts',\n ),\n );\n }\n\n libFileIn = findLibFile(ast);\n if (libFileIn == null) {\n throw new Error('Could not find NEO lib file');\n }\n\n const libFile = libFileIn;\n\n return {\n get Address(): Set<Identifier> {\n return new Set(libFile\n .getTypeAliasOrThrow('Address')\n .getReferencingNodes() as Identifier[]);\n },\n get Hash256(): Set<Identifier> {\n return new Set(libFile\n .getTypeAliasOrThrow('Hash256')\n .getReferencingNodes() as Identifier[]);\n },\n get Signature(): Set<Identifier> {\n return new Set(libFile\n .getTypeAliasOrThrow('Signature')\n .getReferencingNodes() as Identifier[]);\n },\n get PublicKey(): Set<Identifier> {\n return new Set(libFile\n .getTypeAliasOrThrow('PublicKey')\n .getReferencingNodes() as Identifier[]);\n },\n };\n};\n","import Ast, { SourceFile } from 'ts-simple-ast';\n\nimport {\n EmittingScriptBuilder,\n HelperCapturingScriptBuilder,\n ScopeCapturingScriptBuilder,\n} from './sb';\nimport { Context } from '../Context';\nimport { CompileResult } from './types';\nimport { getGlobals, getLibs, getLibAliases } from '../symbols';\nimport { createHelpers } from './helper';\n\nexport interface CompileOptions {\n ast: Ast;\n sourceFile: SourceFile;\n context?: Context;\n}\n\nexport const compile = ({\n ast,\n sourceFile,\n context: contextIn,\n}: CompileOptions): CompileResult => {\n const context =\n contextIn || new Context(getGlobals(ast), getLibs(ast), getLibAliases(ast));\n const helpers = createHelpers();\n\n const helperScriptBuilder = new HelperCapturingScriptBuilder(\n context,\n helpers,\n ast,\n sourceFile,\n );\n helperScriptBuilder.process();\n\n const scopeScriptBuilder = new ScopeCapturingScriptBuilder(\n context,\n helpers,\n ast,\n sourceFile,\n helperScriptBuilder.getHelpers(),\n );\n scopeScriptBuilder.process();\n\n const emittingScriptBuilder = new EmittingScriptBuilder({\n context,\n scopes: scopeScriptBuilder.getScopes(),\n ast,\n sourceFile,\n helpers,\n allHelpers: helperScriptBuilder.getHelpers(),\n });\n emittingScriptBuilder.process();\n\n return {\n code: emittingScriptBuilder.getFinalBytecode(),\n context,\n };\n};\n","// tslint:disable ban-types\nimport Ast, { SourceFile, ts } from 'ts-simple-ast';\n\nimport appRootDir from 'app-root-dir';\nimport * as fs from 'fs-extra';\nimport * as path from 'path';\n\nconst findRoot = async (\n dir: string | string[],\n filename: string,\n): Promise<string> => {\n let start = dir;\n\n if (typeof start === 'string') {\n if (start[start.length - 1] !== path.sep) {\n start += path.sep;\n }\n start = start.split(path.sep);\n }\n if (!start.length) {\n throw new Error('tsconfig.json not found in path');\n }\n\n start.pop();\n const currentDir = start.join(path.sep);\n const file = path.join(currentDir, filename);\n const exists = await fs.pathExists(file);\n if (exists) {\n return file;\n }\n\n return findRoot(start, filename);\n};\n\nexport const makeAst = async (dir: string): Promise<Ast> => {\n const tsConfigFilePath = await findRoot(dir, 'tsconfig.json');\n const res = ts.readConfigFile(tsConfigFilePath, (value) =>\n fs.readFileSync(value, 'utf8'),\n );\n const parseConfigHost = {\n fileExists: fs.existsSync,\n readDirectory: ts.sys.readDirectory,\n readFile: ts.sys.readFile,\n useCaseSensitiveFileNames: true,\n };\n const parsed = ts.parseJsonConfigFileContent(\n res.config,\n parseConfigHost,\n path.dirname(tsConfigFilePath),\n );\n\n return new Ast({ compilerOptions: parsed.options });\n};\n\nexport const getAst = async (dir: string): Promise<Ast> => {\n const ast = await makeAst(dir);\n ast.addExistingSourceFiles(path.join(dir, '**', '*.ts'));\n // For some reason this forces Ast to resolve references. Do not remove.\n ast.getPreEmitDiagnostics();\n return ast;\n};\n\nexport const getAstForSnippet = async (\n code: string,\n): Promise<{ ast: Ast; sourceFile: SourceFile }> => {\n const ast = await makeAst(appRootDir.get());\n const sourceFile = ast.createSourceFile('code.ts', code);\n // For some reason this forces Ast to resolve references. Do not remove.\n ast.getPreEmitDiagnostics();\n return { ast, sourceFile };\n};\n\nexport function notNull<TValue>(\n value: TValue | null | undefined,\n): value is TValue {\n return value != null;\n}\n","import path from 'path';\n\nimport { CompileResult } from './types';\n\nimport * as utils from '../utils';\nimport { compile } from './compile';\n\nexport const compileScript = async (\n scriptPath: string,\n): Promise<CompileResult> => {\n const ast = await utils.getAst(path.dirname(scriptPath));\n const sourceFile = ast.getSourceFileOrThrow(scriptPath);\n return compile({ ast, sourceFile });\n};\n","import { SyntaxKind } from 'ts-simple-ast';\n\nimport { Transpiler } from './transpiler';\n\nexport abstract class NodeTranspiler<TNode> {\n public abstract readonly kind: SyntaxKind;\n\n public abstract visitNode(transpiler: Transpiler, node: TNode): void;\n}\n","import {\n ClassDeclaration,\n SyntaxKind,\n TypeGuards,\n ParameterDeclaration,\n MethodDeclaration,\n Scope,\n} from 'ts-simple-ast';\n\nimport { NodeTranspiler } from '../NodeTranspiler';\nimport { Transpiler } from '../transpiler';\nimport * as typeUtils from '../../typeUtils';\nimport { DiagnosticCode } from '../../DiagnosticCode';\n\nconst DEPLOY_METHOD = 'deploy';\n\nexport class ClassDeclarationTranspiler extends NodeTranspiler<\n ClassDeclaration\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ClassDeclaration;\n\n public visitNode(transpiler: Transpiler, node: ClassDeclaration): void {\n if (transpiler.isSmartContract(node)) {\n this.transpileSmartContract(transpiler, node);\n }\n }\n\n private transpileSmartContract(\n transpiler: Transpiler,\n node: ClassDeclaration,\n ): void {\n transpiler.visit(node.getBaseClass());\n\n this.transpileDeploy(transpiler, node);\n }\n\n private transpileDeploy(\n transpiler: Transpiler,\n node: ClassDeclaration,\n ): void {\n const existingDeploy = node.getMethod(DEPLOY_METHOD);\n if (existingDeploy != null) {\n transpiler.reportError(\n existingDeploy,\n 'The deploy method is reserved in SmartContract instances.',\n DiagnosticCode.UNSUPPORTED_SYNTAX,\n );\n return;\n }\n\n const ctor = node\n .getConstructors()\n .find((ctorDecl) => ctorDecl.isImplementation());\n let bodyText = '';\n let parameters: ParameterDeclaration[] = [];\n if (ctor == null) {\n const baseDeploy = this.getBaseDeploy(transpiler, node);\n if (baseDeploy != null) {\n bodyText = `\n super.deploy(${baseDeploy\n .getParameters()\n .map((param) => param.getName())\n .join(', ')});\n `;\n parameters = baseDeploy.getParameters();\n }\n } else {\n const firstStatement = ctor.getStatements()[0];\n if (\n firstStatement != null &&\n TypeGuards.isExpressionStatement(firstStatement)\n ) {\n const callExpr = firstStatement.getExpression();\n if (TypeGuards.isCallExpression(callExpr)) {\n const lhsrExpr = callExpr.getExpression();\n if (TypeGuards.isSuperExpression(lhsrExpr)) {\n firstStatement.replaceWithText(\n `super.deploy(${callExpr\n .getArguments()\n .map((arg) => arg.getText())\n .join(', ')});`,\n );\n }\n }\n }\n\n bodyText = ctor\n .getStatements()\n .map((statement) => statement.getText())\n .join('\\n');\n parameters = ctor.getParameters();\n }\n\n const deploy = node.addMethod({\n name: DEPLOY_METHOD,\n returnType: 'boolean',\n bodyText,\n parameters: parameters.map((param) => {\n const initializer = param.getInitializer();\n let type = param.getType().getText();\n const typeNode = param.getTypeNode();\n if (typeNode != null) {\n type = typeNode.getText();\n }\n return {\n name: param.getNameOrThrow(),\n type,\n initializer: initializer == null ? undefined : initializer.getText(),\n hasQuestionToken: param.hasQuestionToken(),\n isRestParameter: param.isRestParameter(),\n };\n }),\n scope: Scope.Public,\n });\n\n node.getInstanceProperties().forEach((property) => {\n if (\n (TypeGuards.isPropertyDeclaration(property) &&\n !property.isAbstract()) ||\n TypeGuards.isParameterDeclaration(property)\n ) {\n const name = TypeGuards.isPropertyDeclaration(property)\n ? property.getName()\n : property.getNameOrThrow();\n const type = property.getType();\n const typeNode = property.getTypeNode();\n\n if (type == null || typeNode == null) {\n transpiler.reportError(\n property,\n 'Could not determine type of property.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n } else if (\n typeUtils.isOnlyPrimitive(type) ||\n transpiler.isFixedType(property, type) ||\n transpiler.isOnlyGlobal(property, type, 'Buffer')\n ) {\n if (TypeGuards.isParameterDeclaration(property)) {\n deploy.addStatements(`\n this.${property.getName()} = ${property.getName()};\n `);\n }\n\n const init = property.getInitializer();\n let addAccessors = true;\n if (TypeGuards.isPropertyDeclaration(property) && init != null) {\n if (property.isReadonly()) {\n addAccessors = false;\n } else {\n deploy.addStatements(`\n this.${property.getName()} = ${init.getText()};\n `);\n }\n }\n\n if (addAccessors) {\n node.addGetAccessor({\n name,\n returnType: typeNode.getText(),\n bodyText: `\n return syscall('Neo.Storage.Get', syscall('Neo.Storage.GetContext'), '${name}') as ${typeNode.getText()};\n `,\n scope: property.getScope(),\n });\n node.addSetAccessor({\n name,\n parameters: [\n {\n name,\n type: typeNode.getText(),\n },\n ],\n bodyText: `\n syscall('Neo.Storage.Put', syscall('Neo.Storage.GetContext'), '${name}', ${name});\n `,\n scope: property.getScope(),\n });\n property.remove();\n }\n } else if (transpiler.isOnlyLib(property, type, 'MapStorage')) {\n property.setInitializer(\n `new MapStorage(syscall('Neo.Runtime.Serialize', '${name}'))`,\n );\n } else if (transpiler.isOnlyLib(property, type, 'SetStorage')) {\n property.setInitializer(\n `new SetStorage(syscall('Neo.Runtime.Serialize', '${name}'))`,\n );\n } else {\n transpiler.reportError(\n property,\n 'Unsupported SmartContract property.',\n DiagnosticCode.UNSUPPORTED_SYNTAX,\n );\n }\n }\n });\n\n deploy.addStatements(`\n return true;\n `);\n\n if (ctor != null) {\n ctor.remove();\n }\n }\n\n private getBaseDeploy(\n transpiler: Transpiler,\n node: ClassDeclaration,\n ): MethodDeclaration | undefined {\n const baseClass = node.getBaseClass();\n if (baseClass == null) {\n return undefined;\n }\n\n const deploy = baseClass.getInstanceMethod('deploy');\n if (deploy == null) {\n return this.getBaseDeploy(transpiler, baseClass);\n }\n\n return deploy;\n }\n}\n","import { ClassDeclarationTranspiler } from './ClassDeclarationTranspiler';\n\nexport default [ClassDeclarationTranspiler];\n","import { Node, ts } from 'ts-simple-ast';\n\nexport const isPublic = (node: Node): boolean =>\n // tslint:disable-next-line no-bitwise\n (node.getCombinedModifierFlags() & ts.ModifierFlags.Public) !== 0;\n","// tslint:disable ban-types\nimport Ast, {\n Node,\n ClassInstanceMemberTypes,\n ClassDeclaration,\n Type,\n Symbol,\n TypeGuards,\n Identifier,\n SyntaxKind,\n TypeNode,\n} from 'ts-simple-ast';\nimport { ABIParameter, ABIReturn, ABIFunction } from '@neo-one/client';\n\nimport { Context } from '../../Context';\nimport { DiagnosticCode } from '../../DiagnosticCode';\nimport { Globals, Libs, LibAliases } from '../../symbols';\nimport { NodeTranspiler } from '../NodeTranspiler';\nimport { Transpiler } from './Transpiler';\nimport declarations from '../declaration';\nimport * as nodeUtils from '../../nodeUtils';\nimport * as typeUtils from '../../typeUtils';\nimport { TranspileResult } from '../types';\n\nconst transpilers = [declarations];\n\ninterface Transpilers {\n [kind: number]: NodeTranspiler<any>;\n}\n\nexport class NEOTranspiler implements Transpiler {\n private readonly transpilers: Transpilers;\n\n constructor(\n private readonly context: Context,\n private readonly ast: Ast,\n private readonly smartContract: ClassDeclaration,\n ) {\n this.transpilers = (transpilers as Array<\n Array<new () => NodeTranspiler<any>>\n >)\n .reduce((acc, kindCompilers) => acc.concat(kindCompilers), [])\n .reduce(\n (acc, KindCompiler) => {\n const kindCompiler = new KindCompiler();\n if (acc[kindCompiler.kind] != null) {\n throw new Error(\n `Found duplicate compiler for kind ${kindCompiler.kind}`,\n );\n }\n\n acc[kindCompiler.kind] = kindCompiler;\n return acc;\n },\n {} as Transpilers,\n );\n }\n\n public process(): TranspileResult {\n const file = this.smartContract.getSourceFile();\n this.visit(file);\n\n const smartContract = file.getClassOrThrow(\n this.smartContract.getNameOrThrow(),\n );\n const methods = smartContract\n .getType()\n .getProperties()\n .map((symbol) => this.processProperty(symbol))\n .reduce((acc, values) => acc.concat(values), []);\n\n const verifySwitches: string[] = [];\n const applicationSwitches: string[] = [];\n const functions: ABIFunction[] = [];\n for (const [method, func] of methods) {\n const name = TypeGuards.isParameterDeclaration(method)\n ? method.getNameOrThrow()\n : method.getName();\n let methodSwitch;\n if (TypeGuards.isMethodDeclaration(method)) {\n let argsStatement = '';\n let args = '';\n if (method.getParameters().length > 0) {\n const argsTypes = method\n .getParameters()\n .map((param) => this.getTypeText(param, this.getType(param)))\n .join(',');\n argsStatement = `const args = syscall('Neo.Runtime.GetArgument', 1) as [${argsTypes}];\\n`;\n args = method\n .getParameters()\n .map((param, idx) => `args[${idx}]`)\n .join(', ');\n }\n let call = `contract.${name}(${args})`;\n if (!typeUtils.isVoid(method.getReturnType())) {\n call = `syscall('Neo.Runtime.Return', ${call})`;\n }\n methodSwitch = `\n if (method === '${name}') {\n ${argsStatement}${call};\n }\n `;\n } else if (\n TypeGuards.isGetAccessorDeclaration(method) ||\n TypeGuards.isPropertyDeclaration(method) ||\n TypeGuards.isParameterDeclaration(method)\n ) {\n methodSwitch = `\n if (method === '${name}') {\n syscall('Neo.Runtime.Return', contract.${name});\n }\n `;\n } else {\n const param = method.getParameters()[0];\n const typeText = this.getTypeText(param, this.getType(param));\n methodSwitch = `\n if (method === 'set${name[0].toUpperCase()}${name.slice(1)}') {\n contract.${name} = (syscall('Neo.Runtime.GetArgument', 1) as [${typeText}])[0];\n }\n `;\n }\n\n applicationSwitches.push(methodSwitch);\n if (func.verify) {\n verifySwitches.push(methodSwitch);\n }\n\n functions.push(func);\n }\n\n const applicationFallback =\n applicationSwitches.length === 0\n ? 'throw new Error('\n : ` else {\n throw new Error('Unknown method');\n }`;\n let verifyFallback = `\n if (!syscall('Neo.Runtime.CheckWitness', contract.owner)) {\n throw new Error('Invalid witness');\n }\n `;\n if (verifySwitches.length > 0) {\n verifyFallback = `else {\n ${verifyFallback}\n }`;\n }\n\n const statements = `\n const contract = new ${this.smartContract.getName()}();\n const method = syscall('Neo.Runtime.GetArgument', 0) as string;\n if (syscall('Neo.Runtime.GetTrigger') === 0x10) {\n ${applicationSwitches.join(' else ')}\n ${applicationFallback}\n } else if (syscall('Neo.Runtime.GetTrigger') === 0x00) {\n ${verifySwitches.join(' else ')}\n ${verifyFallback}\n } else {\n throw new Error('Unsupported trigger');\n }\n `;\n\n file.addStatements(statements);\n\n return {\n ast: this.ast,\n sourceFile: file,\n abi: { functions },\n context: this.context,\n };\n }\n\n public visit(node?: Node): void {\n if (node == null) {\n return;\n }\n\n const transpiler = this.transpilers[node.compilerNode.kind];\n if (transpiler == null) {\n node.getChildren().forEach((child) => {\n this.visit(child);\n });\n } else {\n transpiler.visitNode(this, node);\n }\n }\n\n public isSmartContract(node: ClassDeclaration): boolean {\n return (\n node === this.smartContract ||\n node.getDerivedClasses().some((derived) => this.isSmartContract(derived))\n );\n }\n\n public getType(node: Node): Type | undefined {\n return this.context.getType(node);\n }\n\n public getTypeOfSymbol(\n symbol: Symbol | undefined,\n node: Node,\n ): Type | undefined {\n return this.context.getTypeOfSymbol(symbol, node);\n }\n\n public getSymbol(node: Node): Symbol | undefined {\n return this.context.getSymbol(node);\n }\n\n public isOnlyGlobal(\n node: Node,\n type: Type | undefined,\n name: keyof Globals,\n ): boolean {\n return this.context.isOnlyGlobal(node, type, name);\n }\n\n public isLibSymbol(\n node: Node,\n symbol: Symbol | undefined,\n name: keyof Libs,\n ): boolean {\n return this.context.isLibSymbol(node, symbol, name);\n }\n\n public isOnlyLib(\n node: Node,\n type: Type | undefined,\n name: keyof Libs,\n ): boolean {\n return this.context.isOnlyLib(node, type, name);\n }\n\n public isLibAlias(\n identifier: Identifier | undefined,\n name: keyof LibAliases,\n ): boolean {\n return this.context.isLibAlias(identifier, name);\n }\n\n public isFixedType(node: Node, type: Type | undefined): boolean {\n if (type == null) {\n return false;\n }\n\n return this.isLibSymbol(\n node,\n type.getAliasSymbol() || type.getSymbol(),\n 'Fixed',\n );\n }\n\n public reportError(node: Node, message: string, code: DiagnosticCode): void {\n this.context.reportError(node, message, code);\n }\n\n public reportUnsupported(node: Node): void {\n this.context.reportUnsupported(node);\n }\n\n public assertNotNull<T>(value: T | undefined | null): T {\n return this.context.assertNotNull(value);\n }\n\n public filterNotNull<T>(value: T | undefined | null): value is T {\n return value != null;\n }\n\n private processProperty(\n symbol: Symbol,\n ): Array<[ClassInstanceMemberTypes, ABIFunction]> {\n const decls = symbol\n .getDeclarations()\n .filter(\n (symbolDecl) =>\n !TypeGuards.isMethodDeclaration(symbolDecl) ||\n symbolDecl.isImplementation(),\n );\n if (\n !(\n decls.length === 1 ||\n (decls.length === 2 &&\n decls.some((accessor) =>\n TypeGuards.isGetAccessorDeclaration(accessor),\n ) &&\n decls.some((accessor) =>\n TypeGuards.isSetAccessorDeclaration(accessor),\n ))\n )\n ) {\n this.reportError(\n symbol.getDeclarations()[0],\n 'Invalid contract function. Resolved to multiple implementation declarations.',\n DiagnosticCode.INVALID_CONTRACT_METHOD,\n );\n return [];\n }\n const decl = decls[0];\n if (\n !(\n TypeGuards.isMethodDeclaration(decl) ||\n TypeGuards.isPropertyDeclaration(decl) ||\n TypeGuards.isGetAccessorDeclaration(decl) ||\n TypeGuards.isSetAccessorDeclaration(decl) ||\n TypeGuards.isParameterDeclaration(decl)\n )\n ) {\n return [];\n }\n\n const name = symbol.getName();\n const type = this.getTypeOfSymbol(symbol, decl);\n if (type == null) {\n return [];\n }\n\n if (\n TypeGuards.isGetAccessorDeclaration(decl) ||\n TypeGuards.isSetAccessorDeclaration(decl)\n ) {\n const getDecl = TypeGuards.isGetAccessorDeclaration(decl)\n ? decl\n : decl.getGetAccessor();\n const setDecl = TypeGuards.isSetAccessorDeclaration(decl)\n ? decl\n : decl.getSetAccessor();\n const result: Array<[ClassInstanceMemberTypes, ABIFunction]> = [];\n if (getDecl != null && nodeUtils.isPublic(getDecl)) {\n result.push([\n getDecl,\n {\n name,\n constant: true,\n verify: this.hasVerify(getDecl),\n returnType: this.toABIReturn(\n getDecl,\n type,\n this.getIdentifier(getDecl.getReturnTypeNode()),\n ) || { type: 'ByteArray' },\n },\n ]);\n }\n\n if (setDecl != null && nodeUtils.isPublic(setDecl)) {\n result.push([\n setDecl,\n {\n name,\n constant: false,\n verify: this.hasVerify(setDecl),\n parameters: [\n {\n name: setDecl.getParameters()[0].getNameOrThrow(),\n ...(this.toABIReturn(\n setDecl,\n type,\n this.getIdentifier(setDecl.getParameters()[0].getTypeNode()),\n ) || { type: 'ByteArray' }),\n },\n ],\n returnType: { type: 'Void' },\n },\n ]);\n }\n\n return result;\n }\n\n if (!nodeUtils.isPublic(decl)) {\n return [];\n }\n\n const verify = this.hasVerify(decl);\n if (TypeGuards.isMethodDeclaration(decl)) {\n const callSignatures = type.getCallSignatures();\n if (callSignatures.length !== 1) {\n this.reportError(\n decl,\n 'Invalid contract function. Resolved to multiple call signatures.',\n DiagnosticCode.INVALID_CONTRACT_METHOD,\n );\n return [];\n }\n const callSignature = callSignatures[0];\n\n const parameters = callSignature\n .getParameters()\n .map((parameter) => this.toABIParameter(parameter))\n .filter(this.filterNotNull);\n const returnType = this.toABIReturn(\n decl,\n callSignature.getReturnType(),\n this.getIdentifier(decl.getReturnTypeNode()),\n );\n const constant = this.hasDecorator(decl, 'constant');\n const func = {\n name,\n constant,\n verify,\n parameters,\n returnType: returnType || { type: 'ByteArray' },\n };\n return [[decl, func]];\n } else {\n const returnType = this.toABIReturn(\n decl,\n type,\n this.getIdentifier(decl.getTypeNode()),\n );\n const func = {\n name,\n constant: true,\n verify,\n returnType: returnType || { type: 'ByteArray' },\n };\n\n return [[decl, func]];\n }\n }\n\n private hasVerify(decl: ClassInstanceMemberTypes): boolean {\n return this.hasDecorator(decl, 'verify');\n }\n\n private hasDecorator(\n decl: ClassInstanceMemberTypes,\n name: 'verify' | 'constant',\n ): boolean {\n return decl\n .getDecorators()\n .some((decorator) =>\n this.isOnlyLib(\n decorator.getExpression(),\n this.getType(decorator.getExpression()),\n name,\n ),\n );\n }\n\n private toABIParameter(param: Symbol): ABIParameter | undefined {\n const decl = this.assertNotNull(param.getDeclarations()[0]);\n const id = TypeGuards.isParameterDeclaration(decl)\n ? this.getIdentifier(decl.getTypeNode())\n : undefined;\n\n const type = this.toABIReturn(decl, this.getTypeOfSymbol(param, decl), id);\n if (type == null) {\n return undefined;\n }\n\n return { ...type, name: param.getName() };\n }\n\n private toABIReturn(\n node: Node,\n resolvedType: Type | undefined,\n typeIdentifier?: Identifier,\n ): ABIReturn | undefined {\n if (resolvedType == null && typeIdentifier == null) {\n this.reportError(\n node,\n 'Could not detect ABI, unknown type.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n return undefined;\n }\n\n if (typeUtils.isOnlyBoolean(resolvedType)) {\n return { type: 'Boolean' };\n } else if (this.isLibAlias(typeIdentifier, 'Address')) {\n return { type: 'Hash160' };\n } else if (this.isLibAlias(typeIdentifier, 'Hash256')) {\n return { type: 'Hash256' };\n } else if (this.isLibAlias(typeIdentifier, 'Signature')) {\n return { type: 'Signature' };\n } else if (this.isLibAlias(typeIdentifier, 'PublicKey')) {\n return { type: 'PublicKey' };\n } else if (typeUtils.isVoid(resolvedType)) {\n return { type: 'Void' };\n } else if (typeUtils.isOnlyString(resolvedType)) {\n return { type: 'String' };\n } else if (typeUtils.isOnlyNumberLiteral(resolvedType)) {\n return { type: 'Integer', decimals: 0 };\n } else if (this.isFixedType(node, resolvedType) && resolvedType != null) {\n const decimals = this.getFixedDecimals(resolvedType);\n return { type: 'Integer', decimals };\n } else if (typeUtils.isOnlyNumber(resolvedType)) {\n return { type: 'Integer', decimals: 0 };\n } else if (typeUtils.isOnlyArray(resolvedType) && resolvedType != null) {\n const value = this.toABIReturn(node, resolvedType.getTypeArguments()[0]);\n if (value != null) {\n return { type: 'Array', value };\n }\n } else if (this.isOnlyGlobal(node, resolvedType, 'Buffer')) {\n return { type: 'ByteArray' };\n } else {\n this.reportError(\n node,\n 'Invalid contract type.',\n DiagnosticCode.INVALID_CONTRACT_TYPE,\n );\n }\n\n return undefined;\n }\n\n private getFixedDecimals(type: Type): number {\n return (type.getUnionTypes()[1].getIntersectionTypes()[1]\n .compilerType as any).value;\n }\n\n private getIdentifier(node: TypeNode | undefined): Identifier | undefined {\n return node == null\n ? node\n : node.getFirstChildByKind(SyntaxKind.Identifier);\n }\n\n private getTypeText(node: Node, type: Type | undefined): string {\n let typeText = 'any';\n if (type == null) {\n this.reportError(node, 'Unknown type', DiagnosticCode.UNKNOWN_TYPE);\n } else if (this.isFixedType(node, type)) {\n typeText = 'number';\n } else {\n typeText = type.getText();\n }\n\n return typeText;\n }\n}\n","import Ast, { ClassDeclaration } from 'ts-simple-ast';\n\nimport { TranspileResult } from './types';\nimport { Context } from '../Context';\nimport { getGlobals, getLibs, getLibAliases } from '../symbols';\nimport { NEOTranspiler } from './transpiler';\n\nexport interface TranspileOptions {\n readonly ast: Ast;\n readonly smartContract: ClassDeclaration;\n readonly context?: Context;\n}\n\nexport const transpile = ({\n ast,\n smartContract,\n context: contextIn,\n}: TranspileOptions): TranspileResult => {\n const context =\n contextIn || new Context(getGlobals(ast), getLibs(ast), getLibAliases(ast));\n const transpiler = new NEOTranspiler(context, ast, smartContract);\n\n return transpiler.process();\n};\n","import * as utils from './utils';\nimport { transpile } from './transpile';\nimport { compile } from './compile';\nimport { ts } from 'ts-simple-ast';\nimport { ABI } from '@neo-one/client/src';\n\nexport interface CompileContractOptions {\n readonly dir: string;\n readonly filePath: string;\n readonly name: string;\n}\n\nexport interface CompileContractResult {\n code: Buffer;\n diagnostics: ts.Diagnostic[];\n abi: ABI;\n}\n\nexport const compileContract = async ({\n dir,\n filePath,\n name,\n}: CompileContractOptions): Promise<CompileContractResult> => {\n const ast = await utils.getAst(dir);\n const smartContract = ast\n .getSourceFileOrThrow(filePath)\n .getClassOrThrow(name);\n const { ast: transpiledAst, sourceFile, abi, context } = transpile({\n ast,\n smartContract,\n });\n const { code, context: finalContext } = compile({\n ast: transpiledAst,\n sourceFile,\n context,\n });\n\n return {\n code,\n diagnostics: finalContext.diagnostics,\n abi,\n };\n};\n","import Blockchain from '@neo-one/node-blockchain';\nimport Ast, { DiagnosticCategory, SourceFile } from 'ts-simple-ast';\nimport { InvocationResult } from '@neo-one/client-core';\nimport { Monitor } from '@neo-one/monitor';\n\nimport levelup from 'levelup';\nimport levelUpStorage from '@neo-one/node-storage-levelup';\nimport memdown from 'memdown';\nimport { test as testNet } from '@neo-one/node-neo-settings';\nimport vm from '@neo-one/node-vm';\n\nimport { compile } from './compile';\n\nexport const executeScript = async (\n monitor: Monitor,\n ast: Ast,\n sourceFile: SourceFile,\n prelude: Buffer = Buffer.alloc(0, 0),\n): Promise<InvocationResult> => {\n const blockchain = await Blockchain.create({\n log: () => {\n // tslint:disable-next-line\n },\n settings: testNet,\n storage: levelUpStorage({\n context: { messageMagic: testNet.messageMagic },\n db: levelup(\n // @ts-ignore\n memdown(),\n ),\n }),\n vm,\n monitor,\n });\n const { code: compiledCode, context } = compile({ ast, sourceFile });\n const error = context.diagnostics.filter(\n (diagnostic) => diagnostic.category === DiagnosticCategory.Error,\n )[0];\n if (error != null) {\n throw new Error(\n `Compilation error: ${error.messageText} at ${error.source}`,\n );\n }\n\n const result = await blockchain.invokeScript(\n Buffer.concat([prelude, compiledCode]),\n monitor,\n );\n return result;\n};\n","import { ClassDeclaration } from 'ts-simple-ast';\n\nimport * as utils from './utils';\nimport { getLibs } from './symbols';\n\nexport interface Contracts {\n [file: string]: string[];\n}\n\nexport const scan = async (dir: string): Promise<Contracts> => {\n const ast = await utils.getAst(dir);\n const libs = getLibs(ast);\n const smartContract = libs.SmartContract.getDeclarations()[0] as ClassDeclaration;\n return smartContract.getDerivedClasses().reduce(\n (acc, derived) => {\n if (!derived.isAbstract()) {\n const file = derived.getSourceFile().getFilePath();\n if (acc[file] == null) {\n acc[file] = [];\n }\n acc[file].push(derived.getNameOrThrow());\n }\n\n return acc;\n },\n {} as Contracts,\n );\n};\n","import { scan } from './scan';\n\nexport interface FindContractResult {\n filePath: string;\n name: string;\n}\n\nexport const findContract = async (\n dir: string,\n name: string,\n): Promise<FindContractResult> => {\n const contracts = await scan(dir);\n const found = Object.entries(contracts)\n .map(([path, contractNames]) => ({\n path,\n contractNames: contractNames.filter(\n (contractName) => name === contractName,\n ),\n }))\n .filter(({ contractNames }) => contractNames.length > 0);\n if (found.length > 1) {\n throw new Error(`Found multiple contracts with name ${name}`);\n } else if (found.length === 0) {\n throw new Error(`Cound not find contract with name ${name}`);\n }\n\n return {\n filePath: found[0].path,\n name,\n };\n};\n"],"names":["JumpTable","sb","node","body","jumpNumber","capture","table","push","outerNode","forEach","emitHelper","helpers","if","emitOp","emitPushInt","emitBytecode","bytecode","ProgramCounter","DeferredProgramCounter","offset","other","pc","Error","getPC","Jump","op","Call","plus","Jmp","KnownProgramCounter","LastProgramCounter","startPC","children","setPC","child","ProgramCounterHelper","first","last","NodeCompiler","Helper","options","ArrFilterHelper","map","withIndex","pushValue","forLoop","toBoolean","undefined","ArrForEachHelper","each","ArrMapHelper","CloneArrayHelper","ExtendArrayHelper","optionsIn","pushValueOptions","createUndefined","ForTypeHelper","types","defaultCase","noCastOptions","type","cast","getType","filter","testType","isType","innerOptions","throwTypeError","length","process","case","forType","isRuntimeType","SerializableType","invokeGlobal","name","scope","getGlobal","emitPushString","getInternalObjectProperty","invokeCall","SERIALIZE_NAME","invokeSerialize","DESERIALIZE_NAME","invokeDeserialize","serializeType","deserializeType","isSerializedType","getTypes","isBoolean","isString","isNumber","getGlobalProperty","instanceof","unwrapBuffer","Buffer","wrapBuffer","unwrapArray","arrMap","Array","wrapArray","ArgumentsHelper","args","getArguments","reverse","arg","visit","InternalFunctionProperties","BindFunctionObjectThisHelper","property","CALL","both","overwrite","cloneFunctionObject","bindThis","CONSTRUCT","bindFunctionThis","BindFunctionThisHelper","whenTrue","cloneFunction","CallHelper","cloneArray","emitCall","handleCompletion","getCompletionVal","CloneFunctionHelper","CloneFunctionObjectHelper","shallowCloneObject","setInternalObjectProperty","CreateCallArrayHelper","outerOptions","createFunctionArray","withScope","parameters","TypeGuards","isBodyableNode","getBodyOrThrow","getBody","isExpression","createNormalCompletion","CreateConstructArrayHelper","withoutScope","emit","CreateFunctionArrayHelper","pushAll","function","CreateFunctionObjectHelper","createObject","FunctionHelper","jump","jumpTable","add","InvokeCallHelper","getKey","overwriteThis","noArgs","stringify","call","InvokeConstructHelper","noPushValueOptions","NewHelper","getPropertyObjectProperty","setDataPropertyObjectProperty","invokeConstruct","ParametersHelper","getParameters","param","idx","getNameOrThrow","initializer","getInitializer","isRestParameter","reportUnsupported","isUndefined","isOptional","decorators","getDecorators","set","plainOptions","GenericDeserializeHelper","deserialize","createFunctionObject","GenericSerializeHelper","serialize","TypedHelper","knownType","CreateCompletionHelper","CreateNormalCompletionHelper","createCompletion","CreateThrowCompletionHelper","GetCompletionBaseHelper","index","GetCompletionErrorHelper","GetCompletionValHelper","DiagnosticCode","NORMAL_COMPLETION","BREAK_COMPLETION","CONTINUE_COMPLETION","CATCH_COMPLETION","ASSIGNMENT_OPERATORS","Set","SyntaxKind","EqualsToken","PlusEqualsToken","MinusEqualsToken","AsteriskAsteriskEqualsToken","AsteriskEqualsToken","SlashEqualsToken","PercentEqualsToken","AmpersandEqualsToken","BarEqualsToken","CaretEqualsToken","LessThanLessThanEqualsToken","GreaterThanGreaterThanGreaterThanEqualsToken","GreaterThanGreaterThanEqualsToken","isValidParent","isTryStatement","isFunctionLikeDeclaration","isArrowFunction","isSourceFile","HandleCompletionHelper","getCompletionError","parent","getParent","getParentWhile","parentNode","reportError","SOMETHING_WENT_WRONG","catchPC","constants","emitJmp","PickCompletionValHelper","ThrowHelper","createThrowCompletion","ThrowTypeErrorHelper","createString","throw","CaseHelper","cases","addCase","condition","ForLoopHelper","incrementor","emitLoop","withProgramCounter","loopPC","getFirst","equals","getCurrent","getLast","breakPC","innerPC","continuePC","breakPCOptions","continuePCOptions","IfHelper","whenFalse","endPC","whenFalsePC","whenTruePC","ProcessStatementsHelper","createScope","emitStatements","getFunctions","func","getName","getVariableDeclarations","decl","compilerStatements","compilerNode","statements","getStatements","statement","getNodeFromCompilerNode","noValueOptions","CreatePrimitiveHelper","Types","CreateBooleanHelper","Boolean","GetPrimitiveHelper","GetBooleanHelper","IsHelper","IsBooleanHelper","constraint","getConstraint","hasUnionType","isUnionType","getUnionTypes","some","hasIntersectionType","isIntersectionType","getIntersectionTypes","hasType","isOnly","isNullable","every","unionType","intersectionType","isUndefinedType","isOnlyUndefined","hasUndefined","isNull","isNullType","isOnlyNull","hasNull","isOnlyNumberLiteral","tpe","isNumberLiteralType","isNumberType","isOnlyNumber","hasNumber","isStringType","isStringLiteralType","isOnlyString","hasString","isBooleanType","isBooleanLiteralType","isOnlyBoolean","hasBoolean","hasTypeFlag","flag","compilerType","flags","isSymbol","TypeFlags","ESSymbol","ESSymbolLike","isOnlySymbol","isPrimitive","isOnlyPrimitive","isOnlyObject","isArray","isArrayType","isOnlyArray","isTuple","isTupleType","isOnlyTuple","isSame","type0","type1","isUnion","isIntersection","isLiteral","isLiteralType","isAnyType","Any","isVoid","Void","ToBooleanHelper","convertType","convertUnknownType","typeUtils","emitPushBoolean","convertBoolean","convertNumber","convertString","getBoolean","getNumber","getString","isObject","CreateNullHelper","Null","IsNullHelper","CreateNumberHelper","Number","GetNumberHelper","IsNumberHelper","ToNumberHelper","convertUnknown","convertUndefined","convertNull","convertSymbol","convertObject","toPrimitive","Object","shouldThrowOnObject","emitIf","check","CreateObjectHelper","CreatePropertyObjectHelper","obj","addUnique","pobj","arrForEach","get","ElementAccessHelper","expr","noSetValueOptions","value","getExpression","valueType","prop","getArgumentExpressionOrThrow","propType","toObject","setValue","valueIndex","setProperty","setNumberProperty","getSymbol","setSymbol","getNumberProperty","getSymbolObjectProperty","getArrayIndex","isArrayInstance","toString","pickValue","setPropertyObjectProperty","setArrayIndex","setSymbolObjectProperty","FindObjectPropertyHelper","accessor","dataExists","data","getObject","prepareLoop","getPropertyObject","GetObjectHelperBase","GetInternalObjectHelper","GetInternalObjectPropertyHelper","getInternalObject","GetObjectHelper","GetPropertyObjectHelper","GetObjectPropertyHelperBase","findObjectProperty","bind","GetPropertyObjectPropertyHelper","GetSymbolObjectHelper","GetSymbolObjectPropertyHelper","getSymbolObject","InstanceofHelper","IsObjectHelper","SetObjectAccessorPropertyHelperBase","hasSet","hasGet","SetAccessorPropertyObjectPropertyHelper","SetAccessorSymbolObjectPropertyHelper","SetObjectDataPropertyHelperBase","SetDataPropertyObjectPropertyHelper","SetDataSymbolObjectPropertyHelper","SetInternalObjectPropertyHelper","SetObjectPropertyHelperBase","setDataProperty","SetPropertyObjectPropertyHelper","SetSymbolObjectPropertyHelper","setDataSymbolObjectProperty","ShallowCloneObjectHelper","roll","clone","shallowCloneObj","ShallowCloneObjHelper","scopeOptions","counter","ToObjectHelper","convertPrimitive","concat","primitive","CreateStringHelper","String","GetStringHelper","IsStringHelper","ToStringHelper","CreateSymbolHelper","Symbol","GetSymbolHelper","IsSymbolHelper","CreateUndefinedHelper","Undefined","IsUndefinedHelper","IsNullOrUndefinedHelper","IsSameTypeHelper","unwrapType","ToPrimitiveHelper","preferredType","toPrimitiveObject","tryConvert","methods","UnwrapTypeHelper","UnwrapValHelper","EqualsEqualsEqualsHelper","left","right","equalsEqualsEqualsSameType","equalsEqualsEqualsUnknown","EqualsEqualsEqualsNumberHelper","EqualsEqualsEqualsSameTypeHelper","isNullOrUndefined","unwrapVal","EqualsEqualsEqualsUnknownHelper","isSameType","EqualsEqualsHelper","leftType","rightType","equalsEqualsType","equalsEqualsUnknown","equalsEqualsEquals","equalsEqualsLeftNumberRightBooleanOrString","toNumber","createNumber","equalsEqualsRightNumberLeftBooleanOrString","equalsEqualsEqualsNumber","copy","LessThanHelper","leftFirst","GLOBAL_PROPERTIES","InternalGlobalProperties","AddArgumentsHelper","ARGUMENTS","AddConstructorObjectHelper","addPrototypeProperties","addConstructorProperties","AddArrayObjectHelper","addMap","addFilter","addReduce","createConstructArray","extendArray","getThis","setArrayValue","addMapLike","arrFilter","addMethod","accum","helper","AddBufferObjectHelper","addConstructor","addConcat","AddBooleanObjectHelper","AddErrorObjectHelper","AddModulesHelper","MODULES","AddNumberObjectHelper","AddObjectObjectHelper","AddStringObjectHelper","AddSymbolObjectHelper","SetGlobalObjectHelper","setGlobal","addArguments","addObjectObject","addBooleanObject","addNumberObject","addStringObject","addSymbolObject","addArrayObject","addBufferObject","addErrorObject","addModules","GetArgumentHelper","GetGlobalPropertyHelper","CreateArrayHelper","new","GetArrayIndexHelper","getArrayValue","InternalArrayProperties","GetArrayValueHelper","DATA_ARRAY","SetArrayIndexHelper","setIndex","SetArrayValueHelper","UnwrapArrayHelper","WrapArrayHelper","invokeArrayConstruct","AddEmptyModuleHelper","getModules","ExportHelper","defaultExport","addExport","ExportSingleHelper","getCurrentModule","export","GetCurrentModuleHelper","getModule","moduleIndex","GetModuleHelper","GetModulesHelper","InternalBlockchainInterfaceProperties","IsBlockchainInterfaceHelper","UnwrapBlockchainInterfaceHelper","BLOCKCHAIN_INTERFACE","WrapBlockchainInterfaceHelper","CreateBufferHelper","InternalBufferProperties","GetBufferValueHelper","DATA","SetBufferValueHelper","UnwrapBufferHelper","getBufferValue","WrapBufferHelper","createBuffer","setBufferValue","createHelpers","cache","memoized","HelperClass","key","ClassDeclarationCompiler","ClassDeclaration","noSuperClassOptions","extendsExpr","getExtends","superClassIn","superClassOptions","superClass","ctorImpl","getConstructors","find","ctor","isImplementation","getInstanceProperties","isPropertyDeclaration","getInstanceMethods","method","createCallArray","getSetAccessors","isStatic","getAccessor","getGetAccessor","setAccessorPropertyObjectProperty","getGetAccessors","getSetAccessor","isNamedExport","isDefaultExport","exportSingle","EnumDeclarationCompiler","EnumDeclaration","EnumMemberCompiler","EnumMember","ExportAssignmentCompiler","ExportAssignment","isExportEquals","ExportDeclarationCompiler","ExportDeclaration","namedExport","getNameNode","getText","alias","getAliasIdentifier","moduleSpecifier","getModuleSpecifierSourceFile","getNamedExports","getLocalTargetDeclarations","isTypeAliasDeclaration","loadModule","hasExport","FunctionDeclarationCompiler","FunctionDeclaration","ImportDeclarationCompiler","ImportDeclaration","getModuleSpecifierSourceFileOrThrow","namespaceImport","getNamespaceImport","createPropertyObject","defaultImport","getDefaultImport","namedImports","getNamedImports","namedImport","getImportDeclaration","TypeAliasDeclarationCompiler","TypeAliasDeclaration","VariableDeclarationCompiler","VariableDeclaration","VariableDeclarationListCompiler","VariableDeclarationList","getDeclarations","DecoratorCompiler","Decorator","ArrayLiteralExpressionCompiler","ArrayLiteralExpression","elements","getElements","element","ArrowFunctionCompiler","ArrowFunction","AsExpressionCompiler","AsExpression","castOptions","AwaitExpressionCompiler","AwaitExpression","BinaryExpressionCompiler","BinaryExpression","kind","getOperatorToken","getKind","visitAssignmentOperator","AsteriskToken","SlashToken","PercentToken","PlusToken","MinusToken","GreaterThanGreaterThanToken","LessThanLessThanToken","LessThanToken","LessThanEqualsToken","GreaterThanToken","GreaterThanEqualsToken","ExclamationEqualsToken","EqualsEqualsToken","AmpersandToken","BarToken","CaretToken","GreaterThanGreaterThanGreaterThanToken","InKeyword","InstanceOfKeyword","CommaToken","AsteriskAsteriskToken","EqualsEqualsEqualsToken","ExclamationEqualsEqualsToken","visitExpressionOperator","AmpersandAmpersandToken","BarBarToken","visitLogicalExpressionOperator","assertUnreachable","getLeft","getRight","token","visitExpressionOperatorBase","setValueOptions","visitLogicalExpressionOperatorBase","leftHelper","rightHelper","visitNumeric","isBinaryNumeric","lessThan","createBoolean","equalsEquals","BooleanLiteralCompiler","TrueBooleanLiteralCompiler","TrueKeyword","FalseBooleanLiteralCompiler","FalseKeyword","SimpleSysCallType","VoidClass","native","VoidValue","NumberClass","NumberValue","StringClass","StringValue","BooleanClass","BooleanValue","BlockchainInterface","isOnlyGlobal","isGlobal","isBlockchainInterface","unwrapBlockchainInterface","wrapBlockchainInterface","AccountValue","AssetValue","AttributeValue","BlockValue","ContractValue","HeaderValue","InputValue","OutputValue","TransactionValue","ValidatorValue","StorageContextValue","StorageIteratorValue","BLOCKCHAIN_INTERFACES","BufferClass","BufferValue","ArrayValue","isOnlyType","getArrayType","handleArgument","handleResult","TupleValue","getTupleElements","tupleType","UNKNOWN_TYPE","UnionValue","valueTypes","join","foundType","genericSerialize","innerType","genericDeserialize","StorageKey","StorageValue","TypeAlias","declaration","SerializableValueArrayAlias","SerializableValueObjectAlias","SerializableValueAlias","toSignature","Serializable","shouldSerialize","shouldHandleNull","toDeclaration","emitSysCall","typeIn","handleValue","SerializableValue","SysCallArgument","SimpleSysCall","returnType","slice","entries","SYSCALLS","arrayType","sig","addSerialize","handleNull","getArgument","CallExpressionCompiler","CallExpression","isIdentifier","isGlobalSymbol","handleSysCall","isSuperExpression","handleSuperConstruct","isElementAccessExpression","isPropertyAccessExpression","lhs","elementAccess","sysCallName","INVALID_SYS_CALL","isStringLiteral","sysCallKey","getLiteralValue","sysCall","handleCall","CommaListExpressionCompiler","CommaListExpression","ConditionalExpressionCompiler","ConditionalExpression","getCondition","getWhenTrue","getWhenFalse","DeleteExpressionCompiler","DeleteExpression","ElementAccessExpressionCompiler","ElementAccessExpression","FunctionExpressionCompiler","FunctionExpression","IdentifierCompiler","Identifier","originalKeywordKind","UndefinedKeyword","ImportExpressionCompiler","ImportKeyword","MetaPropertyCompiler","MetaProperty","NewExpressionCompiler","NewExpression","NonNullExpressionCompiler","NonNullExpression","NoSubstitutionTemplateLiteralCompiler","NoSubstitutionTemplateLiteral","NullLiteralCompiler","NullKeyword","createNull","NumericLiteralCompiler","NumericLiteral","ObjectLiteralExpressionCompiler","ObjectLiteralExpression","getProperties","isPropertyAssignment","isShorthandPropertyAssignment","isMethodDeclaration","getInitializerOrThrow","OmittedExpressionCompiler","OmittedExpression","ParenthesizedExpressionCompiler","ParenthesizedExpression","PartiallyEmittedExpressionCompiler","PartiallyEmittedExpression","PostfixUnaryExpressionCompiler","PostfixUnaryExpression","getOperand","PlusPlusToken","MinusMinusToken","visitAssignment","PrefixUnaryExpressionCompiler","PrefixUnaryExpression","TildeToken","ExclamationToken","visitValue","operand","PropertyAccessExpressionCompiler","PropertyAccessExpression","expression","RegularExpressionLiteralCompiler","RegularExpressionLiteral","SpreadElementCompiler","SpreadElement","StringLiteralCompiler","StringLiteral","SuperExpressionCompiler","SuperKeyword","TaggedTemplateExpressionCompiler","TaggedTemplateExpression","ThisExpressionCompiler","ThisKeyword","TypeAssertionCompiler","TypeAssertionExpression","TypeOfExpressionCompiler","TypeOfExpression","VoidExpressionCompiler","VoidExpression","YieldExpressionCompiler","YieldExpression","SourceFileCompiler","SourceFile","getImportDeclarations","processStatements","getExportDeclarations","getExportAssignments","assignment","BlockCompiler","Block","BreakStatementCompiler","BreakStatement","label","getLabel","CaseBlockCompiler","CaseBlock","getClauses","clause","CaseClauseCompiler","CaseClause","CatchClauseCompiler","CatchClause","variable","getVariableDeclaration","getBlock","ContinueStatementCompiler","ContinueStatement","DebuggerStatementCompiler","DebuggerStatement","DefaultClauseCompiler","DefaultClause","DoStatementCompiler","DoStatement","getStatement","EmptyStatementCompiler","EmptyStatement","ExpressionStatementCompiler","ExpressionStatement","ForInStatementCompiler","ForInStatement","ForOfStatementCompiler","ForOfStatement","ForStatementCompiler","ForStatement","exprInitializer","exprCondition","exprIncrementor","getIncrementor","IfStatementCompiler","IfStatement","cond","getThenStatement","nodeWhenFalse","getElseStatement","LabeledStatementCompiler","LabeledStatement","NotEmittedStatementCompiler","NotEmittedStatement","ReturnStatementCompiler","ReturnStatement","SwitchStatementCompiler","SwitchStatement","getCaseBlock","ThrowStatementCompiler","ThrowStatement","TryStatementCompiler","TryStatement","catchClause","getCatchClause","getTryBlock","catchPCOptions","finallyBlock","getFinallyBlock","VariableStatementCompiler","VariableStatement","getDeclarationList","WhileStatementCompiler","WhileStatement","WithStatementCompiler","WithStatement","MAX_JUMP","JUMP_OFFSET","CodePoint","resolvePC","pcInternal","prev","next","totalLength","prevInternal","resetPC","nextInternal","targets","self","skipJump","ret","target","nextSkipJump","isMax","getPostOffset","resolved","resolve","insertBefore","JumpCodePoint","insertAfter","shift","point","targetInternal","isForwardJump","isReverseJump","BufferCodePoint","NewJump","source","sourceInternal","sources","internalPostOffset","sourcePC","reduce","acc","JumpResolver","getCodePoint","newTargets","result","processOne","sortedNewTargets","_","sortBy","resolvePostOffset","insertJumps","current","out","codePoint","getTarget","newValue","newValueTargets","replace","newOffset","getNewTarget","newValueTarget","delete","codePoints","firstBytecode","jumpCodePoint","targetPC","pcSources","compilers","declarations","decorator","file","BaseScriptBuilder","context","ast","sourceFile","allHelpers","Map","currentScope","kindCompilers","KindCompiler","kindCompiler","currentModuleIndex","moduleMap","getFilePath","nextModuleIndex","reverseModuleMap","nodes","setGlobalObject","addEmptyModule","emitGlobal","jumpTablePC","emitTable","buffers","valueIn","offsetPC","BN","sub","jumpPC","toTwos","byteCodeBuffer","BYTECODE_TO_BYTECODE_BUFFER","OPCODE_TO_BYTECODE","toArrayLike","compiler","visitNode","setLast","code","buffer","UnknownOpError","emitOpByte","eq","utils","NEGATIVE_ONE","ZERO","emitPush","toSignedBuffer","gt","lt","SIXTEEN","PUSH1","toBuffer","emitJump","emitRaw","sysCallBuffer","from","writer","BinaryWriter","writeVarBytesLE","originalCapturedBytecode","capturedBytecode","originalPC","capturedLength","message","required","symbol","exportMap","has","filePath","assertNotNull","fileExports","PUSHBYTES75","ClientScriptBuilder","emitUInt8","build","emitUInt16LE","emitUInt32LE","byteCodeIn","byteCode","IdentifierName","ResolvedScope","variableCount","addScope","scopeCount","scopeLength","identifier","existing","variables","position","uniqueVariables","scopePosition","getPosition","REFERENCE_ERROR","loadScope","globalProperties","pickCompletionVal","loadAll","hasBinding","surround","nonLocal","emitNonLocal","completion","CapturingScope","bindings","ScopeCapturingScriptBuilder","resolveScopes","resolvedScopes","scopes","resolveScope","forNode","EmittingScriptBuilder","HelperCapturingScriptBuilder","capturedHelpers","capturedHelpersSet","CompilerDiagnostic","messageText","category","getSourceFile","start","getStart","getWidth","Context","globals","libs","libAliases","diagnostics","DiagnosticCategory","Warning","UNSUPPORTED_SYNTAX","reportWarning","getNotAnyType","getContextualType","reportTypeError","reportTypeWarning","getTypeAtLocation","UNKNOWN_SYMBOL","aliased","getAliasedSymbol","isSymbolic","getSymbolForType","isLibSymbol","getFlags","findInterfaceFile","files","getSourceFiles","isDeclarationFile","bufferInterface","getInterface","globalNamespace","getNamespace","isGlobalAugmentation","ts","NodeFlags","GlobalAugmentation","getGlobals","bufferFile","addExistingSourceFileIfExists","require","getInterfaceOrThrow","typeChecker","getTypeChecker","compilerObject","array","global","createArrayType","getAnyType","getDeclaredType","neoFile","addExistingSourceFiles","path","dirname","neoGlobal","getNamespaceOrThrow","getSymbolOrThrow","getVariableDeclarationOrThrow","getFunctionOrThrow","findLibFile","getClass","getLibs","libFileIn","libFile","SmartContract","getClassOrThrow","MapStorage","SetStorage","Fixed","getTypeAliasOrThrow","constant","verify","getLibAliases","Address","getReferencingNodes","Hash256","Signature","PublicKey","compile","contextIn","helperScriptBuilder","scopeScriptBuilder","getHelpers","emittingScriptBuilder","getScopes","getFinalBytecode","findRoot","dir","filename","split","pop","currentDir","exists","fs","makeAst","tsConfigFilePath","res","readConfigFile","parseConfigHost","sys","readDirectory","readFile","parsed","parseJsonConfigFileContent","config","Ast","getAst","getPreEmitDiagnostics","compileScript","scriptPath","getSourceFileOrThrow","NodeTranspiler","DEPLOY_METHOD","ClassDeclarationTranspiler","transpiler","isSmartContract","transpileSmartContract","getBaseClass","transpileDeploy","existingDeploy","getMethod","ctorDecl","bodyText","baseDeploy","getBaseDeploy","firstStatement","isExpressionStatement","callExpr","isCallExpression","lhsrExpr","replaceWithText","deploy","typeNode","getTypeNode","hasQuestionToken","Scope","Public","isAbstract","isParameterDeclaration","isFixedType","addStatements","init","addAccessors","isReadonly","addGetAccessor","getScope","addSetAccessor","remove","isOnlyLib","setInitializer","baseClass","getInstanceMethod","isPublic","getCombinedModifierFlags","ModifierFlags","transpilers","NEOTranspiler","smartContract","processProperty","values","verifySwitches","applicationSwitches","functions","methodSwitch","argsStatement","argsTypes","getTypeText","getReturnType","isGetAccessorDeclaration","typeText","toUpperCase","applicationFallback","verifyFallback","getChildren","getDerivedClasses","derived","getTypeOfSymbol","isLibAlias","getAliasSymbol","decls","symbolDecl","isSetAccessorDeclaration","INVALID_CONTRACT_METHOD","getDecl","setDecl","nodeUtils","hasVerify","toABIReturn","getIdentifier","getReturnTypeNode","callSignatures","getCallSignatures","callSignature","parameter","toABIParameter","filterNotNull","hasDecorator","id","resolvedType","typeIdentifier","decimals","getFixedDecimals","getTypeArguments","INVALID_CONTRACT_TYPE","getFirstChildByKind","transpile","compileContract","transpiledAst","finalContext","executeScript","monitor","prelude","alloc","blockchain","Blockchain","create","testNet","levelUpStorage","messageMagic","levelup","compiledCode","error","diagnostic","invokeScript","scan","findContract","contracts","found","contractNames","contractName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,MAAMA,SAAN,CAAgB;;wCACQ,CADR;;mCAEkB,EAFlB;;;KAIrB,CAAWC,EAAX,EAA8BC,IAA9B,EAA0CC,IAA1C,EAAoE;UAC5DC,aAAa,KAAKA,UAAxB;SACKA,UAAL,IAAmB,CAAnB;UACM;;QAAeH,GAAGI,OAAH,CAAW,MAAM;;KAAjB,CAArB;SAGKC,KAAL,CAAWC,IAAX,CAAgB;gBAAA;UAAA;;KAAhB;WAEOH,UAAP;;;WAGF,CAAiBH,EAAjB,EAAoCO,SAApC,EAA2D;SACpDF,KAAL,CAAWG,OAAX,CAAmB,CAAC;UAAA;gBAAA;;KAAD,KAAoC;SAClDC,UAAH,CACER,IADF,EAEE,EAFF,EAGED,GAAGU,OAAH,CAAWC,EAAX,CAAc;mBACD,MAAM;aACZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB;aACGY,WAAH,CAAeZ,IAAf,EAAqBE,UAArB;aACGS,MAAH,CAAUX,IAAV,EAAgB,UAAhB;SAJU;kBAMF,MAAM;aACXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;aACGa,YAAH,CAAgBC,QAAhB;;OARJ,CAHF;KADF;OAkBGH,MAAH,CAAUL,SAAV,EAAqB,OAArB;;;;;AC5CG,MAAeS,cAAf,CAA8B;;ACE9B,MAAMC,sBAAN,SAAqCD,cAArC,CAAoD;cAG5BE,MAA7B,EAA8C;;;;;;;MAI9C,CAAYA,MAAZ,EAA4C;WACnC,IAAID,sBAAJ,CAA2B,CAAC,KAAKC,MAAL,IAAe,CAAhB,IAAqBA,MAAhD,CAAP;;;QAGF,CAAcC,KAAd,EAA8C;WACrC,SAASA,KAAhB;;;OAGF,CAAaC,EAAb,EAAuC;SAChCA,EAAL,GAAUA,EAAV;;;OAGF,GAAuB;QACjB,KAAKA,EAAL,IAAW,IAAf,EAAqB;YACb,IAAIC,KAAJ,CAAU,YAAV,CAAN;;;WAGK,KAAKD,EAAL,CAAQE,KAAR,MAAmB,KAAKJ,MAAL,IAAe,CAAlC,CAAP;;;;;ACtBG,MAAeK,IAAf,CAAiD;cAC1BC,EAA5B,EAAqDJ,EAArD,EAAyE;;;;;;;ACFpE,MAAMK,IAAN,SAAmBF,IAAnB,CAAwB;cACjBH,EAAZ,EAAgC;UACxB,MAAN,EAAcA,EAAd;;;MAGF,CAAYA,EAAZ,EAA8B;WACrB,IAAIK,IAAJ,CAAS,KAAKL,EAAL,CAAQM,IAAR,CAAaN,EAAb,CAAT,CAAP;;;;;ACJG,MAAMO,GAAN,SAAkBJ,IAAlB,CAA8B;cACvBC,EAAZ,EAAuBJ,EAAvB,EAA2C;UACnCI,EAAN,EAAUJ,EAAV;;;MAGF,CAAYA,EAAZ,EAA6B;WACpB,IAAIO,GAAJ,CAAQ,KAAKH,EAAb,EAAiB,KAAKJ,EAAL,CAAQM,IAAR,CAAaN,EAAb,CAAjB,CAAP;;;;;ACTG,MAAMQ,mBAAN,SAAkCZ,cAAlC,CAAiD;cACzBI,EAA7B,EAAyC;;;;;MAIzC,CAAYF,MAAZ,EAA4C;WACnC,IAAIU,mBAAJ,CAAwB,KAAKR,EAAL,GAAUF,MAAlC,CAAP;;;QAGF,CAAcC,KAAd,EAA8C;WACrCA,iBAAiBS,mBAAjB,IAAwC,KAAKR,EAAL,KAAYD,MAAMC,EAAjE;;;OAGF,GAAuB;WACd,KAAKA,EAAZ;;;;;ACdG,MAAMS,kBAAN,SAAiCb,cAAjC,CAAgD;cAKlCc,OADnB,EAEmBZ,MAFnB,EAGE;;;;;;;sCALgD,EAKhD;;;MAIF,CAAYA,MAAZ,EAA4C;UACpCE,KAAK,IAAIS,kBAAJ,CACT,KAAKC,OADI,EAET,CAAC,KAAKZ,MAAL,IAAe,CAAhB,IAAqBA,MAFZ,CAAX;SAIKa,QAAL,CAAczB,IAAd,CAAmBc,EAAnB;;QACI,KAAKA,EAAL,IAAW,IAAf,EAAqB;SAChBY,KAAH,CAAS,KAAKZ,EAAd;;;WAEKA,EAAP;;;QAGF,CAAcD,KAAd,EAA8C;WAE1CA,iBAAiBU,kBAAjB,IACA,KAAKC,OAAL,KAAiBX,MAAMW,OADvB,IAEA,KAAKZ,MAAL,KAAgBC,MAAMD,MAHxB;;;OAOF,CAAaE,EAAb,EAA+B;SACxBA,EAAL,GAAUA,EAAV;SACKW,QAAL,CAAcvB,OAAd,CAAuByB,KAAD,IAAW;YACzBD,KAAN,CAAYZ,EAAZ;KADF;;;OAKF,GAAuB;QACjB,KAAKA,EAAL,IAAW,IAAf,EAAqB;YACb,IAAIC,KAAJ,CAAU,YAAV,CAAN;;;WAGK,KAAKD,EAAL,IAAW,KAAKF,MAAL,IAAe,CAA1B,CAAP;;;;;ACzCG,MAAMgB,oBAAN,CAA2B;cAKpBd,EAAZ,EAA8B;;;;;;;SACvBA,EAAL,GAAUA,EAAV;SACKe,KAAL,GAAa,IAAIP,mBAAJ,CAAwB,KAAKR,EAAL,EAAxB,CAAb;SACKgB,IAAL,GAAY,IAAIP,kBAAJ,CAAuB,KAAKT,EAAL,EAAvB,CAAZ;;;UAGF,GAAkC;WACzB,KAAKe,KAAZ;;;YAGF,GAAoC;WAC3B,IAAIP,mBAAJ,CAAwB,KAAKR,EAAL,EAAxB,CAAP;;;SAGF,GAAiC;WACxB,KAAKgB,IAAZ;;;SAGF,GAAuB;SAChBA,IAAL,CAAUJ,KAAV,CAAgB,KAAKZ,EAAL,EAAhB;;;;;ACvBG,MAAeiB,YAAf,CAAmC;;;;;;;ACAnC,MAAeC,MAAf,CAA6C;YAClD,CAAkBtC,EAAlB,EAAqCC,IAArC,EAA8CsC,OAA9C,EAA2E;;;;;ACK7E;;AAEA,AAAO,MAAMC,eAAN,SAA8BF,MAA9B,CAAqC;cAI9BC,OAAZ,EAA6C;;;;;;;SAEtCE,GAAL,GAAWF,QAAQE,GAAnB;SACKC,SAAL,GAAiBH,QAAQG,SAAR,IAAqB,KAAtC;;;MAGF,CAAY1C,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEW,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAPsE;;OASnEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EATsE;;OAWnEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAXsE;;OAanEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAbsE;;OAenEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB;OACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWkC,OAAX,CAAmB;iBACN,MAAM;;WAEZhC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANe;;;WASZW,MAAH,CAAUX,IAAV,EAAgB,IAAhB;OAVe;YAYX,MAAM;;WAEPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFU;;WAIPW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;YACI,KAAKyC,SAAT,EAAoB;;aAEf7B,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFkB;;aAIfW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJkB;;aAMfW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SANF,MAOO;;aAEFY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFK;;aAIFW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJK;;aAMFW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;WAGCQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;qBACD,MAAM;;iBAEV8B,GAAL,GAFe;;eAIZhC,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWmC,SAAX,CAAqB;oBAAQC;aAA7B,CAHF;WALU;oBAWF,MAAM;;eAEXlC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;eAIXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJc;;eAMXW,MAAH,CAAUX,IAAV,EAAgB,QAAhB;WAjBU;qBAmBD,MAAM;;eAEZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;SArBJ,CAHF,EArBU;;WAkDPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAlDU;;WAoDPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;OAhEe;mBAkEJ,MAAM;;WAEdW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;KApEJ,CAHF,EAhBsE;;OA4FnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EA5FsE;;OA8FnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;AC1GJ;;AAEA,AAAO,MAAM8C,gBAAN,SAA+BT,MAA/B,CAAsC;cAI/BC,OAAZ,EAA8C;;;;;;;SAEvCS,IAAL,GAAYT,QAAQS,IAApB;SACKN,SAAL,GAAiBH,QAAQG,SAAR,IAAqB,KAAtC;;;MAGF,CAAY1C,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEW,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAPsE;;OASnEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB;OACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWkC,OAAX,CAAmB;iBACN,MAAM;;WAEZhC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANe;;;WASZW,MAAH,CAAUX,IAAV,EAAgB,IAAhB;OAVe;YAYX,MAAM;;WAEPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;YACI,KAAKyC,SAAT,EAAoB;;aAEf9B,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFkB;;aAIfW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SAPQ;;;aAUL+C,IAAL;OAtBe;mBAwBJ,MAAM;;WAEdpC,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;KA1BJ,CAHF,EAVsE;;OA4CnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EA5CsE;;OA8CnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;AC1DJ;;AAEA,AAAO,MAAMgD,YAAN,SAA2BX,MAA3B,CAAkC;cAI3BC,OAAZ,EAA0C;;;;;;;SAEnCE,GAAL,GAAWF,QAAQE,GAAnB;SACKC,SAAL,GAAiBH,QAAQG,SAAR,IAAqB,KAAtC;;;MAGF,CAAY1C,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEW,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAPsE;;OASnEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB;OACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWkC,OAAX,CAAmB;iBACN,MAAM;;WAEZhC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANe;;;WASZW,MAAH,CAAUX,IAAV,EAAgB,IAAhB;OAVe;YAYX,MAAM;;WAEPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFU;;WAIPY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJU;;WAMPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;YACI,KAAKyC,SAAT,EAAoB;;aAEf9B,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFkB;;aAIfW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJkB;;aAMfY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EANkB;;aAQfW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARkB;;aAUfW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SAVF,MAWO;;aAEFW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFK;;aAIFW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SAtBQ;;;aAyBLwC,GAAL,GAzBU;;WA2BP7B,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EA3BU;;WA6BPW,MAAH,CAAUX,IAAV,EAAgB,OAAhB,EA7BU;;WA+BPW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;OA3Ce;mBA6CJ,MAAM;;WAEdW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;KA/CJ,CAHF,EAVsE;;OAiEnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAjEsE;;OAmEnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;ACpFJ;;AAEA,AAAO,MAAMiD,gBAAN,SAA+BZ,MAA/B,CAAsC;MAC3C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEW,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAPsE;;OASnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;ACZJ;;AAEA,AAAO,MAAMkD,iBAAN,SAAgCb,MAAhC,CAAuC;MAC5C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAIrExC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJwE;;OAMrEW,MAAH,CAAUX,IAAV,EAAgB,WAAhB;OACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWkC,OAAX,CAAmB;iBACN,MAAM;;WAEZhC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,IAAhB;OAPe;YASX,MAAM;;WAEPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFU;;WAIPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJU;;WAMPQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC,EANU;;WAQP1C,MAAH,CAAUX,IAAV,EAAgB,QAAhB;OAjBe;mBAmBJ,MAAM;;WAEdW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFiB;;WAIdW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJiB;;WAMdW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EANiB;;WAQdW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KA3BJ,CAHF,EAPwE;;OA0CrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EA1CwE;;OA4CrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EA5CwE;;OA8CrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;ACtCJ;;AAEA,AAAO,MAAMsD,aAAN,SAA4BjB,MAA5B,CAAmC;cAI5B;SAAA;;GAAZ,EAA0D;;;;;;;SAEnDkB,KAAL,GAAaA,KAAb;SACKC,WAAL,GAAmBA,WAAnB;;;MAGF,CAAYzD,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEM,gBAAgB1D,GAAG0D,aAAH,CAAiBN,SAAjB,CAAtB;UACMb,UAAUvC,GAAGqD,gBAAH,CAAoBrD,GAAG0D,aAAH,CAAiBN,SAAjB,CAApB,CAAhB;QACIO,OAAOP,UAAUQ,IAArB;;QACID,QAAQ,IAAZ,EAAkB;aACT3D,GAAG6D,OAAH,CAAW5D,IAAX,CAAP;;;UAGIuD,QAAQ,KAAKA,KAAL,CAAWM,MAAX,CAAmBC,QAAD,IAAcA,SAASC,MAAT,CAAgBL,IAAhB,CAAhC,CAAd;;UACMF,cACJ,KAAKA,WAAL,KACEQ,YAAD,IAAkB;SACdrD,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGQ,UAAH,CAAcR,IAAd,EAAoBgE,YAApB,EAAkCjE,GAAGU,OAAH,CAAWwD,cAA7C;KAHF,CADF;;QAMIV,MAAMW,MAAN,KAAiB,CAArB,EAAwB;kBACVT,aAAZ;KADF,MAEO,IAAIF,MAAMW,MAAN,KAAiB,CAArB,EAAwB;YACvB,CAAN,EAASC,OAAT,CAAiBV,aAAjB;KADK,MAEA;SACFjD,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW2D,IAAX,CACEb,MAAMf,GAAN,CAAW6B,OAAD,KAAc;mBACX,MAAM;aACZ1D,MAAH,CAAUX,IAAV,EAAgB,KAAhB;kBACQsE,aAAR,CAAsBhC,OAAtB;SAHoB;kBAKZ,MAAM;kBACN6B,OAAR,CAAgBV,aAAhB;;OANM,CAAV,CADF,EAUE,MAAM;oBACQA,aAAZ;OAXJ,CAHF;;;;;;IC5CMc,gBAAZ;;WAAYA;mBAAAA;mBAAAA;GAAAA,qBAAAA;;AAKZ,MAAMC,eAAe,CACnBzE,EADmB,EAEnBC,IAFmB,EAGnBsC,OAHmB,EAInBmC,IAJmB,KAKhB;;KAEA7D,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFG;;KAIAW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJG;;KAMA0E,KAAH,CAASC,SAAT,CAAmB5E,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EANG;;KAQAsC,cAAH,CAAkB5E,IAAlB,EAAwByE,IAAxB,EARG;;KAUAjE,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoE,yBAAxC,EAVG;;KAYArE,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqE,UAAX,EAA7B;CAjBF;;AAoBA,AAAO,MAAMC,iBAAiB,kBAAvB;AAEP,AAAO,MAAMC,kBAAkB,CAC7BjF,EAD6B,EAE7BC,IAF6B,EAG7BsC,OAH6B,KAI1BkC,aAAazE,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCyC,cAAhC,CAJE;AAMP,AAAO,MAAME,mBAAmB,oBAAzB;AAEP,AAAO,MAAMC,oBAAoB,CAC/BnF,EAD+B,EAE/BC,IAF+B,EAG/BsC,OAH+B,KAI5BkC,aAAazE,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgC2C,gBAAhC,CAJE;AAMP,AAAO,MAAME,gBAAgB,CAC3BpF,EAD2B,EAE3BC,IAF2B,EAG3BsC,OAH2B,EAI3BoB,IAJ2B,KAKxB;;KAEA9C,WAAH,CAAeZ,IAAf,EAAqB0D,IAArB,EAFG;;KAIA9C,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJG;;KAMAW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;CAXK;AAcP,AAAO,MAAMoF,kBAAkB,CAC7BrF,EAD6B,EAE7BC,IAF6B,EAG7BsC,OAH6B,KAI1B;;KAEA1B,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFG;;KAIAW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;CARK;;AAWP,MAAMqF,mBAAmB,CACvBtF,EADuB,EAEvBC,IAFuB,EAGvBsC,OAHuB,EAIvBoB,IAJuB,KAKpB;;KAEA9C,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFG;;KAIAW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAJG;;KAMAY,WAAH,CAAeZ,IAAf,EAAqB0D,IAArB,EANG;;KAQA/C,MAAH,CAAUX,IAAV,EAAgB,UAAhB;CAbF;;AAgBA,AAAO,MAAMsF,WAAW,CACtBvF,EADsB,EAEtBC,IAFsB,EAGtBsC,OAHsB,KAInB,CACH;iBACiB,MAAM;;OAEhB9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8E,SAAxC;GAHJ;aAKa,MAAM;GALnB;oBAQoB,MAAM;;OAEnB/E,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8E,SAAxC;GAVJ;eAYe,MAAM;;CAblB,EAiBH;iBACiB,MAAM;;OAEhB/E,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW+E,QAAxC;GAHJ;aAKa,MAAM;GALnB;oBAQoB,MAAM;;OAEnBhF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW+E,QAAxC;GAVJ;eAYe,MAAM;;CA7BlB,EAiCH;iBACiB,MAAM;;OAEhBhF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgF,QAAxC;GAHJ;aAKa,MAAM;GALnB;oBAQoB,MAAM;;OAEnBjF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgF,QAAxC;GAVJ;eAYe,MAAM;;CA7ClB,EAiDH;iBACiB,MAAM;;OAEhBjF,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWiF,iBAAX,CAA6B;gBAAY;KAAzC,CAHF,EAFmB;;OAQhBlF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkF,UAAxC;GATJ;aAWa,MAAM;;OAEZnF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWmF,YAAxC,EAFe;;kBAID7F,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB,EAAiCiC,iBAAiBsB,MAAlD;GAfJ;oBAiBoB,MAAM;qBACL9F,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EAAoCiC,iBAAiBsB,MAArD;GAlBJ;eAoBe,MAAM;oBACD9F,EAAhB,EAAoBC,IAApB,EAA0BsC,OAA1B,EADiB;;OAGd9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqF,UAAxC;;CAxED,EA2EH;iBACiB,MAAM;;OAEhBtF,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWiF,iBAAX,CAA6B;gBAAY;KAAzC,CAHF,EAFmB;;OAQhBlF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkF,UAAxC;GATJ;aAWa,MAAM;;OAEZnF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsF,WAAxC,EAFe;;OAIZvF,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWuF,MAAX,CAAkB;WACX,MAAM;wBACOjG,EAAhB,EAAoBC,IAApB,EAA0BsC,OAA1B;;KAFJ,CAHF,EAJe;;kBAcDvC,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB,EAAiCiC,iBAAiB0B,KAAlD;GAzBJ;oBA2BoB,MAAM;qBACLlG,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EAAoCiC,iBAAiB0B,KAArD;GA5BJ;eA8Be,MAAM;;oBAEDlG,EAAhB,EAAoBC,IAApB,EAA0BsC,OAA1B,EAFiB;;OAId9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWuF,MAAX,CAAkB;WACX,MAAM;0BACSjG,EAAlB,EAAsBC,IAAtB,EAA4BsC,OAA5B;;KAFJ,CAHF,EAJiB;;OAcd9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyF,SAAxC;;CAvHD,CAJE;;ACjFP;;AAEA,AAAO,MAAMC,eAAN,SAA8B9D,MAA9B,CAA4D;MACjE,CACEtC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;UAEA8D,OAAO,CAAC,GAAGpG,KAAKqG,YAAL,EAAJ,EAAyBC,OAAzB,EAAb;;SACK,MAAMC,GAAX,IAAkBH,IAAlB,EAAwB;SACnBI,KAAH,CAASD,GAAT,EAAcxG,GAAGqD,gBAAH,CAAoBd,OAApB,CAAd;KAJI;;;OAOH1B,WAAH,CAAeZ,IAAf,EAAqBoG,KAAKlC,MAA1B,EAPM;;OASHvD,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;ICpBQyG,0BAAZ;;WAAYA;;;GAAAA,+BAAAA;;ACSZ;;;;AAiBA,AAAO,MAAMC,4BAAN,SAA2CrE,MAA3C,CAAkD;cAK3CC,OAAZ,EAA0D;;;;;;;;;QAEpDA,QAAQoB,IAAR,KAAiB,MAArB,EAA6B;WACtBiD,QAAL,GAAgBF,2BAA2BG,IAA3C;WACKC,IAAL,GAAY,IAAZ;KAFF,MAGO;WACAF,QAAL,GAAgBrE,QAAQqE,QAAxB;WACKE,IAAL,GAAY,KAAZ;;;SAEGC,SAAL,GAAiBxE,QAAQwE,SAAzB;;;MAGF,CAAY/G,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWsG,mBAAX,CACE,KAAKF,IAAL,GACI;YAAQ;KADZ,GAEI;YAAQ,QAAR;gBAA4B,KAAKF;KAHvC,CAHF,EAPsE;;OAiBnEhG,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;QAEI,KAAK6G,IAAT,EAAe;WACRG,QAAL,CAAcjH,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB,EAAiCmE,2BAA2BG,IAA5D;WACKI,QAAL,CAAcjH,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB,EAAiCmE,2BAA2BQ,SAA5D;KAFF,MAGO;WACAD,QAAL,CAAcjH,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB,EAAiC,KAAKqE,QAAtC;;;OAGChG,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;UAGF,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEqE,QAJF,EAKQ;;OAEHhG,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFM;;OAIHW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJM;;OAMH4E,cAAH,CAAkB5E,IAAlB,EAAwB2G,QAAxB,EANM;;OAQHnG,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoE,yBAAxC,EARM;;OAUHrE,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWyG,gBAAX,CAA4B;iBAAa,KAAKJ;KAA9C,CAHF,EAVM;;OAgBHnG,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBM;;OAkBHW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;ACvFJ;;AAEA,AAAO,MAAMmH,sBAAN,SAAqC9E,MAArC,CAA4C;cAGrCC,OAAZ,EAAoD;;;;;SAE7CwE,SAAL,GAAiBxE,QAAQwE,SAAzB;;;MAGF,CAAY/G,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;QAIEoH,QAAJ;;QACI,KAAKN,SAAT,EAAoB;iBACP,MAAM;;WAEZnG,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;OANF;KADF,MASO;iBACM,MAAM;;WAEZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;OAJF;KAlBoE;;;OA2BnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4G,aAAxC,EA3BsE;;OA6BnE1G,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EA7BsE;;OA+BnEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EA/BsE;;OAiCnEQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,WAAhB,EAFe;;WAIZY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;OAPU;cAAA;iBAUD,MAAM;;WAEZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,QAAhB;;KAdJ,CAHF;;;;;AC/CG,MAAMsH,UAAN,SAAyBjF,MAAzB,CAAgC;MACrC,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;;OAIrExC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJwE;;OAMrEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EANwE;;OAQrEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EARwE;;OAUrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8G,UAAxC,EAVwE;;OAYrE5G,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAZwE;;OAcrEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAdwE;;OAgBrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBwE;;OAkBrEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAlBwE;;OAoBrEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EApBwE;;OAsBrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8G,UAAxC,EAtBwE;;OAwBrE5G,MAAH,CAAUX,IAAV,EAAgB,SAAhB,EAxBwE;;OA0BrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EA1BwE;;OA4BrEQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,WAAhB,EAFe;;WAIZY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;OAPU;gBASF,MAAM;;WAEXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;WAIXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJc;;WAMXW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EANc;;WAQXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARc;;WAUXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAVc;;WAYXW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAZc;;WAcXW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;;KAvBJ,CAHF,EA5BwE;;OA4DrEW,MAAH,CAAUX,IAAV,EAAgB,YAAhB,EA5DwE;;;OAgErEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAhEwE;;OAkErEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAlEwE;;OAqErEwH,QAAH,CAAYxH,IAAZ,EArEwE;;OAwErEW,MAAH,CAAUX,IAAV,EAAgB,cAAhB;OACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;QAEImD,UAAUT,SAAd,EAAyB;SACpB/B,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;OAECQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgH,gBAAxC;;QACItE,UAAUT,SAAd,EAAyB;SACpBlC,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWiH,gBAAxC;;;;;;ACjFN;;AAEA,AAAO,MAAMC,mBAAN,SAAkCtF,MAAlC,CAAyC;MAC9C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;OAICQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8G,UAAxC;;;;;ACOJ;;AAEA,AAAO,MAAMK,yBAAN,SAAwCvF,MAAxC,CAA+C;cAIxCC,OAAZ,EAAuD;;;;;;;QAEjDA,QAAQoB,IAAR,KAAiB,MAArB,EAA6B;WACtBiD,QAAL,GAAgBF,2BAA2BG,IAA3C;WACKC,IAAL,GAAY,IAAZ;KAFF,MAGO;WACAF,QAAL,GAAgBrE,QAAQqE,QAAxB;WACKE,IAAL,GAAY,KAAZ;;;;MAIJ,CAAY9G,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoH,kBAAxC;;QAEI,KAAKhB,IAAT,EAAe;;WAERQ,aAAL,CAAmBtH,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EAAsCmE,2BAA2BG,IAAjE,EAFa;;WAIRS,aAAL,CACEtH,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEmE,2BAA2BQ,SAJ7B;KAJF,MAUO;;WAEAI,aAAL,CAAmBtH,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EAAsC,KAAKqE,QAA3C;;;;eAIJ,CACE5G,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEqE,QAJF,EAKQ;;OAEHhG,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFM;;OAIH4E,cAAH,CAAkB5E,IAAlB,EAAwB2G,QAAxB,EAJM;;OAMHnG,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoE,yBAAxC,EANM;;OAQHrE,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4G,aAAxC,EARM;;OAUH1G,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVM;;OAYH4E,cAAH,CAAkB5E,IAAlB,EAAwB2G,QAAxB,EAZM;;OAcHhG,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAdM;;OAgBHQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;;;ACxEJ;;AAEA,AAAO,MAAMC,qBAAN,SAAoC1F,MAApC,CAEL;MACA,CACEtC,EADF,EAEEC,IAFF,EAMEgI,YANF,EAOQ;QACF,CAACA,aAAatF,SAAlB,EAA6B;;;;OAI1BlC,UAAH,CACER,IADF,EAEEgI,YAFF,EAGEjI,GAAGU,OAAH,CAAWwH,mBAAX,CAA+B;YACvB,MAAM;WACPC,SAAH,CAAalI,IAAb,EAAmBgI,YAAnB,EAAkC1F,OAAD,IAAa;aACzC9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0H,UAAxC;cACIlI,IAAJ;;cACImI,WAAWC,cAAX,CAA0BrI,IAA1B,CAAJ,EAAqC;mBAC5BA,KAAKsI,cAAL,EAAP;WADF,MAEO;mBACEtI,KAAKuI,OAAL,EAAP;;;cAEEH,WAAWI,YAAX,CAAwBvI,IAAxB,CAAJ,EAAmC;;eAE9BuG,KAAH,CAASvG,IAAT,EAAeqC,OAAf,EAFiC;;eAI9B9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgI,sBAAxC,EAJiC;;eAM9B9H,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WANF,MAOO;eACFwG,KAAH,CAASvG,IAAT,EAAeqC,OAAf,EADK;;eAGF9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC,EAHK;;eAKF7C,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgI,sBAAxC,EALK;;eAOF9H,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;SAtBJ;;KAFJ,CAHF;;;;;ACnBJ;;AAEA,AAAO,MAAM0I,0BAAN,SAAyCrG,MAAzC,CAAsD;cAI/C;QAAA;;GAAZ,EAAuE;;;;;;;SAEhEpC,IAAL,GAAYA,IAAZ;SACK0I,YAAL,GAAoBA,gBAAgB,KAApC;;;MAGF,CAAY5I,EAAZ,EAA+BC,IAA/B,EAA2CgI,YAA3C,EAA6E;QACvE,CAACA,aAAatF,SAAlB,EAA6B;;;;UAIvBkG,OAAQtG,OAAD,IAA2B;;WAEjCrC,IAAL,GAFsC;;SAInCO,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC,EAJsC;;SAMnC7C,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgI,sBAAxC,EANsC;;SAQnC9H,MAAH,CAAUX,IAAV,EAAgB,KAAhB;KARF;;OAWGQ,UAAH,CACER,IADF,EAEEgI,YAFF,EAGEjI,GAAGU,OAAH,CAAWwH,mBAAX,CAA+B;YACvB,MAAM;YACN,KAAKU,YAAT,EAAuB;eAChBX,YAAL;SADF,MAEO;aACFE,SAAH,CAAalI,IAAb,EAAmBgI,YAAnB,EAAkC1F,OAAD,IAAa;iBACvCA,OAAL;WADF;;;KALN,CAHF;;;;;AC7BJ;;AAEA,AAAO,MAAMuG,yBAAN,SAAwCxG,MAAxC,CAAqD;cAG9C;;GAAZ,EAAwD;;;;;SAEjDpC,IAAL,GAAYA,IAAZ;;;MAGF,CAAYF,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;;;SAGlBgC,KAAH,CAASoE,OAAT,CAAiB/I,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EAHqB;;SAKlB9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8G,UAAxC,EALqB;;SAOlB5G,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAPqB;;SASlBY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EATqB;;SAWlBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAXqB;;SAalBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAbqB;;SAelBW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAfqB;;SAiBlBQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8G,UAAxC,EAjBqB;;SAmBlB5G,MAAH,CAAUX,IAAV,EAAgB,SAAhB,EAnBqB;;SAqBlBQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsI,QAAX,CAAoB;cAAQ,KAAK9I;OAAjC,CAA7B,EArBqB;;SAuBlBW,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAvBqB;;SAyBlBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;ACnCN;;AAEA,AAAO,MAAMgJ,0BAAN,SAAyC3G,MAAzC,CAAsD;cAG/C;;GAAZ,EAA6D;;;;;SAEtDsE,QAAL,GAAgBA,QAAhB;;;MAGF,CAAY5G,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;;SAElBlC,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC,EAFqB;;SAIlBtI,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJqB;;SAMlB4E,cAAH,CAAkB5E,IAAlB,EAAwB,KAAK2G,QAA7B,EANqB;;SAQlBhG,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARqB;;SAUlBQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;;;;ACtBN;;AAEA,AAAO,MAAMoB,cAAN,SAA6B7G,MAA7B,CAAoC;cAG7B;;GAAZ,EAA6C;;;;;SAEtCpC,IAAL,GAAYA,IAAZ;;;MAGF,CAAYF,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;YACfyG,OAAOpJ,GAAGqJ,SAAH,CAAaC,GAAb,CAAiBtJ,EAAjB,EAAqBC,IAArB,EAA2B,MAAM;aACvCC,IAAL;WACGO,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAW4C,eAHb;WAKG7C,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWgI,sBAHb;WAKG9H,MAAH,CAAUX,IAAV,EAAgB,KAAhB;OAZW,CAAb;SAcGY,WAAH,CAAeZ,IAAf,EAAqBmJ,IAArB;;;;;;ACtBN;;AAEA,AAAO,MAAMG,gBAAN,SAA+BjH,MAA/B,CAAsC;SAC7BkH,MAAd,CACEjH,UAAmC;cAAY,KAAZ;YAA2B;GADhE,EAEU;UACF0E,WAAW1E,QAAQ0E,QAAR,IAAoB,KAArC;UACMwC,gBAAgBlH,QAAQkH,aAAR,IAAyB,KAA/C;UACMC,SAASnH,QAAQmH,MAAR,IAAkB,KAAjC;WACOC,UAAU;cAAA;mBAAA;;KAAV,CAAP;;;cAQApH,UAAmC;cAAY,KAAZ;YAA2B;GADhE,EAEE;;;;;;;;;SAEK0E,QAAL,GAAgB1E,QAAQ0E,QAAR,IAAoB,KAApC;SACKwC,aAAL,GAAqBlH,QAAQkH,aAAR,IAAyB,KAA9C;SACKC,MAAL,GAAcnH,QAAQmH,MAAR,IAAkB,KAAhC;;;MAGF,CAAY1J,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrEyB,cAAH,CAAkB5E,IAAlB,EAAwByG,2BAA2BG,IAAnD,EAHwE;;OAKrEpG,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoE,yBAAxC;;QACI,KAAKmC,QAAT,EAAmB;;SAEdxG,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWyG,gBAAX,CAA4B;mBAAa,KAAKsC;OAA9C,CAHF;;;QAME,KAAKC,MAAT,EAAiB;;SAEZ7I,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFe;;SAIZW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAJe;;SAMZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;KApBsE;;;OAuBrEQ,UAAH,CAAcR,IAAd,EAAoBmD,SAApB,EAA+BpD,GAAGU,OAAH,CAAWkJ,IAA1C;;;;;ACnDJ;;AAEA,AAAO,MAAMC,qBAAN,SAAoCvH,MAApC,CAA2C;cAGpCC,UAAwC;YAAU;GAA9D,EAAuE;;;;;SAEhEmH,MAAL,GAAcnH,QAAQmH,MAAR,IAAkB,KAAhC;;;MAGF,CAAY1J,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrEyB,cAAH,CAAkB5E,IAAlB,EAAwByG,2BAA2BQ,SAAnD,EAHwE;;OAKrEzG,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoE,yBAAxC,EALwE;;OAOrErE,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWyG,gBAAX,CAA4B;iBAAa;KAAzC,CAHF;;QAKI,KAAKuC,MAAT,EAAiB;;SAEZ7I,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFe;;SAIZW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAJe;;SAMZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;KAlBsE;;;OAqBrEQ,UAAH,CAAcR,IAAd,EAAoBD,GAAG8J,kBAAH,CAAsB1G,SAAtB,CAApB,EAAsDpD,GAAGU,OAAH,CAAWkJ,IAAjE;;;;;AChCJ;;AAEA,AAAO,MAAMG,SAAN,SAAwBzH,MAAxB,CAA+B;cAGxBC,UAA4B;YAAU;GAAlD,EAA2D;;;;;SAEpDmH,MAAL,GAAcnH,QAAQmH,MAAR,IAAkB,KAAhC;;;MAGF,CAAY1J,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrE3C,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC;;QACI,KAAKQ,MAAT,EAAiB;;SAEZ9I,MAAH,CAAUX,IAAV,EAAgB,MAAhB;KAFF,MAGO;;SAEFY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFK;;SAIFW,MAAH,CAAUX,IAAV,EAAgB,OAAhB;KAXsE;;;OAcrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAdwE;;OAgBrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBwE;;OAkBrE4E,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB,EAlBwE;;OAoBrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EApBwE;;OAsBrE4E,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB,EAtBwE;;OAwBrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC,EAxBwE;;OA0BrEvJ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC,EA1BwE;;OA4BrExJ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwJ,eAAX,CAA2B;cAAU,KAAKR;KAA1C,CAHF;;QAMI,CAACtG,UAAUT,SAAf,EAA0B;;SAErB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;AClDN;;AAEA,AAAO,MAAMkK,gBAAN,SAA+B7H,MAA/B,CAAoE;MACzE,CACEtC,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADM;;SAGDgH,aAAL,GAAqB5J,OAArB,CAA6B,CAAC6J,KAAD,EAAQC,GAAR,KAAgB;YACrC5F,OAAO1E,GAAG2E,KAAH,CAAS2E,GAAT,CAAae,MAAME,cAAN,EAAb,CAAb;YAEMC,cAAcH,MAAMI,cAAN,EAApB;;UACIJ,MAAMK,eAAN,EAAJ,EAA6B;WACxBC,iBAAH,CAAqBN,KAArB;OADF,MAEO,IAAIG,eAAe,IAAnB,EAAyB;WAC3B/J,UAAH,CACE4J,KADF,EAEErK,GAAG8J,kBAAH,CAAsBvH,OAAtB,CAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;qBACD,MAAM;;eAEZC,MAAH,CAAUyJ,KAAV,EAAiB,KAAjB,EAFe;;eAIZzJ,MAAH,CAAUyJ,KAAV,EAAiB,WAAjB,EAJe;;eAMZxJ,WAAH,CAAewJ,KAAf,EAAsBC,GAAtB,EANe;;eAQZ1J,MAAH,CAAUyJ,KAAV,EAAiB,KAAjB;WATU;oBAWF,MAAM;;eAEX5D,KAAH,CAAS+D,WAAT,EAAsBxK,GAAGqD,gBAAH,CAAoBd,OAApB,CAAtB;WAbU;qBAeD,MAAM;;eAEZ3B,MAAH,CAAUyJ,KAAV,EAAiB,KAAjB,EAFe;;eAIZxJ,WAAH,CAAewJ,KAAf,EAAsBC,GAAtB,EAJe;;eAMZ1J,MAAH,CAAUyJ,KAAV,EAAiB,UAAjB,EANe;;eAQZzJ,MAAH,CAAUyJ,KAAV,EAAiB,KAAjB;eACG5J,UAAH,CACE4J,KADF,EAEErK,GAAG8J,kBAAH,CAAsBvH,OAAtB,CAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;yBACD,MAAM;;mBAEZF,UAAH,CACE4J,KADF,EAEErK,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWkK,WAHb;eAHU;wBASF,MAAM;;mBAEXhK,MAAH,CAAUyJ,KAAV,EAAiB,MAAjB,EAFc;;mBAIX5D,KAAH,CAAS+D,WAAT,EAAsBxK,GAAGqD,gBAAH,CAAoBd,OAApB,CAAtB;;aAbJ,CAHF;;SAxBJ,CAHF;OADK,MAmDA,IAAI8H,MAAMQ,UAAN,EAAJ,EAAwB;WAC1BpK,UAAH,CACE4J,KADF,EAEErK,GAAG8J,kBAAH,CAAsBvH,OAAtB,CAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;qBACD,MAAM;;eAEZC,MAAH,CAAUyJ,KAAV,EAAiB,KAAjB,EAFe;;eAIZzJ,MAAH,CAAUyJ,KAAV,EAAiB,WAAjB,EAJe;;eAMZxJ,WAAH,CAAewJ,KAAf,EAAsBC,GAAtB,EANe;;eAQZ1J,MAAH,CAAUyJ,KAAV,EAAiB,IAAjB;WATU;oBAWF,MAAM;;eAEX5J,UAAH,CACE4J,KADF,EAEErK,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAW4C,eAHb;WAbU;qBAmBD,MAAM;;eAEZ1C,MAAH,CAAUyJ,KAAV,EAAiB,KAAjB,EAFe;;eAIZxJ,WAAH,CAAewJ,KAAf,EAAsBC,GAAtB,EAJe;;eAMZ1J,MAAH,CAAUyJ,KAAV,EAAiB,UAAjB;;SAzBJ,CAHF;OADK,MAiCA;;WAEFzJ,MAAH,CAAUyJ,KAAV,EAAiB,KAAjB,EAFK;;WAIFxJ,WAAH,CAAewJ,KAAf,EAAsBC,GAAtB,EAJK;;WAMF1J,MAAH,CAAUyJ,KAAV,EAAiB,UAAjB;;;YAGIS,aAAaT,MAAMU,aAAN,EAAnB;;UACID,WAAW3G,MAAX,GAAoB,CAAxB,EAA2B;WACtBwG,iBAAH,CAAqBN,KAArB;OArGyC;;;SAyGxC1F,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBqK,KAAjB,EAAwBrK,GAAGiL,YAAH,CAAgB1I,OAAhB,CAAxB,EAAkDmC,IAAlD;KAzGF,EAHM;;OA+GH9D,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;ACnHJ;;AACA,AAAO,MAAMiL,wBAAN,SAAuC5I,MAAvC,CAA8C;YACnD,CACEtC,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADM;;OAIHuB,KAAH,CAASC,SAAT,CAAmB5E,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EAJM;;OAMHsC,cAAH,CAAkB5E,IAAlB,EAAwBiF,gBAAxB,EANM;;OAQHzE,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwH,mBAAX,CAA+B;YACvB,MAAM;;WAEPrH,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFU;;WAIPW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;WACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW2D,IAAX,CACEkB,SAASvF,EAAT,EAAaC,IAAb,EAAmBsC,OAAnB,EAA4BE,GAA5B,CAAiC6B,OAAD,KAAc;qBACjC,MAAM;eACZ1D,MAAH,CAAUX,IAAV,EAAgB,KAAhB;oBACQqF,gBAAR;WAH0C;oBAKlC,MAAM;oBACN6F,WAAR;eACG1K,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWgI,sBAHb;eAKG9H,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;SAZ4B,CAAhC,CADF,EAgBE,MAAM;aACDW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;aACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwD,cAAxC;SAlBJ,CAHF;;KANJ,CAHF,EARM;;OA8CHzD,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;gBACpB1E,2BAA2BG;KADvC,CAHF,EA9CM;;OAsDHpG,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;MAGF,CAAY/H,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;sBAIgBD,EAAlB,EAAsBC,IAAtB,EAA4BsC,OAA5B;;;;;ACrEJ;;AACA,AAAO,MAAM8I,sBAAN,SAAqC/I,MAArC,CAA4C;YACjD,CACEtC,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADM;;OAIHuB,KAAH,CAASC,SAAT,CAAmB5E,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EAJM;;OAMHsC,cAAH,CAAkB5E,IAAlB,EAAwB+E,cAAxB,EANM;;OAQHvE,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwH,mBAAX,CAA+B;YACvB,MAAM;;WAEPrH,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFU;;WAIPW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;WACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW2D,IAAX,CACEkB,SAASvF,EAAT,EAAaC,IAAb,EAAmBsC,OAAnB,EAA4BE,GAA5B,CAAiC6B,OAAD,KAAc;qBACjC,MAAM;eACZ1D,MAAH,CAAUX,IAAV,EAAgB,KAAhB;oBACQsE,aAAR;WAH0C;oBAKlC,MAAM;oBACN+G,SAAR;eACG7K,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWgI,sBAHb;eAKG9H,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;SAZ4B,CAAhC,CADF,EAgBE,MAAM;aACDW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;aACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwD,cAAxC;SAlBJ,CAHF;;KANJ,CAHF,EARM;;OA8CHzD,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;gBACpB1E,2BAA2BG;KADvC,CAHF,EA9CM;;OAsDHpG,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;MAGF,CAAY/H,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;oBAIcD,EAAhB,EAAoBC,IAApB,EAA0BsC,OAA1B;;;;;ACpEG,MAAegJ,WAAf,SAAmCjJ,MAAnC,CAA0C;cAInC;aAAA;;GAAZ,EAAqD;;;;;;;SAE9CqB,IAAL,GAAYA,IAAZ;SACK6H,SAAL,GAAiBA,SAAjB;;;;;ACXJ;;AAEA,AAAO,MAAMC,sBAAN,SAAqCnJ,MAArC,CAAkD;MACvD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAHoE;;;OAQnEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EARsE;;OAUnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;ACbJ;;AAEA,AAAO,MAAMyL,4BAAN,SAA2CpJ,MAA3C,CAAwD;MAC7D,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC,EAPsE;;OASnE1C,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EATsE;;OAWnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWiL,gBAAxC;;;;;ACdJ;;AAEA,AAAO,MAAMC,2BAAN,SAA0CtJ,MAA1C,CAAuD;MAC5D,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC,EAPsE;;OASnE7C,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWiL,gBAAxC;;;;;ACZJ;;AAEA,AAAO,MAAeE,uBAAf,SAA+CvJ,MAA/C,CAA4D;;;;;;;MAGjE,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEY,WAAH,CAAeZ,IAAf,EAAqB,KAAK6L,KAA1B,EAPsE;;OASnElL,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;;;ACjBJ;;AACA,AAAO,MAAM8L,wBAAN,SAAuCF,uBAAvC,CAA+D;;;;kEAClD,CADkD;;;;;ACDtE;;AACA,AAAO,MAAMG,sBAAN,SAAqCH,uBAArC,CAA6D;;;;kEAChD,CADgD;;;;;ICJxDI,cAAZ;;WAAYA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;iBAAAA;GAAAA,mBAAAA;;ACGL,MAAMC,oBAAoB,CAA1B;AACP,AAAO,MAAMC,mBAAmB,CAAzB;AACP,AAAO,MAAMC,sBAAsB,CAA5B;AACP,AAAO,MAAMC,mBAAmB,CAAzB;AAEP,AAAO,MAAMC,uBAAuB,IAAIC,GAAJ,CAAQ,CAC1CC,WAAWC,WAD+B,EAE1CD,WAAWE,eAF+B,EAG1CF,WAAWG,gBAH+B,EAI1CH,WAAWI,2BAJ+B,EAK1CJ,WAAWK,mBAL+B,EAM1CL,WAAWM,gBAN+B,EAO1CN,WAAWO,kBAP+B,EAQ1CP,WAAWQ,oBAR+B,EAS1CR,WAAWS,cAT+B,EAU1CT,WAAWU,gBAV+B,EAW1CV,WAAWW,2BAX+B,EAY1CX,WAAWY,4CAZ+B,EAa1CZ,WAAWa,iCAb+B,CAAR,CAA7B;;ACCP,MAAMC,gBAAiBrN,IAAD,IACpBA,QAAQ,IAAR,KACCoI,WAAWkF,cAAX,CAA0BtN,IAA1B,KACCoI,WAAWmF,yBAAX,CAAqCvN,IAArC,CADD,IAECoI,WAAWoF,eAAX,CAA2BxN,IAA3B,CAFD,IAGCoI,WAAWqF,YAAX,CAAwBzN,IAAxB,CAJF,CADF;;;;AASA,AAAO,MAAM0N,sBAAN,SAAqCrL,MAArC,CAA4C;MACjD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB;OACG3C,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkN,kBAAxC,EAJe;;WAMZnN,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkK,WAAxC;OAPU;gBASF,MAAM;WACXhK,MAAH,CAAUX,IAAV,EAAgB,MAAhB;OAVU;iBAYD,MAAM;YACX4N,SAAS5N,KAAK6N,SAAL,EAAb;;YACI,CAACR,cAAcO,MAAd,CAAL,EAA4B;mBACjB5N,KAAK8N,cAAL,CACNC,UAAD,IAAgB,CAACV,cAAcU,UAAd,CADV,CAAT;;cAGIH,UAAU,IAAd,EAAoB;qBACTA,OAAOC,SAAP,EAAT;;;;YAKFzF,WAAWqF,YAAX,CAAwBzN,IAAxB,KACC4N,UAAU,IAAV,IAAkBxF,WAAWqF,YAAX,CAAwBG,MAAxB,CAFrB,EAGE;aACGjN,MAAH,CAAUX,IAAV,EAAgB,OAAhB;SAJF,MAKO,IAAI4N,UAAU,IAAd,EAAoB;aACtBI,WAAH,CACEhO,IADF,EAEE,2DAFF,EAGEgM,eAAeiC,oBAHjB;SADK,MAMA,IAAI7F,WAAWkF,cAAX,CAA0BM,MAA1B,CAAJ,EAAuC;cACxCtL,QAAQ4L,OAAR,IAAmB,IAAvB,EAA6B;eACxBF,WAAH,CACEhO,IADF,EAEE,uDAFF,EAGEgM,eAAeiC,oBAHjB;WADF,MAMO;eACFrN,WAAH,CAAeZ,IAAf,EAAqBmO,gBAArB;eACGC,OAAH,CAAWpO,IAAX,EAAiB,KAAjB,EAAwBsC,QAAQ4L,OAAhC;;SATG,MAWA;aACFvN,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;KA9CN,CAHF;;;;;ACfJ;;AAEA,AAAO,MAAMqO,uBAAN,SAAsChM,MAAtC,CAAmD;MACxD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;;SAElB/B,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;OAGCQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgH,gBAAxC;;QAEInF,QAAQI,SAAZ,EAAuB;SAClBlC,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWiH,gBAAxC;;;;;;ACZN;;AAEA,AAAO,MAAM4G,WAAN,SAA0BjM,MAA1B,CAAuC;MAC5C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;;OAEnE9B,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAW8N,qBAHb,EAFsE;;OAQnE/N,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgH,gBAAxC;;;;;ACXJ;;AAEA,AAAO,MAAM+G,oBAAN,SAAmCnM,MAAnC,CAAgD;MACrD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;;OAEnEsC,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB,EAFsE;;OAInEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgO,YAAxC,EAJsE;;OAMnEjO,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWiO,KAAxC;;;;;ACJJ;;AAEA,AAAO,MAAMC,UAAN,SAAyBtM,MAAzB,CAAgC;cAIzBuM,KAAZ,EAA2BpL,WAA3B,EAAoD;;;;;;;SAE7CoL,KAAL,GAAaA,KAAb;SACKpL,WAAL,GAAmBA,WAAnB;;;MAGF,CAAYzD,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;SACjEuM,OAAL,CAAa9O,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB;;;SAGF,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIE+H,MAAc,CAJhB,EAKQ;QACFA,OAAO,KAAKuE,KAAL,CAAW1K,MAAtB,EAA8B;WACvBV,WAAL;KADF,MAEO;SACFhD,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;mBACD,KAAKkO,KAAL,CAAWvE,GAAX,EAAgByE,SADf;kBAEF,KAAKF,KAAL,CAAWvE,GAAX,EAAgBjD,QAFd;mBAGD,MAAM,KAAKyH,OAAL,CAAa9O,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgC+H,MAAM,CAAtC;OAHnB,CAHF;;;;;;ACrBC,MAAM0E,aAAN,SAA4B1M,MAA5B,CAAmC;cAO5B;QAAA;eAAA;aAAA;eAAA;;GAAZ,EAMyB;;;;;;;;;;;;;SAElBU,IAAL,GAAYA,IAAZ;SACKwH,WAAL,GAAmBA,WAAnB;SACKuE,SAAL,GAAiBA,SAAjB;SACKE,WAAL,GAAmBA,WAAnB;SACK9G,SAAL,GAAiBA,aAAa,IAAb,GAAoB,IAApB,GAA2BA,SAA5C;;;MAGF,CAAYnI,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,KAAK4F,SAAT,EAAoB;SACfA,SAAH,CAAalI,IAAb,EAAmBsC,OAAnB,EAA6B0B,YAAD,IAAkB;aACvCiL,QAAL,CAAclP,EAAd,EAAkBC,IAAlB,EAAwBgE,YAAxB;OADF;KADF,MAIO;WACAiL,QAAL,CAAclP,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB;;;;UAIJ,CAAiBvC,EAAjB,EAAoCC,IAApC,EAAgDsC,OAAhD,EAA6E;QACvE,KAAKiI,WAAL,IAAoB,IAAxB,EAA8B;WACvBA,WAAL;;;OAGC2E,kBAAH,CAAuBC,MAAD,IAAY;UAC5B,KAAKL,SAAL,IAAkB,IAAtB,EAA4B;aACrBA,SAAL;;;UAGE,CAACK,OAAOC,QAAP,GAAkBC,MAAlB,CAAyBF,OAAOG,UAAP,EAAzB,CAAL,EAAoD;WAC/ClB,OAAH,CAAWpO,IAAX,EAAiB,UAAjB,EAA6BmP,OAAOI,OAAP,EAA7B;;;SAGCL,kBAAH,CAAuBM,OAAD,IAAa;WAC9BN,kBAAH,CAAuBO,OAAD,IAAa;aAC9BP,kBAAH,CAAuBQ,UAAD,IAAgB;iBAC/B3M,IAAL,CACEhD,GAAG4P,cAAH,CACE5P,GAAG6P,iBAAH,CAAqBtN,OAArB,EAA8BoN,WAAWH,OAAX,EAA9B,CADF,EAEEC,QAAQD,OAAR,EAFF,CADF;eAMGnB,OAAH,CAAWpO,IAAX,EAAiB,KAAjB,EAAwByP,QAAQF,OAAR,EAAxB;WAPF,EADiC;;aAY9B5O,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SAZF;;YAeI,KAAKgP,WAAL,IAAoB,IAAxB,EAA8B;eACvBA,WAAL;;;WAGCZ,OAAH,CAAWpO,IAAX,EAAiB,KAAjB,EAAwBmP,OAAOC,QAAP,EAAxB;OApBF,EATgC;;SAiC7BzO,MAAH,CAAUX,IAAV,EAAgB,MAAhB;KAjCF;;;;;ACxCG,MAAM6P,QAAN,SAAuBxN,MAAvB,CAA8B;cAKvB;aAAA;YAAA;;GAAZ,EAAiE;;;;;;;;;SAE1DyM,SAAL,GAAiBA,SAAjB;SACK1H,QAAL,GAAgBA,QAAhB;SACK0I,SAAL,GAAiBA,SAAjB;;;MAGF,CAAY/P,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;SACjEwM,SAAL;UACM;cAAA;;QAA0B,IAAhC;;QACI1H,YAAY,IAAhB,EAAsB;UAChB0I,aAAa,IAAjB,EAAuB;cACf,IAAI1O,KAAJ,CAAU,8CAAV,CAAN;;;SAEC8N,kBAAH,CAAuBa,KAAD,IAAW;WAC5B3B,OAAH,CAAWpO,IAAX,EAAiB,OAAjB,EAA0B+P,MAAMR,OAAN,EAA1B;;OADF;KAJF,MAQO;SACFL,kBAAH,CAAuBc,WAAD,IAAiB;WAClCd,kBAAH,CAAuBe,UAAD,IAAgB;aACjC7B,OAAH,CAAWpO,IAAX,EAAiB,UAAjB,EAA6BiQ,WAAWV,OAAX,EAA7B;;;cAEI,KAAKO,SAAL,IAAkB,IAAtB,EAA4B;eACvB1B,OAAH,CAAWpO,IAAX,EAAiB,KAAjB,EAAwBgQ,YAAYT,OAAZ,EAAxB;;SAJJ;;YAQI,KAAKO,SAAL,IAAkB,IAAtB,EAA4B;eACrBA,SAAL;;OAVJ;;;;;;AC1BC,MAAMI,uBAAN,SAAsC7N,MAAtC,CAAqE;cAE9D;;GAAZ,EAA6D;;;;;SAEtD8N,WAAL,GAAmBA,WAAnB;;;MAEF,CACEpQ,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;QACF,KAAK6N,WAAT,EAAsB;SACjBjI,SAAH,CAAalI,IAAb,EAAmBsC,OAAnB,EAA6B0B,YAAD,IAAkB;aACvCoM,cAAL,CAAoBrQ,EAApB,EAAwBC,IAAxB,EAA8BgE,YAA9B;OADF;KADF,MAIO;WACAoM,cAAL,CAAoBrQ,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B;;;;gBAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;SACD+N,YAAL,GAAoB9P,OAApB,CAA6B+P,IAAD,IAAU;SACjC5L,KAAH,CAAS2E,GAAT,CAAaiH,KAAKC,OAAL,EAAb;KADF;SAGKC,uBAAL,GAA+BjQ,OAA/B,CAAwCkQ,IAAD,IAAU;SAC5C/L,KAAH,CAAS2E,GAAT,CAAaoH,KAAKF,OAAL,EAAb;KADF;UAIMG,qBAAsB1Q,KAAK2Q,YAAN,CAA2BC,UAAtD;QACIA,UAAJ;;QACIF,sBAAsB,IAA1B,EAAgC;mBACjB1Q,KAAK6Q,aAAL,EAAb;KADF,MAEO;mBACQH,mBAAmBlO,GAAnB,CAAwBsO,SAAD,IACjC9Q,IAAD,CAAc+Q,uBAAd,CAAsCD,SAAtC,CADW,CAAb;;;eAISvQ,OAAX,CAAoBuQ,SAAD,IAAoB;SAClCtK,KAAH,CAASsK,SAAT,EAAoB/Q,GAAGiR,cAAH,CAAkB1O,OAAlB,CAApB;KADF;;;;;AC5CJ;;AAEA,AAAO,MAAe2O,qBAAf,SAA6C5O,MAA7C,CAA0D;;;;mEAC5C,CAD4C;;;MAI/D,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEY,WAAH,CAAeZ,IAAf,EAAqB,KAAK0D,IAA1B,EAPsE;;OASnE9C,WAAH,CAAeZ,IAAf,EAAqB,KAAKkE,MAA1B,EATsE;;OAWnEvD,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;ICxBQkR,KAAZ;;WAAYA;QAAAA;QAAAA;QAAAA;QAAAA;QAAAA;QAAAA;QAAAA;GAAAA,UAAAA;;ACIZ;;AACA,AAAO,MAAMC,mBAAN,SAAkCF,qBAAlC,CAAwD;;;;iEAC5CC,MAAME,OADsC;;;;;ACC/D;;AAEA,AAAO,MAAeC,kBAAf,SAA0ChP,MAA1C,CAAuD;MAC5D,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAPsE;;OASnEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;;;ACfJ;;AACA,AAAO,MAAMsR,gBAAN,SAA+BD,kBAA/B,CAAkD;;ACGzD;;AAEA,AAAO,MAAeE,QAAf,SAAgClP,MAAhC,CAA6C;;;;;;;MAGlD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAPsE;;OASnEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EATsE;;OAWnEY,WAAH,CAAeZ,IAAf,EAAqB,KAAK0D,IAA1B,EAXsE;;OAanE/C,MAAH,CAAUX,IAAV,EAAgB,OAAhB;;;;;ACrBJ;;AACA,AAAO,MAAMwR,eAAN,SAA8BD,QAA9B,CAAuC;;;;iEAC3BL,MAAME,OADqB;;;;;ACD9C,SAASxN,OAAT,CAAiBF,IAAjB,EAA6E;MACvEA,QAAQ,IAAZ,EAAkB;WACTb,SAAP;;;QAGI4O,aAAa/N,KAAKgO,aAAL,EAAnB;SACOD,cAAc,IAAd,GAAqB/N,IAArB,GAA4B+N,UAAnC;;;AAGF,AAAO,MAAME,eAAe,CAC1BjO,IAD0B,EAE1BK,MAF0B,KAI1BH,QAAQF,IAAR,EAAckO,WAAd,MACAhO,QAAQF,IAAR,EACGmO,aADH,GAEGC,IAFH,CAEQ/N,MAFR,CALK;AASP,AAAO,MAAMgO,sBAAsB,CACjCrO,IADiC,EAEjCK,MAFiC,KAIjCH,QAAQF,IAAR,EAAcsO,kBAAd,MACApO,QAAQF,IAAR,EACGuO,oBADH,GAEGH,IAFH,CAEQ/N,MAFR,CALK;AASP,AAAO,MAAMmO,UAAU,CACrBxO,IADqB,EAErBK,MAFqB,KAIrBA,OAAOL,IAAP,KACAiO,aAAajO,IAAb,EAAmBK,MAAnB,CADA,IAEAgO,oBAAoBrO,IAApB,EAA0BK,MAA1B,CANK;AAQP,AAAO,MAAMoO,SAAS,CACpBzO,IADoB,EAEpBK,MAFoB,KAIpBL,QAAQ,IAAR,IACA,CAACE,QAAQF,IAAR,EAAc0O,UAAd,EADD,KAECrO,OAAOL,IAAP,KACEE,QAAQF,IAAR,EAAckO,WAAd,MACChO,QAAQF,IAAR,EACGmO,aADH,GAEGQ,KAFH,CAEUC,SAAD,IAAeH,OAAOG,SAAP,EAAkBvO,MAAlB,CAFxB,CAFH,IAKEH,QAAQF,IAAR,EAAcsO,kBAAd,MACCpO,QAAQF,IAAR,EACGuO,oBADH,GAEGI,KAFH,CAEUE,gBAAD,IAAsBJ,OAAOI,gBAAP,EAAyBxO,MAAzB,CAF/B,CARJ,CAJK;AAgBP,AAAO,MAAM4G,cAAejH,IAAD,IACzBA,QAAQ,IAAR,IAAgBE,QAAQF,IAAR,EAAc8O,eAAd,EADX;AAGP,AAAO,MAAMC,kBAAmB/O,IAAD,IAC7ByO,OAAOzO,IAAP,EAAaiH,WAAb,CADK;AAGP,AAAO,MAAM+H,eAAgBhP,IAAD,IAC1BwO,QAAQxO,IAAR,EAAciH,WAAd,CADK;AAGP,AAAO,MAAMgI,SAAUjP,IAAD,IACpBA,QAAQ,IAAR,KAAiBE,QAAQF,IAAR,EAAckP,UAAd,MAA8BhP,QAAQF,IAAR,EAAc0O,UAAd,EAA/C,CADK;AAGP,AAAO,MAAMS,aAAcnP,IAAD,IACxByO,OAAOzO,IAAP,EAAaiP,MAAb,CADK;AAGP,AAAO,MAAMG,UAAWpP,IAAD,IACrBwO,QAAQxO,IAAR,EAAciP,MAAd,KAAyB/O,QAAQF,IAAR,EAAc0O,UAAd,EADpB;AAGP,AAAO,MAAMW,sBAAuBrP,IAAD,IACjCA,QAAQ,IAAR,IACAyO,OAAOzO,IAAP,EAAcsP,GAAD,IAASA,OAAO,IAAP,IAAeA,IAAIC,mBAAJ,EAArC,CAFK;AAIP,AAAO,MAAMxN,WAAY/B,IAAD,IACtBA,QAAQ,IAAR,KACCE,QAAQF,IAAR,EAAcwP,YAAd,MAAgCtP,QAAQF,IAAR,EAAcuP,mBAAd,EADjC,CADK;AAIP,AAAO,MAAME,eAAgBzP,IAAD,IAC1ByO,OAAOzO,IAAP,EAAa+B,QAAb,CADK;AAGP,AAAO,MAAM2N,YAAa1P,IAAD,IACvBwO,QAAQxO,IAAR,EAAc+B,QAAd,CADK;AAGP,AAAO,MAAMD,WAAY9B,IAAD,IACtBA,QAAQ,IAAR,KACCE,QAAQF,IAAR,EAAc2P,YAAd,MAAgCzP,QAAQF,IAAR,EAAc4P,mBAAd,EADjC,CADK;AAIP,AAAO,MAAMC,eAAgB7P,IAAD,IAC1ByO,OAAOzO,IAAP,EAAa8B,QAAb,CADK;AAGP,AAAO,MAAMgO,YAAa9P,IAAD,IACvBwO,QAAQxO,IAAR,EAAc8B,QAAd,CADK;AAGP,AAAO,MAAMD,YAAa7B,IAAD,IACvBA,QAAQ,IAAR,KACCE,QAAQF,IAAR,EAAc+P,aAAd,MAAiC7P,QAAQF,IAAR,EAAcgQ,oBAAd,EADlC,CADK;AAIP,AAAO,MAAMC,gBAAiBjQ,IAAD,IAC3ByO,OAAOzO,IAAP,EAAa6B,SAAb,CADK;AAGP,AAAO,MAAMqO,aAAclQ,IAAD,IACxBwO,QAAQxO,IAAR,EAAc6B,SAAd,CADK;;AAGP,MAAMsO,cAAc,CAACnQ,IAAD,EAAsBoQ,IAAtB;KAElB,CAAClQ,QAAQF,IAAR,EAAcqQ,YAAd,CAA2BC,KAA3B,GAAmCF,IAApC,MAA8CA,IAFhD;;AAIA,AAAO,MAAMG,WAAYvQ,IAAD,IACtBA,QAAQ,IAAR,KACCmQ,YAAYnQ,IAAZ,EAAkBwQ,UAAUC,QAA5B,KACCN,YAAYnQ,IAAZ,EAAkBwQ,UAAUE,YAA5B,CAFF,CADK;AAKP,AAAO,MAAMC,eAAgB3Q,IAAD,IAC1ByO,OAAOzO,IAAP,EAAauQ,QAAb,CADK;AAGP,AAGO,MAAMK,cAAe5Q,IAAD,IACzBiH,YAAYjH,IAAZ,KACAiP,OAAOjP,IAAP,CADA,IAEA8B,SAAS9B,IAAT,CAFA,IAGA+B,SAAS/B,IAAT,CAHA,IAIA6B,UAAU7B,IAAV,CAJA,IAKAuQ,SAASvQ,IAAT,CANK;AAQP,AAAO,MAAM6Q,kBAAmB7Q,IAAD,IAC7ByO,OAAOzO,IAAP,EAAa4Q,WAAb,CADK;AAGP,AAGO,MAAME,eAAgB9Q,IAAD,IAC1ByO,OAAOzO,IAAP,EAAcsP,GAAD,IAAS,CAACsB,YAAYtB,GAAZ,CAAvB,CADK;AAGP,AAAO,MAAMyB,UAAW/Q,IAAD,IACrBA,QAAQ,IAAR,IAAgBE,QAAQF,IAAR,EAAcgR,WAAd,EADX;AAGP,AAAO,MAAMC,cAAejR,IAAD,IACzByO,OAAOzO,IAAP,EAAa+Q,OAAb,CADK;AAGP,AAAO,MAAMG,UAAWlR,IAAD,IACrBA,QAAQ,IAAR,IAAgBE,QAAQF,IAAR,EAAcmR,WAAd,EADX;AAGP,AAAO,MAAMC,cAAepR,IAAD,IACzByO,OAAOzO,IAAP,EAAakR,OAAb,CADK;AAGP,AAAO,MAAMG,SAAS,CAACC,KAAD,EAAwBC,KAAxB,KACpBD,SAAS,IAAT,IACAC,SAAS,IADT,KAECD,UAAUC,KAAV,IACEtB,cAAcqB,KAAd,KAAwBrB,cAAcsB,KAAd,CAD1B,IAEE9B,aAAa6B,KAAb,KAAuB7B,aAAa8B,KAAb,CAFzB,IAGE1B,aAAayB,KAAb,KAAuBzB,aAAa0B,KAAb,CAL1B,CADK;AAQP,AAAO,MAAMC,UAAWxR,IAAD,IACrBA,QAAQ,IAAR,IAAgBE,QAAQF,IAAR,EAAckO,WAAd,EADX;AAGP,AAAO,MAAMuD,iBAAkBzR,IAAD,IAC5BA,QAAQ,IAAR,IAAgBE,QAAQF,IAAR,EAAcsO,kBAAd,EADX;AAGP,AAAO,MAAMoD,YAAa1R,IAAD,IACvBA,QAAQ,IAAR,IAAgBE,QAAQF,IAAR,EAAc2R,aAAd,EADX;AAGP,AAAO,MAAMC,YAAa5R,IAAD,IACvBA,QAAQ,IAAR,IAAgBmQ,YAAYnQ,IAAZ,EAAkBwQ,UAAUqB,GAA5B,CADX;AAGP,AAAO,MAAMC,SAAU9R,IAAD,IACpBA,QAAQ,IAAR,IAAgBmQ,YAAYnQ,IAAZ,EAAkBwQ,UAAUuB,IAA5B,CADX;;AClKP;;AACA,AAAO,MAAMC,eAAN,SAA8BpK,WAA9B,CAA0C;MAC/C,CAAYvL,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;QAIE,KAAK0D,IAAL,IAAa,IAAjB,EAAuB;WAChBiS,WAAL,CAAiB5V,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EAAoC,KAAKoB,IAAzC;KADF,MAEO;WACAkS,kBAAL,CAAwB7V,EAAxB,EAA4BC,IAA5B,EAAkCsC,OAAlC;;;;aAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKQ;QACFmS,eAAA,CAA0BnS,IAA1B,KAAmCmS,UAAA,CAAqBnS,IAArB,CAAvC,EAAmE;SAC9DoS,eAAH,CAAmB9V,IAAnB,EAAyB,KAAzB;KADF,MAEO,IAAI6V,aAAA,CAAwBnS,IAAxB,CAAJ,EAAmC;WACnCqS,cAAL,CAAoBhW,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClCsS,aAAL,CAAmBjW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClCuS,aAAL,CAAmBlW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KADK,MAEA;KAEJuT,YAAA,CAAuBnS,IAAvB,CAAD,IACA,CAACmS,OAAA,CAAkBnS,IAAlB,CADD,IAEA,CAACmS,UAAA,CAAqBnS,IAArB,CAFD,IAGA,CAACmS,SAAA,CAAoBnS,IAApB,CAHD,IAIA,CAACmS,SAAA,CAAoBnS,IAApB,CANI,EAOL;SACGoS,eAAH,CAAmB9V,IAAnB,EAAyB,IAAzB;KARK,MASA;WACA4V,kBAAL,CAAwB7V,EAAxB,EAA4BC,IAA5B,EAAkCsC,OAAlC;;;;gBAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyV,UAAxC;;;eAGF,CACEnW,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC;OACGvV,WAAH,CAAeZ,IAAf,EAAqB,CAArB;OACGW,MAAH,CAAUX,IAAV,EAAgB,aAAhB;;;eAGF,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2V,SAAxC;OACGxR,cAAH,CAAkB5E,IAAlB,EAAwB,EAAxB;OACGW,MAAH,CAAUX,IAAV,EAAgB,OAAhB;OACGW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;oBAGF,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW2D,IAAX,CACE,CACE;iBACa,MAAM;;WAEZzD,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8E,SAAxC;OALJ;gBAOY,MAAM;;WAEX/E,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyV,UAAxC;;KAVN,EAaE;iBACa,MAAM;;WAEZvV,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkS,MAAxC,EAJe;;WAMZhS,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANe;;WAQZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkK,WAAxC,EARe;;WAUZhK,MAAH,CAAUX,IAAV,EAAgB,IAAhB;OAXJ;gBAaY,MAAM;WACX8V,eAAH,CAAmB9V,IAAnB,EAAyB,KAAzB;;KA3BN,EA8BE;iBACa,MAAM;;WAEZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4V,QAAxC,EAJe;;WAMZ1V,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANe;;WAQZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwT,QAAxC,EARe;;WAUZtT,MAAH,CAAUX,IAAV,EAAgB,IAAhB;OAXJ;gBAaY,MAAM;WACX8V,eAAH,CAAmB9V,IAAnB,EAAyB,IAAzB;;KA5CN,EA+CE;iBACa,MAAM;;WAEZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgF,QAAxC;OALJ;gBAOY,MAAM;aACTuQ,aAAL,CAAmBjW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;;KAvDN,CADF,EA4DE,MAAM;WACC2T,aAAL,CAAmBlW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KA7DJ,CAHF;;;;;AClFJ;;AACA,AAAO,MAAMgU,gBAAN,SAA+BrF,qBAA/B,CAAqD;;;;mEACvC,CADuC,iCAEzCC,MAAMqF,IAFmC;;;;;ACD5D;;AACA,AAAO,MAAMC,YAAN,SAA2BjF,QAA3B,CAAoC;;;;iEACxBL,MAAMqF,IADkB;;;;;ACD3C;;AACA,AAAO,MAAME,kBAAN,SAAiCxF,qBAAjC,CAAuD;;;;iEAC3CC,MAAMwF,MADqC;;;;;ACF9D;;AACA,AAAO,MAAMC,eAAN,SAA8BtF,kBAA9B,CAAiD;;ACAxD;;AACA,AAAO,MAAMuF,cAAN,SAA6BrF,QAA7B,CAAsC;;;;iEAC1BL,MAAMwF,MADoB;;;;;ACM7C;;AACA,AAAO,MAAMG,cAAN,SAA6BvL,WAA7B,CAAyC;MAC9C,CAAYvL,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;QAIE,KAAK0D,IAAL,IAAa,IAAjB,EAAuB;WAChBiS,WAAL,CAAiB5V,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EAAoC,KAAKoB,IAAzC;KADF,MAEO;WACAoT,cAAL,CAAoB/W,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B;;;;aAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKQ;QACFmS,eAAA,CAA0BnS,IAA1B,CAAJ,EAAqC;WAC9BqT,gBAAL,CAAsBhX,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC;KADF,MAEO,IAAIuT,UAAA,CAAqBnS,IAArB,CAAJ,EAAgC;WAChCsT,WAAL,CAAiBjX,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B;KADK,MAEA,IAAIuT,aAAA,CAAwBnS,IAAxB,CAAJ,EAAmC;WACnCqS,cAAL,CAAoBhW,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClCsS,aAAL,CAAmBjW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClCuS,aAAL,CAAmBlW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClCuT,aAAL,CAAmBlX,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClCwT,aAAL,CAAmBnX,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KADK,MAEA;WACAwU,cAAL,CAAoB/W,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B;;;;kBAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwD,cAAxC;;;aAGF,CACElE,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH3B,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFM;;OAIHY,WAAH,CAAeZ,IAAf,EAAqB,CAArB;;;gBAGF,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;WACZF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyV,UAAxC;OAFU;gBAIF,MAAM;;WAEXtV,WAAH,CAAeZ,IAAf,EAAqB,CAArB;OANU;iBAQD,MAAM;;WAEZY,WAAH,CAAeZ,IAAf,EAAqB,CAArB;;KAVJ,CAHF;;;eAmBF,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC;;;eAGF,CACEpW,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwD,cAAxC;;;eAGF,CACElE,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwD,cAAxC;;;eAGF,CACElE,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0W,WAAX,CAAuB;YACf,KAAKzT,IADU;iBAEVwN,MAAMkG,MAFI;qBAGN;KAHjB,CAHF,EAFM;;SAYDN,cAAL,CAAoB/W,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B,EAAuC,IAAvC;;;gBAGF,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIE+U,sBAA+B,KAJjC,EAKQ;UACAC,SAAS,CACbC,KADa,EAEbnQ,QAFa,EAGb0I,SAHa,KAKb/P,GAAGS,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BiV,KAA7B;OALU;cAAA;;KAAd,CAHF,CALF;;WAqBExX,GAAGU,OAAH,CAAWgF,QADb,EAEE,MAAM,KAAKuQ,aAAL,CAAmBjW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,CAFR,EAGE,MACEgV,OACEvX,GAAGU,OAAH,CAAWkK,WADb,EAEE,MAAM,KAAKoM,gBAAL,CAAsBhX,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC,CAFR,EAGE,MACEgV,OACEvX,GAAGU,OAAH,CAAWkS,MADb,EAEE,MAAM,KAAKqE,WAAL,CAAiBjX,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,CAFR,EAGE,MACEgV,OACEvX,GAAGU,OAAH,CAAW8E,SADb,EAEE,MAAM,KAAKwQ,cAAL,CAAoBhW,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B,CAFR,EAGE,MACEgV,OACEvX,GAAGU,OAAH,CAAW+E,QADb,EAEE,MAAM,KAAKyQ,aAAL,CAAmBlW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,CAFR,EAGE,MACEgV,OACEvX,GAAGU,OAAH,CAAWwT,QADb,EAEE,MAAM,KAAKgD,aAAL,CAAmBlX,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,CAFR,EAGE,MACE+U,sBACItX,GAAGS,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwD,cAHb,CADJ,GAMI,KAAKiT,aAAL,CAAmBnX,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,CAVR,CAJJ,CAJJ,CAJJ,CAJJ,CAJJ;;;;;AC5JJ;;AACA,AAAO,MAAMkV,kBAAN,SAAiCnV,MAAjC,CAA8C;MACnD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;;;SAGlB/B,MAAH,CAAUX,IAAV,EAAgB,QAAhB;;;;SAIGW,MAAH,CAAUX,IAAV,EAAgB,QAAhB;;;;SAIGW,MAAH,CAAUX,IAAV,EAAgB,QAAhB;;;;SAIGY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAfqB;;SAiBlBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAjBqB;;SAoBlBY,WAAH,CAAeZ,IAAf,EAAqBkR,MAAMkG,MAA3B;;;;SAIGxW,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAxBqB;;SA0BlBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;AC/BN;;AAEA,AAAO,MAAMyX,0BAAN,SAAyCpV,MAAzC,CAAsD;MAC3D,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;YACfgV,MAAM3X,GAAG2E,KAAH,CAASiT,SAAT,EAAZ;YACMC,OAAO7X,GAAG2E,KAAH,CAASiT,SAAT,EAAb,CAFqB;;SAIlBhX,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJqB;;SAMlB0E,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCsV,IAAhC,EANqB;;SAQlBpX,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC,EARqB;;SAUlBtI,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVqB;;SAYlB0E,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCoV,GAAhC,EAZqB;;SAclB/W,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAdqB;;SAgBlBQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWoX,UAAX,CAAsB;cACd,MAAM;;aAEPnT,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCoV,GAAhC,EAFU;;aAIPhT,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCsV,IAAhC,EAJU;;aAMPjX,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EANU;;aAQPW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARU;;aAUPW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAVU;;aAYPQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWuJ,6BAHb;;OAbJ,CAHF;;;;;;ACjBN;;AACA,AAAO,MAAM+N,mBAAN,SAAkC1V,MAAlC,CAAkE;MACvE,CACEtC,EADF,EAEEiY,IAFF,EAGE7U,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBrD,GAAGkY,iBAAH,CAAqB9U,SAArB,CAApB,CAAhB;UACM+U,QAAQF,KAAKG,aAAL,EAAd;UACMC,YAAYrY,GAAG6D,OAAH,CAAWsU,KAAX,CAAlB;UACMG,OAAOL,KAAKM,4BAAL,EAAb;UACMC,WAAWxY,GAAG6D,OAAH,CAAWyU,IAAX,CAAjB,CALM;;OAQH7X,UAAH,CACE0X,KADF,EAEE5V,OAFF,EAGEvC,GAAGU,OAAH,CAAW+X,QAAX,CAAoB;YAAQzY,GAAG6D,OAAH,CAAWsU,KAAX;KAA5B,CAHF,EARM;;OAeH1R,KAAH,CAAS6R,IAAT,EAAe/V,OAAf;;QAEIa,UAAUsV,QAAd,EAAwB;UAClBC,aAAa,CAAjB;;UACIvV,UAAUT,SAAd,EAAyB;;WAEpB/B,MAAH,CAAUqX,IAAV,EAAgB,MAAhB,EAFuB;;WAIpBrX,MAAH,CAAUqX,IAAV,EAAgB,MAAhB,EAJuB;;WAMpBrX,MAAH,CAAUqX,IAAV,EAAgB,MAAhB;qBACa,CAAb;;;UAGEnC,YAAA,CAAuB0C,QAAvB,CAAJ,EAAsC;;WAEjC/X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2V,SAAxC,EAFoC;;aAI/BuC,WAAL,CAAiB5Y,EAAjB,EAAqBsY,IAArB,EAA2B/V,OAA3B,EAAoCoW,UAApC;OAJF,MAKO,IAAI7C,YAAA,CAAuB0C,QAAvB,CAAJ,EAAsC;;aAEtCK,iBAAL,CACE7Y,EADF,EAEEsY,IAFF,EAGE/V,OAHF,EAIEiW,QAJF,EAKEH,SALF,EAMEM,UANF;OAFK,MAUA,IAAI7C,YAAA,CAAuB0C,QAAvB,CAAJ,EAAsC;;WAExC/X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoY,SAAxC,EAF2C;;aAItCC,SAAL,CAAe/Y,EAAf,EAAmBsY,IAAnB,EAAyB/V,OAAzB,EAAkCoW,UAAlC;OAJK,MAKA;;WAEFlY,UAAH,CACE6X,IADF,EAEE/V,OAFF,EAGEvC,GAAGU,OAAH,CAAW2D,IAAX,CACE,CACE;qBACa,MAAM;;eAEZzD,MAAH,CAAU0X,IAAV,EAAgB,KAAhB,EAFe;;eAIZ7X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW+E,QAAxC;WALJ;oBAOY,MAAM;;eAEXhF,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2V,SAAxC,EAFc;;iBAITuC,WAAL,CAAiB5Y,EAAjB,EAAqBsY,IAArB,EAA2B/V,OAA3B,EAAoCoW,UAApC;;SAZN,EAeE;qBACa,MAAM;;eAEZ/X,MAAH,CAAU0X,IAAV,EAAgB,KAAhB,EAFe;;eAIZ7X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgF,QAAxC;WALJ;oBAOY,MAAM;;iBAETmT,iBAAL,CACE7Y,EADF,EAEEsY,IAFF,EAGE/V,OAHF,EAIEiW,QAJF,EAKEH,SALF,EAMEM,UANF;;SAxBN,CADF,EAoCE,MAAM;;aAEDlY,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoY,SAAxC,EAFI;;eAICC,SAAL,CAAe/Y,EAAf,EAAmBsY,IAAnB,EAAyB/V,OAAzB,EAAkCoW,UAAlC;SAxCJ,CAHF;;;;QAkDAvV,UAAUT,SAAV,IAAuB,CAACS,UAAUsV,QAAtC,EAAgD;UAC1C5C,YAAA,CAAuB0C,QAAvB,CAAJ,EAAsC;;WAEjC/X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2V,SAAxC,EAFoC;;WAIjC5V,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC;OAJF,MAKO,IAAI8L,YAAA,CAAuB0C,QAAvB,CAAJ,EAAsC;;aAEtCQ,iBAAL,CAAuBhZ,EAAvB,EAA2BsY,IAA3B,EAAiC/V,OAAjC,EAA0CiW,QAA1C,EAAoDH,SAApD;OAFK,MAGA,IAAIvC,YAAA,CAAuB0C,QAAvB,CAAJ,EAAsC;;WAExC/X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoY,SAAxC,EAF2C;;WAIxCrY,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuY,uBAAxC;OAJK,MAKA;;WAEFxY,UAAH,CACE6X,IADF,EAEE/V,OAFF,EAGEvC,GAAGU,OAAH,CAAW2D,IAAX,CACE,CACE;qBACa,MAAM;;eAEZzD,MAAH,CAAU0X,IAAV,EAAgB,KAAhB,EAFe;;eAIZ7X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW+E,QAAxC;WALJ;oBAOY,MAAM;;eAEXhF,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2V,SAAxC,EAFc;;eAIX5V,UAAH,CACEwX,IADF,EAEE1V,OAFF,EAGEvC,GAAGU,OAAH,CAAWsJ,yBAHb;;SAZN,EAmBE;qBACa,MAAM;;eAEZpJ,MAAH,CAAU0X,IAAV,EAAgB,KAAhB,EAFe;;eAIZ7X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgF,QAAxC;WALJ;oBAOY,MAAM;;iBAETsT,iBAAL,CACEhZ,EADF,EAEEsY,IAFF,EAGE/V,OAHF,EAIEiW,QAJF,EAKEH,SALF;;SA5BN,CADF,EAuCE,MAAM;;aAED5X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoY,SAAxC,EAFI;;aAIDrY,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuY,uBAAxC;SA3CJ,CAHF;;;;QAqDA,CAAC7V,UAAUT,SAAX,IAAwB,CAACS,UAAUsV,QAAvC,EAAiD;SAC5C9X,MAAH,CAAUqX,IAAV,EAAgB,MAAhB;;;;mBAIJ,CACEjY,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEiW,QAJF,EAKEH,SALF,EAMQ;QACFvC,WAAA,CAAsBuC,SAAtB,KAAoCvC,WAAA,CAAsBuC,SAAtB,CAAxC,EAA0E;SACrE5X,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC;SACG3V,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwY,aAAxC;KAFF,MAGO;SACFzY,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;mBACD,MAAM;;eAEVwY,eAAL,CAAqBnZ,EAArB,EAAyBC,IAAzB,EAA+BsC,OAA/B;SAHU;kBAKF,MAAM;;aAEX9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC,EAFc;;aAIX3V,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwY,aAAxC;SATU;mBAWD,MAAM;;aAEZzY,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0Y,QAAX,CAAoB;kBAAQZ;WAA5B,CAHF,EAFe;;aAQZ/X,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC;;OAnBJ,CAHF;;;;aA6BJ,CACEhK,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEuJ,KAJF,EAKQ;;SAEDuN,SAAL,CAAerZ,EAAf,EAAmBC,IAAnB,EAAyBsC,OAAzB,EAAkCuJ,KAAlC,EAFM;;OAIHrL,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4Y,yBAAxC;;;mBAGF,CACEtZ,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEiW,QAJF,EAKEH,SALF,EAMEvM,KANF,EAOQ;QACFgK,WAAA,CAAsBuC,SAAtB,KAAoCvC,WAAA,CAAsBuC,SAAtB,CAAxC,EAA0E;SACrE5X,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC;WACKmD,aAAL,CAAmBvZ,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EAAsCuJ,KAAtC;KAFF,MAGO;SACFrL,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;mBACD,MAAM;;eAEVwY,eAAL,CAAqBnZ,EAArB,EAAyBC,IAAzB,EAA+BsC,OAA/B;SAHU;kBAKF,MAAM;aACX9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC;eACKmD,aAAL,CAAmBvZ,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EAAsCuJ,KAAtC;SAPU;mBASD,MAAM;;aAEZrL,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0Y,QAAX,CAAoB;kBAAQZ;WAA5B,CAHF,EAFe;;eAQVI,WAAL,CAAiB5Y,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EAAoCuJ,KAApC;;OAjBJ,CAHF;;;;eA2BJ,CACE9L,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEuJ,KAJF,EAKQ;;SAEDuN,SAAL,CAAerZ,EAAf,EAAmBC,IAAnB,EAAyBsC,OAAzB,EAAkCuJ,KAAlC,EAFM;;OAIHrL,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW6Y,aAAxC;;;WAGF,CACEvZ,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEuJ,KAJF,EAKQ;;SAEDuN,SAAL,CAAerZ,EAAf,EAAmBC,IAAnB,EAAyBsC,OAAzB,EAAkCuJ,KAAlC,EAFM;;OAIHrL,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8Y,uBAAxC;;;iBAGF,CACExZ,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH3B,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFM;;OAIHQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWiF,iBAAX,CAA6B;gBAAY;KAAzC,CAHF,EAJM;;OAUHlF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkF,UAAxC;;;WAGF,CACE5F,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEuJ,KAJF,EAKQ;QACFA,UAAU,CAAd,EAAiB;SACZlL,MAAH,CAAUX,IAAV,EAAgB,KAAhB;KADF,MAEO;;SAEFY,WAAH,CAAeZ,IAAf,EAAqB6L,KAArB,EAFK;;SAIFlL,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;ACjUN;;AAEA,AAAO,MAAMwZ,wBAAN,SAAuCnX,MAAvC,CAAoD;cAM7C;YAAA;cAAA;QAAA;;GAAZ,EAKoC;;;;;;;;;;;SAE7BoX,QAAL,GAAgBA,QAAhB;SACKC,UAAL,GAAkBA,UAAlB;SACKC,IAAL,GAAYA,IAAZ;SACKC,SAAL,GAAiBA,SAAjB;;;MAGF,CAAY7Z,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAHoE;;;OAQnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;UAEM6Z,cAAc,MAAM;;SAErBlZ,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFwB;;SAIrBQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqZ,iBAAxC,EAJwB;;SAMrBnZ,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EANwB;;SAQrBW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARwB;;SAUrBQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6B,KAAKsX,SAAL,CAAe7Z,EAAf,CAA7B,EAVwB;;SAYrBY,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAZwB;;SAcrBY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAdwB;;SAgBrBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;KAhBF,CAVsE;;;;OAgCnEQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWkC,OAAX,CAAmB;iBACN,MAAM;;WAEZhC,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EANe;;WAQZ4E,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB,EARe;;WAUZW,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAVe;;WAYZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;OAbe;YAeX,MAAM;;WAEPW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFU;;WAIP4E,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB,EAJU;;WAMPW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EANU;;WAQPY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EARU;;WAUPW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAVU;;;OAfK;iBA6BN;KA7Bb,CAHF,EAhCsE;;OAoEnEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EApEsE;;OAsEnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAtEsE;;OAwEnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAxEsE;;OA0EnEQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,QAAhB;OAHU;gBAKF,MAAM;;WAEXW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAFc;;WAIXW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;qBACD,MAAM;;eAEZC,MAAH,CAAUX,IAAV,EAAgB,WAAhB,EAFe;;eAIZY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJe;;eAMZW,MAAH,CAAUX,IAAV,EAAgB,OAAhB;WAPU;oBASF,MAAM;iBACTyZ,QAAL;WAVU;qBAYD,MAAM;iBACVC,UAAL;;SAbJ,CAHF;OAVU;iBA+BD,MAAM;;WAEZ/Y,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;aACK2Z,IAAL;;KApCJ,CAHF;;;;;ACtGJ;;AAEA,AAAO,MAAeI,mBAAf,SAA2C1X,MAA3C,CAAwD;;;;;;;MAG7D,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWmZ,SAAxC,EAPsE;;OASnEhZ,WAAH,CAAeZ,IAAf,EAAqB,KAAK6L,KAA1B,EATsE;;OAWnElL,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;;;ACnBJ;;AACA,AAAO,MAAMga,uBAAN,SAAsCD,mBAAtC,CAA0D;;;;kEAC7C,CAD6C;;;;;ACEjE;;AAEA,AAAO,MAAME,+BAAN,SAA8C5X,MAA9C,CAA2D;MAChE,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAHoE;;;OAQnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARsE;;OAUnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyZ,iBAAxC,EAVsE;;OAYnEvZ,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAZsE;;OAcnEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;;;ACpBJ;;AACA,AAAO,MAAMma,eAAN,SAA8B9I,kBAA9B,CAAiD;;ACDxD;;AACA,AAAO,MAAM+I,uBAAN,SAAsCL,mBAAtC,CAA0D;;;;kEAC7C,CAD6C;;;;;ACEjE;;AAEA,AAAO,MAAeM,2BAAf,SAAmDhY,MAAnD,CAAgE;MACrE,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;;OAEnE3B,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFsE;;OAInEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;OACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW6Z,kBAAX,CAA8B;gBAClB,MAAM;;WAEX1Z,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFc;;WAIXW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAJc;;WAMXQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWqE,UAAX,CAAsB;oBAAY,IAAZ;kBAA0B;SAAhD,CAHF;OAP0B;kBAahB,MAAM;;WAEbnE,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;YACIsC,QAAQI,SAAZ,EAAuB;;aAElB9B,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFqB;;aAIlBW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;SAJF,MAKO;;aAEFW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;OAvBwB;YA0BtB,MAAM;;WAEPW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;YACIsC,QAAQI,SAAZ,EAAuB;;aAElBlC,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC;;OA/BwB;iBAkCjB,KAAKuW,SAAL,CAAeW,IAAf,CAAoB,IAApB;KAlCb,CAHF;;;;;ACPJ;;AACA,AAAO,MAAMC,+BAAN,SAA8CH,2BAA9C,CAA0E;WAC/E,CAAoBta,EAApB,EAAqD;WAC5CA,GAAGU,OAAH,CAAWqZ,iBAAlB;;;;;ACPJ;;AACA,AAAO,MAAMW,qBAAN,SAAoCV,mBAApC,CAAwD;;;;kEAC3C,CAD2C;;;;;ACG/D;;AACA,AAAO,MAAMW,6BAAN,SAA4CL,2BAA5C,CAAwE;WAC7E,CAAoBta,EAApB,EAAqD;WAC5CA,GAAGU,OAAH,CAAWka,eAAlB;;;;;ACJJ;;AAEA,AAAO,MAAMC,gBAAN,SAA+BvY,MAA/B,CAA4C;MACjD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAHoE;;;OAQnE4E,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB,EARsE;;OAUnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC,EAVsE;;OAYnEpJ,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;UAEM6Z,cAAc,MAAM;;SAErBlZ,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFwB;;SAIrB4E,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB,EAJwB;;SAMrBQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC,EANwB;;SAQrBpJ,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARwB;;SAUrBW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAVwB;;SAYrBY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAZwB;;SAcrBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;KAdF,CAdsE;;;;OAkCnEQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWkC,OAAX,CAAmB;iBACN,MAAM;;WAEZhC,MAAH,CAAUX,IAAV,EAAgB,OAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EANe;;WAQZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARe;;WAUZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkK,WAAxC,EAVe;;WAYZhK,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAZe;;WAcZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;OAfe;YAiBX,MAAM;;WAEPW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFU;;;;KAjBd,CAHF,EAlCsE;;OAgEnEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAhEsE;;OAkEnEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;;;ACvEJ;;AACA,AAAO,MAAM6a,cAAN,SAA6BtJ,QAA7B,CAAsC;;;;iEAC1BL,MAAMkG,MADoB;;;;;ACM7C;;AAEA,AAAO,MAAe0D,mCAAf,SAA2DzY,MAA3D,CAAwE;cAIjE;UAAA;;GAAZ,EAA4E;;;;;;;SAErE0Y,MAAL,GAAcA,UAAU,IAAV,GAAiB,KAAjB,GAAyBA,MAAvC;SACKC,MAAL,GAAcA,UAAU,IAAV,GAAiB,KAAjB,GAAyBA,MAAvC;;QAEI,EAAE,KAAKD,MAAL,IAAe,KAAKC,MAAtB,CAAJ,EAAmC;YAC3B,IAAI5Z,KAAJ,CACJ,2DADI,CAAN;;;;MAMJ,CAAYrB,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB;;QAEI,EAAE,KAAK4X,MAAL,IAAe,KAAKC,MAAtB,CAAJ,EAAmC;;SAE9Bxa,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC;;UACI,KAAK2X,MAAT,EAAiB;;WAEZra,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KARoE;;;OAYrEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAZwE;;OAcrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAdwE;;OAgBrEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAhBwE;;OAkBrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6B,KAAKsX,SAAL,CAAe7Z,EAAf,CAA7B,EAlBwE;;OAoBrEY,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EApBwE;;OAsBrEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAtBwE;;OAwBrEW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;;;;;AChDJ;;AACA,AAAO,MAAMib,uCAAN,SAAsDH,mCAAtD,CAA0F;WAC/F,CAAoB/a,EAApB,EAA+C;WACtCA,GAAGU,OAAH,CAAWqZ,iBAAlB;;;;;ACHJ;;AACA,AAAO,MAAMoB,qCAAN,SAAoDJ,mCAApD,CAAwF;WAC7F,CAAoB/a,EAApB,EAA+C;WACtCA,GAAGU,OAAH,CAAWka,eAAlB;;;;;ACFJ;;AAEA,AAAO,MAAeQ,+BAAf,SAAuD9Y,MAAvD,CAAoE;MACzE,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;;OAEnE3B,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFsE;;OAInEQ,UAAH,CAAcR,IAAd,EAAoBD,GAAGqD,gBAAH,CAAoBd,OAApB,CAApB,EAAkD,KAAKsX,SAAL,CAAe7Z,EAAf,CAAlD,EAJsE;;OAMnEY,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EANsE;;OAQnEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARsE;;OAUnEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAVsE;;OAYnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAZsE;;OAcnEW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;;;;;AClBJ;;AACA,AAAO,MAAMob,mCAAN,SAAkDD,+BAAlD,CAAkF;WACvF,CAAoBpb,EAApB,EAA+C;WACtCA,GAAGU,OAAH,CAAWqZ,iBAAlB;;;;;ACHJ;;AACA,AAAO,MAAMuB,iCAAN,SAAgDF,+BAAhD,CAAgF;WACrF,CAAoBpb,EAApB,EAA+C;WACtCA,GAAGU,OAAH,CAAWka,eAAlB;;;;;ACFJ;;AAEA,AAAO,MAAMW,+BAAN,SAA8CjZ,MAA9C,CAA2D;MAChE,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;;OAEnE3B,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFsE;;OAInEQ,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWyZ,iBAHb,EAJsE;;OAUnEvZ,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAVsE;;OAYnEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAZsE;;OAcnEW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;;;;;ACjBJ;;AAEA,AAAO,MAAeub,2BAAf,SAAmDlZ,MAAnD,CAAgE;MACrE,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;;OAEnE3B,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFsE;;OAInEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJsE;;OAMnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANsE;;OAQnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARsE;;OAUnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;OACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW6Z,kBAAX,CAA8B;gBAClB,MAAM;;WAEX1Z,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFc;;WAIXW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAJc;;WAMXW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EANc;;WAQXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARc;;WAUXW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAVc;;WAYXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAZc;;WAcXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAdc;;WAgBXW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAhBc;;WAkBXW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAlBc;;WAoBXQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWqE,UAAX,CAAsB;oBAAY,IAAZ;kBAA0B;SAAhD,CAHF;OArB0B;kBA2BhB,MAAM;;WAEbnE,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFgB;;WAIbW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJgB;;WAMbY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EANgB;;WAQbW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARgB;;WAUbW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;OArC0B;YAuCtB,MAAM;;WAEPW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFU;;WAIPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJU;;WAMPQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6B,KAAKkZ,eAAL,CAAqBzb,EAArB,CAA7B;OA7C0B;iBA+CjB,KAAK6Z,SAAL,CAAeW,IAAf,CAAoB,IAApB;KA/Cb,CAHF;;;;;ACfJ;;AACA,AAAO,MAAMkB,+BAAN,SAA8CF,2BAA9C,CAA0E;WAC/E,CAAoBxb,EAApB,EAA+C;WACtCA,GAAGU,OAAH,CAAWqZ,iBAAlB;;;iBAGF,CAA0B/Z,EAA1B,EAAqD;WAC5CA,GAAGU,OAAH,CAAWuJ,6BAAlB;;;;;ACPJ;;AACA,AAAO,MAAM0R,6BAAN,SAA4CH,2BAA5C,CAAwE;WAC7E,CAAoBxb,EAApB,EAA+C;WACtCA,GAAGU,OAAH,CAAWka,eAAlB;;;iBAGF,CAA0B5a,EAA1B,EAAqD;WAC5CA,GAAGU,OAAH,CAAWkb,2BAAlB;;;;;ACJJ;;AACA,AAAO,MAAMC,wBAAN,SAAuCvZ,MAAvC,CAAoD;MACzD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWmZ,SAAxC,EAPsE;;OASnEjZ,MAAH,CAAUX,IAAV,EAAgB,QAAhB;;UAEM6b,OAAO,MAAM;;SAEdjb,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFiB;;SAIdW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;KAJF;;UAOM8b,QAAQ,MAAM;aAAA;;SAGftb,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsb,eAAxC;KAHF,CAlBsE;;;YAAA;;YAAA;;YAAA;;WAAA;;OAiCnEpb,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAjCsE;;OAoCnEY,WAAH,CAAeZ,IAAf,EAAqBkR,MAAMkG,MAA3B;;;;OAIGxW,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAxCsE;;OA0CnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;AC9CJ;;AAEA,AAAO,MAAMgc,qBAAN,SAAoC3Z,MAApC,CAAiD;MACtD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;;OAMCW,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EARsE;;OAUnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;OAIGW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAdsE;;OAgBnEW,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAhBsE;;OAkBnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAlBsE;;OAoBnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;OAGGkI,SAAH,CAAalI,IAAb,EAAmBsC,OAAnB,EAA6B2Z,YAAD,IAAkB;YACtCC,UAAUnc,GAAG2E,KAAH,CAASiT,SAAT,EAAhB;YACMzT,SAASnE,GAAG2E,KAAH,CAASiT,SAAT,EAAf;SAEGnX,UAAH,CACER,IADF,EAEEic,YAFF,EAGElc,GAAGU,OAAH,CAAWkC,OAAX,CAAmB;qBACJ,MAAM;;aAEdhC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFiB;;aAIdW,MAAH,CAAUX,IAAV,EAAgB,WAAhB,EAJiB;;aAMd0E,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBic,YAAvB,EAAqC/X,MAArC,EANiB;;aAQdtD,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EARiB;;aAUd0E,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBic,YAAvB,EAAqCC,OAArC;SAXe;mBAaN,MAAM;;aAEZxX,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBic,YAAvB,EAAqCC,OAArC,EAFe;;aAIZxX,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBic,YAAvB,EAAqC/X,MAArC,EAJe;;aAMZvD,MAAH,CAAUX,IAAV,EAAgB,IAAhB;SAnBe;qBAqBJ,MAAM;;aAEd0E,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBic,YAAvB,EAAqCC,OAArC,EAFiB;;aAIdvb,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJiB;;aAMd0E,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBic,YAAvB,EAAqCC,OAArC;SA3Be;cA6BVlY,YAAD,IAAkB;;aAEnBrD,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFsB;;aAInBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJsB;;aAMnB0E,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBgE,YAAvB,EAAqCkY,OAArC,EANsB;;aAQnBvb,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARsB;;aAUnBW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAVsB;;aAYnBW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAZsB;;aAcnBW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAdsB;;aAgBnBW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAhBsB;;aAkBnBY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAlBsB;;aAoBnBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EApBsB;;aAsBnBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAtBsB;;aAwBnBW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAxBsB;;aA0BnBW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;;OAvDJ,CAHF;KAJF,EAvBsE;;OA4FnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EA5FsE;;OA8FnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;AC9FJ;;AACA,AAAO,MAAMmc,cAAN,SAA6B7Q,WAA7B,CAAyC;MAC9C,CAAYvL,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;UAII0D,OAAO,KAAKA,IAAlB;;QACImS,aAAA,CAAwBnS,IAAxB,CAAJ,EAAmC;WAC5B0Y,gBAAL,CAAsBrc,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC,EAAyC,SAAzC;KADF,MAEO,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClC0Y,gBAAL,CAAsBrc,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC,EAAyC,QAAzC;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClC0Y,gBAAL,CAAsBrc,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC,EAAyC,QAAzC;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClC0Y,gBAAL,CAAsBrc,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC,EAAyC,QAAzC;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;;KAAlC,MAEA;SACFlD,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW2D,IAAX,CACE,CACE;mBACa,MAAM;;aAEZzD,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;aAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4V,QAAxC;SALJ;kBAOY,MAAM;;OARpB,EAYEgG,MAZF,CAaE,CACE;gBAAUtc,GAAGU,OAAH,CAAW8E,SAArB;mBAA2C;OAD7C,EAEE;gBAAUxF,GAAGU,OAAH,CAAWgF,QAArB;mBAA0C;OAF5C,EAGE;gBAAU1F,GAAGU,OAAH,CAAW+E,QAArB;mBAA0C;OAH5C,EAIE;gBAAUzF,GAAGU,OAAH,CAAWwT,QAArB;mBAA0C;OAJ5C,EAKEzR,GALF,CAKM,CAAC;cAAA;;OAAD,MAA4B;mBACrB,MAAM;;aAEZ7B,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;aAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4V,QAAxC;SAL8B;kBAOtB,MAAM;eACT+F,gBAAL,CAAsBrc,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC,EAAyCga,SAAzC;;OARE,CALN,CAbF,CADF,EA+BE,MAAM;WACD9b,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwD,cAAxC;OAhCJ,CAHF;;;;kBA0CJ,CACElE,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEga,SAJF,EAKQ;;OAEH1b,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFM;;OAIHW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJM;;OAMH0E,KAAH,CAASC,SAAT,CAAmB5E,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EANM;;OAQHsC,cAAH,CAAkB5E,IAAlB,EAAwBsc,SAAxB,EARM;;OAUH9b,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC,EAVM;;OAYHvJ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqE,UAAX,EAA7B;;;;;ACpFJ;;AACA,AAAO,MAAMyX,kBAAN,SAAiCtL,qBAAjC,CAAuD;;;;iEAC3CC,MAAMsL,MADqC;;;;;ACF9D;;AACA,AAAO,MAAMC,eAAN,SAA8BpL,kBAA9B,CAAiD;;ACAxD;;AACA,AAAO,MAAMqL,cAAN,SAA6BnL,QAA7B,CAAsC;;;;iEAC1BL,MAAMsL,MADoB;;;;;ACK7C;;AACA,AAAO,MAAMG,cAAN,SAA6BrR,WAA7B,CAAyC;MAC9C,CAAYvL,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;QAIE,KAAK0D,IAAL,IAAa,IAAjB,EAAuB;WAChBiS,WAAL,CAAiB5V,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EAAoC,KAAKoB,IAAzC;KADF,MAEO;WACAoT,cAAL,CAAoB/W,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B;;;;aAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKQ;QACFmS,eAAA,CAA0BnS,IAA1B,CAAJ,EAAqC;WAC9BqT,gBAAL,CAAsBhX,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC;KADF,MAEO,IAAIuT,UAAA,CAAqBnS,IAArB,CAAJ,EAAgC;WAChCsT,WAAL,CAAiBjX,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B;KADK,MAEA,IAAIuT,aAAA,CAAwBnS,IAAxB,CAAJ,EAAmC;WACnCqS,cAAL,CAAoBhW,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClCsS,aAAL,CAAmBjW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClCuS,aAAL,CAAmBlW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClCuT,aAAL,CAAmBlX,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KADK,MAEA,IAAIuT,YAAA,CAAuBnS,IAAvB,CAAJ,EAAkC;WAClCwT,aAAL,CAAmBnX,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;KADK,MAEA;WACAwU,cAAL,CAAoB/W,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B;;;;kBAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACHsC,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB;;;aAGF,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACHsC,cAAH,CAAkB5E,IAAlB,EAAwB,MAAxB;;;gBAGF,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;WACZF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyV,UAAxC;OAFU;gBAIF,MAAM;WACXtR,cAAH,CAAkB5E,IAAlB,EAAwB,MAAxB;OALU;iBAOD,MAAM;WACZ4E,cAAH,CAAkB5E,IAAlB,EAAwB,OAAxB;;KARJ,CAHF;;;eAiBF,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwD,cAAxC;;;eAGF,CACElE,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2V,SAAxC;;;eAGF,CACErW,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwD,cAAxC;;;eAGF,CACElE,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0W,WAAX,CAAuB;YAAQ,KAAKzT,IAAb;qBAAkC;KAAzD,CAHF,EAFM;;SAQDoT,cAAL,CAAoB/W,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B,EAAuC,IAAvC;;;gBAGF,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIE+U,sBAA+B,KAJjC,EAKQ;UACAC,SAAS,CACbC,KADa,EAEbnQ,QAFa,EAGb0I,SAHa,KAKb/P,GAAGS,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BiV,KAA7B;OALU;cAAA;;KAAd,CAHF,CALF;;WAqBExX,GAAGU,OAAH,CAAW+E,QADb,EAEE,MAAM,KAAKyQ,aAAL,CAAmBlW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,CAFR,EAGE,MACEgV,OACEvX,GAAGU,OAAH,CAAWkK,WADb,EAEE,MAAM,KAAKoM,gBAAL,CAAsBhX,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC,CAFR,EAGE,MACEgV,OACEvX,GAAGU,OAAH,CAAWkS,MADb,EAEE,MAAM,KAAKqE,WAAL,CAAiBjX,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,CAFR,EAGE,MACEgV,OACEvX,GAAGU,OAAH,CAAW8E,SADb,EAEE,MAAM,KAAKwQ,cAAL,CAAoBhW,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B,CAFR,EAGE,MACEgV,OACEvX,GAAGU,OAAH,CAAWgF,QADb,EAEE,MAAM,KAAKuQ,aAAL,CAAmBjW,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,CAFR,EAGE,MACEgV,OACEvX,GAAGU,OAAH,CAAWwT,QADb,EAEE,MAAM,KAAKgD,aAAL,CAAmBlX,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,CAFR,EAGE,MACE+U,sBACItX,GAAGS,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwD,cAHb,CADJ,GAMI,KAAKiT,aAAL,CAAmBnX,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,CAVR,CAJJ,CAJJ,CAJJ,CAJJ,CAJJ;;;;;ACrJJ;;AACA,AAAO,MAAMsa,kBAAN,SAAiC3L,qBAAjC,CAAuD;;;;iEAC3CC,MAAM2L,MADqC;;;;;ACF9D;;AACA,AAAO,MAAMC,eAAN,SAA8BzL,kBAA9B,CAAiD;;ACAxD;;AACA,AAAO,MAAM0L,cAAN,SAA6BxL,QAA7B,CAAsC;;;;iEAC1BL,MAAM2L,MADoB;;;;;ACD7C;;AACA,AAAO,MAAMG,qBAAN,SAAoC/L,qBAApC,CAA0D;;;;mEAC5C,CAD4C,iCAE9CC,MAAM+L,SAFwC;;;;;ACDjE;;AACA,AAAO,MAAMC,iBAAN,SAAgC3L,QAAhC,CAAyC;;;;iEAC7BL,MAAM+L,SADuB;;;;;ACChD;;AAEA,AAAO,MAAME,uBAAN,SAAsC9a,MAAtC,CAAmD;MACxD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAPsE;;OASnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkS,MAAxC,EATsE;;OAWnEhS,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAXsE;;OAanEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkK,WAAxC,EAbsE;;OAenEhK,MAAH,CAAUX,IAAV,EAAgB,QAAhB;;;;;AClBJ;;AAEA,AAAO,MAAMod,gBAAN,SAA+B/a,MAA/B,CAA4C;MACjD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAHoE;;;OAQnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4c,UAAxC,EARsE;;OAUnE1c,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVsE;;OAYnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4c,UAAxC,EAZsE;;OAcnE1c,MAAH,CAAUX,IAAV,EAAgB,OAAhB;;;;;ACPJ;;;AAGA,AAAO,MAAMsd,iBAAN,SAAgCjb,MAAhC,CAA6C;cAKtC;QAAA;aAAA;;GAAZ,EAA0E;;;;;;;;;SAEnEqB,IAAL,GAAYA,IAAZ;SACK6H,SAAL,GAAiBA,SAAjB;SACKgS,aAAL,GAAqBA,iBAAiB,SAAtC;;;MAGF,CAAYxd,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;QAIE,CAAC6V,eAAA,CAA0B,KAAKnS,IAA/B,CAAL,EAA2C;UACrC,KAAKA,IAAL,IAAa,IAAb,IAAqB,KAAK6H,SAAL,KAAmB2F,MAAMkG,MAAlD,EAA0D;aACnDD,WAAL,CAAiBpX,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B;OADF,MAEO;aACAkb,iBAAL,CAAuBzd,EAAvB,EAA2BC,IAA3B,EAAiCsC,OAAjC;;;;;aAKN,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4V,QAAxC;OALU;gBAOF,MAAM;aACTmH,iBAAL,CAAuBzd,EAAvB,EAA2BC,IAA3B,EAAiCsC,OAAjC;;KARJ,CAHF;;;mBAiBF,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH3B,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFM;;OAIH4E,cAAH,CAAkB5E,IAAlB,EAAwB,eAAxB,EAJM;;OAMHQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuY,uBAAxC;OACGxY,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkK,WAAxC;OALU;gBAOF,MAAM;;WAEXhK,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;aAITyd,UAAL,CAAgB1d,EAAhB,EAAoBC,IAApB,EAA0BsC,OAA1B,EAAmC,KAAKib,aAAxC;OAXU;iBAaD,MAAM;;WAEZ3Y,cAAH,CAAkB5E,IAAlB,EAAwB,KAAKud,aAA7B,EAFe;;WAIZ3c,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANe;;WAQZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARe;;WAUZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAVe;;WAYZQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWqE,UAAX,CAAsB;oBAAY;SAAlC,CAHF;;KAzBJ,CAHF;;;YAsCF,CACE/E,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEib,aAJF,EAKQ;UACAG,UACJH,kBAAkB,QAAlB,GACI,CAAC,UAAD,EAAa,SAAb,CADJ,GAEI,CAAC,SAAD,EAAY,UAAZ,CAHN,CADM;;OAMH5c,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EANM;;OAQH4E,cAAH,CAAkB5E,IAAlB,EAAwB0d,QAAQ,CAAR,CAAxB,EARM;;OAUHld,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC;OACGvJ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkK,WAAxC;OALU;gBAOF,MAAM;;WAEXhK,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;WAIXW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJc;;WAMX4E,cAAH,CAAkB5E,IAAlB,EAAwB0d,QAAQ,CAAR,CAAxB,EANc;;WAQXld,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC;WACGvJ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;qBACD,MAAM;;eAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;eAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkK,WAAxC;WALU;oBAOF,MAAM;;eAEXhK,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;eAIXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJc;;eAMXQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwD,cAAxC;WAbU;qBAeD,MAAM;eACZzD,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWqE,UAAX,CAAsB;wBAAY,IAAZ;sBAA0B;aAAhD,CAHF;;SAhBJ,CAHF;OAhBU;iBA4CD,MAAM;WACZtE,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWqE,UAAX,CAAsB;oBAAY,IAAZ;kBAA0B;SAAhD,CAHF;;KA7CJ,CAHF;;;;;AC/HJ;;AAEA,AAAO,MAAM6Y,gBAAN,SAA+Btb,MAA/B,CAA4C;MACjD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAPsE;;OASnEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;;;ACZJ;;;AAGA,AAAO,MAAM4d,eAAN,SAA8Bvb,MAA9B,CAA2C;MAChD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAPsE;;OASnEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;;;ACNJ;;AAEA,AAAO,MAAM6d,wBAAN,SAAuCxb,MAAvC,CAAoD;cAI7CC,OAAZ,EAAsD;;;;;;;SAE/Cwb,IAAL,GAAYxb,QAAQwb,IAApB;SACKC,KAAL,GAAazb,QAAQyb,KAArB;;;MAGF,CAAYhe,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;OACnEkE,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB;OACGkE,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB;;QACI,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;QAIE6V,MAAA,CAAiB9V,GAAG6D,OAAH,CAAW,KAAKka,IAAhB,CAAjB,EAAwC/d,GAAG6D,OAAH,CAAW,KAAKma,KAAhB,CAAxC,CAAJ,EAAqE;SAChEvd,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWud,0BAAxC;KADF,MAEO;SACFxd,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwd,yBAAxC;;;;;;AC/BN;;AAEA,AAAO,MAAMC,8BAAN,SAA6C7b,MAA7C,CAA0D;MAC/D,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAHoE;;;OAQnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC,EARsE;;OAUnExV,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVsE;;OAYnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC,EAZsE;;OAcnExV,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;;;ACjBJ;;AAEA,AAAO,MAAMme,gCAAN,SAA+C9b,MAA/C,CAA4D;MACjE,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;OAICQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2d,iBAAxC;OALU;gBAOF,MAAM;;WAEXzd,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;WAIXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJc;;WAMX8V,eAAH,CAAmB9V,IAAnB,EAAyB,IAAzB;OAbU;iBAeD,MAAM;;WAEZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4d,SAAxC,EAFe;;WAIZ1d,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJe;;WAMZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4d,SAAxC,EANe;;WAQZ1d,MAAH,CAAUX,IAAV,EAAgB,OAAhB;;KAvBJ,CAHF;;;;;ACVJ;;AAEA,AAAO,MAAMse,+BAAN,SAA8Cjc,MAA9C,CAA2D;MAChE,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;OAICQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8d,UAAxC;OANU;gBAQF,MAAM;;WAEX/d,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWud,0BAAxC;OAVU;iBAYD,MAAM;;WAEZrd,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJe;;WAMZ8V,eAAH,CAAmB9V,IAAnB,EAAyB,KAAzB;;KAlBJ,CAHF;;;;;ACHJ;;AAEA,AAAO,MAAMwe,kBAAN,SAAiCnc,MAAjC,CAA8C;cAIvCC,OAAZ,EAAgD;;;;;;;SAEzCwb,IAAL,GAAYxb,QAAQwb,IAApB;SACKC,KAAL,GAAazb,QAAQyb,KAArB;;;MAGF,CAAYhe,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB8D,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB;SACGkE,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB;;;;UAIImc,WAAW1e,GAAG6D,OAAH,CAAW,KAAKka,IAAhB,CAAjB;UACMY,YAAY3e,GAAG6D,OAAH,CAAW,KAAKma,KAAhB,CAAlB;;QACIU,YAAY,IAAZ,IAAoBC,aAAa,IAArC,EAA2C;WACpCC,gBAAL,CAAsB5e,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC,EAAyCmc,QAAzC,EAAmDC,SAAnD;KADF,MAEO;WACAE,mBAAL,CAAyB7e,EAAzB,EAA6BC,IAA7B,EAAmCsC,OAAnC;;;;kBAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEmc,QAJF,EAKEC,SALF,EAMQ;QACF7I,MAAA,CAAiB4I,QAAjB,EAA2BC,SAA3B,CAAJ,EAA2C;SACtCle,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWoe,kBAAX,CAA8B;cAAQ,KAAKf,IAAb;eAA0B,KAAKC;OAA7D,CAHF;KADF,MAMO,IACL,CAAClI,OAAA,CAAkB4I,QAAlB,KAA+B5I,YAAA,CAAuB4I,QAAvB,CAAhC,MACC5I,eAAA,CAA0B6I,SAA1B,KAAwC7I,UAAA,CAAqB6I,SAArB,CADzC,CADK,EAGL;;SAEGlY,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB,EAFA;;SAIGkE,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB,EAJA;;SAMG3B,MAAH,CAAU,KAAKod,KAAf,EAAsB,MAAtB,EANA;;SAQGvd,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2d,iBAAxC;KAXK,MAYA,IACLvI,YAAA,CAAuB4I,QAAvB,MACC5I,YAAA,CAAuB6I,SAAvB,KAAqC7I,aAAA,CAAwB6I,SAAxB,CADtC,CADK,EAGL;;SAEGlY,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB,EAFA;;SAIGkE,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB,EAJA;;WAMKwc,0CAAL,CAAgD/e,EAAhD,EAAoDC,IAApD,EAA0DsC,OAA1D;KATK,MAUA,IACLuT,aAAA,CAAwB4I,QAAxB,MACC5I,YAAA,CAAuB6I,SAAvB,KAAqC7I,aAAA,CAAwB6I,SAAxB,CADtC,CADK,EAGL;;SAEGlY,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB,EAFA;;SAIG9B,UAAH,CACE,KAAKsd,IADP,EAEExb,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;cAAQhf,GAAG6D,OAAH,CAAW,KAAKka,IAAhB;OAA5B,CAHF,EAJA;;SAUGtd,UAAH,CAAc,KAAKsd,IAAnB,EAAyBxb,OAAzB,EAAkCvC,GAAGU,OAAH,CAAWue,YAA7C,EAVA;;SAYGxY,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB,EAZA;;WAcKwc,0CAAL,CAAgD/e,EAAhD,EAAoDC,IAApD,EAA0DsC,OAA1D;KAjBK,MAkBA,IACL,CAACuT,YAAA,CAAuB4I,QAAvB,KAAoC5I,aAAA,CAAwB4I,QAAxB,CAArC,KACA5I,YAAA,CAAuB6I,SAAvB,CAFK,EAGL;;SAEGlY,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB,EAFA;;SAIGkE,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB,EAJA;;WAMK2c,0CAAL,CAAgDlf,EAAhD,EAAoDC,IAApD,EAA0DsC,OAA1D;KATK,MAUA,IACL,CAACuT,YAAA,CAAuB4I,QAAvB,KAAoC5I,aAAA,CAAwB4I,QAAxB,CAArC,KACA5I,aAAA,CAAwB6I,SAAxB,CAFK,EAGL;;SAEGlY,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB,EAFA;;SAIGkE,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB,EAJA;;SAMG9B,UAAH,CACE,KAAKud,KADP,EAEEzb,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;cAAQhf,GAAG6D,OAAH,CAAW,KAAKma,KAAhB;OAA5B,CAHF,EANA;;SAYGvd,UAAH,CAAc,KAAKud,KAAnB,EAA0Bzb,OAA1B,EAAmCvC,GAAGU,OAAH,CAAWue,YAA9C,EAZA;;WAcKC,0CAAL,CAAgDlf,EAAhD,EAAoDC,IAApD,EAA0DsC,OAA1D;KAjBK,MAkBA;WACAsc,mBAAL,CAAyB7e,EAAzB,EAA6BC,IAA7B,EAAmCsC,OAAnC;;;;4CAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH9B,UAAH,CACE,KAAKud,KADP,EAEEzb,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;YAAQhf,GAAG6D,OAAH,CAAW,KAAKma,KAAhB;KAA5B,CAHF,EAFM;;OAQHvd,UAAH,CAAc,KAAKud,KAAnB,EAA0Bzb,OAA1B,EAAmCvC,GAAGU,OAAH,CAAWue,YAA9C,EARM;;OAUHxe,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWye,wBAAxC;;;4CAGF,CACEnf,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH3B,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFM;;OAIHQ,UAAH,CACE,KAAKsd,IADP,EAEExb,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;YAAQhf,GAAG6D,OAAH,CAAW,KAAKka,IAAhB;KAA5B,CAHF,EAJM;;OAUHtd,UAAH,CAAc,KAAKsd,IAAnB,EAAyBxb,OAAzB,EAAkCvC,GAAGU,OAAH,CAAWue,YAA7C,EAVM;;OAYHre,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAZM;;OAcHQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWye,wBAAxC;;;qBAGF,CACEnf,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACA6c,OAAO,MAAM;;SAEdxe,MAAH,CAAU,KAAKod,KAAf,EAAsB,MAAtB,EAFiB;;SAIdpd,MAAH,CAAU,KAAKod,KAAf,EAAsB,MAAtB;KAJF,CADM;;;OASHvX,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB,EATM;;OAWHkE,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB;UAEMsM,QAAQ,CACZ;iBACa,MAAM;eAAA;;WAGZpO,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8d,UAAxC;OAJJ;gBAMY,MAAM;WACX/d,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWud,0BAAxC;;KARQ,EAWZ;iBACa,MAAM;eAAA;;WAGZxd,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2d,iBAAxC,EAHe;;WAKZzd,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EALe;;WAOZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2d,iBAAxC,EAPe;;WASZzd,MAAH,CAAUX,IAAV,EAAgB,QAAhB;OAVJ;gBAYY,MAAM;;WAEXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;WAIXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJc;;WAMX8V,eAAH,CAAmB9V,IAAnB,EAAyB,IAAzB;;KA7BQ,EAgCZ;iBACa,MAAM;eAAA;;WAGZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAHe;;WAKZQ,UAAH,CAAc,KAAKud,KAAnB,EAA0Bzb,OAA1B,EAAmCvC,GAAGU,OAAH,CAAW+E,QAA9C,EALe;;WAOZ7E,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAPe;;WASZQ,UAAH,CAAc,KAAKud,KAAnB,EAA0Bzb,OAA1B,EAAmCvC,GAAGU,OAAH,CAAW8E,SAA9C,EATe;;WAWZ5E,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAXe;;WAaZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAbe;;WAeZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAfe;;WAiBZQ,UAAH,CAAc,KAAKud,KAAnB,EAA0Bzb,OAA1B,EAAmCvC,GAAGU,OAAH,CAAWgF,QAA9C,EAjBe;;WAmBZ9E,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAnBe;;WAqBZQ,UAAH,CAAc,KAAKud,KAAnB,EAA0Bzb,OAA1B,EAAmCvC,GAAGU,OAAH,CAAW8E,SAA9C,EArBe;;WAuBZ5E,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAvBe;;WAyBZW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;OA1BJ;gBA4BY,MAAM;;WAEXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;WAIXQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;gBAAQhf,GAAG6D,OAAH,CAAW,KAAKka,IAAhB;SAA5B,CAHF,EAJc;;WAUXtd,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC,EAVc;;WAYXre,MAAH,CAAUX,IAAV,EAAgB,MAAhB;aACK8e,0CAAL,CAAgD/e,EAAhD,EAAoDC,IAApD,EAA0DsC,OAA1D;;KAzEQ,EA4EZ;iBACa,MAAM;eAAA;;WAGZ3B,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAHe;;WAKZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EALe;;WAOZQ,UAAH,CAAc,KAAKud,KAAnB,EAA0Bzb,OAA1B,EAAmCvC,GAAGU,OAAH,CAAW+E,QAA9C,EAPe;;WASZ7E,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EATe;;WAWZQ,UAAH,CAAc,KAAKud,KAAnB,EAA0Bzb,OAA1B,EAAmCvC,GAAGU,OAAH,CAAW8E,SAA9C,EAXe;;WAaZ5E,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAbe;;WAeZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAfe;;WAiBZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAjBe;;WAmBZQ,UAAH,CAAc,KAAKud,KAAnB,EAA0Bzb,OAA1B,EAAmCvC,GAAGU,OAAH,CAAWgF,QAA9C,EAnBe;;WAqBZ9E,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EArBe;;WAuBZQ,UAAH,CAAc,KAAKud,KAAnB,EAA0Bzb,OAA1B,EAAmCvC,GAAGU,OAAH,CAAW8E,SAA9C,EAvBe;;WAyBZ5E,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAzBe;;WA2BZW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;OA5BJ;gBA8BY,MAAM;;WAEXQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;gBAAQhf,GAAG6D,OAAH,CAAW,KAAKma,KAAhB;SAA5B,CAHF,EAFc;;WAQXvd,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;aACKC,0CAAL,CAAgDlf,EAAhD,EAAoDC,IAApD,EAA0DsC,OAA1D;;KAnHQ,CAAd;OAwHG9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW2D,IAAX,CAAgBwK,KAAhB,EAAuB,MAAM;;SAExBpO,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0W,WAAX,CAAuB;cAAQpX,GAAG6D,OAAH,CAAW,KAAKma,KAAhB;OAA/B,CAHF,EAF2B;;SAQxBpd,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAR2B;;SAUxBQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0W,WAAX,CAAuB;cAAQpX,GAAG6D,OAAH,CAAW,KAAKka,IAAhB;OAA/B,CAHF,EAV2B;;SAgBxBnd,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW2D,IAAX,CAAgBwK,KAAhB,EAAuB,MAAM;;WAExBjO,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAF2B;;WAIxBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJ2B;;WAMxB8V,eAAH,CAAmB9V,IAAnB,EAAyB,KAAzB;OANF,CAHF;KAjBF,CAHF;;;;;AChSJ;;AAEA,AAAO,MAAMof,cAAN,SAA6B/c,MAA7B,CAA0C;cAKnCC,OAAZ,EAA4C;;;;;;;;;SAErC+c,SAAL,GAAiB/c,QAAQ+c,SAAzB;SACKvB,IAAL,GAAYxb,QAAQwb,IAApB;SACKC,KAAL,GAAazb,QAAQyb,KAArB;;;MAGF,CAAYhe,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;UAClB,KAAK2c,SAAT,EAAoB;WACf7Y,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB;WACGkE,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB;OAFF,MAGO;WACFkE,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB;WACGkE,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB;;;;;;QAKA,KAAK+c,SAAT,EAAoB;;SAEf7Y,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB,EAFkB;;SAIf9B,UAAH,CACE,KAAKsd,IADP,EAEExb,OAFF,EAGEvC,GAAGU,OAAH,CAAW0W,WAAX,CAAuB;cACfpX,GAAG6D,OAAH,CAAW,KAAKka,IAAhB,CADe;uBAEN;OAFjB,CAHF,EAJkB;;SAaftX,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB,EAbkB;;SAef9B,UAAH,CACE,KAAKud,KADP,EAEEzb,OAFF,EAGEvC,GAAGU,OAAH,CAAW0W,WAAX,CAAuB;cACfpX,GAAG6D,OAAH,CAAW,KAAKma,KAAhB,CADe;uBAEN;OAFjB,CAHF;KAfF,MAuBO;;SAEFvX,KAAH,CAAS,KAAKuX,KAAd,EAAqBzb,OAArB,EAFK;;SAIF9B,UAAH,CACE,KAAKud,KADP,EAEEzb,OAFF,EAGEvC,GAAGU,OAAH,CAAW0W,WAAX,CAAuB;cACfpX,GAAG6D,OAAH,CAAW,KAAKma,KAAhB,CADe;uBAEN;OAFjB,CAHF,EAJK;;SAaFvX,KAAH,CAAS,KAAKsX,IAAd,EAAoBxb,OAApB,EAbK;;SAeF9B,UAAH,CACE,KAAKsd,IADP,EAEExb,OAFF,EAGEvC,GAAGU,OAAH,CAAW0W,WAAX,CAAuB;cACfpX,GAAG6D,OAAH,CAAW,KAAKka,IAAhB,CADe;uBAEN;OAFjB,CAHF,EAfK;;SAwBFnd,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;QAIA6V,YAAA,CAAuB9V,GAAG6D,OAAH,CAAW,KAAKka,IAAhB,CAAvB,KACAjI,YAAA,CAAuB9V,GAAG6D,OAAH,CAAW,KAAKma,KAAhB,CAAvB,CAFF,EAGE;SACGrT,iBAAH,CAAqB1K,IAArB;KAJF,MAKO;;SAEFQ,UAAH,CACE,KAAKud,KADP,EAEEzb,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;cAAQhf,GAAG6D,OAAH,CAAW,KAAKma,KAAhB;OAA5B,CAHF,EAFK;;SAQFpd,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARK;;SAUFQ,UAAH,CACE,KAAKsd,IADP,EAEExb,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;cAAQhf,GAAG6D,OAAH,CAAW,KAAKka,IAAhB;OAA5B,CAHF,EAVK;;SAgBFnd,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBK;;SAkBFW,MAAH,CAAUX,IAAV,EAAgB,IAAhB;;UAEI,CAACsC,QAAQI,SAAb,EAAwB;WACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;;ACpHD,MAAMsf,oBAAoB,IAAIhT,GAAJ,CAAQ,CACvC,OADuC,EAEvC,SAFuC,EAGvC,QAHuC,EAIvC,OAJuC,EAKvC,QALuC,EAMvC,QANuC,EAOvC,QAPuC,EAQvC,QARuC,EASvC,SATuC,CAAR,CAA1B;;ICAKiT,wBAAZ;;WAAYA;;;GAAAA,6BAAAA;;ACQZ;;AACA,AAAO,MAAMC,kBAAN,SAAiCnd,MAAjC,CAA8C;MACnD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrEyB,cAAH,CAAkB5E,IAAlB,EAAwBuf,yBAAyBE,SAAjD,EAHwE;;OAKrE9e,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EALwE;;OAOrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;;;ACTJ;;AACA,AAAO,MAAe4X,0BAAf,SAAkDrd,MAAlD,CAA+D;;;;;;;MAGpE,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrExC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAHwE;;OAKrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EALwE;;OAOrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;OAIGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC,EAXwE;;OAarEtI,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAbwE;;OAerE4E,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB,EAfwE;;OAiBrEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAjBwE;;OAmBrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC,EAnBwE;;SAqBnE2V,sBAAL,CAA4B5f,EAA5B,EAAgCC,IAAhC,EAAsCsC,OAAtC;;;;OAIG9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC,EAzBwE;;OA2BrEtI,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EA3BwE;;OA6BrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EA7BwE;;OA+BrE4E,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB,EA/BwE;;OAiCrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAjCwE;;OAmCrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC,EAnCwE;;OAqCrErJ,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EArCwE;;OAuCrE4E,cAAH,CAAkB5E,IAAlB,EAAwB,aAAxB,EAvCwE;;OAyCrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAzCwE;;OA2CrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC,EA3CwE;;SA6CnE4V,wBAAL,CAA8B7f,EAA9B,EAAkCC,IAAlC,EAAwCsC,OAAxC,EA7CwE;;OA+CrEsC,cAAH,CAAkB5E,IAAlB,EAAwB,KAAKyE,IAA7B,EA/CwE;;OAiDrE9D,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAjDwE;;OAmDrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC;;;wBAGF,CACEjK,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;;0BAIR,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;;WAIR,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEmC,IAJF,EAKExE,IALF,EAMQ;;OAEHU,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFM;;OAIH4E,cAAH,CAAkB5E,IAAlB,EAAwByE,IAAxB,EAJM;;OAMHjE,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwH,mBAAX,CAA+B;YACvB,MAAM;WACPC,SAAH,CAAalI,IAAb,EAAmBsC,OAAnB,EAA4BrC,IAA5B;WACGO,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgI,sBAAxC;WACG9H,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;KAJJ,CAHF,EANM;;OAkBHQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;gBACpB1E,2BAA2BG;KADvC,CAHF,EAlBM;;OA0BHpG,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC;;;;;AC1GJ;;AAEA,AAAO,MAAM6V,oBAAN,SAAmCH,0BAAnC,CAA8D;;;;iEAC1C,OAD0C;;;wBAGnE,CACE3f,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;SACDwd,MAAL,CAAY/f,EAAZ,EAAgBC,IAAhB,EAAsBsC,OAAtB;SACKyd,SAAL,CAAehgB,EAAf,EAAmBC,IAAnB,EAAyBsC,OAAzB;SACK0d,SAAL,CAAejgB,EAAf,EAAmBC,IAAnB,EAAyBsC,OAAzB;;;0BAGF,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH3B,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFM;;OAIH4E,cAAH,CAAkB5E,IAAlB,EAAwByG,2BAA2BQ,SAAnD,EAJM;;OAMHzG,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwf,oBAAX,CAAgC;oBAChB,IADgB;YAExB,MAAM;;WAEPtf,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFU;;WAIPW,MAAH,CAAUX,IAAV,EAAgB,WAAhB;WACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW2D,IAAX,CACE,CACE;qBACa,MAAM;;eAEZzD,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;eAIZY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJe;;eAMZW,MAAH,CAAUX,IAAV,EAAgB,OAAhB;WAPJ;oBASY,MAAM;;eAEXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;eAIXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJc;;eAMXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EANc;;eAQXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EARc;;eAUXW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;SApBN,EAuBE;qBACa,MAAM;;eAEZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;eAIZY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJe;;eAMZW,MAAH,CAAUX,IAAV,EAAgB,OAAhB;WAPJ;oBASY,MAAM;;eAEXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;eAIXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJc;;eAMXW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EANc;;eAQXQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC,EARc;;eAUXxV,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAVc;;eAYXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAZc;;eAcXW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAdc;;eAgBXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBc;;eAkBXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAlBc;;eAoBXQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyf,WAAxC;;SApDN,CADF,EAyDE,MAAM;;aAEDvf,MAAH,CAAUX,IAAV,EAAgB,MAAhB;SA3DJ,CAHF,EALU;;WAwEP0E,KAAH,CAASyb,OAAT,CAAiBpgB,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EAxEU;;WA0EP3B,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EA1EU;;WA4EPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EA5EU;;WA8EPQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2f,aAAxC,EA9EU;;WAgFPxb,cAAH,CAAkB5E,IAAlB,EAAwB,QAAxB,EAhFU;;WAkFPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAlFU;;WAoFPQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC,EApFU;;WAsFPxe,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWuJ,6BAHb;;KAxFJ,CAHF,EANM;;OA0GHxJ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;QAGF,CAAe/H,EAAf,EAAkCC,IAAlC,EAA8CsC,OAA9C,EAA2E;SACpE+d,UAAL,CAAgBtgB,EAAhB,EAAoBC,IAApB,EAA0BsC,OAA1B,EAAmC,KAAnC,EAA0CvC,GAAGU,OAAH,CAAWuF,MAArD;;;WAGF,CACEjG,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;SACD+d,UAAL,CAAgBtgB,EAAhB,EAAoBC,IAApB,EAA0BsC,OAA1B,EAAmC,QAAnC,EAA6CvC,GAAGU,OAAH,CAAW6f,SAAxD;;;WAGF,CACEvgB,EADF,EAEEC,IAFF,EAGEgI,YAHF,EAIQ;SACDuY,SAAL,CAAexgB,EAAf,EAAmBC,IAAnB,EAAyBgI,YAAzB,EAAuC,QAAvC,EAAkD1F,OAAD,IAAa;YACtDgO,OAAOvQ,GAAG2E,KAAH,CAASiT,SAAT,EAAb;YACM6I,QAAQzgB,GAAG2E,KAAH,CAASiT,SAAT,EAAd,CAF4D;;SAIzDhX,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJ4D;;SAMzDY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAN4D;;SAQzDW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAR4D;;SAUzD0E,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCgO,IAAhC,EAV4D;;SAYzD3P,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAZ4D;;SAczDW,MAAH,CAAUX,IAAV,EAAgB,WAAhB,EAd4D;;SAgBzDQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;mBACD,MAAM;;aAEZE,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFe;;aAIZW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;SALU;kBAOF,MAAM;;aAEXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFc;;aAIXW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;SAXU;mBAaD,MAAM;;aAEZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;aAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC;;OAjBJ,CAHF,EAhB4D;;SAyCzDqB,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCke,KAAhC,EAzC4D;;SA2CzD9b,KAAH,CAASyb,OAAT,CAAiBpgB,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EA3C4D;;SA6CzD9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsF,WAAxC,EA7C4D;;SA+CzDvF,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWoX,UAAX,CAAsB;cACd,MAAM;;aAEPnT,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCke,KAAhC,EAFU;;aAIP7f,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJU;;aAMPQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC,EANU;;aAQPre,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARU;;aAUPW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAVU;;aAYPY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAZU;;aAcPW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAdU;;aAgBP0E,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCgO,IAAhC,EAhBU;;aAkBP9P,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqE,UAAX,EAA7B,EAlBU;;aAoBPJ,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCke,KAAhC;SArBkB;mBAuBT;OAvBb,CAHF,EA/C4D;;SA6EzD9b,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCke,KAAhC;KA7EF;;;YAiFF,CACEzgB,EADF,EAEEC,IAFF,EAGEgI,YAHF,EAIEvD,IAJF,EAKEgc,MALF,EAMQ;SACDF,SAAL,CAAexgB,EAAf,EAAmBC,IAAnB,EAAyBgI,YAAzB,EAAuCvD,IAAvC,EAA8CnC,OAAD,IAAa;YAClDgO,OAAOvQ,GAAG2E,KAAH,CAASiT,SAAT,EAAb,CADwD;;SAGrD/W,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAHwD;;SAKrDW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EALwD;;SAOrD0E,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCgO,IAAhC,EAPwD;;SASrD5L,KAAH,CAASyb,OAAT,CAAiBpgB,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EATwD;;SAWrD9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsF,WAAxC,EAXwD;;SAarDvF,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEme,OAAO;aACA,MAAM;;aAEN9f,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFS;;aAINQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC,EAJS;;aAMNre,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANS;;aAQNY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EARS;;aAUNW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVS;;aAYN0E,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCgO,IAAhC,EAZS;;aAcN9P,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqE,UAAX,EAA7B;SAfG;mBAiBM;OAjBb,CAHF,EAbwD;;SAqCrDtE,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyF,SAAxC;KArCF;;;;;ACzOJ;;AACA,AAAO,MAAMwa,qBAAN,SAAoChB,0BAApC,CAA+D;;;;iEAC3C,QAD2C;;;0BAGpE,CACE3f,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;SACDqe,cAAL,CAAoB5gB,EAApB,EAAwBC,IAAxB,EAA8BsC,OAA9B;SACKse,SAAL,CAAe7gB,EAAf,EAAmBC,IAAnB,EAAyBsC,OAAzB;;;gBAGF,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH3B,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFM;;OAIH4E,cAAH,CAAkB5E,IAAlB,EAAwByG,2BAA2BQ,SAAnD,EAJM;;OAMHzG,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwf,oBAAX,CAAgC;oBAChB,IADgB;YAExB,MAAM;;;WAGPtf,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KALJ,CAHF,EANM;;OAmBHQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;WAGF,CACE/H,EADF,EAEEC,IAFF,EAGEgI,YAHF,EAIQ;SACDuY,SAAL,CAAexgB,EAAf,EAAmBC,IAAnB,EAAyBgI,YAAzB,EAAuC,QAAvC,EAAkD1F,OAAD,IAAa;;SAEzD1B,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAF4D;;SAIzDW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAJ4D;;SAMzDQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsF,WAAxC,EAN4D;;SAQzDpF,MAAH,CAAUX,IAAV,EAAgB,OAAhB;SACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWkC,OAAX,CAAmB;mBACN,MAAM;;aAEZhC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;aAIZW,MAAH,CAAUX,IAAV,EAAgB,WAAhB,EAJe;;aAMZY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EANe;;aAQZW,MAAH,CAAUX,IAAV,EAAgB,IAAhB;SATe;cAWX,MAAM;;aAEPW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFU;;aAIPY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJU;;aAMPW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EANU;;aAQPQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWmF,YAAxC,EARU;;aAUPjF,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAVU;;aAYPW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAZU;;aAcPY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAdU;;aAgBPW,MAAH,CAAUX,IAAV,EAAgB,QAAhB;;OA3BJ,CAHF,EAT4D;;SA4CzDW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EA5C4D;;SA8CzDQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqF,UAAxC;KA9CF;;;;;ACjDJ;;AACA,AAAO,MAAM+a,sBAAN,SAAqCnB,0BAArC,CAAgE;;;;iEAC5C,SAD4C;;;;;ACIvE;;AACA,AAAO,MAAMoB,oBAAN,SAAmCpB,0BAAnC,CAA8D;;;;iEAC1C,OAD0C;;;0BAGnE,CACE3f,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;OAEH3B,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFM;;OAIH4E,cAAH,CAAkB5E,IAAlB,EAAwByG,2BAA2BQ,SAAnD,EAJM;;OAMHzG,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwf,oBAAX,CAAgC;oBAChB,IADgB;YAExB,MAAM;;;WAGPtf,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KALJ,CAHF,EANM;;OAmBHQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;;;AC3BJ;;AACA,AAAO,MAAMiZ,gBAAN,SAA+B1e,MAA/B,CAA4C;MACjD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrExC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAHwE;;OAKrE4E,cAAH,CAAkB5E,IAAlB,EAAwBuf,yBAAyByB,OAAjD,EALwE;;OAOrEpgB,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAPwE;;OASrEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EATwE;;OAWrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;;;AClBJ;;AACA,AAAO,MAAMmZ,qBAAN,SAAoCvB,0BAApC,CAA+D;;;;iEAC3C,QAD2C;;;;;ACEtE;;AAEA,AAAO,MAAMwB,qBAAN,SAAoC7e,MAApC,CAAiD;MACtD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrExC,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;;OAIGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC,EAPwE;;OASrEtI,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;;OAIGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC,EAbwE;;OAerEtI,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAfwE;;OAiBrE4E,cAAH,CAAkB5E,IAAlB,EAAwB,WAAxB,EAjBwE;;OAmBrEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAnBwE;;OAqBrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC,EArBwE;;OAuBrErJ,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAvBwE;;OAyBrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAzBwE;;OA2BrE4E,cAAH,CAAkB5E,IAAlB,EAAwB,aAAxB,EA3BwE;;OA6BrEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EA7BwE;;OA+BrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC,EA/BwE;;OAiCrErJ,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAjCwE;;OAmCrE4E,cAAH,CAAkB5E,IAAlB,EAAwB,QAAxB,EAnCwE;;OAqCrEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EArCwE;;OAuCrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAvCwE;;OAyCrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC;;;;;AC/CJ;;AACA,AAAO,MAAMmX,qBAAN,SAAoCzB,0BAApC,CAA+D;;;;iEAC3C,QAD2C;;;;;ACDtE;;AACA,AAAO,MAAM0B,qBAAN,SAAoC1B,0BAApC,CAA+D;;;;iEAC3C,QAD2C;;;;;ACEtE;;AAEA,AAAO,MAAM2B,qBAAN,SAAoChf,MAApC,CAAiD;MACtD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAIrExC,MAAH,CAAUX,IAAV,EAAgB,OAAhB,EAJwE;;OAMrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANwE;;OAQrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC,EARwE;;OAUrEtI,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAVwE;;OAYrE0E,KAAH,CAAS4c,SAAT,CAAmBvhB,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EAZwE;;OAcrE3B,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAdwE;;OAgBrEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBwE;;OAkBrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8gB,YAAxC,EAlBwE;;OAoBrE/gB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW+gB,eAAxC,EApBwE;;OAsBrEhhB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWghB,gBAAxC,EAtBwE;;OAwBrEjhB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWihB,eAAxC,EAxBwE;;OA0BrElhB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkhB,eAAxC,EA1BwE;;OA4BrEnhB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWmhB,eAAxC,EA5BwE;;OA8BrEphB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWohB,cAAxC,EA9BwE;;OAgCrErhB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqhB,eAAxC,EAhCwE;;OAkCrEthB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWshB,cAAxC,EAlCwE;;OAoCrEvhB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuhB,UAAxC,EApCwE;;OAsCrErhB,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;QAEI,CAACmD,UAAUT,SAAf,EAA0B;SACrB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;AC1CN;;AACA,AAAO,MAAMiiB,iBAAN,SAAgC3W,WAAhC,CAA4C;MACjD,CAAYvL,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAMnE0E,KAAH,CAASC,SAAT,CAAmB5E,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EANsE;;OAQnEsC,cAAH,CAAkB5E,IAAlB,EAAwBuf,yBAAyBE,SAAjD,EARsE;;OAUnEjf,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoE,yBAAxC,EAVsE;;OAYnElE,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAZsE;;OAcnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;YAAQ,KAAKrb;KAAjC,CAA7B,EAdsE;;OAgBnE/C,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;;;AChBJ;;AAEA,AAAO,MAAMkiB,uBAAN,SAAsC7f,MAAtC,CAAmD;cAG5CC,OAAZ,EAAqD;;;;;SAE9CqE,QAAL,GAAgBrE,QAAQqE,QAAxB;;;MAGF,CAAY5G,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrEuB,KAAH,CAASC,SAAT,CAAmB5E,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EAHwE;;OAKrEsC,cAAH,CAAkB5E,IAAlB,EAAwB,KAAK2G,QAA7B,EALwE;;OAOrEnG,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC;;QAEI,CAAC5G,UAAUT,SAAf,EAA0B;SACrB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;ACxBN;;AAEA,AAAO,MAAMmiB,iBAAN,SAAgC9f,MAAhC,CAAuC;MAC5C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;;SAElBlC,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWiF,iBAAX,CAA6B;kBAAY;OAAzC,CAHF,EAFqB;;SAQlBlF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2hB,GAAX,CAAe;gBAAU;OAAzB,CAA7B;;;;;;ACZN;;AAEA,AAAO,MAAMC,mBAAN,SAAkChgB,MAAlC,CAAyC;MAC9C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB;OACG3C,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZ4E,cAAH,CAAkB5E,IAAlB,EAAwB,QAAxB,EAJe;;WAMZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC,EANe;;WAQZvJ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC,EARe;;WAUZxV,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVe;;WAYZW,MAAH,CAAUX,IAAV,EAAgB,IAAhB;OAbU;gBAeF,MAAM;;WAEXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;WAIXQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW6hB,aAAxC,EAJc;;WAMX3hB,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANc;;WAQXW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;OAvBU;iBAyBD,MAAM;;WAEZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJe;;WAMZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC;;KA/BJ,CAHF;;;;;ICXQkf,uBAAZ;;WAAYA;;GAAAA,4BAAAA;;ACQZ;;AACA,AAAO,MAAMC,mBAAN,SAAkCngB,MAAlC,CAAyC;MAC9C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnE4E,cAAH,CAAkB5E,IAAlB,EAAwBuiB,wBAAwBE,UAAhD,EAPsE;;OASnEjiB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoE,yBAAxC;;;;;ACbJ;;AAEA,AAAO,MAAM6d,mBAAN,SAAkCrgB,MAAlC,CAAyC;MAC9C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB;OACG3C,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJe;;WAMZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANe;;WAQZ4E,cAAH,CAAkB5E,IAAlB,EAAwB,QAAxB,EARe;;WAUZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC,EAVe;;WAYZvJ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC,EAZe;;WAcZxV,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAde;;WAgBZW,MAAH,CAAUX,IAAV,EAAgB,IAAhB;OAjBU;gBAmBF,MAAM;;WAEXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;aAIT2iB,QAAL,CAAc5iB,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB;OAvBU;iBAyBD,MAAM;;WAEZ3B,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFe;;WAIZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW6hB,aAAxC,EAJe;;WAMZ3hB,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANe;;WAQZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARe;;WAUZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVe;;WAYZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyf,WAAxC,EAZe;;WAcZvf,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAde;;WAgBZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBe;;WAkBZ4E,cAAH,CAAkB5E,IAAlB,EAAwB,QAAxB,EAlBe;;WAoBZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EApBe;;WAsBZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC,EAtBe;;WAwBZxe,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWuJ,6BAHb,EAxBe;;aA8BV2Y,QAAL,CAAc5iB,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB;;KAvDJ,CAHF;;;UAgEF,CAAiBvC,EAAjB,EAAoCC,IAApC,EAAgDsC,OAAhD,EAA6E;;OAExE9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW6hB,aAAxC,EAF2E;;OAIxE3hB,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJ2E;;OAMxEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAN2E;;OAQxEW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;;;;;AC3EJ;;AACA,AAAO,MAAM4iB,mBAAN,SAAkCvgB,MAAlC,CAAyC;MAC9C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAIrEyB,cAAH,CAAkB5E,IAAlB,EAAwBuiB,wBAAwBE,UAAhD,EAJwE;;OAMrE9hB,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANwE;;OAQrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;;;ACZJ;;AAEA,AAAO,MAAM+a,iBAAN,SAAgCxgB,MAAhC,CAAuC;MAC5C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;QACpE,CAACA,UAAUT,SAAf,EAA0B;SACrB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;UAIIsC,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CANwE;;OAQrE3C,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW6hB,aAAxC;;;;;ACXJ;;AAEA,AAAO,MAAMQ,eAAN,SAA8BzgB,MAA9B,CAAqC;MAC1C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;UAII+iB,uBAAuB,MAAM;;SAE9BviB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWiF,iBAAX,CAA6B;kBAAY;OAAzC,CAHF,EAFiC;;SAQ9BlF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2hB,GAAX,EAA7B;KARF;;OAWG5hB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;WAIZW,MAAH,CAAUX,IAAV,EAAgB,WAAhB,EAJe;;WAMZY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EANe;;WAQZW,MAAH,CAAUX,IAAV,EAAgB,OAAhB;OATU;gBAWF,MAAM;;WAEXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAFc;;WAIXW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAJc;;WAMXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EANc;;WAQXQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC,EARc;;WAUXpe,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAVc;;WAYXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAZc;;+BAAA;;WAgBXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBc;;WAkBXY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAlBc;;WAoBXW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EApBc;;WAsBXQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW6Y,aAAxC;OAjCU;iBAmCD,MAAM;;;;KAnCnB,CAHF;;;;;ACpBJ;;AAEA,AAAO,MAAM0J,oBAAN,SAAmC3gB,MAAnC,CAA0C;MAC/C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrE3C,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwiB,UAAxC,EAHwE;;OAKrEtiB,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EALwE;;OAOrEW,MAAH,CAAUX,IAAV,EAAgB,QAAhB;;;;;ACLJ;;AAEA,AAAO,MAAMkjB,YAAN,SAA2B7gB,MAA3B,CAAkC;cAI3B;QAAA;;GAAZ,EAA0D;;;;;;;SAEnDoC,IAAL,GAAYA,IAAZ;SACK0e,aAAL,GAAqBA,iBAAiB,KAAtC;;;MAGF,CAAYpjB,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;QACpE,KAAKsB,IAAL,IAAa,IAAjB,EAAuB;SAClB2e,SAAH,CAAa,KAAK3e,IAAlB,EADqB;;SAGlBG,cAAH,CAAkB5E,IAAlB,EAAwB,KAAKyE,IAA7B;KAHF,MAIO,IAAI,KAAK0e,aAAT,EAAwB;;SAE1Bve,cAAH,CAAkB5E,IAAlB,EAAwB,SAAxB;KAFK,MAGA;SACF0K,iBAAH,CAAqB1K,IAArB;KATsE;;;OAarEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAbwE;;OAerEW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;;;;;AC/BJ;;AAEA,AAAO,MAAMqjB,kBAAN,SAAiChhB,MAAjC,CAAwC;cAGjCC,OAAZ,EAA0C;;;;;SAEnCA,OAAL,GAAeA,OAAf;;;MAGF,CAAYvC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrE3C,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW6iB,gBAAxC,EAHwE;;OAKrE3iB,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EALwE;;OAOrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8iB,MAAX,CAAkB,KAAKjhB,OAAvB,CAA7B;;;;;AClBJ;;AAEA,AAAO,MAAMkhB,sBAAN,SAAqCnhB,MAArC,CAA4C;MACjD,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;;SAElBgC,KAAH,CAASC,SAAT,CAAmB5E,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B,EAFqB;;SAIlB9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWgjB,SAAX,CAAqB;qBAAe1jB,GAAG2jB;OAAvC,CAHF;;;;;;ACJN;;AAEA,AAAO,MAAMC,eAAN,SAA8BthB,MAA9B,CAAqC;cAG9BC,OAAZ,EAA6C;;;;;SAEtCohB,WAAL,GAAmBphB,QAAQohB,WAA3B;;;MAGF,CAAY3jB,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;;SAElBlC,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwiB,UAAxC,EAFqB;;SAIlBriB,WAAH,CAAeZ,IAAf,EAAqB,KAAK0jB,WAA1B,EAJqB;;SAMlB/iB,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;;;;ACnBN;;AACA,AAAO,MAAM4jB,gBAAN,SAA+BvhB,MAA/B,CAAsC;MAC3C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;;SAElBkC,cAAH,CAAkB5E,IAAlB,EAAwBuf,yBAAyByB,OAAjD,EAFqB;;SAIlBxgB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoE,yBAAxC;;;;;;ICDMgf,qCAAZ;;WAAYA;;GAAAA,0CAAAA;;ACHZ;;AAEA,AAAO,MAAMC,2BAAN,SAA0CzhB,MAA1C,CAAiD;cAG1CC,OAAZ,EAAyD;;;;;SAElDmC,IAAL,GAAYnC,QAAQmC,IAApB;;;MAGF,CAAY1E,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;QACpE,CAACA,UAAUT,SAAf,EAA0B;SACrB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;UAIIsC,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CANwE;;OAQrEyB,cAAH,CAAkB5E,IAAlB,EAAwB,SAAxB,EARwE;;OAUrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC,EAVwE;;OAYrEvJ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2V,SAAxC,EAZwE;;OAcrExR,cAAH,CAAkB5E,IAAlB,EAAwB,KAAKyE,IAA7B,EAdwE;;OAgBrE9D,MAAH,CAAUX,IAAV,EAAgB,OAAhB;;;;;AC7BJ;;AACA,AAAO,MAAM+jB,+BAAN,SAA8C1hB,MAA9C,CAAqD;MAC1D,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;QACpE,CAACA,UAAUT,SAAf,EAA0B;SACrB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;UAIIsC,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CANwE;;OAQrEyB,cAAH,CACE5E,IADF,EAEE6jB,sCAAsCG,oBAFxC,EARwE;;OAarExjB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoE,yBAAxC;;;;;ACTJ;;AAEA,AAAO,MAAMof,6BAAN,SAA4C5hB,MAA5C,CAAmD;cAG5CC,OAAZ,EAA2D;;;;;SAEpDmC,IAAL,GAAYnC,QAAQmC,IAApB;;;MAGF,CAAY1E,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;QACpE,CAACA,UAAUT,SAAf,EAA0B;SACrB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;UAIIsC,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CANwE;;OAQrE3C,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC,EARwE;;OAUrEtI,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVwE;;OAYrE4E,cAAH,CAAkB5E,IAAlB,EAAwB,SAAxB,EAZwE;;OAcrE4E,cAAH,CAAkB5E,IAAlB,EAAwB,KAAKyE,IAA7B,EAdwE;;OAgBrEjE,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgO,YAAxC,EAhBwE;;OAkBrEjO,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC,EAlBwE;;OAoBrErJ,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EApBwE;;OAsBrE4E,cAAH,CACE5E,IADF,EAEE6jB,sCAAsCG,oBAFxC,EAtBwE;;OA2BrErjB,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EA3BwE;;OA6BrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;;;AC/CJ;;AAEA,AAAO,MAAMoc,kBAAN,SAAiC7hB,MAAjC,CAAwC;MAC7C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClEA,QAAQI,SAAZ,EAAuB;;SAElBlC,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWiF,iBAAX,CAA6B;kBAAY;OAAzC,CAHF,EAFqB;;SAQlBlF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2hB,GAAX,CAAe;gBAAU;OAAzB,CAA7B;;;;;;IClBM+B,wBAAZ;;WAAYA;;GAAAA,6BAAAA;;ACQZ;;AACA,AAAO,MAAMC,oBAAN,SAAmC/hB,MAAnC,CAA0C;MAC/C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrEyB,cAAH,CAAkB5E,IAAlB,EAAwBmkB,yBAAyBE,IAAjD,EAHwE;;OAKrE7jB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoE,yBAAxC;;;;;ACPJ;;AACA,AAAO,MAAMyf,oBAAN,SAAmCjiB,MAAnC,CAA0C;MAC/C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CmD,SAA3C,EAA0E;UAClEb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwE;;OAGrEyB,cAAH,CAAkB5E,IAAlB,EAAwBmkB,yBAAyBE,IAAjD,EAHwE;;OAKrE1jB,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EALwE;;OAOrEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqH,yBAAxC;;;;;ACXJ;;AAEA,AAAO,MAAMyc,kBAAN,SAAiCliB,MAAjC,CAAwC;MAC7C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW+jB,cAAxC;;;;;ACVJ;;AAEA,AAAO,MAAMC,gBAAN,SAA+BpiB,MAA/B,CAAsC;MAC3C,CAAYtC,EAAZ,EAA+BC,IAA/B,EAA2CsC,OAA3C,EAAwE;QAClE,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;KAFoE;;;OAOnEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWikB,YAAxC,EAPsE;;OASnE/jB,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EATsE;;OAWnEW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAXsE;;OAanEQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkkB,cAAxC;;;;;ACiUG,MAAMC,gBAAgB,MAAe;QACpCC,QAAmC,EAAzC;;WAESC,QAAT,CACEC,WADF,EAE2B;WACjBziB,OAAD,IAAsB;YACrB0iB,MAAMD,YAAYxb,MAAZ,CAAmBjH,OAAnB,CAAZ;;UACIuiB,MAAMG,GAAN,KAAc,IAAlB,EAAwB;cAChBA,GAAN,IAAa,IAAID,WAAJ,CAAgBziB,OAAhB,CAAb;;;aAGKuiB,MAAMG,GAAN,CAAP;KANF;;;SAUK;eACO1iB,OAAD,IACT,IAAIC,eAAJ,CAAoBD,OAApB,CAFG;YAGIA,OAAD,IAAkC,IAAIU,YAAJ,CAAiBV,OAAjB,CAHrC;gBAIQA,OAAD,IACV,IAAIQ,gBAAJ,CAAqBR,OAArB,CALG;gBAMO,IAAIW,gBAAJ,EANP;iBAOQ,IAAIC,iBAAJ,EAPR;aAQKZ,OAAD,IAAmC,IAAIgB,aAAJ,CAAkBhB,OAAlB,CARvC;wBASe,IAAI2I,wBAAJ,EATf;sBAUa,IAAIG,sBAAJ,EAVb;wBAYgB9I,OAAD,IAClB,IAAIub,wBAAJ,CAA6Bvb,OAA7B,CAbG;8BAcqB,IAAI4b,8BAAJ,EAdrB;gCAeuB,IAAIC,gCAAJ,EAfvB;+BAgBsB,IAAIG,+BAAJ,EAhBtB;kBAiBUhc,OAAD,IACZ,IAAIkc,kBAAJ,CAAuBlc,OAAvB,CAlBG;cAmBMA,OAAD,IAAoC,IAAI8c,cAAJ,CAAmB9c,OAAnB,CAnBzC;uBAoBeA,OAAD,IAAa,IAAI4N,uBAAJ,CAA4B5N,OAA5B,CApB3B;UAsBC,IAAI6D,eAAJ,EAtBD;4BAuBoB7D,OAAD,IACtB,IAAIoE,4BAAJ,CAAiCpE,OAAjC,CAxBG;sBAyBcA,OAAD,IAChB,IAAI6E,sBAAJ,CAA2B7E,OAA3B,CA1BG;UA2BC,IAAIgF,UAAJ,EA3BD;mBA4BU,IAAIK,mBAAJ,EA5BV;yBA6BiBrF,OAAD,IACnB,IAAIsF,yBAAJ,CAA8BtF,OAA9B,CA9BG;qBA+BY,IAAIyF,qBAAJ,EA/BZ;0BAgCkBzF,OAAD,IACpB,IAAIoG,0BAAJ,CAA+BpG,OAA/B,CAjCG;yBAkCiBA,OAAD,IACnB,IAAIuG,yBAAJ,CAA8BvG,OAA9B,CAnCG;0BAoCkBA,OAAD,IACpB,IAAI0G,0BAAJ,CAA+B1G,OAA/B,CArCG;cAsCMA,OAAD,IAAoC,IAAI4G,cAAJ,CAAmB5G,OAAnB,CAtCzC;gBAuCOwiB,SAASxb,gBAAT,CAvCP;qBAwCahH,OAAD,IACf,IAAIsH,qBAAJ,CAA0BtH,OAA1B,CAzCG;SA0CCA,OAAD,IAAgC,IAAIwH,SAAJ,CAAcxH,OAAd,CA1ChC;gBA2CO,IAAI4H,gBAAJ,EA3CP;aA6CK5H,OAAD,IAAa,IAAIyM,aAAJ,CAAkBzM,OAAlB,CA7CjB;QA8CAA,OAAD,IAAa,IAAIuN,QAAJ,CAAavN,OAAb,CA9CZ;UA+CC,CAACsM,KAAD,EAAgBpL,WAAhB,KACJ,IAAImL,UAAJ,CAAeC,KAAf,EAAsBpL,WAAtB,CAhDG;sBAiDa,IAAIgI,sBAAJ,EAjDb;4BAkDmB,IAAIC,4BAAJ,EAlDnB;2BAmDkB,IAAIE,2BAAJ,EAnDlB;wBAoDe,IAAIG,wBAAJ,EApDf;sBAqDa,IAAIC,sBAAJ,EArDb;sBAsDa,IAAI2B,sBAAJ,EAtDb;uBAuDc,IAAIW,uBAAJ,EAvDd;WAwDE,IAAIC,WAAJ,EAxDF;oBAyDW,IAAIE,oBAAJ,EAzDX;mBA0DU,IAAI2C,mBAAJ,EA1DV;gBA2DO,IAAImF,gBAAJ,EA3DP;kBA4DS,IAAIG,kBAAJ,EA5DT;kBA6DS,IAAIe,kBAAJ,EA7DT;kBA8DS,IAAI+E,kBAAJ,EA9DT;kBA+DS,IAAIK,kBAAJ,EA/DT;qBAgEY,IAAII,qBAAJ,EAhEZ;eAiEM,IAAIxL,eAAJ,EAjEN;YAkEG,IAAIgF,YAAJ,EAlEH;cAmEK,IAAII,cAAJ,EAnEL;cAoEK,IAAIiE,cAAJ,EApEL;cAqEK,IAAI6B,cAAJ,EArEL;cAsEK,IAAIK,cAAJ,EAtEL;iBAuEQ,IAAIG,iBAAJ,EAvER;uBAwEc,IAAIC,uBAAJ,EAxEd;gBAyEO,IAAIC,gBAAJ,EAzEP;gBA0EO,IAAI9L,gBAAJ,EA1EP;eA2EM,IAAIqF,eAAJ,EA3EN;eA4EM,IAAI8F,eAAJ,EA5EN;eA6EM,IAAIK,eAAJ,EA7EN;eA8EM,IAAI3C,eAAJ,EA9EN;eA+EO7X,OAAD,IAAiC,IAAIoT,eAAJ,CAAoBpT,OAApB,CA/EvC;cAgFMA,OAAD,IAAiC,IAAIqa,cAAJ,CAAmBra,OAAnB,CAhFtC;cAiFMA,OAAD,IAAiC,IAAIuU,cAAJ,CAAmBvU,OAAnB,CAjFtC;cAkFMA,OAAD,IAAiC,IAAI6Z,cAAJ,CAAmB7Z,OAAnB,CAlFtC;iBAmFSA,OAAD,IAAa,IAAIgb,iBAAJ,CAAsBhb,OAAtB,CAnFrB;qBAoFY,IAAImY,qBAAJ,EApFZ;6BAqFoB,IAAIC,6BAAJ,EArFpB;6BAsFoB,IAAIgB,6BAAJ,EAtFpB;iCAuFwB,IAAIL,iCAAJ,EAvFxB;qCAyFH/Y,OAD+B,IAE5B,IAAI4Y,qCAAJ,CAA0C5Y,OAA1C,CA1FA;uBA2Fc,IAAI8X,uBAAJ,EA3Fd;+BA4FsB,IAAII,+BAAJ,EA5FtB;+BA6FsB,IAAIiB,+BAAJ,EA7FtB;mCA8F0B,IAAIL,mCAAJ,EA9F1B;uCAgGH9Y,OADiC,IAE9B,IAAI2Y,uCAAJ,CAA4C3Y,OAA5C,CAjGA;uBAkGc,IAAI0X,uBAAJ,EAlGd;+BAmGsB,IAAIC,+BAAJ,EAnGtB;+BAoGsB,IAAIqB,+BAAJ,EApGtB;wBAqGe,IAAIM,wBAAJ,EArGf;qBAsGY,IAAII,qBAAJ,EAtGZ;mBAuGU,IAAIjE,mBAAJ,EAvGV;gBAwGO,IAAI4F,gBAAJ,EAxGP;eAyGM,IAAIC,eAAJ,EAzGN;gBA0GO,IAAIhD,gBAAJ,EA1GP;0BA2GiB,IAAInD,0BAAJ,EA3GjB;wBA4GgBnV,OAAD,IAClB,IAAIkX,wBAAJ,CAA6BlX,OAA7B,CA7GG;mBA+GU,IAAIkgB,mBAAJ,EA/GV;iBAgHQ,IAAIL,iBAAJ,EAhHR;mBAiHU,IAAIS,mBAAJ,EAjHV;mBAkHU,IAAIP,mBAAJ,EAlHV;mBAmHU,IAAIK,mBAAJ,EAnHV;eAoHM,IAAII,eAAJ,EApHN;iBAqHQ,IAAID,iBAAJ,EArHR;kBAuHS,IAAIqB,kBAAJ,EAvHT;oBAwHW,IAAIE,oBAAJ,EAxHX;oBAyHW,IAAIE,oBAAJ,EAzHX;kBA0HS,IAAIC,kBAAJ,EA1HT;gBA2HO,IAAIE,gBAAJ,EA3HP;YA6HIniB,OAAD,IAAkC,IAAI4gB,YAAJ,CAAiB5gB,OAAjB,CA7HrC;kBA8HUA,OAAD,IACZ,IAAI+gB,kBAAJ,CAAuB/gB,OAAvB,CA/HG;eAgIOA,OAAD,IACT,IAAIqhB,eAAJ,CAAoBrhB,OAApB,CAjIG;sBAkIa,IAAIkhB,sBAAJ,EAlIb;gBAmIO,IAAII,gBAAJ,EAnIP;oBAoIW,IAAIZ,oBAAJ,EApIX;2BAsImB1gB,OAAD,IACrB,IAAIwhB,2BAAJ,CAAgCxhB,OAAhC,CAvIG;6BAwIqBA,OAAD,IACvB,IAAI2hB,6BAAJ,CAAkC3hB,OAAlC,CAzIG;+BA0IsB,IAAIyhB,+BAAJ,EA1ItB;kBA4IS,IAAIvE,kBAAJ,EA5IT;oBA6IW,IAAIK,oBAAJ,EA7IX;sBA8Ia,IAAIgB,sBAAJ,EA9Ib;qBA+IY,IAAIH,qBAAJ,EA/IZ;oBAgJW,IAAII,oBAAJ,EAhJX;gBAiJO,IAAIC,gBAAJ,EAjJP;qBAkJY,IAAIE,qBAAJ,EAlJZ;qBAmJY,IAAIC,qBAAJ,EAnJZ;qBAoJY,IAAIC,qBAAJ,EApJZ;qBAqJY,IAAIC,qBAAJ,EArJZ;qBAsJY,IAAIC,qBAAJ,EAtJZ;iBAuJS/e,OAAD,IACX,IAAI2f,iBAAJ,CAAsB3f,OAAtB,CAxJG;uBAyJeA,OAAD,IACjB,IAAI4f,uBAAJ,CAA4B5f,OAA5B,CA1JG;sBA2Jagd;GA3JpB;CAhBK;;AChVA,MAAM2F,wBAAN,SAAuC7iB,YAAvC,CAAsE;;;;iEACxCmK,WAAW2Y,gBAD6B;;;WAG3E,CACEnlB,EADF,EAEE0Q,IAFF,EAGEtN,SAHF,EAIQ;QACFb,UAAUvC,GAAGqD,gBAAH,CAAoBrD,GAAGolB,mBAAH,CAAuBhiB,SAAvB,CAApB,CAAd;UACMsB,OAAO1E,GAAG2E,KAAH,CAAS2E,GAAT,CAAaoH,KAAKnG,cAAL,EAAb,CAAb;UACM8a,cAAc3U,KAAK4U,UAAL,EAApB;QACIC,YAAJ;;QACIF,eAAe,IAAnB,EAAyB;qBACRrlB,GAAG2E,KAAH,CAASiT,SAAT,EAAf;gBACU5X,GAAGwlB,iBAAH,CAAqBjjB,OAArB,EAA8BgjB,YAA9B,CAAV,CAFuB;;SAIpB9e,KAAH,CAAS4e,YAAYjN,aAAZ,EAAT,EAAsC7V,OAAtC,EAJuB;;SAMpBoC,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBqlB,WAAjB,EAA8B9iB,OAA9B,EAAuCgjB,YAAvC;;;UAEIE,aAAaF,YAAnB;;;;OAIG9kB,UAAH,CACEiQ,IADF,EAEEnO,OAFF,EAGEvC,GAAGU,OAAH,CAAWwf,oBAAX,CAAgC;YACxB,MAAM;;cAEJwF,WAAWhV,KACdiV,eADc,GAEdC,IAFc,CAERC,IAAD,IAAUA,KAAKC,gBAAL,EAFD,CAAjB,CAFU;;YAMNJ,YAAY,IAAhB,EAAsB;;aAEjBjlB,UAAH,CAAcilB,QAAd,EAAwBnjB,OAAxB,EAAiCvC,GAAGU,OAAH,CAAW0H,UAA5C,EAFoB;SAAtB,MAIO,IAAIqd,cAAc,IAAd,IAAsBJ,eAAe,IAAzC,EAA+C;;aAEjD1gB,KAAH,CAASyb,OAAT,CAAiBpgB,EAAjB,EAAqB0Q,IAArB,EAA2BnO,OAA3B,EAFoD;;aAIjDoC,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiB0Q,IAAjB,EAAuBnO,OAAvB,EAAgCkjB,UAAhC,EAJoD;;aAMjDhlB,UAAH,CAAciQ,IAAd,EAAoBnO,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwJ,eAAX,EAA7B,EANoD;SAA/C,MAQA;;aAEFtJ,MAAH,CAAU8P,IAAV,EAAgB,MAAhB;SApBQ;;;;;WAyBP/L,KAAH,CAASyb,OAAT,CAAiBpgB,EAAjB,EAAqB0Q,IAArB,EAA2BnO,OAA3B;aAEGwjB,qBADH,GAEGjiB,MAFH,CAEUuE,WAAW2d,qBAFrB,EAGGxlB,OAHH,CAGYoG,QAAD,IAAc;gBACf4D,cAAc5D,SAAS6D,cAAT,EAApB;;cACID,eAAe,IAAnB,EAAyB;eACpB5J,MAAH,CAAU8P,IAAV,EAAgB,KAAhB,EADuB;;eAGpB7L,cAAH,CAAkB2F,WAAlB,EAA+B5D,SAAS4J,OAAT,EAA/B,EAHuB;;eAKpB/J,KAAH,CAAS+D,WAAT,EAAsBjI,OAAtB,EALuB;;eAOpB9B,UAAH,CACE+J,WADF,EAEEjI,OAFF,EAGEvC,GAAGU,OAAH,CAAWuJ,6BAHb;;SAZN,EA1BU;;WA8CPrJ,MAAH,CAAU8P,IAAV,EAAgB,MAAhB,EA9CU;;YAgDNgV,YAAY,IAAhB,EAAsB;aACjBjf,KAAH,CAASif,SAASnd,cAAT,EAAT,EAAoChG,OAApC;;;KAlDN,CAHF,EAjBM;;OA6EH9B,UAAH,CACEiQ,IADF,EAEEnO,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;gBACpB1E,2BAA2BQ;KADvC,CAHF;;;;OAUGtG,MAAH,CAAU8P,IAAV,EAAgB,KAAhB,EAvFM;;OAyFH7L,cAAH,CAAkB6L,IAAlB,EAAwB,WAAxB,EAzFM;;OA2FH9P,MAAH,CAAU8P,IAAV,EAAgB,MAAhB,EA3FM;;OA6FHjQ,UAAH,CAAciQ,IAAd,EAAoBnO,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC,EA7FM;;OA+FHtI,MAAH,CAAU8P,IAAV,EAAgB,MAAhB,EA/FM;;OAiGH7L,cAAH,CAAkB6L,IAAlB,EAAwB,aAAxB,EAjGM;;OAmGH9P,MAAH,CAAU8P,IAAV,EAAgB,KAAhB,EAnGM;;OAqGHjQ,UAAH,CAAciQ,IAAd,EAAoBnO,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC;SACKgc,kBAAL,GAA0BzlB,OAA1B,CAAmC0lB,MAAD,IAAY;UACxCA,OAAOJ,gBAAP,EAAJ,EAA+B;;WAE1BllB,MAAH,CAAUslB,MAAV,EAAkB,KAAlB,EAF6B;;WAI1BrhB,cAAH,CAAkBqhB,MAAlB,EAA0BA,OAAO1V,OAAP,EAA1B,EAJ6B;;WAM1B/P,UAAH,CAAcylB,MAAd,EAAsB3jB,OAAtB,EAA+BvC,GAAGU,OAAH,CAAWylB,eAA1C,EAN6B;;WAQ1B1lB,UAAH,CACEiQ,IADF,EAEEnO,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;oBACpB1E,2BAA2BG;SADvC,CAHF,EAR6B;;WAgB1BpG,UAAH,CACEylB,MADF,EAEE3jB,OAFF,EAGEvC,GAAGU,OAAH,CAAWuJ,6BAHb;;KAjBJ;SA0BGmc,eADH,GAEGtiB,MAFH,CAEW4V,QAAD,IAAc,CAACA,SAAS2M,QAAT,EAFzB,EAGG7lB,OAHH,CAGYkZ,QAAD,IAAc;;SAElB9Y,MAAH,CAAU8Y,QAAV,EAAoB,KAApB,EAFqB;;SAIlB7U,cAAH,CAAkB6U,QAAlB,EAA4BA,SAASlJ,OAAT,EAA5B,EAJqB;;SAMlB/P,UAAH,CAAciZ,QAAd,EAAwBnX,OAAxB,EAAiCvC,GAAGU,OAAH,CAAWylB,eAA5C,EANqB;;SAQlB1lB,UAAH,CACEiQ,IADF,EAEEnO,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;kBACpB1E,2BAA2BG;OADvC,CAHF;YAOMyf,cAAc5M,SAAS6M,cAAT,EAApB;YACMtL,SAASqL,eAAe,IAA9B;;UACIA,eAAe,IAAnB,EAAyB;WACpB7lB,UAAH,CAAc6lB,WAAd,EAA2B/jB,OAA3B,EAAoCvC,GAAGU,OAAH,CAAWylB,eAA/C;WACG1lB,UAAH,CACEiQ,IADF,EAEEnO,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;oBACpB1E,2BAA2BG;SADvC,CAHF;OAnBmB;;;SA4BlBpG,UAAH,CACEiZ,QADF,EAEEnX,OAFF,EAGEvC,GAAGU,OAAH,CAAW8lB,iCAAX,CAA6C;gBACnC,IADmC;;OAA7C,CAHF;KA/BJ;SA0CGC,eADH,GAEG3iB,MAFH,CAGK4V,QAAD,IAAc,CAACA,SAAS2M,QAAT,EAAD,IAAwB3M,SAASgN,cAAT,MAA6B,IAHvE,EAKGlmB,OALH,CAKYkZ,QAAD,IAAc;;SAElB9Y,MAAH,CAAU8Y,QAAV,EAAoB,KAApB,EAFqB;;SAIlB7U,cAAH,CAAkB6U,QAAlB,EAA4BA,SAASlJ,OAAT,EAA5B,EAJqB;;SAMlB/P,UAAH,CAAciZ,QAAd,EAAwBnX,OAAxB,EAAiCvC,GAAGU,OAAH,CAAWylB,eAA5C,EANqB;;SAQlB1lB,UAAH,CACEiQ,IADF,EAEEnO,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;kBACpB1E,2BAA2BG;OADvC,CAHF,EARqB;;SAgBlBpG,UAAH,CACEiZ,QADF,EAEEnX,OAFF,EAGEvC,GAAGU,OAAH,CAAW8lB,iCAAX,CAA6C;gBACnC,KADmC;gBAEnC;OAFV,CAHF;KArBJ;;;QAgCIf,cAAc,IAAd,IAAsBJ,eAAe,IAAzC,EAA+C;;SAE1CzkB,MAAH,CAAUykB,WAAV,EAAuB,KAAvB,EAF6C;;SAI1CxgB,cAAH,CAAkBwgB,WAAlB,EAA+B,WAA/B,EAJ6C;;SAM1C1gB,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBqlB,WAAjB,EAA8B9iB,OAA9B,EAAuCkjB,UAAvC,EAN6C;;SAQ1C5gB,cAAH,CAAkBwgB,WAAlB,EAA+B,WAA/B,EAR6C;;SAU1C5kB,UAAH,CAAc4kB,WAAd,EAA2B9iB,OAA3B,EAAoCvC,GAAGU,OAAH,CAAWsJ,yBAA/C,EAV6C;;SAY1CvJ,UAAH,CACE4kB,WADF,EAEE9iB,OAFF,EAGEvC,GAAGU,OAAH,CAAWuJ,6BAHb;KApNI;;;OA4NHxJ,UAAH,CAAciQ,IAAd,EAAoBnO,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC;;QAEIyG,KAAKiW,aAAL,MAAwBjW,KAAKkW,eAAL,EAA5B,EAAoD;;SAE/ChmB,MAAH,CAAU8P,IAAV,EAAgB,KAAhB,EAFkD;;SAI/CjQ,UAAH,CACEiQ,IADF,EAEEnO,OAFF,EAGEvC,GAAGU,OAAH,CAAWmmB,YAAX,CAAwB;cAChBnW,KAAKiW,aAAL,KAAuBjW,KAAKnG,cAAL,EAAvB,GAA+CzH,SAD/B;uBAEP4N,KAAKkW,eAAL;OAFjB,CAHF;KAlOI;;;OA4OHjiB,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiB0Q,IAAjB,EAAuBnO,OAAvB,EAAgCmC,IAAhC;;;;;ACpPG,MAAMoiB,uBAAN,SAAsCzkB,YAAtC,CAAoE;;;;iEACtCmK,WAAWua,eAD2B;;;WAGzE,CACE/mB,EADF,EAEE0Q,IAFF,EAGEnO,OAHF,EAIQ;OACHoI,iBAAH,CAAqB+F,IAArB;;;;;ACRG,MAAMsW,kBAAN,SAAiC3kB,YAAjC,CAA0D;;;;iEAC5BmK,WAAWya,UADiB;;;WAG/D,CACEjnB,EADF,EAEE0Q,IAFF,EAGEnO,OAHF,EAIQ;OACHoI,iBAAH,CAAqB+F,IAArB;;;;;ACRG,MAAMwW,wBAAN,SAAuC7kB,YAAvC,CAAsE;;;;iEACxCmK,WAAW2a,gBAD6B;;;WAG3E,CACEnnB,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;QACFnD,KAAKmnB,cAAL,EAAJ,EAA2B;SACtBzc,iBAAH,CAAqB1K,IAArB;KADF,MAEO;YACCsC,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADK;;SAGFqD,KAAH,CAASxG,KAAKmY,aAAL,EAAT,EAA+B7V,OAA/B,EAHK;;SAKF9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWmmB,YAAX,CAAwB;uBAAiB;OAAzC,CAHF;;;;;;ACVC,MAAMQ,yBAAN,SAAwChlB,YAAxC,CAAwE;;;;iEAC1CmK,WAAW8a,iBAD+B;;;WAG7E,CACEtnB,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB;;UAEMoN,UAAW+W,WAAD,IAAkC;UAC5C7iB,OAAO6iB,YAAYC,WAAZ,GAA0BC,OAA1B,EAAX;YACMC,QAAQH,YAAYI,kBAAZ,EAAd;;UACID,SAAS,IAAb,EAAmB;eACVA,MAAMD,OAAN,EAAP;;;aAGK/iB,IAAP;KAPF;;UAUMkjB,kBAAkB3nB,KAAK4nB,4BAAL,EAAxB,CAbM;;OAgBHpnB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW6iB,gBAAxC;;QACIqE,mBAAmB,IAAvB,EAA6B;WAExBE,eADH,GAEGhkB,MAFH,CAEWyjB,WAAD,IACNA,YACGQ,0BADH,GAEGhW,IAFH,CAESrB,IAAD,IAAU,CAACrI,WAAW2f,sBAAX,CAAkCtX,IAAlC,CAFnB,CAHJ,EAOGlQ,OAPH,CAOY+mB,WAAD,IAAiB;;WAErB3mB,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFwB;;WAIrB0E,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCglB,YAAYC,WAAZ,GAA0BC,OAA1B,EAAhC,EAJwB;;WAMrBhnB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW8iB,MAAX,CAAkB;gBAAQhT,QAAQ+W,WAAR;SAA1B,CAHF;OAbJ;KADF,MAoBO;;SAEFU,UAAH,CAAcL,eAAd;WAEGE,eADH,GAEGhkB,MAFH,CAEWyjB,WAAD,IACNvnB,GAAGkoB,SAAH,CAAaN,eAAb,EAA8BL,YAAYC,WAAZ,GAA0BC,OAA1B,EAA9B,CAHJ,EAKGjnB,OALH,CAKY+mB,WAAD,IAAiB;;WAErB3mB,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFwB;;WAIrBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJwB;;WAMrBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANwB;;WAQrB4E,cAAH,CAAkB5E,IAAlB,EAAwBsnB,YAAYC,WAAZ,GAA0BC,OAA1B,EAAxB,EARwB;;WAUrB7mB,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAVwB;;WAYrBQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW8iB,MAAX,CAAkB;gBAAQhT,QAAQ+W,WAAR;SAA1B,CAHF;OAjBJ,EAHK;;SA2BF3mB,MAAH,CAAUX,IAAV,EAAgB,MAAhB;KAhEI;;;OAoEHW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;AC/EG,MAAMkoB,2BAAN,SAA0C9lB,YAA1C,CAEL;;;;iEACmCmK,WAAW4b,mBAD9C;;;WAGA,CACEpoB,EADF,EAEE0Q,IAFF,EAGEtN,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB;UACMsB,OAAO1E,GAAG2E,KAAH,CAAS2E,GAAT,CAAaoH,KAAKF,OAAL,EAAb,CAAb,CAFM;;OAIH/P,UAAH,CAAciQ,IAAd,EAAoBnO,OAApB,EAA6BvC,GAAGU,OAAH,CAAWylB,eAAxC,EAJM;;OAMH1lB,UAAH,CACEiQ,IADF,EAEEnO,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;gBACpB1E,2BAA2BG;KADvC,CAHF;;QAOI6J,KAAKiW,aAAL,MAAwBjW,KAAKkW,eAAL,EAA5B,EAAoD;;SAE/ChmB,MAAH,CAAU8P,IAAV,EAAgB,KAAhB,EAFkD;;SAI/CjQ,UAAH,CACEiQ,IADF,EAEEnO,OAFF,EAGEvC,GAAGU,OAAH,CAAWmmB,YAAX,CAAwB;cAChBnW,KAAKiW,aAAL,KAAuBjW,KAAKF,OAAL,EAAvB,GAAwC1N,SADxB;uBAEP4N,KAAKkW,eAAL;OAFjB,CAHF;KAjBI;;;OA2BHjiB,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiB0Q,IAAjB,EAAuBnO,OAAvB,EAAgCmC,IAAhC;;;;;ACrCG,MAAM2jB,yBAAN,SAAwChmB,YAAxC,CAAwE;;;;iEAC1CmK,WAAW8b,iBAD+B;;;WAG7E,CACEtoB,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADM;;OAGH6kB,UAAH,CAAchoB,KAAKsoB,mCAAL,EAAd;UAEMC,kBAAkBvoB,KAAKwoB,kBAAL,EAAxB;;QACID,mBAAmB,IAAvB,EAA6B;YACrB9jB,OAAO8jB,gBAAgBf,OAAhB,EAAb;SACG9iB,KAAH,CAAS2E,GAAT,CAAa5E,IAAb,EAF2B;;SAIxBjE,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgoB,oBAAxC,EAJ2B;;SAOxB/jB,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCmC,IAAhC;KAPF,MAQO;YACCikB,gBAAgB1oB,KAAK2oB,gBAAL,EAAtB;YACMC,eAAe5oB,KAClB6oB,eADkB,GAElBhlB,MAFkB,CAEVilB,WAAD,IACN/oB,GAAGkoB,SAAH,CACEa,YACGC,oBADH,GAEGT,mCAFH,EADF,EAIEQ,YAAYvY,OAAZ,EAJF,CAHiB,CAArB;;UAUImY,iBAAiB,IAArB,EAA2B;YACrBE,aAAa1kB,MAAb,GAAsB,CAA1B,EAA6B;;aAExBvD,MAAH,CAAUX,IAAV,EAAgB,KAAhB;SAHuB;;;WAOtB4E,cAAH,CAAkB5E,IAAlB,EAAwB,SAAxB,EAPyB;;WAStBW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;cAEMyE,OAAOikB,cAAclB,OAAd,EAAb;WACG9iB,KAAH,CAAS2E,GAAT,CAAa5E,IAAb,EAZyB;;WAetBC,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCmC,IAAhC;;;UAGEmkB,aAAa1kB,MAAb,GAAsB,CAA1B,EAA6B;aACtB,MAAM4kB,WAAX,IAA0BF,YAA1B,EAAwC;;aAEnCjoB,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFsC;;aAInC4E,cAAH,CAAkB5E,IAAlB,EAAwB8oB,YAAYvY,OAAZ,EAAxB,EAJsC;;aAMnC5P,MAAH,CAAUX,IAAV,EAAgB,UAAhB;cAEIyE,OAAOqkB,YAAYvY,OAAZ,EAAX;gBACMkX,QAAQqB,YAAYpB,kBAAZ,EAAd;;cACID,SAAS,IAAb,EAAmB;mBACVA,MAAMD,OAAN,EAAP;;;aAEC9iB,KAAH,CAAS2E,GAAT,CAAa5E,IAAb,EAbsC;;aAgBnCC,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCmC,IAAhC;;;WAGC9D,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;;ACvED,MAAMgpB,4BAAN,SAA2C5mB,YAA3C,CAEL;;;;iEACmCmK,WAAW0c,oBAD9C;;;WAGA,CACElpB,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;;;;;ACTH,MAAM+lB,2BAAN,SAA0C9mB,YAA1C,CAEL;;;;iEACmCmK,WAAW4c,mBAD9C;;;WAGA,CACEppB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACAmC,OAAO1E,GAAG2E,KAAH,CAAS2E,GAAT,CAAarJ,KAAKuQ,OAAL,EAAb,CAAb;UACMyH,OAAOhY,KAAKwK,cAAL,EAAb;;QACIwN,QAAQ,IAAZ,EAAkB;SACbxR,KAAH,CAASwR,IAAT,EAAejY,GAAGqD,gBAAH,CAAoBd,OAApB,CAAf;SACGoC,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCmC,IAAhC;;;;;;ACdC,MAAM2kB,+BAAN,SAA8ChnB,YAA9C,CAEL;;;;iEACmCmK,WAAW8c,uBAD9C;;;WAGA,CACEtpB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;SACDgnB,eAAL,GAAuB/oB,OAAvB,CAAgCkQ,IAAD,IAAU;SACpCjK,KAAH,CAASiK,IAAT,EAAenO,OAAf;KADF;;;;;ACLJ,mBAAe,CACb2iB,wBADa,EAEb4B,uBAFa,EAGbE,kBAHa,EAIbE,wBAJa,EAKbG,yBALa,EAMbc,2BANa,EAObE,yBAPa,EAQbY,4BARa,EASbE,2BATa,EAUbE,+BAVa,CAAf;;ACLO,MAAMG,iBAAN,SAAgCnnB,YAAhC,CAAwD;;;;iEAC1BmK,WAAWid,SADe;;;WAG7D,CACEzpB,EADF,EAEE0Q,IAFF,EAGEnO,OAHF,EAIQ;OACHoI,iBAAH,CAAqB+F,IAArB;;;;;ACZJ,gBAAe,CAAC8Y,iBAAD,CAAf;;ACIe,MAAME,8BAAN,SAA6CrnB,YAA7C,CAEb;;;;iEACmCmK,WAAWmd,sBAD9C;;;WAGA,CACE3pB,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB;UAEMwmB,WAAW,CAAC,GAAG3pB,KAAK4pB,WAAL,EAAJ,EAAwBtjB,OAAxB,EAAjB;;SACK,MAAMujB,OAAX,IAAsBF,QAAtB,EAAgC;SAC3BnjB,KAAH,CAASqjB,OAAT,EAAkBvnB,OAAlB;KALI;;;OAQH1B,WAAH,CAAeZ,IAAf,EAAqB2pB,SAASzlB,MAA9B,EARM;;OAUHvD,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVM;;OAYHQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyF,SAAxC;;QAEI,CAAC/C,UAAUT,SAAf,EAA0B;SACrB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;ACvBS,MAAM8pB,qBAAN,SAAoC1nB,YAApC,CAAgE;;;;iEAC1CmK,WAAWwd,aAD+B;;;WAG7E,CACEhqB,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;QACFA,QAAQI,SAAZ,EAAuB;;SAElBgC,KAAH,CAASyb,OAAT,CAAiBpgB,EAAjB,EAAqBiY,IAArB,EAA2B1V,OAA3B,EAFqB;;SAIlB9B,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWylB,eAAxC,EAJqB;;SAMlB1lB,UAAH,CACEwX,IADF,EAEE1V,OAFF,EAGEvC,GAAGU,OAAH,CAAWyG,gBAAX,CAA4B;mBAAa;OAAzC,CAHF,EANqB;;SAYlB1G,UAAH,CACEwX,IADF,EAEE1V,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;kBACpB1E,2BAA2BG;OADvC,CAHF;;;;;;ACnBS,MAAMojB,oBAAN,SAAmC5nB,YAAnC,CAA8D;;;;iEACxCmK,WAAW0d,YAD6B;;;WAG3E,CACElqB,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;UACAoB,OAAO3D,GAAG6D,OAAH,CAAWoU,IAAX,CAAb;;QACI1V,QAAQqB,IAAR,IAAgB,IAAhB,IAAwBkS,SAAA,CAAoBnS,IAApB,CAA5B,EAAuD;SAClD8C,KAAH,CAASwR,KAAKG,aAAL,EAAT,EAA+B7V,OAA/B;KADF,MAEO;SACFkE,KAAH,CAASwR,KAAKG,aAAL,EAAT,EAA+BpY,GAAGmqB,WAAH,CAAe5nB,OAAf,EAAwBoB,IAAxB,CAA/B;;;;;;ACfS,MAAMymB,uBAAN,SAAsC/nB,YAAtC,CAEb;;;;iEACmCmK,WAAW6d,eAD9C;;;WAGA,CAAiBrqB,EAAjB,EAAoCiY,IAApC,EAAiE;OAC5DtN,iBAAH,CAAqBsN,IAArB;;;;;ACQW,MAAMqS,wBAAN,SAAuCjoB,YAAvC,CAEb;;;;iEACmCmK,WAAW+d,gBAD9C;;;WAGA,CACEvqB,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;UACAioB,OAAOvS,KAAKwS,gBAAL,GAAwBC,OAAxB,EAAb;;YAEQF,IAAR;WACOhe,WAAWC,WAAhB;WACKD,WAAWE,eAAhB;WACKF,WAAWG,gBAAhB;WACKH,WAAWI,2BAAhB;WACKJ,WAAWK,mBAAhB;WACKL,WAAWM,gBAAhB;WACKN,WAAWO,kBAAhB;WACKP,WAAWQ,oBAAhB;WACKR,WAAWS,cAAhB;WACKT,WAAWU,gBAAhB;WACKV,WAAWW,2BAAhB;WACKX,WAAWY,4CAAhB;WACKZ,WAAWa,iCAAhB;aACOsd,uBAAL,CAA6B3qB,EAA7B,EAAiCwqB,IAAjC,EAAuCvS,IAAvC,EAA6C1V,OAA7C;;;WAEGiK,WAAWoe,aAAhB;WACKpe,WAAWqe,UAAhB;WACKre,WAAWse,YAAhB;WACKte,WAAWue,SAAhB;WACKve,WAAWwe,UAAhB;WACKxe,WAAWye,2BAAhB;WACKze,WAAW0e,qBAAhB;WACK1e,WAAW2e,aAAhB;WACK3e,WAAW4e,mBAAhB;WACK5e,WAAW6e,gBAAhB;WACK7e,WAAW8e,sBAAhB;WACK9e,WAAW+e,sBAAhB;WACK/e,WAAWgf,iBAAhB;WACKhf,WAAWif,cAAhB;WACKjf,WAAWkf,QAAhB;WACKlf,WAAWmf,UAAhB;WACKnf,WAAWof,sCAAhB;WACKpf,WAAWqf,SAAhB;WACKrf,WAAWsf,iBAAhB;WACKtf,WAAWuf,UAAhB;WACKvf,WAAWwf,qBAAhB;WACKxf,WAAWyf,uBAAhB;WACKzf,WAAW0f,4BAAhB;aACOC,uBAAL,CAA6BnsB,EAA7B,EAAiCwqB,IAAjC,EAAuCvS,IAAvC,EAA6C1V,OAA7C;;;WAEGiK,WAAW4f,uBAAhB;WACK5f,WAAW6f,WAAhB;aACOC,8BAAL,CAAoCtsB,EAApC,EAAwCwqB,IAAxC,EAA8CvS,IAA9C,EAAoD1V,OAApD;;;;WAGGgqB,iBAAH,CAAqB/B,IAArB;;;;yBAIN,CACExqB,EADF,EAEEwqB,IAFF,EAGEvS,IAHF,EAIE1V,OAJF,EAKQ;UACAwb,OAAO9F,KAAKuU,OAAL,EAAb;UACMxO,QAAQ/F,KAAKwU,QAAL,EAAd;UACMC,QAAQzU,KAAKwS,gBAAL,EAAd;UACMpnB,mBAAmBrD,GAAGqD,gBAAH,CAAoBd,OAApB,CAAzB;;YACQioB,IAAR;WACOhe,WAAWC,WAAhB;WACKhG,KAAH,CAASwR,KAAKwU,QAAL,EAAT,EAA0BppB,gBAA1B;;;WAEGmJ,WAAWE,eAAhB;aACOigB,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWue,SAHb,EAIEhN,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWG,gBAAhB;aACOggB,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWwe,UAHb,EAIEjN,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWI,2BAAhB;aACO+f,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWwf,qBAHb,EAIEjO,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWK,mBAAhB;aACO8f,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWoe,aAHb,EAIE7M,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWM,gBAAhB;aACO6f,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWqe,UAHb,EAIE9M,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWO,kBAAhB;aACO4f,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWse,YAHb,EAIE/M,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWQ,oBAAhB;aACO2f,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWif,cAHb,EAIE1N,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWS,cAAhB;aACO0f,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWkf,QAHb,EAIE3N,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWU,gBAAhB;aACOyf,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWmf,UAHb,EAIE5N,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWW,2BAAhB;aACOwf,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAW0e,qBAHb,EAIEnN,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWY,4CAAhB;aACOuf,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWof,sCAHb,EAIE7N,IAJF,EAKEC,KALF,EAME3a,gBANF;;;WASGmJ,WAAWa,iCAAhB;aACOsf,2BAAL,CACE3sB,EADF,EAEE0sB,KAFF,EAGElgB,WAAWye,2BAHb,EAIElN,IAJF,EAKEC,KALF,EAME3a,gBANF;;;;WAUGkpB,iBAAH,CAAqB/B,IAArB;;;OAGD/jB,KAAH,CAASwR,KAAKuU,OAAL,EAAT,EAAyBxsB,GAAG4sB,eAAH,CAAmBrqB,OAAnB,CAAzB;;;yBAGF,CACEvC,EADF,EAEEwqB,IAFF,EAGEvS,IAHF,EAIE1V,OAJF,EAKQ;SACDoqB,2BAAL,CACE3sB,EADF,EAEEiY,KAAKwS,gBAAL,EAFF,EAGED,IAHF,EAIEvS,KAAKuU,OAAL,EAJF,EAKEvU,KAAKwU,QAAL,EALF,EAMElqB,OANF;;;gCAUF,CACEvC,EADF,EAEEwqB,IAFF,EAGEvS,IAHF,EAIE1V,OAJF,EAKQ;SACDsqB,kCAAL,CACE7sB,EADF,EAEEiY,KAAKwS,gBAAL,EAFF,EAGED,IAHF,EAIEvS,KAAKuU,OAAL,EAJF,EAKEvU,KAAKwU,QAAL,EALF,EAMElqB,OANF;;;6BAUF,CACEvC,EADF,EAEEC,IAFF,EAGEuqB,IAHF,EAIEzM,IAJF,EAKEC,KALF,EAMEzb,OANF,EAOQ;QACF,CAACA,QAAQI,SAAb,EAAwB;SACnB8D,KAAH,CAASsX,IAAT,EAAexb,OAAf;SACGkE,KAAH,CAASuX,KAAT,EAAgBzb,OAAhB;;;;UAIIkE,QAAQ,CACZqmB,UADY,EAEZC,WAFY,KAGT;SACAtmB,KAAH,CAASsX,IAAT,EAAexb,OAAf;SACG9B,UAAH,CAAcsd,IAAd,EAAoBxb,OAApB,EAA6BuqB,WAAW;cAAQ9sB,GAAG6D,OAAH,CAAWka,IAAX;OAAnB,CAA7B;SACGtX,KAAH,CAASuX,KAAT,EAAgBzb,OAAhB;SACG9B,UAAH,CACEud,KADF,EAEEzb,OAFF,EAGE,CAACwqB,eAAeD,UAAhB,EAA4B;cAAQ9sB,GAAG6D,OAAH,CAAWma,KAAX;OAApC,CAHF;KAPF;;UAcMgP,eAAe,MAAMvmB,MAAMzG,GAAGU,OAAH,CAAWse,QAAjB,CAA3B;;UAEMN,WAAW1e,GAAG6D,OAAH,CAAWka,IAAX,CAAjB;UACMY,YAAY3e,GAAG6D,OAAH,CAAWma,KAAX,CAAlB;UAEMiP,kBACJnX,YAAA,CAAuB4I,QAAvB,KAAoC5I,YAAA,CAAuB6I,SAAvB,CADtC;;YAGQ6L,IAAR;WACOhe,WAAWoe,aAAhB;;WAEKhqB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWqe,UAAhB;;WAEKjqB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWse,YAAhB;;WAEKlqB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWue,SAAhB;YACMkC,eAAJ,EAAqB;;aAEhBrsB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;aACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;SAHF,MAIO,IACLnJ,YAAA,CAAuB4I,QAAvB,KACA5I,YAAA,CAAuB6I,SAAvB,CAFK,EAGL;gBACM,MAAM3e,GAAGU,OAAH,CAAW2V,SAAvB;aACGzV,MAAH,CAAUX,IAAV,EAAgB,KAAhB;aACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgO,YAAxC;SANK,MAOA,IAAIoH,YAAA,CAAuB4I,QAAvB,CAAJ,EAAsC;gBACrC,MAAM1e,GAAGU,OAAH,CAAW2V,SAAvB,EAAkCrW,GAAGU,OAAH,CAAW0Y,QAA7C;aACGxY,MAAH,CAAUX,IAAV,EAAgB,KAAhB;aACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgO,YAAxC;SAHK,MAIA,IAAIoH,YAAA,CAAuB6I,SAAvB,CAAJ,EAAuC;gBACtC3e,GAAGU,OAAH,CAAW0Y,QAAjB,EAA2B,MAAMpZ,GAAGU,OAAH,CAAW2V,SAA5C;aACGzV,MAAH,CAAUX,IAAV,EAAgB,KAAhB;aACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgO,YAAxC;SAHK,MAIA;;gBAEC1O,GAAGU,OAAH,CAAW0W,WAAjB,EAFK;;aAIFxW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJK;;aAMFW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANK;;aAQFW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARK;;aAUFQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW+E,QAAxC,EAVK;;aAYF7E,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAZK;;aAcFQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW+E,QAAxC;aACGhF,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;uBACD,MAAM;;iBAEZC,MAAH,CAAUX,IAAV,EAAgB,QAAhB;aAHU;sBAKF,MAAM;;iBAEXQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0Y,QAAX,CAAoB;sBAAQpZ,GAAG6D,OAAH,CAAWma,KAAX;eAA5B,CAHF,EAFc;;iBAQXpd,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARc;;iBAUXQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW0Y,QAAX,CAAoB;sBAAQpZ,GAAG6D,OAAH,CAAWka,IAAX;eAA5B,CAHF,EAVc;;iBAgBXnd,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBc;;iBAkBXW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAlBc;;iBAoBXQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgO,YAAxC;aAzBU;uBA2BD,MAAM;;iBAEZjO,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;sBAAQhf,GAAG6D,OAAH,CAAWma,KAAX;eAA5B,CAHF,EAFe;;iBAQZpd,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EARe;;iBAUZQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;sBAAQhf,GAAG6D,OAAH,CAAWka,IAAX;eAA5B,CAHF,EAVe;;iBAgBZnd,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBe;;iBAkBZW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAlBe;;iBAoBZQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;WA/CJ,CAHF;;;;;WAwDCzS,WAAWwe,UAAhB;;WAEKpqB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWye,2BAAhB;;WAEKrqB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWof,sCAAhB;;WAEKhrB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAW0e,qBAAhB;;WAEKtqB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAW2e,aAAhB;WACK1qB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwsB,QAAX,CAAoB;qBAAa,IAAb;cAAA;;SAApB,CAHF;WAKGzsB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;WAEG3gB,WAAW4e,mBAAhB;WACK3qB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwsB,QAAX,CAAoB;qBAAa,KAAb;gBAA0BlP,KAA1B;iBAAwCD;SAA5D,CAHF;WAKGnd,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;WAEG3gB,WAAW6e,gBAAhB;WACK5qB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwsB,QAAX,CAAoB;qBAAa,KAAb;gBAA0BlP,KAA1B;iBAAwCD;SAA5D,CAHF;WAKGtd,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;WAEG3gB,WAAW8e,sBAAhB;WACK7qB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWwsB,QAAX,CAAoB;qBAAa,IAAb;cAAA;;SAApB,CAHF;WAKGtsB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;WAEG3gB,WAAW+e,sBAAhB;WACK9qB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0sB,YAAX,CAAwB;cAAA;;SAAxB,CAA7B;WACGxsB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;WAEG3gB,WAAWgf,iBAAhB;WACK/qB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0sB,YAAX,CAAwB;cAAA;;SAAxB,CAA7B;WACG3sB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;WAEG3gB,WAAWif,cAAhB;;WAEK7qB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWkf,QAAhB;;WAEK9qB,MAAH,CAAUX,IAAV,EAAgB,IAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWmf,UAAhB;;WAEK/qB,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWqf,SAAhB;WACKlhB,iBAAH,CAAqB1K,IAArB;;;WAEGuM,WAAWsf,iBAAhB;;WAEKrlB,KAAH,CAASsX,IAAT,EAAexb,OAAf,EAFF;;WAIKkE,KAAH,CAASuX,KAAT,EAAgBzb,OAAhB,EAJF;;WAMK9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkF,UAAxC,EANF;;WAQKnF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;WAEG3gB,WAAWuf,UAAhB;WACKnrB,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;WAEGuM,WAAWwf,qBAAhB;WACKrhB,iBAAH,CAAqB1K,IAArB;;;WAEGuM,WAAWyf,uBAAhB;WACKxrB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWoe,kBAAX,CAA8B;cAAA;;SAA9B,CAHF;WAKGre,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;WAEG3gB,WAAW0f,4BAAhB;WACKzrB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWoe,kBAAX,CAA8B;cAAA;;SAA9B,CAHF;WAKGle,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;;WAGGZ,iBAAH,CAAqB/B,IAArB;;;;oCAIN,CACExqB,EADF,EAEEC,IAFF,EAGEuqB,IAHF,EAIEzM,IAJF,EAKEC,KALF,EAMEzb,OANF,EAOQ;YACEioB,IAAR;WACOhe,WAAW4f,uBAAhB;;aACK3rB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;uBACD,MAAM;;iBAEZ8F,KAAH,CAASsX,IAAT,EAAe/d,GAAGqD,gBAAH,CAAoBd,OAApB,CAAf;;kBACIA,QAAQI,SAAZ,EAAuB;;mBAElB/B,MAAH,CAAUmd,IAAV,EAAgB,KAAhB;eALa;;;iBAQZtd,UAAH,CACEsd,IADF,EAEE/d,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWmC,SAAX,CAAqB;sBAAQ7C,GAAG6D,OAAH,CAAWka,IAAX;eAA7B,CAHF;aATU;sBAeF,MAAM;kBACVxb,QAAQI,SAAZ,EAAuB;mBAClB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;iBAECwG,KAAH,CAASuX,KAAT,EAAgBzb,OAAhB;;WAnBJ,CAHF;;;;WA4BGiK,WAAW6f,WAAhB;;aACK5rB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;uBACD,MAAM;;iBAEZ8F,KAAH,CAASsX,IAAT,EAAe/d,GAAGqD,gBAAH,CAAoBd,OAApB,CAAf;;kBACIA,QAAQI,SAAZ,EAAuB;;mBAElB/B,MAAH,CAAUmd,IAAV,EAAgB,KAAhB;eALa;;;iBAQZtd,UAAH,CACEsd,IADF,EAEE/d,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWmC,SAAX,CAAqB;sBAAQ7C,GAAG6D,OAAH,CAAWka,IAAX;eAA7B,CAHF;aATU;uBAeD,MAAM;kBACXxb,QAAQI,SAAZ,EAAuB;mBAClB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;iBAECwG,KAAH,CAASuX,KAAT,EAAgBzb,OAAhB;;WAnBJ,CAHF;;;;;WA6BGgqB,iBAAH,CAAqB/B,IAArB;;;;;;AClkBD,MAAe6C,sBAAf,SAA8ChrB,YAA9C,CAEL;;;;;;;WAGA,CACErC,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;QACFA,QAAQI,SAAZ,EAAuB;SAClBoT,eAAH,CAAmBkC,IAAnB,EAAyB,KAAKE,KAA9B;SACG1X,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;;;AAKN,AAAO,MAAMG,0BAAN,SAAyCD,sBAAzC,CAAgE;;;;kEAClC7gB,WAAW+gB,WADuB,kCAEnD,IAFmD;;;;AAKvE,AAAO,MAAMC,2BAAN,SAA0CH,sBAA1C,CAAiE;;;;kEACnC7gB,WAAWihB,YADwB,kCAEpD,KAFoD;;;;;ACAxE,MAAeC,iBAAf,CAAwD;;;;;aAiCtD,GAA6B;WACpB,KAAKhpB,IAAZ;;;;;AAIJ,MAAMipB,SAAN,SAAwBD,iBAAxB,CAA0C;;;;iEAClB,MADkB;;;YAGxC,CACE1tB,EADF,EAEEC,IAFF,EAGE0D,IAHF,EAIW;WACF,KAAP;;;QAGF,CAAc3D,EAAd,EAAiCC,IAAjC,EAA6C0D,IAA7C,EAA4E;WACnE,KAAP;;;eAGF,CACE3D,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACA,IAAIlB,KAAJ,CAAU,kCAAV,CAAN;;;gBAGF,CACErB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKQ;UACA,IAAItC,KAAJ,CAAU,gCAAV,CAAN;;;cAGF,CACErB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;OACHntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC;;;;;AAIJ,MAAMuqB,YAAY,IAAIF,SAAJ,EAAlB;;AAEA,MAAMG,WAAN,SAA0BJ,iBAA1B,CAA4C;;;;kEACpB,QADoB;;;YAG1C,CACE1tB,EADF,EAEEC,IAFF,EAGE0D,IAHF,EAIW;WACFmS,YAAA,CAAuBnS,IAAvB,CAAP;;;QAGF,CAAc3D,EAAd,EAAiCC,IAAjC,EAA6C0D,IAA7C,EAA4E;WACnEmS,QAAA,CAAmBnS,IAAnB,CAAP;;;eAGF,CACE3D,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgF,QAAxC;;;gBAGF,CACE1F,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACF,CAACA,MAAL,EAAa;SACRntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW0V,SAAxC;;;;cAIJ,CACEpW,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACF,CAACA,MAAL,EAAa;SACRntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;;;;AAKN,MAAM8O,cAAc,IAAID,WAAJ,EAApB;;AAEA,MAAME,WAAN,SAA0BN,iBAA1B,CAA4C;;;;kEACpB,QADoB;;;YAG1C,CACE1tB,EADF,EAEEC,IAFF,EAGE0D,IAHF,EAIW;WACFmS,YAAA,CAAuBnS,IAAvB,CAAP;;;QAGF,CAAc3D,EAAd,EAAiCC,IAAjC,EAA6C0D,IAA7C,EAA4E;WACnEmS,QAAA,CAAmBnS,IAAnB,CAAP;;;eAGF,CACE3D,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW+E,QAAxC;;;gBAGF,CACEzF,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACF,CAACA,MAAL,EAAa;SACRntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2V,SAAxC;;;;cAIJ,CACErW,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACF,CAACA,MAAL,EAAa;SACRntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgO,YAAxC;;;;;;AAKN,MAAMuf,cAAc,IAAID,WAAJ,EAApB;;AAEA,MAAME,YAAN,SAA2BR,iBAA3B,CAA6C;;;;kEACrB,SADqB;;;YAG3C,CACE1tB,EADF,EAEEC,IAFF,EAGE0D,IAHF,EAIW;WACFmS,aAAA,CAAwBnS,IAAxB,CAAP;;;QAGF,CAAc3D,EAAd,EAAiCC,IAAjC,EAA6C0D,IAA7C,EAA4E;WACnEmS,SAAA,CAAoBnS,IAApB,CAAP;;;eAGF,CACE3D,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8E,SAAxC;;;gBAGF,CACExF,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACF,CAACA,MAAL,EAAa;SACRntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyV,UAAxC;;;;cAIJ,CACEnW,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACF,CAACA,MAAL,EAAa;SACRntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWysB,aAAxC;;;;;;AAKN,MAAMgB,eAAe,IAAID,YAAJ,EAArB;;AAEA,MAAME,mBAAN,SAAkCV,iBAAlC,CAAoD;cAGtChpB,IAAZ,EAA2C;;;;;SAEpCA,IAAL,GAAYA,IAAZ;;;YAGF,CACE1E,EADF,EAEEC,IAFF,EAGE0D,IAHF,EAIW;WACF3D,GAAGquB,YAAH,CAAgBpuB,IAAhB,EAAsB0D,IAAtB,EAA4B,KAAKe,IAAjC,CAAP;;;QAGF,CAAc1E,EAAd,EAAiCC,IAAjC,EAA6C0D,IAA7C,EAA4E;WACnE3D,GAAGsuB,QAAH,CAAYruB,IAAZ,EAAkB0D,IAAlB,EAAwB,KAAKe,IAA7B,CAAP;;;eAGF,CACE1E,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW6tB,qBAAX,CAAiC;YAAQ,KAAK7pB;KAA9C,CAHF;;;gBAOF,CACE1E,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACFA,MAAJ,EAAY;YACJ,IAAIvsB,KAAJ,CACJ,wEADI,CAAN;;;OAICZ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8tB,yBAAxC;;;cAGF,CACExuB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACFA,MAAJ,EAAY;YACJ,IAAIvsB,KAAJ,CACJ,wEADI,CAAN;;;OAICZ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW+tB,uBAAX,CAAmC;YAAQ,KAAK/pB;KAAhD,CAHF;;;;;AAQJ,MAAMgqB,eAAe,IAAIN,mBAAJ,CAAwB,aAAxB,CAArB;AACA,MAAMO,aAAa,IAAIP,mBAAJ,CAAwB,WAAxB,CAAnB;AACA,MAAMQ,iBAAiB,IAAIR,mBAAJ,CAAwB,eAAxB,CAAvB;AACA,MAAMS,aAAa,IAAIT,mBAAJ,CAAwB,WAAxB,CAAnB;AACA,MAAMU,gBAAgB,IAAIV,mBAAJ,CAAwB,cAAxB,CAAtB;AACA,MAAMW,cAAc,IAAIX,mBAAJ,CAAwB,YAAxB,CAApB;AACA,MAAMY,aAAa,IAAIZ,mBAAJ,CAAwB,WAAxB,CAAnB;AACA,MAAMa,cAAc,IAAIb,mBAAJ,CAAwB,YAAxB,CAApB;AACA,MAAMc,mBAAmB,IAAId,mBAAJ,CAAwB,iBAAxB,CAAzB;AACA,MAAMe,iBAAiB,IAAIf,mBAAJ,CAAwB,eAAxB,CAAvB;AACA,MAAMgB,sBAAsB,IAAIhB,mBAAJ,CAAwB,oBAAxB,CAA5B;AACA,MAAMiB,uBAAuB,IAAIjB,mBAAJ,CAAwB,qBAAxB,CAA7B;AAEA,AAAO,MAAMkB,wBAAwB,CACnCZ,YADmC,EAEnCC,UAFmC,EAGnCC,cAHmC,EAInCC,UAJmC,EAKnCC,aALmC,EAMnCC,WANmC,EAOnCC,UAPmC,EAQnCC,WARmC,EASnCC,gBATmC,EAUnCC,cAVmC,EAWnCC,mBAXmC,EAYnCC,oBAZmC,EAanC5sB,GAbmC,CAa9B0V,KAAD,IAAWA,MAAMzT,IAbc,CAA9B;;AAeP,MAAM6qB,WAAN,SAA0B7B,iBAA1B,CAA4C;;;;kEAClB,QADkB;;;YAG1C,CACE1tB,EADF,EAEEC,IAFF,EAGE0D,IAHF,EAIW;WACF3D,GAAGquB,YAAH,CAAgBpuB,IAAhB,EAAsB0D,IAAtB,EAA4B,KAAKe,IAAjC,CAAP;;;QAGF,CAAc1E,EAAd,EAAiCC,IAAjC,EAA6C0D,IAA7C,EAA4E;WACnE3D,GAAGsuB,QAAH,CAAYruB,IAAZ,EAAkB0D,IAAlB,EAAwB,KAAKe,IAA7B,CAAP;;;eAGF,CACE1E,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWiF,iBAAX,CAA6B;gBAAY,KAAKjB;KAA9C,CAHF;OAKGjE,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkF,UAAxC;;;gBAGF,CACE5F,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;OACHntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWmF,YAAxC;;QACI+nB,MAAJ,EAAY;oBACI5tB,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB,EAAiCiC,iBAAiBsB,MAAlD;;;;cAIJ,CACE9F,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACFA,MAAJ,EAAY;sBACM5tB,EAAhB,EAAoBC,IAApB,EAA0BsC,OAA1B;;;OAEC9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqF,UAAxC;;;;;AAIJ,MAAMypB,cAAc,IAAID,WAAJ,EAApB;;AAEA,MAAME,UAAN,SAAyB/B,iBAAzB,CAA2C;cAI7BrV,SAAZ,EAAsE;;;;;;;SAE/D3T,IAAL,GAAa,SAAQ2T,UAAU3T,IAAK,GAApC;SACK2T,SAAL,GACE,OAAOA,SAAP,KAAqB,UAArB,GAAkCA,SAAlC,GAA8C,MAAMA,SADtD;;;YAIF,CACErY,EADF,EAEEC,IAFF,EAGE0D,IAHF,EAIW;WAEPmS,WAAA,CAAsBnS,IAAtB,KACA,CAACmS,WAAA,CAAsBnS,IAAtB,CADD,IAEAA,QAAQ,IAFR,IAGA,KAAK0U,SAAL,GAAiBqX,UAAjB,CAA4B1vB,EAA5B,EAAgCC,IAAhC,EAAsC0D,KAAKgsB,YAAL,EAAtC,CAJF;;;QAQF,CAAc3vB,EAAd,EAAiCC,IAAjC,EAA6C0D,IAA7C,EAA4E;WAExEmS,OAAA,CAAkBnS,IAAlB,KACA,CAACmS,OAAA,CAAkBnS,IAAlB,CADD,IAEAA,QAAQ,IAFR,IAGA,KAAK0U,SAAL,GAAiBrU,MAAjB,CAAwBhE,EAAxB,EAA4BC,IAA5B,EAAkC0D,KAAKgsB,YAAL,EAAlC,CAJF;;;eAQF,CACE3vB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWiF,iBAAX,CAA6B;gBAAY;KAAzC,CAHF;OAKGlF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkF,UAAxC;;;gBAGF,CACE5F,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;OACHntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsF,WAAxC;OACGvF,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWuF,MAAX,CAAkB;WACX,MAAM;aACJoS,SAAL,GAAiBuX,cAAjB,CACE5vB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,QAAQ,IAAR,GAAeA,IAAf,GAAsBA,KAAKgsB,YAAL,EAJxB,EAKE/B,MALF;;KAFJ,CAHF;;QAeIA,MAAJ,EAAY;oBACI5tB,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB,EAAiCiC,iBAAiB0B,KAAlD;;;;cAIJ,CACElG,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACFA,MAAJ,EAAY;sBACM5tB,EAAhB,EAAoBC,IAApB,EAA0BsC,OAA1B;;;OAEC9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWuF,MAAX,CAAkB;WACX,MAAM;aACJoS,SAAL,GAAiBwX,YAAjB,CACE7vB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,QAAQ,IAAR,GAAeA,IAAf,GAAsBA,KAAKgsB,YAAL,EAJxB,EAKE/B,MALF;;KAFJ,CAHF;OAeGntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyF,SAAxC;;;;;AAIJ,MAAM2pB,UAAN,SAAyBpC,iBAAzB,CAA2C;cAI7BrV,SAAZ,EAAsE;;;;;;;SAE/D3T,IAAL,GAAY,KAAZ;SACK2T,SAAL,GACE,OAAOA,SAAP,KAAqB,UAArB,GAAkCA,SAAlC,GAA8C,MAAMA,SADtD;;;YAIF,CACErY,EADF,EAEEC,IAFF,EAGE0D,IAHF,EAIW;WAEPmS,WAAA,CAAsBnS,IAAtB,KACAA,QAAQ,IADR,IAEAA,KACGosB,gBADH,GAEGzd,KAFH,CAEU0d,SAAD,IAAe,KAAK3X,SAAL,GAAiBqX,UAAjB,CAA4B1vB,EAA5B,EAAgCC,IAAhC,EAAsC+vB,SAAtC,CAFxB,CAHF;;;QASF,CAAchwB,EAAd,EAAiCC,IAAjC,EAA6C0D,IAA7C,EAA4E;WAExEmS,OAAA,CAAkBnS,IAAlB,KACAA,QAAQ,IADR,IAEAA,KACGosB,gBADH,GAEGzd,KAFH,CAEU0d,SAAD,IAAe,KAAK3X,SAAL,GAAiBrU,MAAjB,CAAwBhE,EAAxB,EAA4BC,IAA5B,EAAkC+vB,SAAlC,CAFxB,CAHF;;;eASF,CACEhwB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWiF,iBAAX,CAA6B;gBAAY;KAAzC,CAHF;OAKGlF,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWkF,UAAxC;;;gBAGF,CACE5F,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;UACA,IAAIvsB,KAAJ,CAAU,iBAAV,CAAN;;;cAGF,CACErB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;QACFjqB,QAAQ,IAAZ,EAAkB;SACbsK,WAAH,CACEhO,IADF,EAEE,iEAFF,EAGEgM,eAAegkB,YAHjB;KADF,MAMO;;SAEFrvB,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EAFK;;SAIFW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJK;;SAMFY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EANK;;SAQFW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;WACK,MAAM+vB,SAAX,IAAwBrsB,KAAKosB,gBAAL,EAAxB,EAAiD;;WAE5CnvB,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAF+C;;WAI5CW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAJ+C;;aAM1CoY,SAAL,GAAiBwX,YAAjB,CAA8B7vB,EAA9B,EAAkCC,IAAlC,EAAwCsC,OAAxC,EAAiDytB,SAAjD,EAA4DpC,MAA5D,EAN+C;;WAQ5ChtB,MAAH,CAAUX,IAAV,EAAgB,QAAhB;OAjBG;;;SAoBFQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWyF,SAAxC;;;;;;AAKN,MAAM+pB,UAAN,SAAyBxC,iBAAzB,CAA2C;cAI7ByC,UAAZ,EAA6C;;;;;;;SAEtCzrB,IAAL,GAAYyrB,WAAW1tB,GAAX,CAAgB4V,SAAD,IAAeA,UAAU3T,IAAxC,EAA8C0rB,IAA9C,CAAmD,KAAnD,CAAZ;SACKD,UAAL,GAAkBA,UAAlB;;;YAGF,CACEnwB,EADF,EAEEC,IAFF,EAGE0D,IAHF,EAIW;WAENmS,OAAA,CAAkBnS,IAAlB,KACCA,QAAQ,IADT,IAECA,KACGmO,aADH,GAEGQ,KAFH,CAEUC,SAAD,IACL,KAAK4d,UAAL,CAAgBpe,IAAhB,CAAsBsG,SAAD,IACnBA,UAAUqX,UAAV,CAAqB1vB,EAArB,EAAyBC,IAAzB,EAA+BsS,SAA/B,CADF,CAHJ,CAFF,IASC,CAACuD,OAAA,CAAkBnS,IAAlB,CAAD,IACCA,QAAQ,IADT,IAEC,KAAKwsB,UAAL,CAAgBpe,IAAhB,CAAsBsG,SAAD,IACnBA,UAAUqX,UAAV,CAAqB1vB,EAArB,EAAyBC,IAAzB,EAA+B0D,IAA/B,CADF,CAZJ;;;QAkBF,CAAc3D,EAAd,EAAiCC,IAAjC,EAA6C0D,IAA7C,EAA4E;WAEvEmS,OAAA,CAAkBnS,IAAlB,KACCA,QAAQ,IADT,IAECA,KACGmO,aADH,GAEGQ,KAFH,CAEUC,SAAD,IACL,KAAK4d,UAAL,CAAgBpe,IAAhB,CAAsBsG,SAAD,IACnBA,UAAUrU,MAAV,CAAiBhE,EAAjB,EAAqBC,IAArB,EAA2BsS,SAA3B,CADF,CAHJ,CAFF,IASC,CAACuD,OAAA,CAAkBnS,IAAlB,CAAD,IACCA,QAAQ,IADT,IAEC,KAAKwsB,UAAL,CAAgBpe,IAAhB,CAAsBsG,SAAD,IAAeA,UAAUrU,MAAV,CAAiBhE,EAAjB,EAAqBC,IAArB,EAA2B0D,IAA3B,CAApC,CAZJ;;;eAgBF,CACE3D,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACA,IAAIlB,KAAJ,CAAU,wCAAV,CAAN;;;gBAGF,CACErB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;UACAyC,YAAY,KAAKF,UAAL,CAAgBvK,IAAhB,CAAsBvN,SAAD,IACrCA,UAAUqX,UAAV,CAAqB1vB,EAArB,EAAyBC,IAAzB,EAA+B0D,IAA/B,CADgB,CAAlB;;QAGI0sB,aAAa,IAAjB,EAAuB;UACjBzC,MAAJ,EAAY;WACPntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4vB,gBAAxC;OADF,MAEO;WACF7vB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW4D,OAAX,CAAmB;iBACV,KAAK6rB,UAAL,CAAgB1tB,GAAhB,CAAqB4V,SAAD,KAAgB;oBAChCkY,SAAD,IACNlY,UAAUrU,MAAV,CAAiBhE,EAAjB,EAAqBC,IAArB,EAA2BswB,SAA3B,CAFuC;2BAGzBtsB,YAAD,IACboU,UAAU9T,aAAV,CAAwBvE,EAAxB,EAA4BC,IAA5B,EAAkCgE,YAAlC,CAJuC;qBAK/BA,YAAD,IACPoU,UAAUuX,cAAV,CAAyB5vB,EAAzB,EAA6BC,IAA7B,EAAmCgE,YAAnC,EAAiDN,IAAjD,EAAuDiqB,MAAvD;WANuB,CAApB;SADT,CAHF;;KAJJ,MAmBO;gBACKgC,cAAV,CAAyB5vB,EAAzB,EAA6BC,IAA7B,EAAmCsC,OAAnC,EAA4CoB,IAA5C,EAAkDiqB,MAAlD;;;;cAIJ,CACE5tB,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKEiqB,SAAkB,KALpB,EAMQ;UACAyC,YAAY,KAAKF,UAAL,CAAgBvK,IAAhB,CAAsBvN,SAAD,IACrCA,UAAUqX,UAAV,CAAqB1vB,EAArB,EAAyBC,IAAzB,EAA+B0D,IAA/B,CADgB,CAAlB;;QAGI0sB,aAAa,IAAjB,EAAuB;UACjBzC,MAAJ,EAAY;WACPntB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW8vB,kBAAxC;OADF,MAEO;WACFviB,WAAH,CACEhO,IADF,EAEE,iEAFF,EAGEgM,eAAegkB,YAHjB;;KAJJ,MAUO;gBACKJ,YAAV,CAAuB7vB,EAAvB,EAA2BC,IAA3B,EAAiCsC,OAAjC,EAA0CoB,IAA1C,EAAgDiqB,MAAhD;;;;;;AAKN,MAAM6C,aAAa,IAAIP,UAAJ,CAAe,CAACV,WAAD,EAAcvB,WAAd,CAAf,CAAnB;AAEA,MAAMyC,eAAe,IAAIR,UAAJ,CAAe,CAClCV,WADkC,EAElCzB,WAFkC,EAGlCE,WAHkC,EAIlCE,YAJkC,CAAf,CAArB;AAOA,AAAO,MAAMwC,SAAN,CAAgB;cAEFjsB,IADnB,EAEmBksB,WAFnB,EAGE;;;SACKlsB,IAAL,GAAYA,IAAZ;SACKksB,WAAL,GAAmBA,WAAnB;;;aAGF,GAA6B;WACpB,KAAKlsB,IAAZ;;;eAGF,GAA+B;WACtB,KAAKksB,WAAZ;;;;AAIJ,MAAMC,8BAA8B,IAAIF,SAAJ,CAClC,wBADkC,EAElC,uEAFkC,CAApC;AAIA,MAAMG,+BAA+B,IAAIH,SAAJ,CACnC,yBADmC,EAElC;;EAFkC,CAArC;AAMA,MAAMI,yBAAyB,IAAIJ,SAAJ,CAC7B,mBAD6B,EAE7B,+EACG,GAAEE,4BAA4BG,WAA5B,EAA0C,MAAKF,6BAA6BE,WAA7B,EAA2C,EAHlE,CAA/B;AAMA;AAMA,MAAMC,YAAN,SAA2BvD,iBAA3B,CAA6C;cAIxBwD,kBAA2B,KAD9C,EAEmBC,mBAA4B,KAF/C,EAGE;;;;;;;SAEKzsB,IAAL,GAAYqsB,uBAAuBC,WAAvB,EAAZ;;;MAGErtB,IAAJ,GAA8B;WACrB,IAAIusB,UAAJ,CAAe,CACpB/B,YADoB,EAEpBF,WAFoB,EAGpBF,WAHoB,EAIpByB,WAJoB,EAKpB,IAAIC,UAAJ,CAAe,MAAM,KAAK9rB,IAA1B,CALoB,CAAf,CAAP;;;eASF,GAA+B;WACtBotB,uBAAuBK,aAAvB,EAAP;;;YAGF,CACEpxB,EADF,EAEEC,IAFF,EAGE0D,IAHF,EAIW;WACF,KAAKA,IAAL,CAAU+rB,UAAV,CAAqB1vB,EAArB,EAAyBC,IAAzB,EAA+B0D,IAA/B,CAAP;;;QAGF,CAAc3D,EAAd,EAAiCC,IAAjC,EAA6C0D,IAA7C,EAA4E;WACnE,KAAKA,IAAL,CAAUK,MAAV,CAAiBhE,EAAjB,EAAqBC,IAArB,EAA2B0D,IAA3B,CAAP;;;eAGF,CACE3D,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;SACDoB,IAAL,CAAUY,aAAV,CAAwBvE,EAAxB,EAA4BC,IAA5B,EAAkCsC,OAAlC;;;gBAGF,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKQ;SACDA,IAAL,CAAUisB,cAAV,CAAyB5vB,EAAzB,EAA6BC,IAA7B,EAAmCsC,OAAnC,EAA4CoB,IAA5C,EAAkD,IAAlD;;QAEI,KAAKutB,eAAT,EAA0B;SACrBG,WAAH,CAAepxB,IAAf,EAAqB,uBAArB;;;;cAIJ,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIE+uB,MAJF,EAKQ;QACF3tB,OAAO2tB,MAAX;;QAEE3tB,QAAQ,IAAR,IACA,KAAKwtB,gBADL,IAEAxtB,KAAKkO,WAAL,EAFA,IAGAlO,KACGmO,aADH,GAEGC,IAFH,CAESQ,SAAD,IAAeuD,eAAA,CAA0BvD,SAA1B,CAFvB,CAJF,EAOE;aACO5O,KACJmO,aADI,GAEJ8T,IAFI,CAEErT,SAAD,IAAe,CAACuD,eAAA,CAA0BvD,SAA1B,CAFjB,CAAP;;;UAKIgf,cAAc,MAAM;UACpB,KAAKL,eAAT,EAA0B;WACrBG,WAAH,CAAepxB,IAAf,EAAqB,yBAArB;;;WAGG0D,IAAL,CAAUksB,YAAV,CAAuB7vB,EAAvB,EAA2BC,IAA3B,EAAiCsC,OAAjC,EAA0CoB,IAA1C,EAAgD,IAAhD;KALF;;QAQI,KAAKwtB,gBAAT,EAA2B;SACtB1wB,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;mBACD,MAAM;;aAEZC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFe;;aAIZW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJe;;aAMZY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EANe;;aAQZW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;SATU;kBAWF,MAAM;;aAEXW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAFc;;aAIXQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC;SAfU;mBAiBD,MAAM;;;OAjBnB,CAHF;KADF,MA0BO;;;;;cAKT,GAAoC;WAC3B,IAAI2tB,YAAJ,CAAiB,IAAjB,EAAuB,KAAKE,gBAA5B,CAAP;;;YAGF,GAAkC;WACzB,IAAIF,YAAJ,CAAiB,KAAKC,eAAtB,EAAuC,IAAvC,CAAP;;;;;AAIJ,MAAMM,oBAAoB,IAAIP,YAAJ,EAA1B;AAEA,AAAO,MAAMQ,eAAN,CAAsB;cAIf/sB,IAAZ,EAA0Bf,IAA1B,EAA6C;;;;;SACtCe,IAAL,GAAYA,IAAZ;SACKf,IAAL,GAAYA,IAAZ;;;gBAGF,CACE3D,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEoB,IAJF,EAKQ;SACDA,IAAL,CAAUisB,cAAV,CAAyB5vB,EAAzB,EAA6BC,IAA7B,EAAmCsC,OAAnC,EAA4CoB,IAA5C;;;aAGF,GAA6B;WACnB,GAAE,KAAKe,IAAK,KAAI,KAAKf,IAAL,CAAUqtB,WAAV,EAAwB,EAAhD;;;;AAoBJ,AAAO,MAAMU,aAAN,CAAuC;cAKhCnvB,OAAZ,EAA2C;;;;;;;SACpCmC,IAAL,GAAYnC,QAAQmC,IAApB;SACK2B,IAAL,GAAY9D,QAAQ8D,IAAR,IAAgB,EAA5B;SACKsrB,UAAL,GAAkBpvB,QAAQovB,UAAR,IAAsB9D,SAAxC;;;eAGF,GAA+B;UACvBxnB,OAAO,CAAE,UAAS,KAAK3B,IAAK,GAArB,EAAyB4X,MAAzB,CACX,KAAKjW,IAAL,CAAU5D,GAAV,CAAe+D,GAAD,IAASA,IAAIwqB,WAAJ,EAAvB,CADW,CAAb;WAGQ,oBAAmB3qB,KAAK+pB,IAAL,CACzB,IADyB,CAEzB,MAAK,KAAKuB,UAAL,CAAgBX,WAAhB,EAA8B,GAFrC;;;YAKF,CACEhxB,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBrD,GAAG0D,aAAH,CAAiBN,SAAjB,CAApB,CAAhB;UACMiD,OAAO,CAAC,GAAGpG,KAAKqG,YAAL,GAAoBsrB,KAApB,CAA0B,CAA1B,CAAJ,EAAkCrrB,OAAlC,EAAb;;SACK,MAAM,CAAC+D,GAAD,EAAM9D,GAAN,CAAX,IAAyBH,KAAKwrB,OAAL,EAAzB,EAAyC;SACpCprB,KAAH,CAASD,GAAT,EAAcjE,OAAd;WACK8D,IAAL,CAAUA,KAAKlC,MAAL,GAAcmG,GAAd,GAAoB,CAA9B,EAAiCslB,cAAjC,CACE5vB,EADF,EAEEwG,GAFF,EAGEjE,OAHF,EAIEvC,GAAG6D,OAAH,CAAW2C,GAAX,CAJF;;;OAQC6qB,WAAH,CAAepxB,IAAf,EAAqB,KAAKyE,IAA1B;;QAEItB,UAAUT,SAAd,EAAyB;WAClBgvB,UAAL,CAAgB9B,YAAhB,CAA6B7vB,EAA7B,EAAiCC,IAAjC,EAAuCsC,OAAvC,EAAgDa,UAAUQ,IAA1D;KADF,MAEO,IAAI,KAAK+tB,UAAL,KAAoB9D,SAAxB,EAAmC;SACrCjtB,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;AAKN,AAAO,MAAM6xB,WAAW;4BACI,IAAIJ,aAAJ,CAAkB;UACpC,wBADoC;gBAE9B3D;GAFY,CADJ;8BAKM,IAAI2D,aAAJ,CAAkB;UACtC,0BADsC;UAEtC,CAAC,IAAID,eAAJ,CAAoB,SAApB,EAA+BjC,WAA/B,CAAD,CAFsC;gBAGhCrB;GAHc,CALN;wBAUA,CAAC,MAAM;UACrBzpB,OAAO,oBAAb;UACM2T,YAAY,IAAI6X,UAAJ,CAAe,CAC/BV,WAD+B,EAE/BzB,WAF+B,EAG/BE,WAH+B,EAI/BE,YAJ+B,CAAf,CAAlB;UAMM4D,YAAY,IAAItC,UAAJ,CAAepX,SAAf,CAAlB;UACMsZ,aAAa9D,SAAnB;WACO;UAAA;;sBAEmB;cAChBmE,MAAMD,UAAUf,WAAV,EAAZ;eACQ,2BAA0BtsB,IAAK,eAAcstB,GAAI,MAAKL,WAAWX,WAAX,EAAyB,GAAvF;OAJG;;iBAOHhxB,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;cACAb,UAAUvC,GAAGqD,gBAAH,CAAoBrD,GAAG0D,aAAH,CAAiBN,SAAjB,CAApB,CAAhB;cACMiD,OAAO,CAAC,GAAGpG,KAAKqG,YAAL,GAAoBsrB,KAApB,CAA0B,CAA1B,CAAJ,EAAkCrrB,OAAlC,EAAb;;aACK,MAAMC,GAAX,IAAkBH,IAAlB,EAAwB;aACnBI,KAAH,CAASD,GAAT,EAAcjE,OAAd;oBACUqtB,cAAV,CAAyB5vB,EAAzB,EAA6BwG,GAA7B,EAAkCjE,OAAlC,EAA2CvC,GAAG6D,OAAH,CAAW2C,GAAX,CAA3C;SALI;;;WASH3F,WAAH,CAAeZ,IAAf,EAAqBoG,KAAKlC,MAA1B,EATM;;WAWHvD,MAAH,CAAUX,IAAV,EAAgB,MAAhB;WAEGoxB,WAAH,CAAepxB,IAAf,EAAqByE,IAArB;;YAEItB,UAAUT,SAAd,EAAyB;qBACZktB,YAAX,CAAwB7vB,EAAxB,EAA4BC,IAA5B,EAAkCsC,OAAlC,EAA2Ca,UAAUQ,IAArD;;;;KA1BN;GAVoB,GAVA;qBAmDH,IAAI8tB,aAAJ,CAAkB;UAC7B,iBAD6B;UAE7B,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6BxD,WAA7B,CAAD;GAFW,CAnDG;yBAuDC,IAAIyD,aAAJ,CAAkB;UACjC,qBADiC;gBAE3B3D;GAFS,CAvDD;2BA2DG,IAAI2D,aAAJ,CAAkB;UACnC,uBADmC;UAEnC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6BD,iBAA7B,CAAD,CAFmC;gBAG7BhC;GAHW,CA3DH;6BAgEK,IAAIkC,aAAJ,CAAkB;UACrC,yBADqC;UAErC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6BjC,WAA7B,CAAD,CAFqC;gBAG/BgC;GAHa,CAhEL;8BAqEM,IAAIE,aAAJ,CAAkB;UACtC,0BADsC;gBAEhC3D;GAFc,CArEN;8BAyEM,IAAI2D,aAAJ,CAAkB;UACtC,0BADsC;UAEtC,CACJ,IAAID,eAAJ,CACE,aADF,EAEE,IAAIvB,UAAJ,CAAe,CAACV,WAAD,EAAczB,WAAd,CAAf,CAFF,CADI,CAFsC;gBAQhCgB;GARc,CAzEN;6BAmFK,IAAI2C,aAAJ,CAAkB;UACrC,yBADqC;UAErC,CACJ,IAAID,eAAJ,CACE,aADF,EAEE,IAAIvB,UAAJ,CAAe,CAACV,WAAD,EAAczB,WAAd,CAAf,CAFF,CADI,CAFqC;gBAQ/Bc;GARa,CAnFL;mCA6FW,IAAI6C,aAAJ,CAAkB;UAC3C,+BAD2C;UAE3C,CAAC,IAAID,eAAJ,CAAoB,MAApB,EAA4BjC,WAA5B,CAAD,CAF2C;gBAGrCN;GAHmB,CA7FX;+BAkGO,IAAIwC,aAAJ,CAAkB;UACvC,2BADuC;UAEvC,CAAC,IAAID,eAAJ,CAAoB,MAApB,EAA4BjC,WAA5B,CAAD,CAFuC;gBAGjCd;GAHe,CAlGP;kCAuGU,IAAIgD,aAAJ,CAAkB;UAC1C,8BAD0C;gBAEpC,IAAIjC,UAAJ,CAAeD,WAAf;GAFkB,CAvGV;6BA2GK,IAAIkC,aAAJ,CAAkB;UACrC,yBADqC;UAErC,CAAC,IAAID,eAAJ,CAAoB,MAApB,EAA4BjC,WAA5B,CAAD,CAFqC;gBAG/Bb;GAHa,CA3GL;gCAgHQ,IAAI+C,aAAJ,CAAkB;UACxC,4BADwC;UAExC,CAAC,IAAID,eAAJ,CAAoB,MAApB,EAA4BjC,WAA5B,CAAD,CAFwC;gBAGlCV;GAHgB,CAhHR;wBAqHA,IAAI4C,aAAJ,CAAkB;UAChC,oBADgC;UAEhC,CACJ,IAAID,eAAJ,CACE,eADF,EAEE,IAAIvB,UAAJ,CAAe,CAACrB,UAAD,EAAaE,WAAb,CAAf,CAFF,CADI,CAFgC;gBAQ1BS;GARQ,CArHA;2BA+HG,IAAIkC,aAAJ,CAAkB;UACnC,uBADmC;UAEnC,CACJ,IAAID,eAAJ,CACE,eADF,EAEE,IAAIvB,UAAJ,CAAe,CAACrB,UAAD,EAAaE,WAAb,CAAf,CAFF,CADI,CAFmC;gBAQ7BhB;GARW,CA/HH;4BAyII,IAAI2D,aAAJ,CAAkB;UACpC,wBADoC;UAEpC,CACJ,IAAID,eAAJ,CACE,eADF,EAEE,IAAIvB,UAAJ,CAAe,CAACrB,UAAD,EAAaE,WAAb,CAAf,CAFF,CADI,CAFoC;gBAQ9BS;GARY,CAzIJ;yBAmJC,IAAIkC,aAAJ,CAAkB;UACjC,qBADiC;UAEjC,CACJ,IAAID,eAAJ,CACE,eADF,EAEE,IAAIvB,UAAJ,CAAe,CAACrB,UAAD,EAAaE,WAAb,CAAf,CAFF,CADI,CAFiC;gBAQ3BhB;GARS,CAnJD;8BA6JM,IAAI2D,aAAJ,CAAkB;UACtC,0BADsC;UAEtC,CACJ,IAAID,eAAJ,CACE,eADF,EAEE,IAAIvB,UAAJ,CAAe,CAACrB,UAAD,EAAaE,WAAb,CAAf,CAFF,CADI,CAFsC;gBAQhCS;GARc,CA7JN;6BAuKK,IAAIkC,aAAJ,CAAkB;UACrC,yBADqC;UAErC,CACJ,IAAID,eAAJ,CACE,eADF,EAEE,IAAIvB,UAAJ,CAAe,CAACrB,UAAD,EAAaE,WAAb,CAAf,CAFF,CADI,CAFqC;gBAQ/BhB;GARa,CAvKL;iCAiLS,IAAI2D,aAAJ,CAAkB;UACzC,6BADyC;UAEzC,CACJ,IAAID,eAAJ,CACE,eADF,EAEE,IAAIvB,UAAJ,CAAe,CAACrB,UAAD,EAAaE,WAAb,CAAf,CAFF,CADI,CAFyC;gBAQnChB;GARiB,CAjLT;iCA2LS,IAAI2D,aAAJ,CAAkB;UACzC,6BADyC;UAEzC,CACJ,IAAID,eAAJ,CACE,eADF,EAEE,IAAIvB,UAAJ,CAAe,CAACrB,UAAD,EAAaE,WAAb,CAAf,CAFF,CADI,CAFyC;gBAQnCS;GARiB,CA3LT;mCAqMW,IAAIkC,aAAJ,CAAkB;UAC3C,+BAD2C;UAE3C,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6B5C,UAA7B,CAAD,CAF2C;gBAGrCd;GAHmB,CArMX;+BA0MO,IAAI2D,aAAJ,CAAkB;UACvC,2BADuC;UAEvC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6B5C,UAA7B,CAAD,CAFuC;gBAGjC,IAAIY,UAAJ,CAAeP,gBAAf;GAHe,CA1MP;8BA+MM,IAAIwC,aAAJ,CAAkB;UACtC,0BADsC;UAEtC,CACJ,IAAID,eAAJ,CAAoB,OAApB,EAA6B5C,UAA7B,CADI,EAEJ,IAAI4C,eAAJ,CAAoB,OAApB,EAA6B1D,WAA7B,CAFI,CAFsC;gBAMhCmB;GANc,CA/MN;6BAuNK,IAAIwC,aAAJ,CAAkB;UACrC,yBADqC;UAErC,CAAC,IAAID,eAAJ,CAAoB,aAApB,EAAmCvC,gBAAnC,CAAD,CAFqC;gBAG/BM;GAHa,CAvNL;6BA4NK,IAAIkC,aAAJ,CAAkB;UACrC,yBADqC;UAErC,CAAC,IAAID,eAAJ,CAAoB,aAApB,EAAmCvC,gBAAnC,CAAD,CAFqC;gBAG/BnB;GAHa,CA5NL;mCAiOW,IAAI2D,aAAJ,CAAkB;UAC3C,+BAD2C;UAE3C,CAAC,IAAID,eAAJ,CAAoB,aAApB,EAAmCvC,gBAAnC,CAAD,CAF2C;gBAGrC,IAAIO,UAAJ,CAAeb,cAAf;GAHmB,CAjOX;+BAsOO,IAAI8C,aAAJ,CAAkB;UACvC,2BADuC;UAEvC,CAAC,IAAID,eAAJ,CAAoB,aAApB,EAAmCvC,gBAAnC,CAAD,CAFuC;gBAGjC,IAAIO,UAAJ,CAAeT,UAAf;GAHe,CAtOP;gCA2OQ,IAAI0C,aAAJ,CAAkB;UACxC,4BADwC;UAExC,CAAC,IAAID,eAAJ,CAAoB,aAApB,EAAmCvC,gBAAnC,CAAD,CAFwC;gBAGlC,IAAIO,UAAJ,CAAeR,WAAf;GAHgB,CA3OR;mCAgPW,IAAIyC,aAAJ,CAAkB;UAC3C,+BAD2C;UAE3C,CAAC,IAAID,eAAJ,CAAoB,aAApB,EAAmCvC,gBAAnC,CAAD,CAF2C;gBAGrC,IAAIO,UAAJ,CAAeR,WAAf;GAHmB,CAhPX;qCAqPa,IAAIyC,aAAJ,CAAkB;UAC7C,iCAD6C;UAE7C,CAAC,IAAID,eAAJ,CAAoB,aAApB,EAAmCvC,gBAAnC,CAAD,CAF6C;gBAGvC,IAAIO,UAAJ,CAAeR,WAAf;GAHqB,CArPb;yCA0PiB,IAAIyC,aAAJ,CAAkB;UACjD,qCADiD;UAEjD,CAAC,IAAID,eAAJ,CAAoB,aAApB,EAAmCvC,gBAAnC,CAAD,CAFiD;gBAG3CM;GAHyB,CA1PjB;4BA+PI,IAAIkC,aAAJ,CAAkB;UACpC,wBADoC;UAEpC,CAAC,IAAID,eAAJ,CAAoB,WAApB,EAAiC7C,cAAjC,CAAD,CAFoC;gBAG9Bb;GAHY,CA/PJ;2BAoQG,IAAI2D,aAAJ,CAAkB;UACnC,uBADmC;UAEnC,CAAC,IAAID,eAAJ,CAAoB,WAApB,EAAiC7C,cAAjC,CAAD,CAFmC;gBAG7BY;GAHW,CApQH;uBAyQD,IAAIkC,aAAJ,CAAkB;UAC/B,mBAD+B;UAE/B,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6BzC,UAA7B,CAAD,CAF+B;gBAGzBQ;GAHO,CAzQC;wBA8QA,IAAIkC,aAAJ,CAAkB;UAChC,oBADgC;UAEhC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6BzC,UAA7B,CAAD,CAFgC;gBAG1BjB;GAHQ,CA9QA;2BAmRG,IAAI2D,aAAJ,CAAkB;UACnC,uBADmC;UAEnC,CAAC,IAAID,eAAJ,CAAoB,QAApB,EAA8BxC,WAA9B,CAAD,CAFmC;gBAG7BO;GAHW,CAnRH;yBAwRC,IAAIkC,aAAJ,CAAkB;UACjC,qBADiC;UAEjC,CAAC,IAAID,eAAJ,CAAoB,QAApB,EAA8BxC,WAA9B,CAAD,CAFiC;gBAG3BlB;GAHS,CAxRD;8BA6RM,IAAI2D,aAAJ,CAAkB;UACtC,0BADsC;UAEtC,CAAC,IAAID,eAAJ,CAAoB,QAApB,EAA8BxC,WAA9B,CAAD,CAFsC;gBAGhCO;GAHc,CA7RN;+BAkSO,IAAIkC,aAAJ,CAAkB;UACvC,2BADuC;UAEvC,CAAC,IAAID,eAAJ,CAAoB,SAApB,EAA+B/C,YAA/B,CAAD,CAFuC;gBAGjCc;GAHe,CAlSP;0BAuSE,IAAIkC,aAAJ,CAAkB;UAClC,sBADkC;UAElC,CAAC,IAAID,eAAJ,CAAoB,SAApB,EAA+B/C,YAA/B,CAAD,CAFkC;gBAG5B,IAAIe,UAAJ,CAAeD,WAAf;GAHU,CAvSF;4BA4SI,IAAIkC,aAAJ,CAAkB;UACpC,wBADoC;UAEpC,CACJ,IAAID,eAAJ,CAAoB,SAApB,EAA+B/C,YAA/B,CADI,EAEJ,IAAI+C,eAAJ,CAAoB,WAApB,EAAiCjC,WAAjC,CAFI,CAFoC;gBAM9BzB;GANY,CA5SJ;0BAoTE,IAAI2D,aAAJ,CAAkB;UAClC,sBADkC;UAElC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6B9C,UAA7B,CAAD,CAFkC;gBAG5Ba;GAHU,CApTF;4BAyTI,IAAIkC,aAAJ,CAAkB;UACpC,wBADoC;UAEpC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6B9C,UAA7B,CAAD,CAFoC;gBAG9BZ;GAHY,CAzTJ;yBA8TC,IAAI2D,aAAJ,CAAkB;UACjC,qBADiC;UAEjC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6B9C,UAA7B,CAAD,CAFiC;gBAG3BZ;GAHS,CA9TD;4BAmUI,IAAI2D,aAAJ,CAAkB;UACpC,wBADoC;UAEpC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6B9C,UAA7B,CAAD,CAFoC;gBAG9BZ;GAHY,CAnUJ;4BAwUI,IAAI2D,aAAJ,CAAkB;UACpC,wBADoC;UAEpC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6B9C,UAA7B,CAAD,CAFoC;gBAG9BZ;GAHY,CAxUJ;wBA6UA,IAAI2D,aAAJ,CAAkB;UAChC,oBADgC;UAEhC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6B9C,UAA7B,CAAD,CAFgC;gBAG1Ba;GAHQ,CA7UA;wBAkVA,IAAIkC,aAAJ,CAAkB;UAChC,oBADgC;UAEhC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6B9C,UAA7B,CAAD,CAFgC;gBAG1Ba;GAHQ,CAlVA;yBAuVC,IAAIkC,aAAJ,CAAkB;UACjC,qBADiC;UAEjC,CAAC,IAAID,eAAJ,CAAoB,OAApB,EAA6B9C,UAA7B,CAAD,CAFiC;gBAG3Ba;GAHS,CAvVD;4BA4VI,IAAIkC,aAAJ,CAAkB;UACpC,wBADoC;UAEpC,CAAC,IAAID,eAAJ,CAAoB,UAApB,EAAgC3C,aAAhC,CAAD,CAFoC;gBAG9BU;GAHY,CA5VJ;4BAiWI,IAAIkC,aAAJ,CAAkB;UACpC,wBADoC;gBAE9BtC;GAFY,CAjWJ;qBAqWH,IAAIsC,aAAJ,CAAkB;UAC7B,iBAD6B;UAE7B,CACJ,IAAID,eAAJ,CAAoB,SAApB,EAA+BrC,mBAA/B,CADI,EAEJ,IAAIqC,eAAJ,CAAoB,KAApB,EAA2BhB,UAA3B,CAFI,CAF6B;gBAMvBe,kBAAkBS,YAAlB,GAAiCC,UAAjC;GANK,CArWG;sBA6WF,IAAIR,aAAJ,CAAkB;UAC9B,kBAD8B;UAE9B,CACJ,IAAID,eAAJ,CAAoB,SAApB,EAA+BrC,mBAA/B,CADI,EAEJ,IAAIqC,eAAJ,CAAoB,QAApB,EAA8BhB,UAA9B,CAFI,CAF8B;gBAMxBpB;GANM,CA7WE;uBAqXD,IAAIqC,aAAJ,CAAkB;UAC/B,mBAD+B;UAE/B,CAAC,IAAID,eAAJ,CAAoB,UAApB,EAAgCpC,oBAAhC,CAAD,CAF+B;gBAGzBlB;GAHO,CArXC;sBA0XF,IAAIuD,aAAJ,CAAkB;UAC9B,kBAD8B;UAE9B,CAAC,IAAID,eAAJ,CAAoB,UAApB,EAAgCpC,oBAAhC,CAAD,CAF8B;gBAGxBoB;GAHM,CA1XE;wBA+XA,IAAIiB,aAAJ,CAAkB;UAChC,oBADgC;UAEhC,CAAC,IAAID,eAAJ,CAAoB,UAApB,EAAgCpC,oBAAhC,CAAD,CAFgC;gBAG1BqB;GAHQ,CA/XA;0BAoYE,IAAIgB,aAAJ,CAAkB;UAClC,sBADkC;UAElC,CACJ,IAAID,eAAJ,CAAoB,SAApB,EAA+B/C,YAA/B,CADI,EAEJ,IAAI+C,eAAJ,CAAoB,OAApB,EAA6B,IAAIhC,UAAJ,CAAeD,WAAf,CAA7B,CAFI;GAFgB,CApYF;4BA2YI,IAAIkC,aAAJ,CAAkB;UACpC,wBADoC;UAEpC,CAAC,IAAID,eAAJ,CAAoB,WAApB,EAAiCjC,WAAjC,CAAD,CAFoC;gBAG9BL;GAHY,CA3YJ;sBAgZF,IAAIuC,aAAJ,CAAkB;UAC9B,kBAD8B;UAE9B,CACJ,IAAID,eAAJ,CAAoB,WAApB,EAAiC1D,WAAjC,CADI,EAEJ,IAAI0D,eAAJ,CAAoB,WAApB,EAAiCxD,WAAjC,CAFI,EAGJ,IAAIwD,eAAJ,CAAoB,QAApB,EAA8B1D,WAA9B,CAHI,EAIJ,IAAI0D,eAAJ,CAAoB,WAApB,EAAiC1D,WAAjC,CAJI,EAKJ,IAAI0D,eAAJ,CAAoB,OAApB,EAA6BjC,WAA7B,CALI,EAMJ,IAAIiC,eAAJ,CAAoB,OAApB,EAA6BjC,WAA7B,CANI,EAOJ,IAAIiC,eAAJ,CAAoB,QAApB,EAA8BjC,WAA9B,CAPI,CAF8B;gBAWxBb;GAXM,CAhZE;qBA6ZH,IAAI+C,aAAJ,CAAkB;UAC7B,iBAD6B;UAE7B,CACJ,IAAID,eAAJ,CAAoB,OAApB,EAA6B9C,UAA7B,CADI,EAEJ,IAAI8C,eAAJ,CAAoB,OAApB,EAA6B1D,WAA7B,CAFI,CAF6B;gBAMvBA;GANK,CA7ZG;yBAqaC,IAAI2D,aAAJ,CAAkB;UACjC,qBADiC;UAEjC,CACJ,IAAID,eAAJ,CAAoB,QAApB,EAA8BjC,WAA9B,CADI,EAEJ,IAAIiC,eAAJ,CAAoB,eAApB,EAAqCjC,WAArC,CAFI,EAGJ,IAAIiC,eAAJ,CAAoB,YAApB,EAAkC1D,WAAlC,CAHI,EAIJ,IAAI0D,eAAJ,CAAoB,YAApB,EAAkC1D,WAAlC,CAJI,EAKJ,IAAI0D,eAAJ,CAAoB,cAApB,EAAoCxD,WAApC,CALI,EAMJ,IAAIwD,eAAJ,CAAoB,aAApB,EAAmCxD,WAAnC,CANI,EAOJ,IAAIwD,eAAJ,CAAoB,QAApB,EAA8BxD,WAA9B,CAPI,EAQJ,IAAIwD,eAAJ,CAAoB,OAApB,EAA6BxD,WAA7B,CARI,EASJ,IAAIwD,eAAJ,CAAoB,aAApB,EAAmCxD,WAAnC,CATI,CAFiC;gBAa3Ba;GAbS,CAraD;0BAobE,IAAI4C,aAAJ,CAAkB;UAClC,sBADkC;UAElC,CACJ,IAAID,eAAJ,CAAoB,QAApB,EAA8BjC,WAA9B,CADI,EAEJ,IAAIiC,eAAJ,CAAoB,eAApB,EAAqCjC,WAArC,CAFI,EAGJ,IAAIiC,eAAJ,CAAoB,YAApB,EAAkC1D,WAAlC,CAHI,EAIJ,IAAI0D,eAAJ,CAAoB,YAApB,EAAkC1D,WAAlC,CAJI,EAKJ,IAAI0D,eAAJ,CAAoB,cAApB,EAAoCxD,WAApC,CALI,EAMJ,IAAIwD,eAAJ,CAAoB,aAApB,EAAmCxD,WAAnC,CANI,EAOJ,IAAIwD,eAAJ,CAAoB,QAApB,EAA8BxD,WAA9B,CAPI,EAQJ,IAAIwD,eAAJ,CAAoB,OAApB,EAA6BxD,WAA7B,CARI,EASJ,IAAIwD,eAAJ,CAAoB,aAApB,EAAmCxD,WAAnC,CATI,CAFkC;gBAa5Ba;GAbU,CApbF;oCAmcY,IAAI4C,aAAJ,CAAkB;UAC5C,gCAD4C;UAE5C,CAAC,IAAID,eAAJ,CAAoB,UAApB,EAAgC3C,aAAhC,CAAD,CAF4C;gBAGtCM;GAHoB,CAncZ;0BAwcE,IAAIsC,aAAJ,CAAkB;UAClC;GADgB,CAxcF;qBA2cH,IAAIA,aAAJ,CAAkB;UAC7B,iBAD6B;UAE7B,CACJ,IAAID,eAAJ,CAAoB,SAApB,EAA+BrC,mBAA/B,CADI,EAEJ,IAAIqC,eAAJ,CAAoB,KAApB,EAA2BhB,UAA3B,CAFI,EAGJ,IAAIgB,eAAJ,CAAoB,OAApB,EAA6BD,kBAAkBS,YAAlB,EAA7B,CAHI;GAFW,CA3cG;wBAmdA,IAAIP,aAAJ,CAAkB;UAChC,oBADgC;UAEhC,CACJ,IAAID,eAAJ,CAAoB,SAApB,EAA+BrC,mBAA/B,CADI,EAEJ,IAAIqC,eAAJ,CAAoB,KAApB,EAA2BhB,UAA3B,CAFI;GAFc,CAndA;+CA0duB,IAAIiB,aAAJ,CAAkB;UACvD,2CADuD;gBAEjDxC;GAF+B,CA1dvB;mDA8d2B,IAAIwC,aAAJ,CAAkB;UAC3D,+CAD2D;gBAErDlC;GAFmC,CA9d3B;iDAkeyB,IAAIkC,aAAJ,CAAkB;UACzD,6CADyD;gBAEnDlC;GAFiC,CAlezB;+CAseuB,IAAIkC,aAAJ,CAAkB;UACvD,2CADuD;gBAEjDlC;GAF+B,CAtevB;wBA0eA,CAAC,MAAM;UACrB9qB,OAAO,oBAAb;UACM2T,YAAY,IAAI6X,UAAJ,CAAe,CAC/BV,WAD+B,EAE/BzB,WAF+B,EAG/BE,WAH+B,EAI/BE,YAJ+B,CAAf,CAAlB;UAMMwD,aAAa9D,SAAnB;WACO;UAAA;;sBAEmB;cAChBmE,MAAM3Z,UAAU2Y,WAAV,EAAZ;eACQ,2BAA0BtsB,IAAK,aAAYstB,GAAI,MAAKL,WAAWX,WAAX,EAAyB,GAArF;OAJG;;iBAOHhxB,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;cACAb,UAAUvC,GAAGqD,gBAAH,CAAoBrD,GAAG0D,aAAH,CAAiBN,SAAjB,CAApB,CAAhB;cACMoD,MAAMvG,KAAKqG,YAAL,GAAoB,CAApB,CAAZ;WACGG,KAAH,CAASD,GAAT,EAAcjE,OAAd;kBACUqtB,cAAV,CAAyB5vB,EAAzB,EAA6BwG,GAA7B,EAAkCjE,OAAlC,EAA2CvC,GAAG6D,OAAH,CAAW2C,GAAX,CAA3C;;;KAdJ;GAToB,GA1eA;6BAqgBK,CAAC,MAAM;UAC1B9B,OAAO,yBAAb;UACM2T,YAAY0V,WAAlB;UACM4D,aAAyB,IAAIzB,UAAJ,CAAe,CAC5CV,WAD4C,EAE5CrB,YAF4C,EAG5CJ,WAH4C,EAI5CE,WAJ4C,EAK5C,IAAIwB,UAAJ,CAAe,MAAMkC,UAArB,CAL4C,EAM5C,IAAI7B,UAAJ,CAAe,MAAM6B,UAArB,CAN4C,CAAf,CAA/B;WAQO;UAAA;;sBAEmB;cAChBK,MAAM3Z,UAAU2Y,WAAV,EAAZ;eACQ,2BAA0BtsB,IAAK,WAAUstB,GAAI,SAArD;OAJG;;iBAOHhyB,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;cACAb,UAAUvC,GAAGqD,gBAAH,CAAoBrD,GAAG0D,aAAH,CAAiBN,SAAjB,CAApB,CAAhB;cACMoD,MAAMvG,KAAKqG,YAAL,GAAoB,CAApB,CAAZ;WACGG,KAAH,CAASD,GAAT,EAAcjE,OAAd;WACG9B,UAAH,CACE+F,GADF,EAEEjE,OAFF,EAGEvC,GAAGU,OAAH,CAAWyxB,WAAX,CAAuB;gBAAQnyB,GAAG6D,OAAH,CAAW2C,GAAX;SAA/B,CAHF;;YAKIpD,UAAUT,SAAd,EAAyB;qBACZktB,YAAX,CAAwB7vB,EAAxB,EAA4BC,IAA5B,EAAkCmD,SAAlC,EAA6CA,UAAUQ,IAAvD;SADF,MAEO;aACFhD,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;KAtBN;GAXyB;CArgBtB;;ACz9BQ,MAAMmyB,sBAAN,SAAqC/vB,YAArC,CAEb;;;;iEACmCmK,WAAW6lB,cAD9C;;;WAGA,CACEryB,EADF,EAEEiY,IAFF,EAGE7U,SAHF,EAIQ;UACAmN,OAAO0H,KAAKG,aAAL,EAAb;;QAEE/P,WAAWiqB,YAAX,CAAwB/hB,IAAxB,KACAvQ,GAAGuyB,cAAH,CAAkBhiB,IAAlB,EAAwBvQ,GAAG8Y,SAAH,CAAavI,IAAb,CAAxB,EAA4C,SAA5C,CAFF,EAGE;WACKiiB,aAAL,CAAmBxyB,EAAnB,EAAuBiY,IAAvB,EAA6B7U,SAA7B;;;;UAIIb,UAAUvC,GAAGqD,gBAAH,CAAoBrD,GAAG0D,aAAH,CAAiBN,SAAjB,CAApB,CAAhB,CAVM;;OAYH3C,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2F,IAAxC;;QAEIgC,WAAWoqB,iBAAX,CAA6BliB,IAA7B,CAAJ,EAAwC;WACjCmiB,oBAAL,CAA0B1yB,EAA1B,EAA8BiY,IAA9B,EAAoC1V,OAApC;;;;QAIE0E,QAAJ;;QAEEoB,WAAWsqB,yBAAX,CAAqCpiB,IAArC,KACAlI,WAAWuqB,0BAAX,CAAsCriB,IAAtC,CAFF,EAGE;iBACW,IAAX;YAEMsiB,MAAMtiB,KAAK6H,aAAL,EAAZ;;UACI/P,WAAWoqB,iBAAX,CAA6BI,GAA7B,CAAJ,EAAuC;;WAElCluB,KAAH,CAASyb,OAAT,CAAiBpgB,EAAjB,EAAqB6yB,GAArB,EAA0BtwB,OAA1B,EAFqC;;WAIlCkE,KAAH,CAASosB,GAAT,EAActwB,OAAd;OAJF,MAKO;;WAEFkE,KAAH,CAASosB,GAAT,EAActwB,OAAd,EAFK;;WAIF3B,MAAH,CAAU2P,IAAV,EAAgB,KAAhB;;;UAGElI,WAAWsqB,yBAAX,CAAqCpiB,IAArC,CAAJ,EAAgD;;WAE3C9P,UAAH,CAAc8P,IAAd,EAAoBhO,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoyB,aAAxC;OAFF,MAGO;;WAEFjuB,cAAH,CAAkB0L,KAAKiX,WAAL,EAAlB,EAAsCjX,KAAKC,OAAL,EAAtC,EAFK;;WAIF/P,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC;;KA1BJ,MA4BO;iBACM,KAAX,CADK;;SAGFvD,KAAH,CAAS8J,IAAT,EAAehO,OAAf;;;OAGC9B,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWqE,UAAX,CAAsB;;KAAtB,CAA7B;;QAEI,CAAC3B,UAAUT,SAAf,EAA0B;SACrB/B,MAAH,CAAUqX,IAAV,EAAgB,MAAhB;;;;eAIJ,CACEjY,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACAwwB,cAAc9yB,KAAKqG,YAAL,GAAoB,CAApB,CAApB;;UAEM2H,cAAc,MAAM;SACrBA,WAAH,CACEhO,IADF,EAEE,oFAFF,EAGEgM,eAAe+mB,gBAHjB;KADF;;QAOID,eAAe,IAAf,IAAuB,CAAC1qB,WAAW4qB,eAAX,CAA2BF,WAA3B,CAA5B,EAAqE;;;;;UAK/DG,aAAaH,YAAYI,eAAZ,EAAnB;UACMC,UAAUtB,SAASoB,UAAT,CAAhB;;QACIE,WAAW,IAAf,EAAqB;;KAArB,MAEO;cACGC,UAAR,CAAmBrzB,EAAnB,EAAuBC,IAAvB,EAA6BsC,OAA7B;;;;sBAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACAkjB,aAAaljB,QAAQkjB,UAA3B;;QACIA,cAAc,IAAlB,EAAwB;YAChB,IAAIpkB,KAAJ,CACJ,2DADI,CAAN;KAHI;;;OAQHsD,KAAH,CAASyb,OAAT,CAAiBpgB,EAAjB,EAAqBC,IAArB,EAA2BsC,OAA3B,EARM;;OAUHoC,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCkjB,UAAhC,EAVM;;OAYHhlB,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwJ,eAAX,EAA7B;;;;;ACpHW,MAAMopB,2BAAN,SAA0CjxB,YAA1C,CAEb;;;;iEACmCmK,WAAW+mB,mBAD9C;;;WAGA,CACEvzB,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACVW,MAAMub,6BAAN,SAA4CnxB,YAA5C,CAEb;;;;iEACmCmK,WAAWinB,qBAD9C;;;WAGA,CACEzzB,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACH9B,UAAH,CACEwX,IADF,EAEE1V,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;iBACD,MAAM;;WAEZ8F,KAAH,CAASwR,KAAKyb,YAAL,EAAT,EAA8B1zB,GAAGqD,gBAAH,CAAoBd,OAApB,CAA9B,EAFe;;WAIZ9B,UAAH,CACEwX,KAAKyb,YAAL,EADF,EAEE1zB,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWmC,SAAX,CAAqB;gBACb7C,GAAG6D,OAAH,CAAWoU,KAAKyb,YAAL,EAAX;SADR,CAHF;OALU;gBAaF,MAAM;WACXjtB,KAAH,CAASwR,KAAK0b,WAAL,EAAT,EAA6BpxB,OAA7B;OAdU;iBAgBD,MAAM;WACZkE,KAAH,CAASwR,KAAK2b,YAAL,EAAT,EAA8BrxB,OAA9B;;KAjBJ,CAHF;;;;;ACVW,MAAMsxB,wBAAN,SAAuCxxB,YAAvC,CAEb;;;;iEACmCmK,WAAWsnB,gBAD9C;;;WAGA,CACE9zB,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACVW,MAAM8b,+BAAN,SAA8C1xB,YAA9C,CAEb;;;;iEACmCmK,WAAWwnB,uBAD9C;;;WAGA,CACEh0B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;UACA4V,QAAQF,KAAKG,aAAL,EAAd,CADM;;OAIH3R,KAAH,CAAS0R,KAAT,EAAgBnY,GAAGqD,gBAAH,CAAoBrD,GAAGkY,iBAAH,CAAqB3V,OAArB,CAApB,CAAhB,EAJM;;OAMH9B,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWoyB,aAAxC;;;;;ACfW,MAAMmB,0BAAN,SAAyC5xB,YAAzC,CAEb;;;;iEACmCmK,WAAW0nB,kBAD9C;;;WAGA,CACEl0B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACVW,MAAMkc,kBAAN,SAAiC9xB,YAAjC,CAA0D;;;;iEACpCmK,WAAW4nB,UADyB;;;WAGvE,CACEp0B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;QACFA,QAAQmW,QAAZ,EAAsB;SACjB/T,KAAH,CAASqG,GAAT,CAAahL,EAAb,EAAiBiY,IAAjB,EAAuBjY,GAAGkY,iBAAH,CAAqB3V,OAArB,CAAvB,EAAsD0V,KAAKwP,OAAL,EAAtD;;;QAGEllB,QAAQI,SAAZ,EAAuB;UAEnBsV,KAAKrH,YAAL,CAAkByjB,mBAAlB,IAAyC,IAAzC,IACApc,KAAKrH,YAAL,CAAkByjB,mBAAlB,KAA0C7nB,WAAW8nB,gBAFvD,EAGE;WACG7zB,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC;OAJF,MAKO;WACFqB,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBiY,IAAjB,EAAuB1V,OAAvB,EAAgC0V,KAAKwP,OAAL,EAAhC;;;;;;;ACnBO,MAAM8M,wBAAN,SAAuClyB,YAAvC,CAEb;;;;iEACmCmK,WAAWgoB,aAD9C;;;WAGA,CACEx0B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACVW,MAAMwc,oBAAN,SAAmCpyB,YAAnC,CAA8D;;;;iEACxCmK,WAAWkoB,YAD6B;;;WAG3E,CACE10B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACRW,MAAM0c,qBAAN,SAAoCtyB,YAApC,CAAgE;;;;iEAC1CmK,WAAWooB,aAD+B;;;WAG7E,CACE50B,EADF,EAEEiY,IAFF,EAGE7U,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADM;;OAGH3C,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2F,IAAxC,EAHM;;OAKHI,KAAH,CAASwR,KAAKG,aAAL,EAAT,EAA+B7V,OAA/B,EALM;;OAOH9B,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW2hB,GAAX,EAA7B;;;;;ACdW,MAAMwS,yBAAN,SAAwCxyB,YAAxC,CAEb;;;;iEACmCmK,WAAWsoB,iBAD9C;;;WAEA,CACE90B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACTW,MAAM8c,qCAAN,SAAoD1yB,YAApD,CAEb;;;;iEACmCmK,WAAWwoB,6BAD9C;;;WAGA,CACEh1B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACVW,MAAMgd,mBAAN,SAAkC5yB,YAAlC,CAA4D;;;;iEACtCmK,WAAW0oB,WAD2B;;;WAGzE,CACEl1B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;QACFA,QAAQI,SAAZ,EAAuB;SAClBlC,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWy0B,UAAxC;;;;;;ACTS,MAAMC,sBAAN,SAAqC/yB,YAArC,CAEb;;;;iEACmCmK,WAAW6oB,cAD9C;;;WAGA,CACEr1B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;QACFA,QAAQI,SAAZ,EAAuB;SAClB9B,WAAH,CAAeoX,IAAf,EAAqBA,KAAKkb,eAAL,EAArB;SACG1yB,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;;;;ACXS,MAAMqW,+BAAN,SAA8CjzB,YAA9C,CAEb;;;;iEACmCmK,WAAW+oB,uBAD9C;;;WAGA,CACEv1B,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADM;;OAGH3C,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWwI,YAAxC;SACKssB,aAAL,GAAqBh1B,OAArB,CAA8B8X,IAAD,IAAU;;SAElC1X,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;UAEEoI,WAAWotB,oBAAX,CAAgCnd,IAAhC,KACAjQ,WAAWqtB,6BAAX,CAAyCpd,IAAzC,CADA,IAEAjQ,WAAWstB,mBAAX,CAA+Brd,IAA/B,CAHF,EAIE;;WAEGzT,cAAH,CAAkByT,IAAlB,EAAwBA,KAAK9H,OAAL,EAAxB;;YACInI,WAAWotB,oBAAX,CAAgCnd,IAAhC,CAAJ,EAA2C;;aAEtC7R,KAAH,CAAS6R,KAAKsd,qBAAL,EAAT,EAAuCrzB,OAAvC;SAFF,MAGO,IAAI8F,WAAWqtB,6BAAX,CAAyCpd,IAAzC,CAAJ,EAAoD;;aAEtD7R,KAAH,CAAS6R,KAAKkP,WAAL,EAAT,EAA6BjlB,OAA7B;SAFK,MAGA,IAAI8F,WAAWstB,mBAAX,CAA+Brd,IAA/B,CAAJ,EAA0C;;aAE5C7X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWylB,eAAxC,EAF+C;;aAI5C1lB,UAAH,CACE6X,IADF,EAEE/V,OAFF,EAGEvC,GAAGU,OAAH,CAAW0K,oBAAX,CAAgC;sBACpB1E,2BAA2BG;WADvC,CAHF;SAJK,MAWA;aACF8D,iBAAH,CAAqB2N,IAArB;SArBF;;;WAwBG7X,UAAH,CAAc6X,IAAd,EAAoB/V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWuJ,6BAAxC;OA5BF,MA6BO;WACFU,iBAAH,CAAqB2N,IAArB;;KAjCJ;;QAqCI,CAAClV,UAAUT,SAAf,EAA0B;SACrB/B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;ACpDS,MAAM41B,yBAAN,SAAwCxzB,YAAxC,CAEb;;;;iEACmCmK,WAAWspB,iBAD9C;;;WAGA,CACE91B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACVW,MAAM8d,+BAAN,SAA8C1zB,YAA9C,CAEb;;;;iEACmCmK,WAAWwpB,uBAD9C;;;WAGA,CACEh2B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHkE,KAAH,CAASwR,KAAKG,aAAL,EAAT,EAA+B7V,OAA/B;;;;;ACVW,MAAM0zB,kCAAN,SAAiD5zB,YAAjD,CAEb;;;;iEACmCmK,WAAW0pB,0BAD9C;;;WAGA,CACEl2B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACTW,MAAMke,8BAAN,SAA6C9zB,YAA7C,CAEb;;;;iEACmCmK,WAAW4pB,sBAD9C;;;WAGA,CACEp2B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHkE,KAAH,CACEwR,KAAKoe,UAAL,EADF,EAEEr2B,GAAGkY,iBAAH,CAAqBlY,GAAGqD,gBAAH,CAAoBd,OAApB,CAArB,CAFF;UAIMmqB,QAAQzU,KAAKwS,gBAAL,EAAd;;YACQiC,KAAR;WACOlgB,WAAW8pB,aAAhB;WACK9pB,WAAW+pB,eAAhB;aACOC,eAAL,CAAqBx2B,EAArB,EAAyB0sB,KAAzB,EAAgCzU,IAAhC,EAAsC1V,OAAtC;;;;WAGGgqB,iBAAH,CAAqBG,KAArB;;;;iBAIN,CACE1sB,EADF,EAEE0sB,KAFF,EAGEzU,IAHF,EAIE1V,OAJF,EAKQ;QACFA,QAAQI,SAAZ,EAAuB;SAClB/B,MAAH,CAAUqX,IAAV,EAAgB,KAAhB;;;YAGMyU,KAAR;WACOlgB,WAAW8pB,aAAhB;WACK71B,UAAH,CACEwX,IADF,EAEEjY,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;gBACZhf,GAAG6D,OAAH,CAAWoU,IAAX;SADR,CAHF;WAOGrX,MAAH,CAAUqX,IAAV,EAAgB,KAAhB;WACGxX,UAAH,CACEwX,IADF,EAEEjY,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWue,YAHb;;;WAMGzS,WAAW+pB,eAAhB;WACK91B,UAAH,CACEwX,IADF,EAEEjY,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;gBACZhf,GAAG6D,OAAH,CAAWoU,IAAX;SADR,CAHF;WAOGrX,MAAH,CAAUqX,IAAV,EAAgB,KAAhB;WACGxX,UAAH,CACEwX,IADF,EAEEjY,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWue,YAHb;;;;WAOGsN,iBAAH,CAAqBG,KAArB;;;OAGDjmB,KAAH,CACEwR,KAAKoe,UAAL,EADF,EAEEr2B,GAAG8J,kBAAH,CAAsB9J,GAAG4sB,eAAH,CAAmBrqB,OAAnB,CAAtB,CAFF;;;;;ACjEW,MAAMk0B,6BAAN,SAA4Cp0B,YAA5C,CAEb;;;;iEACmCmK,WAAWkqB,qBAD9C;;;WAGA,CACE12B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;UACAmqB,QAAQzU,KAAKwS,gBAAL,EAAd;;YACQiC,KAAR;WACOlgB,WAAW8pB,aAAhB;WACK9pB,WAAW+pB,eAAhB;aACOC,eAAL,CAAqBx2B,EAArB,EAAyB0sB,KAAzB,EAAgCzU,IAAhC,EAAsC1V,OAAtC;;;WAEGiK,WAAWue,SAAhB;WACKve,WAAWwe,UAAhB;WACKxe,WAAWmqB,UAAhB;WACKnqB,WAAWoqB,gBAAhB;aACOC,UAAL,CAAgB72B,EAAhB,EAAoB0sB,KAApB,EAA2BzU,IAA3B,EAAiC1V,OAAjC;;;;WAGGgqB,iBAAH,CAAqBG,KAArB;;;;iBAIN,CACE1sB,EADF,EAEE0sB,KAFF,EAGEzU,IAHF,EAIE1V,OAJF,EAKQ;OACHkE,KAAH,CACEwR,KAAKoe,UAAL,EADF,EAEEr2B,GAAGkY,iBAAH,CAAqBlY,GAAGqD,gBAAH,CAAoBd,OAApB,CAArB,CAFF;;YAKQmqB,KAAR;WACOlgB,WAAW8pB,aAAhB;WACK71B,UAAH,CACEwX,IADF,EAEEjY,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;gBAAQhf,GAAG6D,OAAH,CAAWoU,IAAX;SAA5B,CAHF;WAKGrX,MAAH,CAAUqX,IAAV,EAAgB,KAAhB;WACGxX,UAAH,CACEwX,IADF,EAEEjY,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWue,YAHb;;;WAMGzS,WAAW+pB,eAAhB;WACK91B,UAAH,CACEwX,IADF,EAEEjY,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;gBAAQhf,GAAG6D,OAAH,CAAWoU,IAAX;SAA5B,CAHF;WAKGrX,MAAH,CAAUqX,IAAV,EAAgB,KAAhB;WACGxX,UAAH,CACEwX,IADF,EAEEjY,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWue,YAHb;;;;WAOGsN,iBAAH,CAAqBG,KAArB;;;OAGDjmB,KAAH,CAASwR,KAAKoe,UAAL,EAAT,EAA4Br2B,GAAG4sB,eAAH,CAAmBrqB,OAAnB,CAA5B;;;YAGF,CACEvC,EADF,EAEE0sB,KAFF,EAGEzU,IAHF,EAIE1V,OAJF,EAKQ;UACAu0B,UAAU7e,KAAKoe,UAAL,EAAhB;OACG5vB,KAAH,CAASqwB,OAAT,EAAkB92B,GAAGkY,iBAAH,CAAqBlY,GAAGqD,gBAAH,CAAoBd,OAApB,CAArB,CAAlB;;QACI,CAACA,QAAQI,SAAb,EAAwB;SACnB/B,MAAH,CAAUqX,IAAV,EAAgB,MAAhB;;;;YAIMyU,KAAR;WACOlgB,WAAWue,SAAhB;WACKtqB,UAAH,CACEwX,IADF,EAEE1V,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;gBAAQhf,GAAG6D,OAAH,CAAWoU,IAAX;SAA5B,CAHF;WAKGxX,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWwe,UAAhB;WACKvqB,UAAH,CACEwX,IADF,EAEE1V,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;gBAAQhf,GAAG6D,OAAH,CAAWoU,IAAX;SAA5B,CAHF;WAKGrX,MAAH,CAAUqX,IAAV,EAAgB,QAAhB;WACGxX,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWmqB,UAAhB;WACKl2B,UAAH,CACEwX,IADF,EAEE1V,OAFF,EAGEvC,GAAGU,OAAH,CAAWse,QAAX,CAAoB;gBAAQhf,GAAG6D,OAAH,CAAWoU,IAAX;SAA5B,CAHF;WAKGrX,MAAH,CAAUqX,IAAV,EAAgB,QAAhB;WACGxX,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWue,YAAxC;;;WAEGzS,WAAWoqB,gBAAhB;WACKn2B,UAAH,CACEq2B,OADF,EAEEv0B,OAFF,EAGEvC,GAAGU,OAAH,CAAWmC,SAAX,CAAqB;gBAAQ7C,GAAG6D,OAAH,CAAWizB,OAAX;SAA7B,CAHF;WAKGl2B,MAAH,CAAUqX,IAAV,EAAgB,KAAhB;WACGxX,UAAH,CAAcq2B,OAAd,EAAuBv0B,OAAvB,EAAgCvC,GAAGU,OAAH,CAAWysB,aAA3C;;;;WAGGZ,iBAAH,CAAqBG,KAArB;;;;;;AChIO,MAAMqK,gCAAN,SAA+C10B,YAA/C,CAEb;;;;iEACmCmK,WAAWwqB,wBAD9C;;;WAGA,CACEh3B,EADF,EAEEiY,IAFF,EAGE7U,SAHF,EAIQ;UACAb,UAAUvC,GAAGqD,gBAAH,CAAoBrD,GAAGkY,iBAAH,CAAqB9U,SAArB,CAApB,CAAhB;UACM6zB,aAAahf,KAAKG,aAAL,EAAnB,CAFM;;OAIH3R,KAAH,CAASwwB,UAAT,EAAqB10B,OAArB,EAJM;;OAMH9B,UAAH,CACEw2B,UADF,EAEE10B,OAFF,EAGEvC,GAAGU,OAAH,CAAW+X,QAAX,CAAoB;YAAQzY,GAAG6D,OAAH,CAAWozB,UAAX;KAA5B,CAHF;;QAMI7zB,UAAUsV,QAAd,EAAwB;UAClBtV,UAAUT,SAAd,EAAyB;;WAEpB/B,MAAH,CAAUq2B,UAAV,EAAsB,MAAtB;OAHoB;;;SAMnBpyB,cAAH,CAAkBoT,IAAlB,EAAwBA,KAAKzH,OAAL,EAAxB,EANsB;;SAQnB5P,MAAH,CAAUqX,IAAV,EAAgB,KAAhB,EARsB;;SAUnBxX,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4Y,yBAAxC;;;QAGElW,UAAUT,SAAV,IAAuB,CAACS,UAAUsV,QAAtC,EAAgD;;SAE3C7T,cAAH,CAAkBoT,IAAlB,EAAwBA,KAAKzH,OAAL,EAAxB,EAF8C;;SAI3C/P,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC;;UAEI,CAAC5G,UAAUT,SAAf,EAA0B;WACrB/B,MAAH,CAAUqX,IAAV,EAAgB,MAAhB;;;;;;;ACzCO,MAAMif,gCAAN,SAA+C70B,YAA/C,CAEb;;;;iEACmCmK,WAAW2qB,wBAD9C;;;WAEA,CACEn3B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACTW,MAAMmf,qBAAN,SAAoC/0B,YAApC,CAAgE;;;;iEAC1CmK,WAAW6qB,aAD+B;;;WAE7E,CACEr3B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACPW,MAAMqf,qBAAN,SAAoCj1B,YAApC,CAAgE;;;;iEAC1CmK,WAAW+qB,aAD+B;;;WAE7E,CACEv3B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;QACFA,QAAQI,SAAZ,EAAuB;SAClBkC,cAAH,CAAkBoT,IAAlB,EAAwBA,KAAKkb,eAAL,EAAxB;SACG1yB,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgO,YAAxC;;;;;;ACTS,MAAM8oB,uBAAN,SAAsCn1B,YAAtC,CAEb;;;;iEACmCmK,WAAWirB,YAD9C;;;WAGA,CACEz3B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;QACFA,QAAQI,SAAZ,EAAuB;YACf8iB,aAAaljB,QAAQkjB,UAA3B;;UACIA,cAAc,IAAlB,EAAwB;cAChB,IAAIpkB,KAAJ,CACJ,2DADI,CAAN;OAHmB;;;SASlBsD,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBiY,IAAjB,EAAuB1V,OAAvB,EAAgCkjB,UAAhC,EATqB;;SAWlB5gB,cAAH,CAAkBoT,IAAlB,EAAwB,WAAxB,EAXqB;;SAalBxX,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAWsJ,yBAAxC;;;;;;ACvBS,MAAM0tB,gCAAN,SAA+Cr1B,YAA/C,CAEb;;;;iEACmCmK,WAAWmrB,wBAD9C;;;WAEA,CACE33B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACTW,MAAM2f,sBAAN,SAAqCv1B,YAArC,CAEb;;;;iEACmCmK,WAAWqrB,WAD9C;;;WAGA,CACE73B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;QACFA,QAAQI,SAAZ,EAAuB;SAClBgC,KAAH,CAASyb,OAAT,CAAiBpgB,EAAjB,EAAqBiY,IAArB,EAA2B1V,OAA3B;;;;;;ACXS,MAAMu1B,qBAAN,SAAoCz1B,YAApC,CAAgE;;;;iEAC1CmK,WAAWurB,uBAD+B;;;WAE7E,CACE/3B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACPW,MAAM+f,wBAAN,SAAuC31B,YAAvC,CAEb;;;;iEACmCmK,WAAWyrB,gBAD9C;;;WAGA,CACEj4B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACVW,MAAMigB,sBAAN,SAAqC71B,YAArC,CAEb;;;;iEACmCmK,WAAW2rB,cAD9C;;;WAGA,CACEn4B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;QACFA,QAAQI,SAAZ,EAAuB;SAClBlC,UAAH,CAAcwX,IAAd,EAAoB1V,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4C,eAAxC;;;;;;ACXS,MAAM80B,uBAAN,SAAsC/1B,YAAtC,CAEb;;;;iEACmCmK,WAAW6rB,eAD9C;;;WAGA,CACEr4B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACHoI,iBAAH,CAAqBsN,IAArB;;;;;ACyBJ,iBAAe,CACbyR,8BADa,EAEbK,qBAFa,EAGbE,oBAHa,EAIbG,uBAJa,EAKbE,wBALa,EAMbgD,0BANa,EAObE,2BAPa,EAQb4E,sBARa,EASbkB,2BATa,EAUbE,6BAVa,EAWbK,wBAXa,EAYbE,+BAZa,EAabE,0BAba,EAcbE,kBAda,EAebI,wBAfa,EAgBbE,oBAhBa,EAiBbE,qBAjBa,EAkBbE,yBAlBa,EAmBbE,qCAnBa,EAoBbE,mBApBa,EAqBbG,sBArBa,EAsBbE,+BAtBa,EAuBbO,yBAvBa,EAwBbE,+BAxBa,EAyBbE,kCAzBa,EA0BbE,8BA1Ba,EA2BbM,6BA3Ba,EA4BbM,gCA5Ba,EA6BbG,gCA7Ba,EA8BbE,qBA9Ba,EA+BbE,qBA/Ba,EAgCbE,uBAhCa,EAiCbE,gCAjCa,EAkCbE,sBAlCa,EAmCbE,qBAnCa,EAoCbE,wBApCa,EAqCbE,sBArCa,EAsCbE,uBAtCa,CAAf;;ACnCO,MAAME,kBAAN,SAAiCj2B,YAAjC,CAA0D;;;;iEAC5BmK,WAAW+rB,UADiB;;;WAG/D,CACEv4B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;SACDi2B,qBAAL,GAA6Bh4B,OAA7B,CAAsCkQ,IAAD,IAAU;SAC1CjK,KAAH,CAASiK,IAAT,EAAenO,OAAf;KADF;OAGG9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW+3B,iBAAX,CAA6B;mBAAe;KAA5C,CAHF;SAKKC,qBAAL,GAA6Bl4B,OAA7B,CAAsCkQ,IAAD,IAAU;SAC1CjK,KAAH,CAASiK,IAAT,EAAenO,OAAf;KADF;SAGKo2B,oBAAL,GAA4Bn4B,OAA5B,CAAqCo4B,UAAD,IAAgB;SAC/CnyB,KAAH,CAASmyB,UAAT,EAAqBr2B,OAArB;KADF;;;;;ACvBJ,WAAe,CAAC+1B,kBAAD,CAAf;;ACIO,MAAMO,aAAN,SAA4Bx2B,YAA5B,CAAgD;;;;iEAClBmK,WAAWssB,KADO;;;WAGrD,CACE94B,EADF,EAEEiY,IAFF,EAGE1V,OAHF,EAIQ;OACH9B,UAAH,CACEwX,IADF,EAEE1V,OAFF,EAGEvC,GAAGU,OAAH,CAAW+3B,iBAAX,CAA6B;mBAAe;KAA5C,CAHF;;;;;ACLG,MAAMM,sBAAN,SAAqC12B,YAArC,CAAkE;;;;iEACpCmK,WAAWwsB,cADyB;;;WAGvE,CACEh5B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACA02B,QAAQh5B,KAAKi5B,QAAL,EAAd;;QACID,SAAS,IAAb,EAAmB;SACdtuB,iBAAH,CAAqBsuB,KAArB;;;QAGE12B,QAAQkN,OAAR,IAAmB,IAAvB,EAA6B;SACxBxB,WAAH,CACEhO,IADF,EAEE,uDAFF,EAGEgM,eAAeiC,oBAHjB;KADF,MAMO;SACFrN,WAAH,CAAeZ,IAAf,EAAqBmO,gBAArB;SACGC,OAAH,CAAWpO,IAAX,EAAiB,KAAjB,EAAwBsC,QAAQkN,OAAhC;;;;;;ACxBC,MAAM0pB,iBAAN,SAAgC92B,YAAhC,CAAwD;;;;iEAC1BmK,WAAW4sB,SADe;;;WAG7D,CACEp5B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;SACD82B,UAAL,GAAkB74B,OAAlB,CAA2B84B,MAAD,IAAY;SACjC7yB,KAAH,CAAS6yB,MAAT,EAAiB/2B,OAAjB;KADF;;;;;ACRG,MAAMg3B,kBAAN,SAAiCl3B,YAAjC,CAA0D;;;;iEAC5BmK,WAAWgtB,UADiB;;;WAG/D,CACEx5B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACHoI,iBAAH,CAAqB1K,IAArB;;;;;ACRG,MAAMw5B,mBAAN,SAAkCp3B,YAAlC,CAA4D;;;;iEAC9BmK,WAAWktB,WADmB;;;WAGjE,CACE15B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACAo3B,WAAW15B,KAAK25B,sBAAL,EAAjB;;QACID,YAAY,IAAhB,EAAsB;SACjBlzB,KAAH,CAASxG,KAAK45B,QAAL,EAAT,EAA0Bt3B,OAA1B;KADF,MAEO;SACF4F,SAAH,CAAalI,IAAb,EAAmBsC,OAAnB,EAA6B0B,YAAD,IAAkB;WACzCwC,KAAH,CAASkzB,QAAT,EAAmB11B,YAAnB;WACGwC,KAAH,CAASxG,KAAK45B,QAAL,EAAT,EAA0B51B,YAA1B;OAFF;;;;;;ACTC,MAAM61B,yBAAN,SAAwCz3B,YAAxC,CAAwE;;;;iEAC1CmK,WAAWutB,iBAD+B;;;WAG7E,CACE/5B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACA02B,QAAQh5B,KAAKi5B,QAAL,EAAd;;QACID,SAAS,IAAb,EAAmB;SACdtuB,iBAAH,CAAqBsuB,KAArB;;;QAGE12B,QAAQoN,UAAR,IAAsB,IAA1B,EAAgC;SAC3B1B,WAAH,CACEhO,IADF,EAEE,0DAFF,EAGEgM,eAAeiC,oBAHjB;KADF,MAMO;SACFrN,WAAH,CAAeZ,IAAf,EAAqBmO,mBAArB;SACGC,OAAH,CAAWpO,IAAX,EAAiB,KAAjB,EAAwBsC,QAAQoN,UAAhC;;;;;;ACxBC,MAAMqqB,yBAAN,SAAwC33B,YAAxC,CAAwE;;;;iEAC1CmK,WAAWytB,iBAD+B;;;WAG7E,CACEj6B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACHoI,iBAAH,CAAqB1K,IAArB;;;;;ACRG,MAAMi6B,qBAAN,SAAoC73B,YAApC,CAAgE;;;;iEAClCmK,WAAW2tB,aADuB;;;WAGrE,CACEn6B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH3B,MAAH,CAAUX,IAAV,EAAgB,MAAhB;OACGQ,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW+3B,iBAAX,CAA6B;mBAAe;KAA5C,CAHF;;;;;ACTG,MAAM2B,mBAAN,SAAkC/3B,YAAlC,CAA4D;;;;iEAC9BmK,WAAW6tB,WADmB;;;WAGjE,CACEr6B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH4M,kBAAH,CAAuB/N,EAAD,IAAQ;SACzB+N,kBAAH,CAAuBO,OAAD,IAAa;WAC9BjJ,KAAH,CACExG,KAAKq6B,YAAL,EADF,EAEEt6B,GAAG4P,cAAH,CACE5P,GAAG6P,iBAAH,CAAqBtN,OAArB,EAA8BmN,QAAQF,OAAR,EAA9B,CADF,EAEEpO,GAAGoO,OAAH,EAFF,CAFF;OADF;SAUG/O,UAAH,CACER,KAAKmY,aAAL,EADF,EAEE7V,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;mBACD,MAAM;aACZ8F,KAAH,CAASxG,KAAKmY,aAAL,EAAT,EAA+BpY,GAAGqD,gBAAH,CAAoBd,OAApB,CAA/B;SAFU;kBAIF,MAAM;aACX8L,OAAH,CAAWpO,IAAX,EAAiB,KAAjB,EAAwBmB,GAAGiO,QAAH,EAAxB;;OALJ,CAHF;KAXF;;;;;ACRG,MAAMkrB,sBAAN,SAAqCl4B,YAArC,CAAkE;;;;iEACpCmK,WAAWguB,cADyB;;;WAGvE,CACEx6B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;;;;;ACPH,MAAMk4B,2BAAN,SAA0Cp4B,YAA1C,CAEL;;;;iEACmCmK,WAAWkuB,mBAD9C;;;WAGA,CACE16B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACHkE,KAAH,CAASxG,KAAKmY,aAAL,EAAT,EAA+BpY,GAAG8J,kBAAH,CAAsBvH,OAAtB,CAA/B;;;;;ACVG,MAAMo4B,sBAAN,SAAqCt4B,YAArC,CAAkE;;;;iEACpCmK,WAAWouB,cADyB;;;WAGvE,CACE56B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACHoI,iBAAH,CAAqB1K,IAArB;;;;;ACRG,MAAM46B,sBAAN,SAAqCx4B,YAArC,CAAkE;;;;iEACpCmK,WAAWsuB,cADyB;;;WAGvE,CACE96B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACHoI,iBAAH,CAAqB1K,IAArB;;;;;ACRG,MAAM86B,oBAAN,SAAmC14B,YAAnC,CAA8D;;;;iEAChCmK,WAAWwuB,YADqB;;;WAGnE,CACEh7B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;QACFiI,WAAJ;UACMywB,kBAAkBh7B,KAAKwK,cAAL,EAAxB;;QACIwwB,mBAAmB,IAAvB,EAA6B;oBACb,MAAM;WACfx0B,KAAH,CAASw0B,eAAT,EAA0Bj7B,GAAG8J,kBAAH,CAAsBvH,OAAtB,CAA1B;OADF;;;QAKEwM,SAAJ;UACMmsB,gBAAgBj7B,KAAKyzB,YAAL,EAAtB;;QACIwH,iBAAiB,IAArB,EAA2B;kBACb,MAAM;WACbz0B,KAAH,CAASy0B,aAAT,EAAwBl7B,GAAGqD,gBAAH,CAAoBd,OAApB,CAAxB;WACG9B,UAAH,CACEy6B,aADF,EAEEl7B,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWmC,SAAX,CAAqB;gBACb7C,GAAG6D,OAAH,CAAWq3B,aAAX;SADR,CAHF;OAFF;;;QAYEjsB,WAAJ;UACMksB,kBAAkBl7B,KAAKm7B,cAAL,EAAxB;;QACID,mBAAmB,IAAvB,EAA6B;oBACb,MAAM;WACf10B,KAAH,CAAS00B,eAAT,EAA0Bn7B,GAAG8J,kBAAH,CAAsBvH,OAAtB,CAA1B;OADF;;;OAKC9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWkC,OAAX,CAAmB;iBAAA;eAAA;iBAAA;YAIVqB,YAAD,IAAkB;WACnBwC,KAAH,CAASxG,KAAKq6B,YAAL,EAAT,EAA8Bt6B,GAAG8J,kBAAH,CAAsB7F,YAAtB,CAA9B;;KALJ,CAHF;;;;;ACvCG,MAAMo3B,mBAAN,SAAkCh5B,YAAlC,CAA4D;;;;iEAC9BmK,WAAW8uB,WADmB;;;WAGjE,CACEt7B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACAwM,YAAY,MAAM;YAChBwsB,OAAOt7B,KAAKmY,aAAL,EAAb;SACG3R,KAAH,CAAS80B,IAAT,EAAev7B,GAAGqD,gBAAH,CAAoBd,OAApB,CAAf;SACG9B,UAAH,CACE86B,IADF,EAEEv7B,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWmC,SAAX,CAAqB;cACb7C,GAAG6D,OAAH,CAAW03B,IAAX;OADR,CAHF;KAHF;;UAYMl0B,WAAW,MAAM;SAClBZ,KAAH,CAASxG,KAAKu7B,gBAAL,EAAT,EAAkCj5B,OAAlC;KADF;;QAIIwN,SAAJ;UACM0rB,gBAAgBx7B,KAAKy7B,gBAAL,EAAtB;;QACID,iBAAiB,IAArB,EAA2B;kBACb,MAAM;WACbh1B,KAAH,CAASg1B,aAAT,EAAwBl5B,OAAxB;OADF;;;OAKC9B,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWC,EAAX,CAAc;eAAA;cAAA;;KAAd,CAHF;;;;;AChCG,MAAMg7B,wBAAN,SAAuCt5B,YAAvC,CAAsE;;;;iEACxCmK,WAAWovB,gBAD6B;;;WAG3E,CACE57B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACHoI,iBAAH,CAAqB1K,IAArB;;;;;ACRG,MAAM47B,2BAAN,SAA0Cx5B,YAA1C,CAEL;;;;iEACmCmK,WAAWsvB,mBAD9C;;;WAGA,CACE97B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACHoI,iBAAH,CAAqB1K,IAArB;;;;;ACVG,MAAM87B,uBAAN,SAAsC15B,YAAtC,CAAoE;;;;iEACtCmK,WAAWwvB,eAD2B;;;WAGzE,CACEh8B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACA0V,OAAOhY,KAAKmY,aAAL,EAAb;;QACIH,QAAQ,IAAZ,EAAkB;SACbxX,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAW4C,eAHb;KADF,MAMO;SACFmD,KAAH,CAASwR,IAAT,EAAejY,GAAGqD,gBAAH,CAAoBd,OAApB,CAAf;;;OAGC9B,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWgI,sBAHb;OAKG9H,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;;;ACxBG,MAAMg8B,uBAAN,SAAsC55B,YAAtC,CAAoE;;;;iEACtCmK,WAAW0vB,eAD2B;;;WAGzE,CACEl8B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH4M,kBAAH,CAAuB/N,EAAD,IAAQ;SACzBqF,KAAH,CAASxG,KAAKmY,aAAL,EAAT,EAA+BpY,GAAGqD,gBAAH,CAAoBd,OAApB,CAA/B;SACGkE,KAAH,CAASxG,KAAKk8B,YAAL,EAAT,EAA8Bn8B,GAAG4P,cAAH,CAAkBrN,OAAlB,EAA2BnB,GAAGoO,OAAH,EAA3B,CAA9B;KAFF;;;;;ACRG,MAAM4sB,sBAAN,SAAqC/5B,YAArC,CAAkE;;;;iEACpCmK,WAAW6vB,cADyB;;;WAGvE,CACEr8B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACA0V,OAAOhY,KAAKmY,aAAL,EAAb;OACG3R,KAAH,CAASwR,IAAT,EAAejY,GAAGqD,gBAAH,CAAoBd,OAApB,CAAf;OACG9B,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWiO,KAAxC;;;;;ACVG,MAAM2tB,oBAAN,SAAmCj6B,YAAnC,CAA8D;;;;iEAChCmK,WAAW+vB,YADqB;;;WAGnE,CACEv8B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;UACAi6B,cAAcv8B,KAAKw8B,cAAL,EAApB;;QACID,eAAe,IAAnB,EAAyB;SACpB/1B,KAAH,CAASxG,KAAKy8B,WAAL,EAAT,EAA6Bn6B,OAA7B;KADF,MAEO;SACF4M,kBAAH,CAAuB/N,EAAD,IAAQ;WACzB+N,kBAAH,CAAuBO,OAAD,IAAa;aAC9BjJ,KAAH,CACExG,KAAKy8B,WAAL,EADF,EAEE18B,GAAG28B,cAAH,CAAkBp6B,OAAlB,EAA2BmN,QAAQF,OAAR,EAA3B,CAFF;aAIGnB,OAAH,CAAWpO,IAAX,EAAiB,KAAjB,EAAwBmB,GAAGoO,OAAH,EAAxB;SALF;WAQG/I,KAAH,CAAS+1B,WAAT,EAAsBj6B,OAAtB;OATF;;;UAaIq6B,eAAe38B,KAAK48B,eAAL,EAArB;;QACID,gBAAgB,IAApB,EAA0B;SACrBjyB,iBAAH,CAAqBiyB,YAArB;;;;;;AC3BC,MAAME,yBAAN,SAAwCz6B,YAAxC,CAAwE;;;;iEAC1CmK,WAAWuwB,iBAD+B;;;WAG7E,CACE/8B,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIQ;OACHqD,KAAH,CAASxG,KAAK+8B,kBAAL,EAAT,EAAoC55B,SAApC;;QAEInD,KAAK0mB,aAAL,EAAJ,EAA0B;YAClBpkB,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB,CADwB;;SAIrB3C,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW6iB,gBAAxC;WAEGyZ,kBADH,GAEGzT,eAFH,GAGG/oB,OAHH,CAGYkQ,IAAD,IAAU;;WAEd9P,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFiB;;WAId0E,KAAH,CAASoT,GAAT,CAAa/X,EAAb,EAAiBC,IAAjB,EAAuBsC,OAAvB,EAAgCmO,KAAKF,OAAL,EAAhC,EAJiB;;WAMd/P,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAW8iB,MAAX,CAAkB;gBAAQ9S,KAAKF,OAAL;SAA1B,CAHF;OATJ,EALwB;;SAqBrB5P,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;;;AC/BC,MAAMg9B,sBAAN,SAAqC56B,YAArC,CAAkE;;;;iEACpCmK,WAAW0wB,cADyB;;;WAGvE,CACEl9B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACH4M,kBAAH,CAAuB/N,EAAD,IAAQ;SACzBqF,KAAH,CAASxG,KAAKmY,aAAL,EAAT,EAA+BpY,GAAGqD,gBAAH,CAAoBd,OAApB,CAA/B;SACG8L,OAAH,CAAWpO,IAAX,EAAiB,UAAjB,EAA6BmB,GAAGoO,OAAH,EAA7B;SACG/I,KAAH,CACExG,KAAKq6B,YAAL,EADF,EAEEt6B,GAAG4P,cAAH,CACE5P,GAAG6P,iBAAH,CAAqBtN,OAArB,EAA8BnB,GAAGiO,QAAH,EAA9B,CADF,EAEEjO,GAAGoO,OAAH,EAFF,CAFF;SAOGnB,OAAH,CAAWpO,IAAX,EAAiB,KAAjB,EAAwBmB,GAAGiO,QAAH,EAAxB;KAVF;;;;;ACRG,MAAM8tB,qBAAN,SAAoC96B,YAApC,CAAgE;;;;iEAClCmK,WAAW4wB,aADuB;;;WAGrE,CACEp9B,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIQ;OACHoI,iBAAH,CAAqB1K,IAArB;;;;;ACWJ,gBAAe,CACb44B,aADa,EAEbE,sBAFa,EAGbI,iBAHa,EAIbI,kBAJa,EAKbE,mBALa,EAMbK,yBANa,EAObE,yBAPa,EAQbE,qBARa,EASbE,mBATa,EAUbG,sBAVa,EAWbE,2BAXa,EAYbE,sBAZa,EAabE,sBAba,EAcbE,oBAda,EAebM,mBAfa,EAgBbM,wBAhBa,EAiBbE,2BAjBa,EAkBbE,uBAlBa,EAmBbE,uBAnBa,EAoBbG,sBApBa,EAqBbE,oBArBa,EAsBbQ,yBAtBa,EAuBbG,sBAvBa,EAwBbE,qBAxBa,CAAf;;ACjBA,MAAME,WAAW,KAAjB;AACA,MAAMC,cAAc,KAApB;;AAEA,MAAeC,SAAf,CAAyB;;;;qCAEuB,IAAIhxB,GAAJ,EAFvB;;;;;;;;;MAOZnL,EAAX,GAAwB;WACf,KAAKo8B,SAAL,EAAP;;;WAGF,GAA2B;QACrB,KAAKC,UAAL,IAAmB,IAAvB,EAA6B;WACtBA,UAAL,GAAkB,CAAlB;;UACI,KAAKC,IAAL,IAAa,IAAjB,EAAuB;aAChBD,UAAL,GAAkB,CAAlB;OADF,MAEO;aACAA,UAAL,GAAkB,KAAKC,IAAL,CAAUt8B,EAAV,GAAe,KAAKs8B,IAAL,CAAUv5B,MAA3C;;;;WAIG,KAAKs5B,UAAZ;;;SAGF,GAAuB;QACjB,KAAKA,UAAL,IAAmB,IAAvB,EAA6B;WACtBA,UAAL,GAAkB36B,SAAlB;UACI66B,OAAO,KAAKA,IAAhB;;aACOA,QAAQ,IAAf,EAAqB;aACdF,UAAL,GAAkB36B,SAAlB;eACO66B,KAAKA,IAAZ;;;;;MAKKC,WAAX,GAAiC;QAC3Bz5B,SAAS,KAAKA,MAAlB;QACIw5B,OAAO,KAAKA,IAAhB;;WACOA,QAAQ,IAAf,EAAqB;gBACTA,KAAKx5B,MAAf;aACOw5B,KAAKA,IAAZ;;;WAEKx5B,MAAP;;;MAGSu5B,IAAX,GAAyC;WAChC,KAAKG,YAAZ;;;MAGSH,IAAX,CAAgBA,IAAhB,EAA6C;SACtCI,OAAL;SACKD,YAAL,GAAoBH,IAApB;;;MAGSC,IAAX,GAAyC;WAChC,KAAKI,YAAZ;;;MAGSJ,IAAX,CAAgBA,IAAhB,EAA6C;SACtCI,YAAL,GAAoBJ,IAApB;;;aAGF,CAAmBK,OAAnB,EAAkD;QAC5CC,OAA8B,IAAlC;QACIC,WAAW,KAAf;QACIC,MAAiB,IAArB;;WACOF,QAAQ,IAAf,EAAqB;YACbG,SAASJ,QAAQ,CAAR,CAAf;;UACII,UAAU,IAAd,EAAoB;eACXD,GAAP;;;UAGEh6B,SAAS,CAAb;;UACI85B,KAAKN,IAAL,IAAa,IAAb,IAAqB,CAACO,QAA1B,EAAoC;iBACzB,CAAT;;;UAGEP,OAA8BM,KAAKN,IAAvC;UACIU,eAAe,KAAnB;;UAEGD,OAAOE,KAAP,IACCL,KAAK78B,EAAL,GAAU68B,KAAK95B,MAAf,GAAwBA,MAAxB,GACEi6B,OAAOh9B,EAAP,GAAYg9B,OAAOG,aAAP,EAFhB,IAGC,CAACH,OAAOE,KAAR,IACCL,KAAK78B,EAAL,IAAWg9B,OAAOh9B,EAAP,GAAYg9B,OAAOG,aAAP,EAAZ,GAAqCp6B,MALpD,EAME;eACO85B,IAAP;;YACIC,QAAJ,EAAc;gBACNM,WAAWJ,OAAOK,OAAP,EAAjB;eACKC,YAAL,CAAkBF,QAAlB;;cACIP,SAAS,IAAb,EAAmB;kBACXO,QAAN;;SAJJ,MAMO;gBACCA,WAAWJ,OAAOK,OAAP,EAAjB;gBACMr1B,OAAO,IAAIu1B,aAAJ,CAAkB,KAAlB,EAAyBV,IAAzB,CAAb;eACKS,YAAL,CAAkBt1B,IAAlB;eACKw1B,WAAL,CAAiBJ,QAAjB;;cACIP,SAAS,IAAb,EAAmB;kBACXO,QAAN;;;;uBAGW,IAAf;gBACQK,KAAR;;;aAGKlB,IAAP;iBACWU,YAAX;;;QAGEL,QAAQ75B,MAAR,GAAiB,CAArB,EAAwB;YAChB,IAAI9C,KAAJ,CACH,kEACC28B,QAAQ75B,MACT,EAHG,CAAN;;;WAOKg6B,GAAP;;;cAGF,CAAoBW,KAApB,EAA4C;QACtC,KAAKpB,IAAL,IAAa,IAAjB,EAAuB;WAChBA,IAAL,CAAUC,IAAV,GAAiBmB,KAAjB;YACMpB,IAAN,GAAa,KAAKA,IAAlB;;;SAGGA,IAAL,GAAYoB,KAAZ;UACMnB,IAAN,GAAa,IAAb;;;aAGF,CAAmBmB,KAAnB,EAA2C;QACrC,KAAKnB,IAAL,IAAa,IAAjB,EAAuB;WAChBA,IAAL,CAAUD,IAAV,GAAiBoB,KAAjB;YACMnB,IAAN,GAAa,KAAKA,IAAlB;;;SAGGA,IAAL,GAAYmB,KAAZ;UACMpB,IAAN,GAAa,IAAb;;;SAGF,CAAeoB,KAAf,EAAuC;QACjC,KAAKpB,IAAL,IAAa,IAAjB,EAAuB;WAChBA,IAAL,CAAUC,IAAV,GAAiBmB,KAAjB;YACMjB,YAAN,GAAqB,KAAKH,IAA1B;;;QAGE,KAAKC,IAAL,IAAa,IAAjB,EAAuB;UACjBmB,MAAM36B,MAAN,KAAiB,KAAKA,MAA1B,EAAkC;aAC3Bw5B,IAAL,CAAUE,YAAV,GAAyBiB,KAAzB;OADF,MAEO;aACAnB,IAAL,CAAUD,IAAV,GAAiBoB,KAAjB;;;YAGInB,IAAN,GAAa,KAAKA,IAAlB;;;;;;AAKN,MAAMgB,aAAN,SAA4BpB,SAA5B,CAAsC;cAIlB55B,IADlB,EAEUo7B,cAFV,EAGE;;;;;oCALsB,CAKtB;;;MAISX,MAAX,GAAyC;QACnC,KAAKW,cAAL,IAAuB,IAA3B,EAAiC;YACzB,IAAI19B,KAAJ,CAAU,gBAAV,CAAN;;;WAGK,KAAK09B,cAAZ;;;MAGSX,MAAX,CAAkBA,MAAlB,EAA+C;SACxCW,cAAL,GAAsBX,MAAtB;;;MAGSY,aAAX,GAAoC;WAC3B,KAAKZ,MAAL,CAAYh9B,EAAZ,GAAiB,KAAKA,EAA7B;;;MAGS69B,aAAX,GAAoC;WAC3B,KAAKb,MAAL,CAAYh9B,EAAZ,GAAiB,KAAKA,EAA7B;;;MAGSF,MAAX,GAA4B;QACtB,KAAKk9B,MAAL,CAAYh9B,EAAZ,KAAmB,KAAKA,EAA5B,EAAgC;YACxB,IAAIC,KAAJ,CACJ,6DADI,CAAN;;;WAIK,KAAK+8B,MAAL,CAAYh9B,EAAZ,GAAiB,KAAKA,EAA7B;;;;;AAIJ,MAAM89B,eAAN,SAA8B3B,SAA9B,CAAwC;cAGVplB,KAA5B,EAA2C;;;;;;SAEpChU,MAAL,GAAcgU,MAAMhU,MAApB;;;;;AAIJ,MAAMg7B,OAAN,CAAc;cAMM/9B,EADlB,EAEkBk9B,KAFlB,EAGSF,MAHT,EAIE;;;;;oCARsB,CAQtB;;;;;;;MAESgB,MAAX,GAA6C;QACvC,KAAKC,cAAL,IAAuB,IAA3B,EAAiC;YACzB,IAAIh+B,KAAJ,CAAU,2BAAV,CAAN;;;WAGK,KAAKg+B,cAAZ;;;MAGSD,MAAX,CAAkBA,MAAlB,EAAmD;SAC5CC,cAAL,GAAsBD,MAAtB;;;SAGF,GAAgC;UACxBh2B,OAAO,IAAIu1B,aAAJ,CAAkB,KAAlB,EAAyB,KAAKP,MAA9B,CAAb;SACKgB,MAAL,CAAYhB,MAAZ,GAAqBh1B,IAArB;;QACI,KAAKg1B,MAAL,YAAuBe,OAA3B,EAAoC;WAC7Bf,MAAL,CAAYgB,MAAZ,GAAqBh2B,IAArB;KADF,MAEO;WACAg1B,MAAL,CAAYkB,OAAZ,CAAoBh2B,GAApB,CAAwBF,IAAxB;;;QAGE,KAAKg2B,MAAL,YAAuBT,aAA3B,EAA0C;WACnCW,OAAL,CAAah2B,GAAb,CAAiB,KAAK81B,MAAtB;;;WAGKh2B,IAAP;;;MAGS41B,aAAX,GAAoC;WAC3B,KAAKV,KAAZ;;;MAGSW,aAAX,GAAoC;WAC3B,CAAC,KAAKX,KAAb;;;MAGSp9B,MAAX,GAA4B;QACtB,KAAKk9B,MAAL,CAAYh9B,EAAZ,KAAmB,KAAKA,EAA5B,EAAgC;YACxB,IAAIC,KAAJ,CACJ,6DADI,CAAN;;;WAIK,KAAK+8B,MAAL,CAAYh9B,EAAZ,GAAiB,KAAKA,EAA7B;;;eAGF,GAA+B;QACzB,KAAKm+B,kBAAL,IAA2B,IAA/B,EAAqC;YAC7B,IAAIl+B,KAAJ,CAAU,cAAV,CAAN;;;WAGK,KAAKk+B,kBAAZ;;;mBAGF,CAAyBvB,OAAzB,EAAmD;UAC3CwB,WAAW,KAAKJ,MAAL,CAAYh+B,EAA7B;;QACI,KAAKk9B,KAAT,EAAgB;WACTiB,kBAAL,GAA0BvB,QACvBl6B,MADuB,CACfs6B,MAAD,IAAYoB,WAAWpB,OAAOh9B,EAAlB,IAAwBg9B,OAAOh9B,EAAP,GAAY,KAAKA,EADrC,EAEvBq+B,MAFuB,CAEfC,GAAD,IAASA,MAAM,CAFC,EAEE,CAFF,CAA1B;KADF,MAIO;WACAH,kBAAL,GAA0BvB,QACvBl6B,MADuB,CACfs6B,MAAD,IAAY,KAAKh9B,EAAL,GAAUg9B,OAAOh9B,EAAjB,IAAuBg9B,OAAOh9B,EAAP,GAAYo+B,QAD/B,EAEvBC,MAFuB,CAEfC,GAAD,IAASA,MAAM,CAFC,EAEE,CAFF,CAA1B;;;;;;AAON,AAAO,MAAMC,YAAN,CAAmB;SACxB,CAAe5+B,QAAf,EAAqE;QAC/DoB,QAAmB,KAAKy9B,YAAL,CAAkB7+B,QAAlB,CAAvB;QACI8+B,aAAa,EAAjB;;OACG;WACIrC,SAAL,CAAer7B,KAAf;YACM29B,SAAS,KAAKC,UAAL,CAAgB59B,KAAhB,CAAf;cACQ29B,OAAO,CAAP,CAAR;mBACaA,OAAO,CAAP,CAAb;;YACME,mBAAmBC,EAAEC,MAAF,CAASL,UAAT,EAAsBzB,MAAD,IAAYA,OAAOh9B,EAAxC,CAAzB;;uBACiBZ,OAAjB,CAA0B49B,MAAD,IACvBA,OAAO+B,iBAAP,CAAyBH,gBAAzB,CADF;cAGQ79B,MAAMi+B,WAAN,CAAkBJ,gBAAlB,CAAR;KATF,QAUSH,WAAW17B,MAAX,GAAoB,CAV7B;;SAYKq5B,SAAL,CAAer7B,KAAf;QACIk+B,UAAiCl+B,KAArC;UACMm+B,MAA4B,EAAlC;;WACOD,WAAW,IAAlB,EAAwB;UAClBA,mBAAmB1B,aAAvB,EAAsC;cAC9Bv9B,KAAK,IAAIQ,mBAAJ,CAAwBy+B,QAAQjC,MAAR,CAAeh9B,EAAvC,CAAX;;YACIi/B,QAAQ18B,IAAR,KAAiB,MAArB,EAA6B;cACvBrD,IAAJ,CAAS,IAAImB,IAAJ,CAASL,EAAT,CAAT;SADF,MAEO;cACDd,IAAJ,CAAS,IAAIqB,GAAJ,CAAQ0+B,QAAQ18B,IAAhB,EAAsBvC,EAAtB,CAAT;;OALJ,MAOO,IAAIi/B,mBAAmBnB,eAAvB,EAAwC;YACzC5+B,IAAJ,CAAS+/B,QAAQloB,KAAjB;OADK,MAEA;cACC,IAAI9W,KAAJ,CAAU,uBAAV,CAAN;;;gBAEQg/B,QAAQ1C,IAAlB;;;WAGK2C,GAAP;;;YAGF,CAAmBC,SAAnB,EAAiE;UACzDV,aAAa,EAAnB;QAEI1B,MAAiBoC,SAArB;QACIpoB,QAA+BooB,SAAnC;;WACOpoB,SAAS,IAAhB,EAAsB;UAChBA,iBAAiBwmB,aAArB,EAAoC;cAC5BmB,SAAS,KAAKU,SAAL,CAAeroB,KAAf,CAAf;;YACI2nB,UAAU,IAAd,EAAoB;kBACV3nB,MAAMwlB,IAAd;SADF,MAEO;gBACC,CAAC8C,QAAD,EAAWC,eAAX,IAA8BZ,MAApC;gBACMa,OAAN,CAAcF,QAAd;;cACItoB,UAAUooB,SAAd,EAAyB;kBACjBE,QAAN;;;qBAESngC,IAAX,CAAgB,GAAGogC,eAAnB;kBACQD,SAAS9C,IAAjB;;OAXJ,MAaO;gBACGxlB,MAAMwlB,IAAd;;;;WAIG,CAACQ,GAAD,EAAM0B,UAAN,CAAP;;;WAGF,CACE1nB,KADF,EAE0C;QAErCA,MAAM6mB,aAAN,IAAuB7mB,MAAMjX,MAAN,GAAem8B,QAAvC,IACCllB,MAAM8mB,aAAN,IAAuB9mB,MAAMjX,MAAN,GAAe,CAACm8B,QAF1C,EAGE;YACMiB,QAAQnmB,MAAM6mB,aAApB;YACM4B,YAAYtC,QAAQhB,WAAR,GAAsB,CAACA,WAAzC;;UACInlB,MAAMimB,MAAN,YAAwBe,OAA5B,EAAqC;cAC7B,IAAI99B,KAAJ,CAAU,+CAAV,CAAN;;;YAEIq/B,kBAAkB,KAAKG,YAAL,CACtB,IAAI1B,OAAJ,CAAYhnB,MAAM/W,EAAN,GAAWw/B,SAAvB,EAAkCtC,KAAlC,EAAyCnmB,MAAMimB,MAA/C,CADsB,CAAxB;YAGM0C,iBAAiBJ,gBAAgB,CAAhB,CAAvB;YACMD,WAA0B,IAAI9B,aAAJ,CAC9BxmB,MAAMxU,IADwB,EAE9Bm9B,cAF8B,CAAhC;qBAIe1B,MAAf,GAAwBqB,QAAxB;YACMrC,MAAN,CAAakB,OAAb,CAAqByB,MAArB,CAA4B5oB,KAA5B;OACC,GAAGA,MAAMmnB,OAAV,EAAmB9+B,OAAnB,CAA4B4+B,MAAD,IAAY;eAC9BhB,MAAP,GAAgBqC,QAAhB;iBACSnB,OAAT,CAAiBh2B,GAAjB,CAAqB81B,MAArB;OAFF;aAKO,CAACqB,QAAD,EAAWC,eAAX,CAAP;;;WAGK59B,SAAP;;;cAGF,CAAqBqV,KAArB,EAAgD;QAE3CA,MAAM6mB,aAAN,IAAuB7mB,MAAMjX,MAAN,GAAem8B,QAAvC,IACCllB,MAAM8mB,aAAN,IAAuB9mB,MAAMjX,MAAN,GAAe,CAACm8B,QAF1C,EAGE;YACMiB,QAAQnmB,MAAM6mB,aAApB;YACM4B,YAAYtC,QAAQhB,WAAR,GAAsB,CAACA,WAAzC;;UACInlB,MAAMimB,MAAN,YAAwBe,OAA5B,EAAqC;cAC7B,IAAI99B,KAAJ,CAAU,+CAAV,CAAN;;;YAEIy/B,iBAAiB,IAAI3B,OAAJ,CACrBhnB,MAAM/W,EAAN,GAAWw/B,SADU,EAErBtC,KAFqB,EAGrBnmB,MAAMimB,MAHe,CAAvB;YAKMA,MAAN,GAAe0C,cAAf;qBACe1B,MAAf,GAAwBjnB,KAAxB;YACM0nB,aAAa,KAAKgB,YAAL,CAAkBC,cAAlB,CAAnB;aACO,CAAC3oB,KAAD,EAAQmE,MAAR,CAAeujB,UAAf,CAAP;;;WAGK,CAAC1nB,KAAD,CAAP;;;cAGF,CAAqBpX,QAArB,EAAgE;UACxDu+B,UAA6C,EAAnD;UACM0B,aAA0C,EAAhD;UACMC,gBAAgBlgC,SAAS,CAAT,CAAtB;QACIoB,KAAJ;;QACI8+B,yBAAyB1/B,IAA7B,EAAmC;YAC3B2/B,gBAAgB,IAAIvC,aAAJ,CAAkBsC,cAAcz/B,EAAhC,CAAtB;cACQy/B,cAAc7/B,EAAd,CAAiBE,KAAjB,EAAR,IAAoC,CAAC4/B,aAAD,CAApC;cACQA,aAAR;KAHF,MAIO;cACG,IAAIhC,eAAJ,CAAoB+B,aAApB,CAAR;;;eAES,CAAX,IAAgB9+B,KAAhB;QAEIf,KAAKe,MAAMgC,MAAf;QACIu5B,OAAkBv7B,KAAtB;;SACK,MAAMgW,KAAX,IAAoBpX,SAAS6wB,KAAT,CAAe,CAAf,CAApB,EAAuC;UACjC2O,SAAJ;;UACIpoB,iBAAiB5W,IAArB,EAA2B;cACnB4/B,WAAWhpB,MAAM/W,EAAN,CAASE,KAAT,EAAjB;YACI4/B,aAAJ;;YACIC,WAAW//B,EAAf,EAAmB;0BACD,IAAIu9B,aAAJ,CAAkBxmB,MAAM3W,EAAxB,EAA4Bw/B,WAAWG,QAAX,CAA5B,CAAhB;qBACWA,QAAX,EAAqB7B,OAArB,CAA6Bh2B,GAA7B,CAAiC43B,aAAjC;SAFF,MAGO;0BACW,IAAIvC,aAAJ,CAAkBxmB,MAAM3W,EAAxB,CAAhB;;cACI89B,QAAQ6B,QAAR,KAAqB,IAAzB,EAA+B;oBACrBA,QAAR,IAAoB,EAApB;;;kBAEMA,QAAR,EAAkB7gC,IAAlB,CAAuB4gC,aAAvB;;;oBAEUA,aAAZ;OAbF,MAcO;oBACO,IAAIhC,eAAJ,CAAoB/mB,KAApB,CAAZ;;;YAGIipB,YAAY9B,QAAQl+B,EAAR,CAAlB;;UACIggC,aAAa,IAAjB,EAAuB;eACd9B,QAAQl+B,EAAR,CAAP;kBACUZ,OAAV,CAAmB4+B,MAAD,IAAY;iBACrBhB,MAAP,GAAgBmC,SAAhB;oBACUjB,OAAV,CAAkBh2B,GAAlB,CAAsB81B,MAAtB;SAFF;;;iBAKSh+B,EAAX,IAAiBm/B,SAAjB;YACMA,UAAUp8B,MAAhB;gBAEUu5B,IAAV,GAAiBA,IAAjB;WACKC,IAAL,GAAY4C,SAAZ;aACOA,SAAP;;;WAGKp+B,KAAP;;;WAGF,CAAkBo+B,SAAlB,EAA8C;cAClCzC,OAAV;QACIuC,UAAiCE,SAArC;;WACOF,WAAW,IAAlB,EAAwB;cACd7C,SAAR;gBACU6C,QAAQ1C,IAAlB;;;;;;ACvbN,MAAM0D,YAAY,CAACC,YAAD,EAAeC,SAAf,EAA0BtK,UAA1B,EAAsCuK,IAAtC,EAA4CzwB,SAA5C,CAAlB;AAMA,AAAO,MAAe0wB,iBAAf,CACoB;cAgBNC,OADnB,EAEkBhhC,OAFlB,EAGqBihC,GAHrB,EAImBC,UAJnB,EAKmBC,aAAuB,EAL1C,EAME;;;;;;;uCApBqC,IAAI9hC,SAAJ,EAoBrC;;;;;;;;;;yCAf4C,IAAIkB,sBAAJ,EAe5C;;8CAd+C6B,SAc/C;;mCAb0C,IAAIg/B,GAAJ,EAa1C;;uCAZ2D,EAY3D;;8CAX+D,EAW/D;;uCAVgE,EAUhE;;6CATwB,CASxB;;gDAR2B,CAQ3B;;SACK/gC,QAAL,GAAgB,EAAhB;SACKK,EAAL,GAAU,CAAV;SACK2gC,YAAL,GAAoBj/B,SAApB;SACKu+B,SAAL,GAAkBA,SAAD,CACd5B,MADc,CACP,CAACC,GAAD,EAAMsC,aAAN,KAAwBtC,IAAIpjB,MAAJ,CAAW0lB,aAAX,CADjB,EAC4C,EAD5C,EAEdvC,MAFc,CAGb,CAACC,GAAD,EAAMuC,YAAN,KAAuB;YACfC,eAAe,IAAID,YAAJ,EAArB;;UACIvC,IAAIwC,aAAa1X,IAAjB,KAA0B,IAA9B,EAAoC;cAC5B,IAAInpB,KAAJ,CACH,qCAAoC6gC,aAAa1X,IAAK,EADnD,CAAN;;;UAKE0X,aAAa1X,IAAjB,IAAyB0X,YAAzB;aACOxC,GAAP;KAZW,EAcb,EAda,CAAjB;;;MAkBE/6B,KAAJ,GAAoB;QACd,KAAKo9B,YAAL,IAAqB,IAAzB,EAA+B;YACvB,IAAI1gC,KAAJ,CAAU,wBAAV,CAAN;;;WAEK,KAAK0gC,YAAZ;;;MAGEpe,WAAJ,GAA0B;WACjB,KAAKwe,kBAAZ;;;SAGF,GAAuB;UACfP,aAAa,KAAKA,UAAxB;UACM;;QAAe,KAAKxhC,OAAL,CAAa,MAAM;WACjCgiC,SAAL,CAAeR,WAAWS,WAAX,EAAf,IAA2C,KAAKC,eAAhD;WACKC,gBAAL,CAAsB,KAAKD,eAA3B,IAA8CV,WAAWS,WAAX,EAA9C;WACKF,kBAAL,GAA0B,KAAKG,eAA/B;WACKA,eAAL,IAAwB,CAAxB;WAEKP,YAAL,GAAoB,KAAK3xB,WAAL,CAAiBwxB,UAAjB,EAA6B,CAA7B,EAAgC9+B,SAAhC,CAApB;WACK0/B,KAAL,CAAWx3B,GAAX,CAAe42B,UAAf,EAA2B,CAA3B;YACMr/B,UAAU,EAAhB;WACKw/B,YAAL,CAAkBl5B,IAAlB,CAAuB,IAAvB,EAA6B+4B,UAA7B,EAAyCr/B,OAAzC,EAAmD0B,YAAD,IAAkB;;aAE7DxD,UAAL,CACEmhC,UADF,EAEE,KAAKv+B,gBAAL,CAAsBd,OAAtB,CAFF,EAGE,KAAK7B,OAAL,CAAa+hC,eAHf,EAFkE;;aAQ7D99B,KAAL,CAAWC,SAAX,CAAqB,IAArB,EAA2Bg9B,UAA3B,EAAuC,KAAKv+B,gBAAL,CAAsBd,OAAtB,CAAvC,EARkE;;aAU7D9B,UAAL,CACEmhC,UADF,EAEE,KAAKv+B,gBAAL,CAAsBd,OAAtB,CAFF,EAGE,KAAK7B,OAAL,CAAagiC,cAHf,EAVkE;;aAgB7Db,UAAL,CAAgBrhC,OAAhB,CAAyBkgB,MAAD,IAAY;iBAC3BiiB,UAAP,CAAkB,IAAlB,EAAwBf,UAAxB,EAAoC39B,YAApC;SADF;aAGKwC,KAAL,CAAWm7B,UAAX,EAAuB39B,YAAvB;OAnBF;KATmB,CAArB;SAgCKkL,kBAAL,CAAyB/N,EAAD,IAAQ;WACzBiN,OAAL,CAAauzB,UAAb,EAAyB,KAAzB,EAAgCxgC,GAAGoO,OAAH,EAAhC;WACKozB,WAAL,CAAiB5gC,KAAjB,CAAuBZ,GAAGmO,UAAH,EAAvB;WACKlG,SAAL,CAAew5B,SAAf,CAAyB,IAAzB,EAA+BjB,UAA/B;KAHF;SAKK9gC,YAAL,CAAkBC,QAAlB;;;kBAGF,GAAkC;UAC1BA,WAAW,IAAI4+B,YAAJ,GAAmBv7B,OAAnB,CACf,KAAKrD,QAAL,CAAc0B,GAAd,CAAkB,CAAC,CAACw9B,IAAD,EAAI9nB,KAAJ,CAAD,KAAgBA,KAAlC,CADe,CAAjB;QAGI/W,KAAK,CAAT;UACM0hC,UAAU/hC,SAAS0B,GAAT,CAAcsgC,OAAD,IAAa;UACpC5qB,QAAQ4qB,OAAZ;;UACI5qB,iBAAiB5W,IAArB,EAA2B;cACnByhC,WAAW,IAAIC,EAAJ,CAAO9qB,MAAM/W,EAAN,CAASE,KAAT,EAAP,EAAyB4hC,GAAzB,CAA6B,IAAID,EAAJ,CAAO7hC,EAAP,CAA7B,CAAjB,CADyB;;cAGnB+hC,SAASH,SAASI,MAAT,CAAgB,EAAhB,CAAf;cACMC,iBACJC,4BAA4BC,mBAAmBprB,MAAM3W,EAAzB,CAA5B,CADF;;YAEI6hC,kBAAkB,IAAtB,EAA4B;gBACpB,IAAIhiC,KAAJ,CACJ,sDADI,CAAN;;;gBAIMyE,OAAOwW,MAAP,CAAc,CACpB+mB,cADoB,EAEpBF,OAAOK,WAAP,CAAmB19B,MAAnB,EAA2B,IAA3B,EAAiC,CAAjC,CAFoB,CAAd,CAAR;;;YAMIqS,MAAMhU,MAAZ;aACOgU,KAAP;KApBc,CAAhB;WAuBOrS,OAAOwW,MAAP,CAAcwmB,OAAd,CAAP;;;OAGF,CAAa7iC,IAAb,EAAyBsC,OAAzB,EAAsD;UAC9CkhC,WAAW,KAAKpC,SAAL,CAAephC,KAAK2Q,YAAL,CAAkB4Z,IAAjC,CAAjB;;QACIiZ,YAAY,IAAhB,EAAsB;WACf94B,iBAAL,CAAuB1K,IAAvB;KADF,MAEO;eACIyjC,SAAT,CAAmB,IAAnB,EAAyBzjC,IAAzB,EAA+BsC,OAA/B;;;;WAIJ,CACEtC,IADF,EAEEsC,OAFF,EAGEgO,IAHF,EAIQ;QACFzE,QAAQ,KAAK02B,KAAL,CAAWzqB,GAAX,CAAe9X,IAAf,CAAZ;;QACI6L,SAAS,IAAb,EAAmB;cACT,CAAR;KADF,MAEO;eACI,CAAT;;;SAGG02B,KAAL,CAAWx3B,GAAX,CAAe/K,IAAf,EAAqB6L,KAArB;UAEMi2B,eAAe,KAAKA,YAA1B;SACKA,YAAL,GAAoB,KAAK3xB,WAAL,CAAiBnQ,IAAjB,EAAuB6L,KAAvB,EAA8Bi2B,YAA9B,CAApB;SACKA,YAAL,CAAkBl5B,IAAlB,CAAuB,IAAvB,EAA6B5I,IAA7B,EAAmCsC,OAAnC,EAA4CgO,IAA5C;SACKwxB,YAAL,GAAoBA,YAApB;;;oBAGF,CAA0BxxB,IAA1B,EAA0E;UAClEnP,KAAK,IAAIc,oBAAJ,CAAyB,MAAM,KAAKd,EAApC,CAAX;SACKA,EAAL;OACGuiC,OAAH;;;QAGF,CACE1jC,IADF,EAEE2jC,IAFF,EAGEC,MAHF,EAIQ;UACA9iC,WAAWwiC,mBAAmBK,IAAnB,CAAjB;;QACI7iC,YAAY,IAAhB,EAAsB;YACd,IAAI+iC,cAAJ,CAAmBF,IAAnB,CAAN;;;SAEGG,UAAL,CAAgB9jC,IAAhB,EAAsBc,QAAtB,EAAgC8iC,MAAhC;;;aAGF,CAAmB5jC,IAAnB,EAA+B8iC,OAA/B,EAA2D;UACnD5qB,QAAQ,IAAI8qB,EAAJ,CAAOF,OAAP,CAAd;;QACI5qB,MAAM6rB,EAAN,CAASC,MAAMC,YAAf,CAAJ,EAAkC;aACzB,KAAKtjC,MAAL,CAAYX,IAAZ,EAAkB,QAAlB,CAAP;KADF,MAEO,IAAIkY,MAAM6rB,EAAN,CAASC,MAAME,IAAf,CAAJ,EAA0B;aACxB,KAAKC,QAAL,CAAcnkC,IAAd,EAAoBgkC,MAAMI,cAAN,CAAqBlsB,KAArB,CAApB,CAAP;KADK,MAEA,IAAIA,MAAMmsB,EAAN,CAASL,MAAME,IAAf,KAAwBhsB,MAAMosB,EAAN,CAASN,MAAMO,OAAf,CAA5B,EAAqD;aACnD,KAAKT,UAAL,CACL9jC,IADK,EAELsjC,mBAAmBkB,KAAnB,GAA2B,CAA3B,GAA+BtsB,MAAM6G,QAAN,EAF1B,CAAP;;;WAMK,KAAKolB,QAAL,CAAcnkC,IAAd,EAAoBgkC,MAAMI,cAAN,CAAqBlsB,KAArB,CAApB,CAAP;;;iBAGF,CAAuBlY,IAAvB,EAAmCkY,KAAnC,EAAyD;SAClDvX,MAAL,CAAYX,IAAZ,EAAkBkY,QAAQ,OAAR,GAAkB,OAApC;;;gBAGF,CAAsBlY,IAAtB,EAAkCkY,KAAlC,EAAuD;WAC9C,KAAKisB,QAAL,CAAcnkC,IAAd,EAAoB,KAAKykC,QAAL,CAAcvsB,KAAd,CAApB,CAAP;;;SAGF,CACElY,IADF,EAEE2jC,IAFF,EAGExiC,EAHF,EAIQ;SACDujC,QAAL,CAAc1kC,IAAd,EAAoB,IAAI0B,GAAJ,CAAQiiC,IAAR,EAAcxiC,EAAd,CAApB;;;YAGF,CACEnB,IADF,EAEEsC,OAFF,EAGEme,MAHF,EAIQ;WACC7X,IAAP,CAAY,IAAZ,EAAkB5I,IAAlB,EAAwBsC,OAAxB;;;cAGF,CAAoBxB,QAApB,EAA8C;UACtCK,KAAK,KAAKA,EAAhB;aACSZ,OAAT,CAAiB,CAAC,CAACP,IAAD,EAAO2jC,IAAP,CAAD,KAAkB;UAC7BA,gBAAgBniC,IAApB,EAA0B;aACnBkjC,QAAL,CAAc1kC,IAAd,EAAoB2jC,IAApB;OADF,MAEO,IAAIA,gBAAgBjiC,GAApB,EAAyB;aACzBgjC,QAAL,CAAc1kC,IAAd,EAAoB2jC,KAAKliC,IAAL,CAAUN,EAAV,CAApB;OADK,MAEA,IAAIwiC,gBAAgBriC,IAApB,EAA0B;cACzB,IAAIF,KAAJ,CAAU,uBAAV,CAAN;OADK,MAEA;aACAujC,OAAL,CAAa3kC,IAAb,EAAmB2jC,IAAnB;;KARJ;;;UAaF,CAAgB3jC,IAAhB,EAAkC;SAC3B0kC,QAAL,CAAc1kC,IAAd,EAAoB,IAAIwB,IAAJ,CAAS,KAAKmhC,WAAd,CAApB;;;aAGF,CAAmB3iC,IAAnB,EAA+ByE,IAA/B,EAAwD;UAChDmgC,gBAAgB/+B,OAAOg/B,IAAP,CAAYpgC,IAAZ,EAAkB,OAAlB,CAAtB;UACMqgC,SAAS,IAAIC,YAAJ,EAAf;WACOC,eAAP,CAAuBJ,aAAvB;SACKjkC,MAAL,CAAYX,IAAZ,EAAkB,SAAlB,EAA6B8kC,OAAOL,QAAP,EAA7B;;;YAGF,CAAkB9C,UAAlB,EAAgD;UACxCr/B,UAAU,EAAhB;QAEIohB,cAAc,KAAKye,SAAL,CAAeR,WAAWS,WAAX,EAAf,CAAlB;;QACI1e,eAAe,IAAnB,EAAyB;oBACT,KAAK2e,eAAnB;WACKA,eAAL,IAAwB,CAAxB;WACKF,SAAL,CAAeR,WAAWS,WAAX,EAAf,IAA2C1e,WAA3C;WACK4e,gBAAL,CAAsB5e,WAAtB,IAAqCie,WAAWS,WAAX,EAArC;YAEMN,eAAe,KAAKA,YAA1B;WACKA,YAAL,GAAoB,KAAK3xB,WAAL,CAAiBwxB,UAAjB,EAA6B,CAA7B,EAAgC9+B,SAAhC,CAApB;YAEMq/B,qBAAqB,KAAKA,kBAAhC;WACKA,kBAAL,GAA0Bxe,WAA1B,CAVuB;;WAalBhf,KAAL,CAAWC,SAAX,CAAqB,IAArB,EAA2Bg9B,UAA3B,EAAuC,KAAKv+B,gBAAL,CAAsBd,OAAtB,CAAvC,EAbuB;;WAelB3B,MAAL,CAAYghC,UAAZ,EAAwB,KAAxB,EAfuB;;WAiBlBnhC,UAAL,CACEmhC,UADF,EAEE,KAAKv+B,gBAAL,CAAsBd,OAAtB,CAFF,EAGE,KAAK7B,OAAL,CAAagiC,cAHf;WAMKX,YAAL,CAAkBl5B,IAAlB,CAAuB,IAAvB,EAA6B+4B,UAA7B,EAAyCr/B,OAAzC,EAAmD0B,YAAD,IAAkB;;aAE7DU,KAAL,CAAW4c,SAAX,CAAqB,IAArB,EAA2BqgB,UAA3B,EAAuCr/B,OAAvC;aACKkE,KAAL,CAAWm7B,UAAX,EAAuB39B,YAAvB;OAHF;WAMK89B,YAAL,GAAoBA,YAApB;WACKI,kBAAL,GAA0BA,kBAA1B;KAlC4C;;;SAsCzCx9B,KAAL,CAAWC,SAAX,CAAqB,IAArB,EAA2Bg9B,UAA3B,EAAuC,KAAKv+B,gBAAL,CAAsBd,OAAtB,CAAvC,EAtC8C;;SAwCzC9B,UAAL,CACEmhC,UADF,EAEE,KAAKv+B,gBAAL,CAAsBd,OAAtB,CAFF,EAGE,KAAK7B,OAAL,CAAagjB,SAAb,CAAuB;;KAAvB,CAHF;;;SAOF,CAAenT,IAAf,EAAgD;UACxC20B,2BAA2B,KAAKC,gBAAtC;SACKA,gBAAL,GAAwB,EAAxB;UACMC,aAAa,KAAKhkC,EAAxB;SACKA,EAAL,GAAU,CAAV;;UAEM+jC,mBAAmB,KAAKA,gBAA9B;SACKA,gBAAL,GAAwBD,wBAAxB;UACMG,iBAAiB,KAAKjkC,EAA5B;SACKA,EAAL,GAAUgkC,UAAV;WACO;cAAUC,cAAV;gBAAoCF;KAA3C;;;UAGF,CAAgBhtB,KAAhB,EAAuC;WAC9BrS,OAAOg/B,IAAP,CAAY3sB,KAAZ,EAAmB,MAAnB,CAAP;;;cAGF,CAAoB5V,OAApB,EAAyD;6BAElDA,OADL;iBAEa,KAFb;gBAGY,KAHZ;eAIWO;;;;kBAIb,CAAwBP,OAAxB,EAA6D;6BAC/CA,OAAZ;iBAAgC;;;;oBAGlC,CAA0BA,OAA1B,EAA+D;6BACjDA,OAAZ;iBAAgC;;;;iBAGlC,CAAuBA,OAAvB,EAA4D;6BAC9CA,OAAZ;gBAA+B;;;;mBAGjC,CAAyBA,OAAzB,EAA8D;6BAChDA,OAAZ;gBAA+B;;;;gBAGjC,CAAsBA,OAAtB,EAA2D;6BAC7CA,OAAZ;iBAAgC,KAAhC;gBAAiD;;;;gBAGnD,CACEA,OADF,EAEEnB,EAFF,EAGgB;6BACFmB,OAAZ;eAA8BnB;;;;mBAGhC,CACEmB,OADF,EAEEnB,EAFF,EAGgB;6BACFmB,OAAZ;kBAAiCnB;;;;gBAGnC,CACEmB,OADF,EAEEnB,EAFF,EAGgB;6BACFmB,OAAZ;eAA8BnB;;;;aAGhC,CAAmBmB,OAAnB,EAA0CqB,IAA1C,EAAoE;6BACtDrB,OAAZ;;;;;eAGF,CAAqBA,OAArB,EAA0D;6BAC5CA,OAAZ;YAA2BO;;;;mBAG7B,CACEP,OADF,EAEEkjB,UAFF,EAGgB;6BACFljB,OAAZ;;;;;qBAGF,CAA2BA,OAA3B,EAAgE;6BAClDA,OAAZ;kBAAiCO;;;;aAGnC,CAAmB7C,IAAnB,EAA+BqlC,OAA/B,EAAgD1B,IAAhD,EAA4E;SACrElC,OAAL,CAAazzB,WAAb,CAAyBhO,IAAzB,EAA+BqlC,OAA/B,EAAwC1B,IAAxC;;;mBAGF,CAAyB3jC,IAAzB,EAA2C;SACpCyhC,OAAL,CAAa/2B,iBAAb,CAA+B1K,IAA/B;;;SAGF,CAAeA,IAAf,EAA2BslC,WAAoB,KAA/C,EAAwE;WAC/D,KAAK7D,OAAL,CAAa79B,OAAb,CAAqB5D,IAArB,EAA2BslC,QAA3B,CAAP;;;WAGF,CAAiBtlC,IAAjB,EAA6BslC,WAAoB,KAAjD,EAA4E;WACnE,KAAK7D,OAAL,CAAa5oB,SAAb,CAAuB7Y,IAAvB,EAA6BslC,QAA7B,CAAP;;;cAGF,CACEtlC,IADF,EAEE0D,IAFF,EAGEe,IAHF,EAIW;WACF,KAAKg9B,OAAL,CAAarT,YAAb,CAA0BpuB,IAA1B,EAAgC0D,IAAhC,EAAsCe,IAAtC,CAAP;;;UAGF,CACEzE,IADF,EAEE0D,IAFF,EAGEe,IAHF,EAIW;WACF,KAAKg9B,OAAL,CAAapT,QAAb,CAAsBruB,IAAtB,EAA4B0D,IAA5B,EAAkCe,IAAlC,CAAP;;;gBAGF,CACEzE,IADF,EAEEulC,MAFF,EAGE9gC,IAHF,EAIW;WACF,KAAKg9B,OAAL,CAAanP,cAAb,CAA4BtyB,IAA5B,EAAkCulC,MAAlC,EAA0C9gC,IAA1C,CAAP;;;WAGF,CAAiBk9B,UAAjB,EAAyCl9B,IAAzC,EAAgE;WACvD,CAAC,KAAK+gC,SAAL,CAAe7D,WAAWS,WAAX,EAAf,KAA4C,IAAI91B,GAAJ,EAA7C,EAAwDm5B,GAAxD,CAA4DhhC,IAA5D,CAAP;;;WAGF,CAAiBA,IAAjB,EAAqC;UAC7BihC,WAAW,KAAKC,aAAL,CACf,KAAKrD,gBAAL,CAAsB,KAAKJ,kBAA3B,CADe,CAAjB;QAGI0D,cAAc,KAAKJ,SAAL,CAAeE,QAAf,CAAlB;;QACIE,eAAe,IAAnB,EAAyB;oBACT,IAAIt5B,GAAJ,EAAd;WACKk5B,SAAL,CAAeE,QAAf,IAA2BE,WAA3B;;;gBAGUv8B,GAAZ,CAAgB5E,IAAhB;;;mBAGF,CAAyByT,KAAzB,EAA8C;UACtC,IAAI9W,KAAJ,CAAU,wBAAV,CAAN;;;eAGF,CAAwB8W,KAAxB,EAAwD;WAC/C,KAAKupB,OAAL,CAAakE,aAAb,CAA2BztB,KAA3B,CAAP;;;eAGF,CAAwBA,KAAxB,EAAiE;WACxDA,SAAS,IAAhB;;;UASF,CAAiBlY,IAAjB,EAA6BkY,KAA7B,EAAkD;QAC5CA,MAAMhU,MAAN,IAAgBo/B,mBAAmBuC,WAAvC,EAAoD;WAC7C/B,UAAL,CAAgB9jC,IAAhB,EAAsBkY,MAAMhU,MAA5B,EAAoCgU,KAApC;KADF,MAEO,IAAIA,MAAMhU,MAAN,GAAe,KAAnB,EAA0B;WAC1BvD,MAAL,CACEX,IADF,EAEE,WAFF,EAGE,IAAI8lC,aAAJ,GACGC,SADH,CACa7tB,MAAMhU,MADnB,EAEG0E,IAFH,CAEQsP,KAFR,EAGG8tB,KAHH,EAHF;KADK,MASA,IAAI9tB,MAAMhU,MAAN,GAAe,OAAnB,EAA4B;WAC5BvD,MAAL,CACEX,IADF,EAEE,WAFF,EAGE,IAAI8lC,aAAJ,GACGG,YADH,CACgB/tB,MAAMhU,MADtB,EAEG0E,IAFH,CAEQsP,KAFR,EAGG8tB,KAHH,EAHF;KADK,MASA,IAAI9tB,MAAMhU,MAAN,GAAe,WAAnB,EAAgC;WAChCvD,MAAL,CACEX,IADF,EAEE,WAFF,EAGE,IAAI8lC,aAAJ,GACGI,YADH,CACgBhuB,MAAMhU,MADtB,EAEG0E,IAFH,CAEQsP,KAFR,EAGG8tB,KAHH,EAHF;KADK,MASA;YACC,IAAI5kC,KAAJ,CAAU,kBAAV,CAAN;;;;YAIJ,CACEpB,IADF,EAEEmmC,UAFF,EAGEvC,MAHF,EAIQ;UACAwC,WAAY,GAAED,cAAc,IAAd,GAAqB,EAArB,GAA0BA,UAAW,EAAzD;UACM/C,iBAAiBC,4BAA4B+C,QAA5B,CAAvB;;QACIhD,kBAAkB,IAAtB,EAA4B;YACpB,IAAIS,cAAJ,CAAmBuC,QAAnB,CAAN;;;QAEEluB,QAAQkrB,cAAZ;;QACIQ,UAAU,IAAd,EAAoB;cACV/9B,OAAOwW,MAAP,CAAc,CAAC+mB,cAAD,EAAiBQ,MAAjB,CAAd,CAAR;;;SAEGe,OAAL,CAAa3kC,IAAb,EAAmBkY,KAAnB;;;SAGF,CAAgBlY,IAAhB,EAA4BkY,KAA5B,EAAiD;SAC1C7X,IAAL,CAAUL,IAAV,EAAgBkY,KAAhB;SACK/W,EAAL,IAAW+W,MAAMhU,MAAjB;;;UAGF,CAAiBlE,IAAjB,EAA6BmJ,IAA7B,EAA+C;SACxC9I,IAAL,CAAUL,IAAV,EAAgBmJ,IAAhB;SACKhI,EAAL,IAAW,CAAX;;;MAGF,CAAanB,IAAb,EAAyBkY,KAAzB,EAAqD;QAC/C,KAAKgtB,gBAAL,IAAyB,IAA7B,EAAmC;WAC5BA,gBAAL,CAAsB7kC,IAAtB,CAA2B,CAACL,IAAD,EAAOkY,KAAP,CAA3B;KADF,MAEO;WACApX,QAAL,CAAcT,IAAd,CAAmB,CAACL,IAAD,EAAOkY,KAAP,CAAnB;;;;;;ACviBN,MAAMmuB,cAAN,CAAqC;cAEPnuB,KAA5B,EAA2C;;;uCADhB,CACgB;;;;;AAG7C,AAAO,MAAMouB,aAAN,CAAqC;cASvBC,aADnB,EAEmB34B,MAFnB,EAGE;;;;sCAVyB,CAUzB;;uCAT8C,EAS9C;;6CAR2C,IAAIi0B,GAAJ,EAQ3C;;;;;;;;QACI,KAAKj0B,MAAL,IAAe,IAAnB,EAAyB;WAClB44B,QAAL,GAAgB,IAAhB;WACKC,UAAL,GAAkB,CAAlB;WACKC,WAAL,GAAmB,CAAnB;KAHF,MAIO;WACAF,QAAL,GAAgBD,gBAAgB,CAAhC;WACKE,UAAL,GAAkB,KAAKD,QAAL,GAAgB,CAAhB,GAAoB,CAAtC;WACKE,WAAL,GAAmB,KAAK94B,MAAL,CAAY84B,WAAZ,GAA0B,KAAKD,UAAlD;;;;KAIJ,CAAWhiC,IAAX,EAA+B;UACvBkiC,aAAa,IAAIN,cAAJ,CAAmB5hC,IAAnB,CAAnB;UACMmiC,WAAW,KAAKC,SAAL,CAAepiC,IAAf,CAAjB;;QACImiC,YAAY,IAAhB,EAAsB;aACbD,UAAP;;;SAGGE,SAAL,CAAeF,WAAWzuB,KAA1B,IAAmC,KAAK4uB,QAAxC;SACKA,QAAL,IAAiB,CAAjB;;QACI,KAAKA,QAAL,GAAgB,KAAKP,aAAzB,EAAwC;YAChC,IAAInlC,KAAJ,CACH,+BAA8BqD,IAAK,cAClC,KAAKqiC,QACN,WAAU,KAAKP,aAAc,EAH1B,CAAN;;;WAMKI,UAAP;;;WAGF,GAAyB;UACjBliC,OAAO;iBAAa;KAA1B;SACKsiC,eAAL,CAAqBh8B,GAArB,CAAyBtG,IAAzB,EAA+B,KAAKqiC,QAApC;SACKA,QAAL,IAAiB,CAAjB;;QACI,KAAKA,QAAL,GAAgB,KAAKP,aAAzB,EAAwC;YAChC,IAAInlC,KAAJ,CACH,mCAAkC,KAAK0lC,QAAS,WAC/C,KAAKP,aACN,EAHG,CAAN;;;WAMK9hC,IAAP;GArDwC;;;KAyD1C,CACE1E,EADF,EAEEC,IAFF,EAGEmD,SAHF,EAIEsB,IAJF,EAKEiiC,cAAsB,KAAKA,WAL7B,EAMEM,gBAAwB,CAN1B,EAOQ;UACA1kC,UAAUvC,GAAGqD,gBAAH,CAAoBD,SAApB,CAAhB;UACM2jC,WAAW,KAAKG,WAAL,CAAiBxiC,IAAjB,CAAjB;;QACIqiC,YAAY,IAAhB,EAAsB;UAChB,KAAKl5B,MAAL,IAAe,IAAnB,EAAyB;WACpBI,WAAH,CACEhO,IADF,EAEG,sBAAqByE,IAAK,EAF7B,EAGEuH,eAAek7B,eAHjB;OADF,MAMO;aACAt5B,MAAL,CAAY7C,GAAZ,CACEhL,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEmC,IAJF,EAKEiiC,WALF,EAMEM,gBAAgB,KAAKP,UANvB;;KARJ,MAiBO;;SAEFjmC,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAWgI,sBAAxC,EAFK;;WAIA0+B,SAAL,CAAepnC,EAAf,EAAmBC,IAAnB,EAAyB0mC,WAAzB,EAAsCM,aAAtC,EAJK;;SAMFpmC,WAAH,CAAeZ,IAAf,EAAqB8mC,QAArB,EANK;;SAQFnmC,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARK;;SAUFW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;;;;KAIJ,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEmC,IAJF,EAKEiiC,cAAsB,KAAKA,WAL7B,EAMEM,gBAAwB,CAN1B,EAOQ;UACAF,WAAW,KAAKG,WAAL,CAAiBxiC,IAAjB,CAAjB;;QACIqiC,YAAY,IAAhB,EAAsB;UAChB,KAAKl5B,MAAL,IAAe,IAAnB,EAAyB;YACnB,OAAOnJ,IAAP,KAAgB,QAAhB,IAA4B1E,GAAGU,OAAH,CAAW2mC,gBAAX,CAA4B3B,GAA5B,CAAgChhC,IAAhC,CAAhC,EAAuE;;aAElEjE,UAAH,CACER,IADF,EAEEsC,OAFF,EAGEvC,GAAGU,OAAH,CAAWiF,iBAAX,CAA6B;sBAAYjB;WAAzC,CAHF;SAFF,MAOO;aACFuJ,WAAH,CACEhO,IADF,EAEG,sBAAqByE,IAAK,EAF7B,EAGEuH,eAAek7B,eAHjB;;OATJ,MAeO;aACAt5B,MAAL,CAAYkK,GAAZ,CACE/X,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEmC,IAJF,EAKEiiC,WALF,EAMEM,gBAAgB,KAAKP,UANvB;;KAjBJ,MA0BO;WACAU,SAAL,CAAepnC,EAAf,EAAmBC,IAAnB,EAAyB0mC,WAAzB,EAAsCM,aAAtC;SACGpmC,WAAH,CAAeZ,IAAf,EAAqB8mC,QAArB;SACGnmC,MAAH,CAAUX,IAAV,EAAgB,UAAhB;SACGQ,UAAH,CAAcR,IAAd,EAAoBsC,OAApB,EAA6BvC,GAAGU,OAAH,CAAW4mC,iBAAxC;;;;SAIJ,CAAetnC,EAAf,EAAkCC,IAAlC,EAA8CsC,OAA9C,EAA2E;;SAEpEglC,OAAL,CAAavnC,EAAb,EAAiBC,IAAjB,EAFyE;;OAItEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJyE;;OAMtEW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;SAGF,CAAeD,EAAf,EAAkCC,IAAlC,EAA8CsC,OAA9C,EAA2E;;SAEpEglC,OAAL,CAAavnC,EAAb,EAAiBC,IAAjB,EAFyE;;OAItEY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJyE;;OAMtEW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EANyE;;OAQtEW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;;;WAGF,CAAiBD,EAAjB,EAAoCC,IAApC,EAAgDsC,OAAhD,EAA6E;QACvE,KAAKsL,MAAL,IAAe,IAAnB,EAAyB;;WAElB05B,OAAL,CAAavnC,EAAb,EAAiBC,IAAjB,EAFuB;;SAIpBY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJuB;;SAMpBW,MAAH,CAAUX,IAAV,EAAgB,UAAhB;KANF,MAOO;WACA4N,MAAL,CAAYjJ,SAAZ,CAAsB5E,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC;;;;WAIJ,CAAiBvC,EAAjB,EAAoCC,IAApC,EAAgDsC,OAAhD,EAA6E;QACvE,KAAKsL,MAAL,IAAe,IAAnB,EAAyB;;WAElB05B,OAAL,CAAavnC,EAAb,EAAiBC,IAAjB,EAFuB;;SAIpBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAJuB;;SAMpBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EANuB;;SAQpBY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EARuB;;SAUpBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVuB;;SAYpBW,MAAH,CAAUX,IAAV,EAAgB,SAAhB,EAZuB;;SAcpBY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAduB;;SAgBpBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAhBuB;;SAkBpBW,MAAH,CAAUX,IAAV,EAAgB,SAAhB;KAlBF,MAmBO;WACA4N,MAAL,CAAY0T,SAAZ,CAAsBvhB,EAAtB,EAA0BC,IAA1B,EAAgCsC,OAAhC;;;;YAIJ,CAAkBmC,IAAlB,EAAyC;WAErC,KAAKoiC,SAAL,CAAepiC,IAAf,KAAwB,IAAxB,IACC,KAAKmJ,MAAL,IAAe,IAAf,IAAuB,KAAKA,MAAL,CAAY25B,UAAZ,CAAuB9iC,IAAvB,CAF1B;;;SAMF,CAAe1E,EAAf,EAAkCC,IAAlC,EAA8CsC,OAA9C,EAA2E;OACtE3B,MAAH,CAAUX,IAAV,EAAgB,iBAAhB;;;MAGF,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEgO,IAJF,EAKQ;QACF,KAAKk2B,QAAT,EAAmB;WACZgB,QAAL,CAAcznC,EAAd,EAAkBC,IAAlB,EAAwBsC,OAAxB,EAAiCgO,IAAjC;KADF,MAEO;WACAhO,OAAL;;;;UAIJ,CACEvC,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEgO,IAJF,EAKQ;QACF,KAAK1C,MAAL,IAAe,IAAnB,EAAyB;;SAEpBpN,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAW4C,eAHb,EAFuB;;SAQpB7C,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAW4C,eAHb,EARuB;;SAcpBzC,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAduB;;SAgBpBW,MAAH,CAAUX,IAAV,EAAgB,WAAhB,EAhBuB;;SAkBpBY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAlBuB;;SAoBpBW,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EApBuB;;SAsBpBW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAtBuB;;SAwBpBW,MAAH,CAAUX,IAAV,EAAgB,YAAhB;KAxBF,MAyBO;;SAEFW,MAAH,CAAUX,IAAV,EAAgB,iBAAhB;KA5BI;;;OA+BHY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EA/BM;;OAiCHW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EAjCM;;OAmCHY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAnCM;;OAqCHW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EArCM;;OAuCHY,WAAH,CAAeZ,IAAf,EAAqB,CAArB;OACGkP,kBAAH,CAAuBC,MAAD,IAAY;;SAE7BxO,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAFgC;;SAI7BY,WAAH,CAAeZ,IAAf,EAAqB,KAAKumC,aAA1B,EAJgC;;SAM7B5lC,MAAH,CAAUX,IAAV,EAAgB,IAAhB,EANgC;;SAQ7BoO,OAAH,CAAWpO,IAAX,EAAiB,UAAjB,EAA6BmP,OAAOI,OAAP,EAA7B,EARgC;;SAU7B5O,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAVgC;;SAY7B4E,cAAH,CAAkB5E,IAAlB,EAAwB,2CAAxB,EAZgC;;SAc7BQ,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAWgO,YAHb,EAdgC;;SAoB7BjO,UAAH,CACER,IADF,EAEED,GAAGqD,gBAAH,CAAoBd,OAApB,CAFF,EAGEvC,GAAGU,OAAH,CAAW8N,qBAHb,EApBgC;;SA0B7B5N,MAAH,CAAUX,IAAV,EAAgB,QAAhB,EA1BgC;;SA4B7BW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EA5BgC;;SA8B7BoO,OAAH,CAAWpO,IAAX,EAAiB,KAAjB,EAAwBmP,OAAOC,QAAP,EAAxB;KA9BF,EAxCM;;OAyEHzO,MAAH,CAAUX,IAAV,EAAgB,MAAhB,EAzEM;;OA2EHW,MAAH,CAAUX,IAAV,EAAgB,QAAhB;UAEM;aAAA;gBAAA;;QAAmCsC,OAAzC;UACMmlC,WAAWj4B,WAAW,IAAX,IAAmBE,cAAc,IAAjC,IAAyCxB,WAAW,IAArE;OACGgB,kBAAH,CAAuB/N,EAAD,IAAQ;UACxB6C,eAAe1B,OAAnB;;UACIkN,WAAW,IAAf,EAAqB;uBACJzP,GAAG4P,cAAH,CAAkB3L,YAAlB,EAAgC7C,GAAGoO,OAAH,EAAhC,CAAf;;;UAGEG,cAAc,IAAlB,EAAwB;uBACP3P,GAAG6P,iBAAH,CAAqB5L,YAArB,EAAmC7C,GAAGoO,OAAH,EAAnC,CAAf;;;UAGErB,WAAW,IAAf,EAAqB;uBACJnO,GAAG28B,cAAH,CAAkB14B,YAAlB,EAAgC7C,GAAGoO,OAAH,EAAhC,CAAf;;;WAGGvL,YAAL;;UACIyjC,QAAJ,EAAc;WACT7mC,WAAH,CAAeZ,IAAf,EAAqBmO,iBAArB;;KAhBJ;;QAoBI,KAAKP,MAAL,IAAe,IAAnB,EAAyB;;SAEpBjN,MAAH,CAAUX,IAAV,EAAgB,cAAhB;SACGW,MAAH,CAAUX,IAAV,EAAgB,MAAhB;KAHF,MAIO;;SAEFW,MAAH,CAAUX,IAAV,EAAgB,iBAAhB,EAFK;;SAIFY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAJK;;SAMFW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EANK;;SAQFW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EARK;;SAUFW,MAAH,CAAUX,IAAV,EAAgB,WAAhB,EAVK;;SAYFW,MAAH,CAAUX,IAAV,EAAgB,KAAhB,EAZK;;SAcFW,MAAH,CAAUX,IAAV,EAAgB,QAAhB;;;SAGG0nC,YAAL,CAAkB3nC,EAAlB,EAAsBC,IAAtB,EAA4BmO,gBAA5B,EAAwDqB,OAAxD;SACKk4B,YAAL,CAAkB3nC,EAAlB,EAAsBC,IAAtB,EAA4BmO,mBAA5B,EAA2DuB,UAA3D;SACKg4B,YAAL,CAAkB3nC,EAAlB,EAAsBC,IAAtB,EAA4BmO,gBAA5B,EAAwDD,OAAxD;;QAEIu5B,QAAJ,EAAc;SACT9mC,MAAH,CAAUX,IAAV,EAAgB,MAAhB;;;;cAIJ,CACED,EADF,EAEEC,IAFF,EAGE2nC,UAHF,EAIExmC,EAJF,EAKQ;QACFA,MAAM,IAAV,EAAgB;SACX+N,kBAAH,CAAuBO,OAAD,IAAa;WAC9B9O,MAAH,CAAUX,IAAV,EAAgB,KAAhB;WACGY,WAAH,CAAeZ,IAAf,EAAqB2nC,UAArB;WACGhnC,MAAH,CAAUX,IAAV,EAAgB,UAAhB;WACGoO,OAAH,CAAWpO,IAAX,EAAiB,OAAjB,EAA0BmB,EAA1B;OAJF;;;;aASJ,CAAoBsD,IAApB,EAAoE;QAC9D,OAAOA,IAAP,KAAgB,QAApB,EAA8B;aACrB,KAAKoiC,SAAL,CAAepiC,IAAf,CAAP;KADF,MAEO,IAAIA,gBAAgB4hC,cAApB,EAAoC;aAClC,KAAKQ,SAAL,CAAepiC,KAAKyT,KAApB,CAAP;;;WAGK,KAAK6uB,eAAL,CAAqBjvB,GAArB,CAAyBrT,IAAzB,CAAP;;;WAGF,CACE1E,EADF,EAEEC,IAFF,EAGE0mC,WAHF,EAIEM,aAJF,EAKQ;SACDM,OAAL,CAAavnC,EAAb,EAAiBC,IAAjB,EADM;;OAGHY,WAAH,CAAeZ,IAAf,EAAqB,CAArB,EAHM;;OAKHW,MAAH,CAAUX,IAAV,EAAgB,UAAhB,EALM;;OAOHY,WAAH,CAAeZ,IAAf,EAAqB0mC,cAAcM,aAAd,GAA8B,CAAnD,EAPM;;OASHrmC,MAAH,CAAUX,IAAV,EAAgB,UAAhB;;;SAGF,CAAgBD,EAAhB,EAAmCC,IAAnC,EAAqD;;OAEhDW,MAAH,CAAUX,IAAV,EAAgB,iBAAhB;;;;;AC1ZG,MAAM4nC,cAAN,CAAsC;cAKzB5nC,IADlB,EAEkB6L,KAFlB,EAGkB+B,MAHlB,EAIE;;;;;2CAP8B,CAO9B;;sCAN8B,IAAItB,GAAJ,EAM9B;;;KAEF,CAAW7H,IAAX,EAA+B;SACxB8hC,aAAL,IAAsB,CAAtB;SACKsB,QAAL,CAAcx+B,GAAd,CAAkB5E,IAAlB;WACO;iBAAa;KAApB;;;WAGF,GAAyB;SAClB8hC,aAAL,IAAsB,CAAtB;WACO;iBAAa;KAApB;;;KAGF,CAAWxmC,EAAX,EAA8BC,IAA9B,EAAgD;OAC3CW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;KAGF,CAAWD,EAAX,EAA8BC,IAA9B,EAAgD;OAC3CW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;SAGF,CAAeD,EAAf,EAAkCC,IAAlC,EAAoD;OAC/CW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;SAGF,CAAeD,EAAf,EAAkCC,IAAlC,EAAoD;OAC/CW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;WAGF,CAAiBD,EAAjB,EAAoCC,IAApC,EAAsD;OACjDW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;WAGF,CAAiBD,EAAjB,EAAoCC,IAApC,EAAsD;OACjDW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;YAGF,CAAkByE,IAAlB,EAAyC;WAErC,KAAKojC,QAAL,CAAcpC,GAAd,CAAkBhhC,IAAlB,KACC,KAAKmJ,MAAL,IAAe,IAAf,IAAuB,KAAKA,MAAL,CAAY25B,UAAZ,CAAuB9iC,IAAvB,CAF1B;;;SAMF,CAAe1E,EAAf,EAAkCC,IAAlC,EAAoD;OAC/CW,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;MAGF,CACED,EADF,EAEEC,IAFF,EAGEsC,OAHF,EAIEgO,IAJF,EAKQ;OACH3P,MAAH,CAAUX,IAAV,EAAgB,KAAhB;SACKsC,OAAL;OACG3B,MAAH,CAAUX,IAAV,EAAgB,KAAhB;;;SAGF,CAAe4N,MAAf,EAAkE;WACzD,IAAI04B,aAAJ,CAAkB,KAAKC,aAAvB,EAAsC34B,MAAtC,CAAP;;;;;ACrEG,MAAMk6B,2BAAN,SACGtG,iBADH,CAEoB;;;;mEACmB,EADnB,2CAKrB,IAAIK,GAAJ,EALqB;;;SAOzB,GAAuB;UACf19B,OAAN;SACK4jC,aAAL;;;WAGF,GAA0D;WACjD,KAAKC,cAAZ;;;aAGF,CACEhoC,IADF,EAEE6L,KAFF,EAGE+B,MAHF,EAIkB;UACVlJ,QAAQ,IAAIkjC,cAAJ,CAAmB5nC,IAAnB,EAAyB6L,KAAzB,EAAgC+B,MAAhC,CAAd;SACKq6B,MAAL,CAAY5nC,IAAZ,CAAiBqE,KAAjB;WACOA,KAAP;;;eAGF,GAA8B;SACvBujC,MAAL,CAAY1nC,OAAZ,CAAqBmE,KAAD,IAAW;WACxBwjC,YAAL,CAAkBxjC,KAAlB;KADF;;;cAKF,CAAqBA,KAArB,EAA2D;QACrDyjC,UAAU,KAAKH,cAAL,CAAoBlwB,GAApB,CAAwBpT,MAAM1E,IAA9B,CAAd;;QACImoC,WAAW,IAAf,EAAqB;gBACT,IAAItG,GAAJ,EAAV;WACKmG,cAAL,CAAoBj9B,GAApB,CAAwBrG,MAAM1E,IAA9B,EAAoCmoC,OAApC;;;QAGE5J,WAAW4J,QAAQrwB,GAAR,CAAYpT,MAAMmH,KAAlB,CAAf;;QACI0yB,YAAY,IAAhB,EAAsB;YACd3wB,SAASlJ,MAAMkJ,MAArB;;UACIA,UAAU,IAAd,EAAoB;mBACPlJ,MAAM85B,OAAN,EAAX;OADF,MAEO;mBACM95B,MAAM85B,OAAN,CAAc,KAAK0J,YAAL,CAAkBt6B,MAAlB,CAAd,CAAX;;;cAGM7C,GAAR,CAAYrG,MAAMmH,KAAlB,EAAyB0yB,QAAzB;;;WAGKA,QAAP;;;;;AC1CG,MAAM6J,qBAAN,SAAoC5G,iBAApC,CACoB;cAGb;WAAA;UAAA;WAAA;OAAA;cAAA;;GAAZ,EAOiC;UACzBC,OAAN,EAAehhC,OAAf,EAAwBihC,GAAxB,EAA6BC,UAA7B,EAAyCC,UAAzC;;;;SACKqG,MAAL,GAAcA,MAAd;;;aAGF,CAAsBjoC,IAAtB,EAAkC6L,KAAlC,EAAgE;WACvD,KAAK85B,aAAL,CACL,KAAKA,aAAL,CAAmB,KAAKsC,MAAL,CAAYnwB,GAAZ,CAAgB9X,IAAhB,CAAnB,EAA0C8X,GAA1C,CAA8CjM,KAA9C,CADK,CAAP;;;;;AC3BG,MAAMw8B,4BAAN,SAA2CP,2BAA3C,CACoB;;;;+EAC0B,IAAIx7B,GAAJ,EAD1B,4CAEoB,EAFpB;;;YAIzB,GAA8B;WACrB,CAAC,GAAG,KAAKg8B,eAAT,CAAP;;;YAGF,CACEtoC,IADF,EAEEsC,OAFF,EAGEme,MAHF,EAIQ;QACF,CAAC,KAAK8nB,kBAAL,CAAwB9C,GAAxB,CAA4BhlB,MAA5B,CAAL,EAA0C;WACnC8nB,kBAAL,CAAwBl/B,GAAxB,CAA4BoX,MAA5B;WACK6nB,eAAL,CAAqBjoC,IAArB,CAA0BogB,MAA1B;aACOiiB,UAAP,CAAkB,IAAlB,EAAwB1iC,IAAxB,EAA8BsC,OAA9B;;;WAEKsG,IAAP,CAAY,IAAZ,EAAkB5I,IAAlB,EAAwBsC,OAAxB;;;;;ACxBG,MAAMkmC,kBAAN,CAAkD;cAEpCxoC,IADnB,EAEkByoC,WAFlB,EAGkB9E,IAHlB,EAIkB+E,QAJlB,EAKE;;;;;;;MAESnH,IAAX,GAA6C;WACpC,KAAKvhC,IAAL,CAAU2oC,aAAV,GAA0Bh4B,YAAjC;;;MAGSi4B,KAAX,GAA2B;WAClB,KAAK5oC,IAAL,CAAU6oC,QAAV,EAAP;;;MAGS3kC,MAAX,GAA4B;WACnB,KAAKlE,IAAL,CAAU8oC,QAAV,EAAP;;;MAGS3J,MAAX,GAA4B;WACnB,KAAKn/B,IAAL,CAAUwnB,OAAV,EAAP;;;;;ACLG,MAAMuhB,OAAN,CAAc;cAIAC,OADnB,EAEmBC,IAFnB,EAGmBC,UAHnB,EAIE;;;;;yCAN6C,EAM7C;;;aAEF,CAAmBlpC,IAAnB,EAA+BqlC,OAA/B,EAAgD1B,IAAhD,EAA4E;SACrEwF,WAAL,CAAiB9oC,IAAjB,CACE,IAAImoC,kBAAJ,CAAuBxoC,IAAvB,EAA6BqlC,OAA7B,EAAsC1B,IAAtC,EAA4CyF,mBAAmBhoC,KAA/D,CADF;;;eAKF,CACEpB,IADF,EAEEqlC,OAFF,EAGE1B,IAHF,EAIQ;SACDwF,WAAL,CAAiB9oC,IAAjB,CACE,IAAImoC,kBAAJ,CAAuBxoC,IAAvB,EAA6BqlC,OAA7B,EAAsC1B,IAAtC,EAA4CyF,mBAAmBC,OAA/D,CADF;;;mBAKF,CAAyBrpC,IAAzB,EAA2C;SACpCgO,WAAL,CACEhO,IADF,EAEE,oBAFF,EAGEgM,eAAes9B,kBAHjB;;;iBAOF,CAAuBtpC,IAAvB,EAAyC;SAClCgO,WAAL,CACEhO,IADF,EAEE,+DAFF,EAGEgM,eAAegkB,YAHjB;;;mBAOF,CAAyBhwB,IAAzB,EAA2C;SACpCupC,aAAL,CACEvpC,IADF,EAEE,oGACE,yBAHJ,EAIEgM,eAAegkB,YAJjB;;;SAQF,CAAehwB,IAAf,EAA2BslC,WAAoB,KAA/C,EAAwE;QAClE5hC,OAAO,KAAK8lC,aAAL,CAAmBxpC,KAAK4D,OAAL,EAAnB,CAAX;;QAEIF,QAAQ,IAAR,IAAgB0E,WAAWI,YAAX,CAAwBxI,IAAxB,CAApB,EAAmD;aAC1C,KAAKwpC,aAAL,CAAmBxpC,KAAKypC,iBAAL,EAAnB,CAAP;;;QAGE/lC,QAAQ,IAAZ,EAAkB;UACZ4hC,QAAJ,EAAc;aACPoE,eAAL,CAAqB1pC,IAArB;OADF,MAEO;aACA2pC,iBAAL,CAAuB3pC,IAAvB;;;;WAIG0D,IAAP;;;iBAGF,CACE6hC,MADF,EAEEvlC,IAFF,EAGEslC,WAAoB,KAHtB,EAIoB;QACdC,UAAU,IAAd,EAAoB;aACX1iC,SAAP;;;UAGIa,OAAO,KAAK8lC,aAAL,CAAmBjE,OAAOqE,iBAAP,CAAyB5pC,IAAzB,CAAnB,CAAb;;QACI0D,QAAQ,IAAZ,EAAkB;UACZ4hC,QAAJ,EAAc;aACPoE,eAAL,CAAqB1pC,IAArB;OADF,MAEO;aACA2pC,iBAAL,CAAuB3pC,IAAvB;;;;WAIG0D,IAAP;;;WAGF,CAAiB1D,IAAjB,EAA6BslC,WAAoB,KAAjD,EAA4E;UACpEC,SAASvlC,KAAK6Y,SAAL,EAAf;;QACI0sB,UAAU,IAAd,EAAoB;YACZF,UAAU,oCAAhB;;UACIC,QAAJ,EAAc;aACPt3B,WAAL,CAAiBhO,IAAjB,EAAuBqlC,OAAvB,EAAgCr5B,eAAe69B,cAA/C;OADF,MAEO;aACAN,aAAL,CAAmBvpC,IAAnB,EAAyBqlC,OAAzB,EAAkCr5B,eAAe69B,cAAjD;;;aAGKhnC,SAAP;;;UAGIinC,UAAUvE,OAAOwE,gBAAP,EAAhB;;QACID,WAAW,IAAf,EAAqB;aACZA,OAAP;;;WAGKvE,MAAP;;;kBAGF,CACEvlC,IADF,EAEE0D,IAFF,EAGE4hC,WAAoB,KAHtB,EAIsB;QAChB5hC,QAAQ,IAAZ,EAAkB;aACTb,SAAP;;;UAGI0iC,SAAS7hC,KAAKmV,SAAL,EAAf;;QACI0sB,UAAU,IAAd,EAAoB;YACZF,UAAW,+CAA8C3hC,KAAK8jB,OAAL,EAAe,GAA9E;;UACI8d,QAAJ,EAAc;aACPt3B,WAAL,CAAiBhO,IAAjB,EAAuBqlC,OAAvB,EAAgCr5B,eAAe69B,cAA/C;OADF,MAEO;aACAN,aAAL,CAAmBvpC,IAAnB,EAAyBqlC,OAAzB,EAAkCr5B,eAAe69B,cAAjD;;;aAGKhnC,SAAP;;;UAGIinC,UAAUvE,OAAOwE,gBAAP,EAAhB;;QACID,WAAW,IAAf,EAAqB;aACZA,OAAP;;;WAGKvE,MAAP;;;mBAGF,CAAyBrtB,KAAzB,EAA8C;UACtC,IAAI9W,KAAJ,CAAU,wBAAV,CAAN;;;eAGF,CAAwB8W,KAAxB,EAAwD;QAClDA,SAAS,IAAb,EAAmB;YACX,IAAI9W,KAAJ,CAAU,wCAAV,CAAN;;;WAGK8W,KAAP;;;cAGF,CACElY,IADF,EAEE0D,IAFF,EAGEe,IAHF,EAIW;WAEP,KAAKulC,UAAL,CAAgBtmC,IAAhB,KACA,KAAK4uB,cAAL,CAAoBtyB,IAApB,EAA0B,KAAKiqC,gBAAL,CAAsBjqC,IAAtB,EAA4B0D,IAA5B,CAA1B,EAA6De,IAA7D,CAFF;;;UAMF,CACEzE,IADF,EAEE0D,IAFF,EAGEe,IAHF,EAIW;WAEP,KAAKulC,UAAL,CAAgBtmC,IAAhB,KACA,KAAK4uB,cAAL,CAAoBtyB,IAApB,EAA0B,KAAKiqC,gBAAL,CAAsBjqC,IAAtB,EAA4B0D,IAA5B,CAA1B,EAA6De,IAA7D,CAFF;;;gBAMF,CACEzE,IADF,EAEEulC,MAFF,EAGE9gC,IAHF,EAIW;WACF8gC,WAAW,KAAKyD,OAAL,CAAavkC,IAAb,CAAlB;;;WAGF,CACEzE,IADF,EAEE0D,IAFF,EAGEe,IAHF,EAIW;WAEP,KAAKulC,UAAL,CAAgBtmC,IAAhB,KACA,KAAKwmC,WAAL,CAAiBlqC,IAAjB,EAAuB,KAAKiqC,gBAAL,CAAsBjqC,IAAtB,EAA4B0D,IAA5B,CAAvB,EAA0De,IAA1D,CAFF;;;aAMF,CACEzE,IADF,EAEEulC,MAFF,EAGE9gC,IAHF,EAIW;WACF8gC,WAAW,KAAK0D,IAAL,CAAUxkC,IAAV,CAAlB;;;YAGF,CACEkiC,UADF,EAEEliC,IAFF,EAGW;QACLkiC,cAAc,IAAlB,EAAwB;aACf,KAAP;;;WAGK,KAAKuC,UAAL,CAAgBzkC,IAAhB,EAAsBghC,GAAtB,CAA0BkB,UAA1B,CAAP;;;YAGF,CAAmBjjC,IAAnB,EAAoD;WAEhDA,QAAQ,IAAR,IACC,CAACmS,SAAA,CAAoBnS,IAApB,CAAD,IACC,CAACmS,WAAA,CAAsBnS,IAAtB,CADF,IAEC,CAACmS,OAAA,CAAkBnS,IAAlB,CAFF,IAGC,CAACmS,OAAA,CAAkBnS,IAAlB,CAHF,IAIC,CAACmS,cAAA,CAAyBnS,IAAzB,CANL;;;eAUF,CAAsBA,IAAtB,EAAgE;;QAE1DA,QAAQ,IAAR,IAAgB,CAACA,KAAKymC,QAAL,KAAkBj2B,UAAUqB,GAA7B,MAAsC,CAA1D,EAA6D;aACpD1S,SAAP;;;WAGKa,IAAP;;;;;ACtPJ;AACA;AAuBA,MAAM0mC,oBAAoB,CAAC1I,GAAD,EAAWj9B,IAAX,KAAoD;QACtE4lC,QAAQ3I,IAAI4I,cAAJ,EAAd;SACOD,MAAM1kB,IAAN,CAAY4b,IAAD,IAAU;QACtB,CAACA,KAAKgJ,iBAAL,EAAL,EAA+B;aACtB,KAAP;;;QAGEC,kBAAkBjJ,KAAKkJ,YAAL,CAAkBhmC,IAAlB,CAAtB;UACMimC,kBAAkBnJ,KAAKoJ,YAAL,CAAkB,QAAlB,CAAxB;QACIC,uBAAuB,KAA3B;;QACIJ,mBAAmB,IAAnB,IAA2BE,mBAAmB,IAAlD,EAAwD;wBACpCA,gBAAgBD,YAAhB,CAA6BhmC,IAA7B,CAAlB;6BACuB,IAAvB;;;QAGE+lC,mBAAmB,IAAvB,EAA6B;aACpB,KAAP;;;WAIAI,wBACA,CAACJ,gBAAgB75B,YAAhB,CAA6BqD,KAA7B,GAAqC62B,GAAGC,SAAH,CAAaC,kBAAnD,MACE,CAHJ;GAjBK,CAAP;CAFF;;AA2BA,AAAO,MAAMC,aAActJ,GAAD,IAAuB;MAC3CuJ,aAAab,kBAAkB1I,GAAlB,EAAuB,QAAvB,CAAjB;;MACIuJ,cAAc,IAAlB,EAAwB;iBACTvJ,IAAIwJ,6BAAJ,CACXC,QAAQ3M,OAAR,CAAgB,wBAAhB,CADW,CAAb;;;MAIEyM,cAAc,IAAlB,EAAwB;UAChB,IAAI7pC,KAAJ,CAAU,uBAAV,CAAN;;;QAEIwiC,SAASqH,WAAWG,mBAAX,CAA+B,QAA/B,CAAf;QAEMC,cAAc3J,IAAI4J,cAAJ,GAAqBC,cAAzC,CAZ+C;;QAczCC,QAAQ,IAAI3uB,QAAJ;MAER4uB,MAFQ,EAGZJ,YAAYK,eAAZ,CAA4BL,YAAYM,UAAZ,EAA5B,EAAsDpG,MAH1C,EAIZqG,eAJY,EAAd;MAMIC,UAAUzB,kBAAkB1I,GAAlB,EAAuB,aAAvB,CAAd;;MACImK,WAAW,IAAf,EAAqB;QACfC,sBAAJ,CACEC,cAAK5b,IAAL,CACE4b,cAAKC,OAAL,CAAab,QAAQ3M,OAAR,CAAgB,yBAAhB,CAAb,CADF,EAEE,IAFF,EAGE,MAHF,CADF;;;YASQ4L,kBAAkB1I,GAAlB,EAAuB,aAAvB,CAAV;;MACImK,WAAW,IAAf,EAAqB;UACb,IAAIzqC,KAAJ,CAAU,yCAAV,CAAN;;;QAGI6qC,YAAYJ,QAAQK,mBAAR,CAA4B,QAA5B,CAAlB;SAEO;WACEV,MAAMW,gBAAN,EADF;YAEGvI,OAAOuI,gBAAP,EAFH;aAGIlB,WACNmB,6BADM,CACwB,SADxB,EAEND,gBAFM,EAHJ;iBAMQF,UACVb,mBADU,CACU,aADV,EAEVe,gBAFU,EANR;eASMF,UAAUb,mBAAV,CAA8B,WAA9B,EAA2Ce,gBAA3C,EATN;mBAUUF,UACZb,mBADY,CACQ,eADR,EAEZe,gBAFY,EAVV;eAaMF,UAAUb,mBAAV,CAA8B,WAA9B,EAA2Ce,gBAA3C,EAbN;kBAcSF,UACXb,mBADW,CACS,cADT,EAEXe,gBAFW,EAdT;gBAiBOF,UAAUb,mBAAV,CAA8B,YAA9B,EAA4Ce,gBAA5C,EAjBP;eAkBMF,UAAUb,mBAAV,CAA8B,WAA9B,EAA2Ce,gBAA3C,EAlBN;gBAmBOF,UAAUb,mBAAV,CAA8B,YAA9B,EAA4Ce,gBAA5C,EAnBP;qBAoBYF,UACdb,mBADc,CACM,iBADN,EAEde,gBAFc,EApBZ;mBAuBUF,UACZb,mBADY,CACQ,eADR,EAEZe,gBAFY,EAvBV;wBA0BeF,UACjBb,mBADiB,CACG,oBADH,EAEjBe,gBAFiB,EA1Bf;yBA6BgBF,UAClBb,mBADkB,CACE,qBADF,EAElBe,gBAFkB,EA7BhB;aAgCIF,UAAUI,kBAAV,CAA6B,SAA7B,EAAwCF,gBAAxC;GAhCX;CAtCK;;AAmFP,MAAMG,cAAe5K,GAAD,IAAsC;QAClD2I,QAAQ3I,IAAI4I,cAAJ,EAAd;SACOD,MAAM1kB,IAAN,CAAY4b,IAAD,IAAUA,KAAKgL,QAAL,CAAc,YAAd,KAA+B,IAApD,CAAP;CAFF;;AAKA,AAAO,MAAMC,UAAW9K,GAAD,IAAoB;MACrC+K,YAAYH,YAAY5K,GAAZ,CAAhB;;MACI+K,aAAa,IAAjB,EAAuB;QACjBX,sBAAJ,CACEC,cAAK5b,IAAL,CACE4b,cAAKC,OAAL,CAAab,QAAQ3M,OAAR,CAAgB,yBAAhB,CAAb,CADF,EAEE,IAFF,EAGE,MAHF,CADF;;;cASU8N,YAAY5K,GAAZ,CAAZ;;MACI+K,aAAa,IAAjB,EAAuB;UACf,IAAIrrC,KAAJ,CAAU,6BAAV,CAAN;;;QAGIsrC,UAAUD,SAAhB;SAEO;QACDE,aAAJ,GAA4B;aACnBD,QAAQE,eAAR,CAAwB,eAAxB,EAAyCT,gBAAzC,EAAP;KAFG;;QAIDU,UAAJ,GAAyB;aAChBH,QAAQE,eAAR,CAAwB,YAAxB,EAAsCT,gBAAtC,EAAP;KALG;;QAODW,UAAJ,GAAyB;aAChBJ,QAAQE,eAAR,CAAwB,YAAxB,EAAsCT,gBAAtC,EAAP;KARG;;QAUDY,KAAJ,GAAoB;aACXL,QAAQM,mBAAR,CAA4B,OAA5B,EAAqCb,gBAArC,EAAP;KAXG;;QAaDc,QAAJ,GAAuB;aACdP,QAAQL,kBAAR,CAA2B,UAA3B,EAAuCF,gBAAvC,EAAP;KAdG;;QAgBDe,MAAJ,GAAqB;aACZR,QAAQL,kBAAR,CAA2B,QAA3B,EAAqCF,gBAArC,EAAP;;;GAjBJ;CAnBK;AAgDP,AAAO,MAAMgB,gBAAiBzL,GAAD,IAA0B;MACjD+K,YAAYH,YAAY5K,GAAZ,CAAhB;;MACI+K,aAAa,IAAjB,EAAuB;QACjBX,sBAAJ,CACEC,cAAK5b,IAAL,CACE4b,cAAKC,OAAL,CAAab,QAAQ3M,OAAR,CAAgB,yBAAhB,CAAb,CADF,EAEE,IAFF,EAGE,MAHF,CADF;;;cASU8N,YAAY5K,GAAZ,CAAZ;;MACI+K,aAAa,IAAjB,EAAuB;UACf,IAAIrrC,KAAJ,CAAU,6BAAV,CAAN;;;QAGIsrC,UAAUD,SAAhB;SAEO;QACDW,OAAJ,GAA+B;aACtB,IAAI9gC,GAAJ,CAAQogC,QACZM,mBADY,CACQ,SADR,EAEZK,mBAFY,EAAR,CAAP;KAFG;;QAMDC,OAAJ,GAA+B;aACtB,IAAIhhC,GAAJ,CAAQogC,QACZM,mBADY,CACQ,SADR,EAEZK,mBAFY,EAAR,CAAP;KAPG;;QAWDE,SAAJ,GAAiC;aACxB,IAAIjhC,GAAJ,CAAQogC,QACZM,mBADY,CACQ,WADR,EAEZK,mBAFY,EAAR,CAAP;KAZG;;QAgBDG,SAAJ,GAAiC;aACxB,IAAIlhC,GAAJ,CAAQogC,QACZM,mBADY,CACQ,WADR,EAEZK,mBAFY,EAAR,CAAP;;;GAjBJ;CAnBK;;MCzKMI,UAAU,CAAC;KAAA;YAAA;WAGbC;CAHY,KAIc;QAC7BjM,UACJiM,aAAa,IAAI3E,OAAJ,CAAYiC,WAAWtJ,GAAX,CAAZ,EAA6B8K,QAAQ9K,GAAR,CAA7B,EAA2CyL,cAAczL,GAAd,CAA3C,CADf;QAEMjhC,UAAUmkB,eAAhB;QAEM+oB,sBAAsB,IAAItF,4BAAJ,CAC1B5G,OAD0B,EAE1BhhC,OAF0B,EAG1BihC,GAH0B,EAI1BC,UAJ0B,CAA5B;sBAMoBx9B,OAApB;QAEMypC,qBAAqB,IAAI9F,2BAAJ,CACzBrG,OADyB,EAEzBhhC,OAFyB,EAGzBihC,GAHyB,EAIzBC,UAJyB,EAKzBgM,oBAAoBE,UAApB,EALyB,CAA3B;qBAOmB1pC,OAAnB;QAEM2pC,wBAAwB,IAAI1F,qBAAJ,CAA0B;WAAA;YAE9CwF,mBAAmBG,SAAnB,EAF8C;OAAA;cAAA;WAAA;gBAM1CJ,oBAAoBE,UAApB;GANgB,CAA9B;wBAQsB1pC,OAAtB;SAEO;UACC2pC,sBAAsBE,gBAAtB,EADD;;GAAP;CApCK;;AClBP;AACA;AAMA,MAAMC,WAAW,OACfC,GADe,EAEfC,QAFe,KAGK;MAChBvF,QAAQsF,GAAZ;;MAEI,OAAOtF,KAAP,KAAiB,QAArB,EAA+B;QACzBA,MAAMA,MAAM1kC,MAAN,GAAe,CAArB,MAA4B6nC,GAAhC,EAA0C;eAC/BA,GAAT;;;YAEMnD,MAAMwF,KAAN,CAAYrC,GAAZ,CAAR;;;MAEE,CAACnD,MAAM1kC,MAAX,EAAmB;UACX,IAAI9C,KAAJ,CAAU,iCAAV,CAAN;;;QAGIitC,GAAN;QACMC,aAAa1F,MAAMzY,IAAN,CAAW4b,GAAX,CAAnB;QACMxK,OAAOwK,IAAA,CAAUuC,UAAV,EAAsBH,QAAtB,CAAb;QACMI,SAAS,MAAMC,UAAA,CAAcjN,IAAd,CAArB;;MACIgN,MAAJ,EAAY;WACHhN,IAAP;;;SAGK0M,SAASrF,KAAT,EAAgBuF,QAAhB,CAAP;CAxBF;;AA2BA,AAAO,MAAMM,UAAU,MAAOP,GAAP,IAAqC;QACpDQ,mBAAmB,MAAMT,SAASC,GAAT,EAAc,eAAd,CAA/B;QACMS,MAAM9D,GAAG+D,cAAH,CAAkBF,gBAAlB,EAAqCx2B,KAAD,IAC9Cs2B,YAAA,CAAgBt2B,KAAhB,EAAuB,MAAvB,CADU,CAAZ;QAGM22B,kBAAkB;gBACVL,UADU;mBAEP3D,GAAGiE,GAAH,CAAOC,aAFA;cAGZlE,GAAGiE,GAAH,CAAOE,QAHK;+BAIK;GAJ7B;QAMMC,SAASpE,GAAGqE,0BAAH,CACbP,IAAIQ,MADS,EAEbN,eAFa,EAGb9C,OAAA,CAAa2C,gBAAb,CAHa,CAAf;SAMO,IAAIU,GAAJ,CAAQ;qBAAmBH,OAAO3sC;GAAlC,CAAP;CAjBK;AAoBP,AAAO,MAAM+sC,SAAS,MAAOnB,GAAP,IAAqC;QACnDxM,MAAM,MAAM+M,QAAQP,GAAR,CAAlB;MACIpC,sBAAJ,CAA2BC,IAAA,CAAUmC,GAAV,EAAe,IAAf,EAAqB,MAArB,CAA3B,EAFyD;;MAIrDoB,qBAAJ;SACO5N,GAAP;CALK;;MC/CM6N,gBAAgB,MAC3BC,UAD2B,IAEA;QACrB9N,MAAM,MAAMsC,MAAA,CAAa+H,cAAKC,OAAL,CAAawD,UAAb,CAAb,CAAlB;QACM7N,aAAaD,IAAI+N,oBAAJ,CAAyBD,UAAzB,CAAnB;SACO/B,QAAQ;OAAA;;GAAR,CAAP;CALK;;ACHA,MAAeiC,cAAf,CAAqC;;;;;;;ACU5C,MAAMC,gBAAgB,QAAtB;AAEA,AAAO,MAAMC,0BAAN,SAAyCF,cAAzC,CAEL;;;;iEACmCnjC,WAAW2Y,gBAD9C;;;WAGA,CAAiB2qB,UAAjB,EAAyC7vC,IAAzC,EAAuE;QACjE6vC,WAAWC,eAAX,CAA2B9vC,IAA3B,CAAJ,EAAsC;WAC/B+vC,sBAAL,CAA4BF,UAA5B,EAAwC7vC,IAAxC;;;;wBAIJ,CACE6vC,UADF,EAEE7vC,IAFF,EAGQ;eACKwG,KAAX,CAAiBxG,KAAKgwC,YAAL,EAAjB;SAEKC,eAAL,CAAqBJ,UAArB,EAAiC7vC,IAAjC;;;iBAGF,CACE6vC,UADF,EAEE7vC,IAFF,EAGQ;UACAkwC,iBAAiBlwC,KAAKmwC,SAAL,CAAeR,aAAf,CAAvB;;QACIO,kBAAkB,IAAtB,EAA4B;iBACfliC,WAAX,CACEkiC,cADF,EAEE,2DAFF,EAGElkC,eAAes9B,kBAHjB;;;;UAQI1jB,OAAO5lB,KACV0lB,eADU,GAEVC,IAFU,CAEJyqB,QAAD,IAAcA,SAASvqB,gBAAT,EAFT,CAAb;QAGIwqB,WAAW,EAAf;QACIloC,aAAqC,EAAzC;;QACIyd,QAAQ,IAAZ,EAAkB;YACV0qB,aAAa,KAAKC,aAAL,CAAmBV,UAAnB,EAA+B7vC,IAA/B,CAAnB;;UACIswC,cAAc,IAAlB,EAAwB;mBACV;yBACKA,WACZnmC,aADY,GAEZ3H,GAFY,CAEP4H,KAAD,IAAWA,MAAMmG,OAAN,EAFH,EAGZ4f,IAHY,CAGP,IAHO,CAGD;SAJhB;qBAMamgB,WAAWnmC,aAAX,EAAb;;KATJ,MAWO;YACCqmC,iBAAiB5qB,KAAK/U,aAAL,GAAqB,CAArB,CAAvB;;UAEE2/B,kBAAkB,IAAlB,IACApoC,WAAWqoC,qBAAX,CAAiCD,cAAjC,CAFF,EAGE;cACME,WAAWF,eAAer4B,aAAf,EAAjB;;YACI/P,WAAWuoC,gBAAX,CAA4BD,QAA5B,CAAJ,EAA2C;gBACnCE,WAAWF,SAASv4B,aAAT,EAAjB;;cACI/P,WAAWoqB,iBAAX,CAA6Boe,QAA7B,CAAJ,EAA4C;2BAC3BC,eAAf,CACG,gBAAeH,SACbrqC,YADa,GAEb7D,GAFa,CAER+D,GAAD,IAASA,IAAIihB,OAAJ,EAFA,EAGb2I,IAHa,CAGR,IAHQ,CAGF,IAJhB;;;;;iBAUKvK,KACR/U,aADQ,GAERrO,GAFQ,CAEHsO,SAAD,IAAeA,UAAU0W,OAAV,EAFX,EAGR2I,IAHQ,CAGH,IAHG,CAAX;mBAIavK,KAAKzb,aAAL,EAAb;;;UAGI2mC,SAAS9wC,KAAKugB,SAAL,CAAe;YACtBovB,aADsB;kBAEhB,SAFgB;cAAA;kBAIhBxnC,WAAW3F,GAAX,CAAgB4H,KAAD,IAAW;cAC9BG,cAAcH,MAAMI,cAAN,EAApB;YACI9G,OAAO0G,MAAMxG,OAAN,GAAgB4jB,OAAhB,EAAX;cACMupB,WAAW3mC,MAAM4mC,WAAN,EAAjB;;YACID,YAAY,IAAhB,EAAsB;iBACbA,SAASvpB,OAAT,EAAP;;;eAEK;gBACCpd,MAAME,cAAN,EADD;cAAA;uBAGQC,eAAe,IAAf,GAAsB1H,SAAtB,GAAkC0H,YAAYid,OAAZ,EAH1C;4BAIapd,MAAM6mC,gBAAN,EAJb;2BAKY7mC,MAAMK,eAAN;SALnB;OAPU,CAJgB;aAmBrBymC,MAAMC;KAnBA,CAAf;SAsBKrrB,qBAAL,GAA6BvlB,OAA7B,CAAsCoG,QAAD,IAAc;UAE9CyB,WAAW2d,qBAAX,CAAiCpf,QAAjC,KACC,CAACA,SAASyqC,UAAT,EADH,IAEAhpC,WAAWipC,sBAAX,CAAkC1qC,QAAlC,CAHF,EAIE;cACMlC,OAAO2D,WAAW2d,qBAAX,CAAiCpf,QAAjC,IACTA,SAAS4J,OAAT,EADS,GAET5J,SAAS2D,cAAT,EAFJ;cAGM5G,OAAOiD,SAAS/C,OAAT,EAAb;cACMmtC,WAAWpqC,SAASqqC,WAAT,EAAjB;;YAEIttC,QAAQ,IAAR,IAAgBqtC,YAAY,IAAhC,EAAsC;qBACzB/iC,WAAX,CACErH,QADF,EAEE,uCAFF,EAGEqF,eAAegkB,YAHjB;SADF,MAMO,IACLna,eAAA,CAA0BnS,IAA1B,KACAmsC,WAAWyB,WAAX,CAAuB3qC,QAAvB,EAAiCjD,IAAjC,CADA,IAEAmsC,WAAWzhB,YAAX,CAAwBznB,QAAxB,EAAkCjD,IAAlC,EAAwC,QAAxC,CAHK,EAIL;cACI0E,WAAWipC,sBAAX,CAAkC1qC,QAAlC,CAAJ,EAAiD;mBACxC4qC,aAAP,CAAsB;qBACb5qC,SAAS4J,OAAT,EAAmB,MAAK5J,SAAS4J,OAAT,EAAmB;aADpD;;;gBAKIihC,OAAO7qC,SAAS6D,cAAT,EAAb;cACIinC,eAAe,IAAnB;;cACIrpC,WAAW2d,qBAAX,CAAiCpf,QAAjC,KAA8C6qC,QAAQ,IAA1D,EAAgE;gBAC1D7qC,SAAS+qC,UAAT,EAAJ,EAA2B;6BACV,KAAf;aADF,MAEO;qBACEH,aAAP,CAAsB;uBACb5qC,SAAS4J,OAAT,EAAmB,MAAKihC,KAAKhqB,OAAL,EAAe;eADhD;;;;cAMAiqB,YAAJ,EAAkB;iBACXE,cAAL,CAAoB;kBAAA;0BAENZ,SAASvpB,OAAT,EAFM;wBAGP;sFAC6D/iB,IAAK,SAAQssC,SAASvpB,OAAT,EAAmB;eAJtF;qBAMX7gB,SAASirC,QAAT;aANT;iBAQKC,cAAL,CAAoB;kBAAA;0BAEN,CACV;oBAAA;sBAEQd,SAASvpB,OAAT;eAHE,CAFM;wBAQP;+EACsD/iB,IAAK,MAAKA,IAAK;eAT9D;qBAWXkC,SAASirC,QAAT;aAXT;qBAaSE,MAAT;;SA7CG,MA+CA,IAAIjC,WAAWkC,SAAX,CAAqBprC,QAArB,EAA+BjD,IAA/B,EAAqC,YAArC,CAAJ,EAAwD;mBACpDsuC,cAAT,CACG,oDAAmDvtC,IAAK,KAD3D;SADK,MAIA,IAAIorC,WAAWkC,SAAX,CAAqBprC,QAArB,EAA+BjD,IAA/B,EAAqC,YAArC,CAAJ,EAAwD;mBACpDsuC,cAAT,CACG,oDAAmDvtC,IAAK,KAD3D;SADK,MAIA;qBACMuJ,WAAX,CACErH,QADF,EAEE,qCAFF,EAGEqF,eAAes9B,kBAHjB;;;KA1EN;WAmFOiI,aAAP,CAAsB;;KAAtB;;QAII3rB,QAAQ,IAAZ,EAAkB;WACXksB,MAAL;;;;eAIJ,CACEjC,UADF,EAEE7vC,IAFF,EAGiC;UACzBiyC,YAAYjyC,KAAKgwC,YAAL,EAAlB;;QACIiC,aAAa,IAAjB,EAAuB;aACdpvC,SAAP;;;UAGIiuC,SAASmB,UAAUC,iBAAV,CAA4B,QAA5B,CAAf;;QACIpB,UAAU,IAAd,EAAoB;aACX,KAAKP,aAAL,CAAmBV,UAAnB,EAA+BoC,SAA/B,CAAP;;;WAGKnB,MAAP;;;;;AC3NJ,qBAAe,CAAClB,0BAAD,CAAf;;ACAO,MAAMuC,WAAW,CAACnyC,IAAD;KAEtB,CAACA,KAAKoyC,wBAAL,KAAkCvH,GAAGwH,aAAH,CAAiBlB,MAApD,MAAgE,CAF3D;;ACsBP,MAAMmB,cAAc,CAACjR,cAAD,CAApB;AAMA,AAAO,MAAMkR,aAAN,CAA0C;cAI5B9Q,OADnB,EAEmBC,GAFnB,EAGmB8Q,aAHnB,EAIE;;;;;;;SACKF,WAAL,GAAoBA,WAAD,CAGhB9S,MAHgB,CAGT,CAACC,GAAD,EAAMsC,aAAN,KAAwBtC,IAAIpjB,MAAJ,CAAW0lB,aAAX,CAHf,EAG0C,EAH1C,EAIhBvC,MAJgB,CAKf,CAACC,GAAD,EAAMuC,YAAN,KAAuB;YACfC,eAAe,IAAID,YAAJ,EAArB;;UACIvC,IAAIwC,aAAa1X,IAAjB,KAA0B,IAA9B,EAAoC;cAC5B,IAAInpB,KAAJ,CACH,qCAAoC6gC,aAAa1X,IAAK,EADnD,CAAN;;;UAKE0X,aAAa1X,IAAjB,IAAyB0X,YAAzB;aACOxC,GAAP;KAda,EAgBf,EAhBe,CAAnB;;;SAoBF,GAAkC;UAC1B8B,OAAO,KAAKiR,aAAL,CAAmB7J,aAAnB,EAAb;SACKniC,KAAL,CAAW+6B,IAAX;UAEMiR,gBAAgBjR,KAAKqL,eAAL,CACpB,KAAK4F,aAAL,CAAmBloC,cAAnB,EADoB,CAAtB;UAGMoT,UAAU80B,cACb5uC,OADa,GAEb2xB,aAFa,GAGb/yB,GAHa,CAGR+iC,MAAD,IAAY,KAAKkN,eAAL,CAAqBlN,MAArB,CAHH,EAIb/F,MAJa,CAIN,CAACC,GAAD,EAAMiT,MAAN,KAAiBjT,IAAIpjB,MAAJ,CAAWq2B,MAAX,CAJX,EAI+B,EAJ/B,CAAhB;UAMMC,iBAA2B,EAAjC;UACMC,sBAAgC,EAAtC;UACMC,YAA2B,EAAjC;;SACK,MAAM,CAAC5sB,MAAD,EAAS3V,IAAT,CAAX,IAA6BoN,OAA7B,EAAsC;YAC9BjZ,OAAO2D,WAAWipC,sBAAX,CAAkCprB,MAAlC,IACTA,OAAO3b,cAAP,EADS,GAET2b,OAAO1V,OAAP,EAFJ;UAGIuiC,YAAJ;;UACI1qC,WAAWstB,mBAAX,CAA+BzP,MAA/B,CAAJ,EAA4C;YACtC8sB,gBAAgB,EAApB;YACI3sC,OAAO,EAAX;;YACI6f,OAAO9b,aAAP,GAAuBjG,MAAvB,GAAgC,CAApC,EAAuC;gBAC/B8uC,YAAY/sB,OACf9b,aADe,GAEf3H,GAFe,CAEV4H,KAAD,IAAW,KAAK6oC,WAAL,CAAiB7oC,KAAjB,EAAwB,KAAKxG,OAAL,CAAawG,KAAb,CAAxB,CAFA,EAGf+lB,IAHe,CAGV,GAHU,CAAlB;0BAIiB,0DAAyD6iB,SAAU,MAApF;iBACO/sB,OACJ9b,aADI,GAEJ3H,GAFI,CAEA,CAAC4H,KAAD,EAAQC,GAAR,KAAiB,QAAOA,GAAI,GAF5B,EAGJ8lB,IAHI,CAGC,IAHD,CAAP;;;YAKExmB,OAAQ,YAAWlF,IAAK,IAAG2B,IAAK,GAApC;;YACI,CAACyP,MAAA,CAAiBoQ,OAAOitB,aAAP,EAAjB,CAAL,EAA+C;iBACrC,iCAAgCvpC,IAAK,GAA7C;;;uBAEc;4BACIlF,IAAK;cACnBsuC,aAAc,GAAEppC,IAAK;;SAF3B;OAlBF,MAuBO,IACLvB,WAAW+qC,wBAAX,CAAoCltB,MAApC,KACA7d,WAAW2d,qBAAX,CAAiCE,MAAjC,CADA,IAEA7d,WAAWipC,sBAAX,CAAkCprB,MAAlC,CAHK,EAIL;uBACgB;4BACIxhB,IAAK;qDACoBA,IAAK;;SAFlD;OALK,MAUA;cACC2F,QAAQ6b,OAAO9b,aAAP,GAAuB,CAAvB,CAAd;cACMipC,WAAW,KAAKH,WAAL,CAAiB7oC,KAAjB,EAAwB,KAAKxG,OAAL,CAAawG,KAAb,CAAxB,CAAjB;uBACgB;+BACO3F,KAAK,CAAL,EAAQ4uC,WAAR,EAAsB,GAAE5uC,KAAKktB,KAAL,CAAW,CAAX,CAAc;uBAC9CltB,IAAK,iDAAgD2uC,QAAS;;SAF7E;;;0BAOkB/yC,IAApB,CAAyByyC,YAAzB;;UACIxiC,KAAK48B,MAAT,EAAiB;uBACA7sC,IAAf,CAAoByyC,YAApB;;;gBAGQzyC,IAAV,CAAeiQ,IAAf;;;UAGIgjC,sBACJV,oBAAoB1uC,MAApB,KAA+B,CAA/B,GACI,kBADJ,GAEK;;QAHP;QAMIqvC,iBAAkB;;;;KAAtB;;QAKIZ,eAAezuC,MAAf,GAAwB,CAA5B,EAA+B;uBACX;UACdqvC,cAAe;QADnB;;;UAKI3iC,aAAc;6BACK,KAAK4hC,aAAL,CAAmBjiC,OAAnB,EAA6B;;;UAGhDqiC,oBAAoBziB,IAApB,CAAyB,QAAzB,CAAmC;UACnCmjB,mBAAoB;;UAEpBX,eAAexiB,IAAf,CAAoB,QAApB,CAA8B;UAC9BojB,cAAe;;;;KARrB;SAcKhC,aAAL,CAAmB3gC,UAAnB;WAEO;WACA,KAAK8wB,GADL;kBAEOH,IAFP;WAGA;;OAHA;eAII,KAAKE;KAJhB;;;OAQF,CAAazhC,IAAb,EAAgC;QAC1BA,QAAQ,IAAZ,EAAkB;;;;UAIZ6vC,aAAa,KAAKyC,WAAL,CAAiBtyC,KAAK2Q,YAAL,CAAkB4Z,IAAnC,CAAnB;;QACIslB,cAAc,IAAlB,EAAwB;WACjB2D,WAAL,GAAmBjzC,OAAnB,CAA4ByB,KAAD,IAAW;aAC/BwE,KAAL,CAAWxE,KAAX;OADF;KADF,MAIO;iBACMyhC,SAAX,CAAqB,IAArB,EAA2BzjC,IAA3B;;;;iBAIJ,CAAuBA,IAAvB,EAAwD;WAEpDA,SAAS,KAAKwyC,aAAd,IACAxyC,KAAKyzC,iBAAL,GAAyB3hC,IAAzB,CAA+B4hC,OAAD,IAAa,KAAK5D,eAAL,CAAqB4D,OAArB,CAA3C,CAFF;;;SAMF,CAAe1zC,IAAf,EAA6C;WACpC,KAAKyhC,OAAL,CAAa79B,OAAb,CAAqB5D,IAArB,CAAP;;;iBAGF,CACEulC,MADF,EAEEvlC,IAFF,EAGoB;WACX,KAAKyhC,OAAL,CAAakS,eAAb,CAA6BpO,MAA7B,EAAqCvlC,IAArC,CAAP;;;WAGF,CAAiBA,IAAjB,EAAiD;WACxC,KAAKyhC,OAAL,CAAa5oB,SAAb,CAAuB7Y,IAAvB,CAAP;;;cAGF,CACEA,IADF,EAEE0D,IAFF,EAGEe,IAHF,EAIW;WACF,KAAKg9B,OAAL,CAAarT,YAAb,CAA0BpuB,IAA1B,EAAgC0D,IAAhC,EAAsCe,IAAtC,CAAP;;;aAGF,CACEzE,IADF,EAEEulC,MAFF,EAGE9gC,IAHF,EAIW;WACF,KAAKg9B,OAAL,CAAayI,WAAb,CAAyBlqC,IAAzB,EAA+BulC,MAA/B,EAAuC9gC,IAAvC,CAAP;;;WAGF,CACEzE,IADF,EAEE0D,IAFF,EAGEe,IAHF,EAIW;WACF,KAAKg9B,OAAL,CAAasQ,SAAb,CAAuB/xC,IAAvB,EAA6B0D,IAA7B,EAAmCe,IAAnC,CAAP;;;YAGF,CACEkiC,UADF,EAEEliC,IAFF,EAGW;WACF,KAAKg9B,OAAL,CAAamS,UAAb,CAAwBjN,UAAxB,EAAoCliC,IAApC,CAAP;;;aAGF,CAAmBzE,IAAnB,EAA+B0D,IAA/B,EAAgE;QAC1DA,QAAQ,IAAZ,EAAkB;aACT,KAAP;;;WAGK,KAAKwmC,WAAL,CACLlqC,IADK,EAEL0D,KAAKmwC,cAAL,MAAyBnwC,KAAKmV,SAAL,EAFpB,EAGL,OAHK,CAAP;;;aAOF,CAAmB7Y,IAAnB,EAA+BqlC,OAA/B,EAAgD1B,IAAhD,EAA4E;SACrElC,OAAL,CAAazzB,WAAb,CAAyBhO,IAAzB,EAA+BqlC,OAA/B,EAAwC1B,IAAxC;;;mBAGF,CAAyB3jC,IAAzB,EAA2C;SACpCyhC,OAAL,CAAa/2B,iBAAb,CAA+B1K,IAA/B;;;eAGF,CAAwBkY,KAAxB,EAAwD;WAC/C,KAAKupB,OAAL,CAAakE,aAAb,CAA2BztB,KAA3B,CAAP;;;eAGF,CAAwBA,KAAxB,EAAiE;WACxDA,SAAS,IAAhB;;;iBAGF,CACEqtB,MADF,EAEkD;UAC1CuO,QAAQvO,OACXjc,eADW,GAEXzlB,MAFW,CAGTkwC,UAAD,IACE,CAAC3rC,WAAWstB,mBAAX,CAA+Bqe,UAA/B,CAAD,IACAA,WAAWluB,gBAAX,EALQ,CAAd;;QAQE,EACEiuB,MAAM5vC,MAAN,KAAiB,CAAjB,IACC4vC,MAAM5vC,MAAN,KAAiB,CAAjB,IACC4vC,MAAMhiC,IAAN,CAAY2H,QAAD,IACTrR,WAAW+qC,wBAAX,CAAoC15B,QAApC,CADF,CADD,IAICq6B,MAAMhiC,IAAN,CAAY2H,QAAD,IACTrR,WAAW4rC,wBAAX,CAAoCv6B,QAApC,CADF,CANJ,CADF,EAWE;WACKzL,WAAL,CACEu3B,OAAOjc,eAAP,GAAyB,CAAzB,CADF,EAEE,8EAFF,EAGEtd,eAAeioC,uBAHjB;aAKO,EAAP;;;UAEIxjC,OAAOqjC,MAAM,CAAN,CAAb;;QAEE,EACE1rC,WAAWstB,mBAAX,CAA+BjlB,IAA/B,KACArI,WAAW2d,qBAAX,CAAiCtV,IAAjC,CADA,IAEArI,WAAW+qC,wBAAX,CAAoC1iC,IAApC,CAFA,IAGArI,WAAW4rC,wBAAX,CAAoCvjC,IAApC,CAHA,IAIArI,WAAWipC,sBAAX,CAAkC5gC,IAAlC,CALF,CADF,EAQE;aACO,EAAP;;;UAGIhM,OAAO8gC,OAAOh1B,OAAP,EAAb;UACM7M,OAAO,KAAKiwC,eAAL,CAAqBpO,MAArB,EAA6B90B,IAA7B,CAAb;;QACI/M,QAAQ,IAAZ,EAAkB;aACT,EAAP;;;QAIA0E,WAAW+qC,wBAAX,CAAoC1iC,IAApC,KACArI,WAAW4rC,wBAAX,CAAoCvjC,IAApC,CAFF,EAGE;YACMyjC,UAAU9rC,WAAW+qC,wBAAX,CAAoC1iC,IAApC,IACZA,IADY,GAEZA,KAAK6V,cAAL,EAFJ;YAGM6tB,UAAU/rC,WAAW4rC,wBAAX,CAAoCvjC,IAApC,IACZA,IADY,GAEZA,KAAKgW,cAAL,EAFJ;YAGMoZ,SAAyD,EAA/D;;UACIqU,WAAW,IAAX,IAAmBE,QAAA,CAAmBF,OAAnB,CAAvB,EAAoD;eAC3C7zC,IAAP,CAAY,CACV6zC,OADU,EAEV;cAAA;oBAEY,IAFZ;kBAGU,KAAKG,SAAL,CAAeH,OAAf,CAHV;sBAIc,KAAKI,WAAL,CACVJ,OADU,EAEVxwC,IAFU,EAGV,KAAK6wC,aAAL,CAAmBL,QAAQM,iBAAR,EAAnB,CAHU,KAIP;kBAAQ;;SAVL,CAAZ;;;UAeEL,WAAW,IAAX,IAAmBC,QAAA,CAAmBD,OAAnB,CAAvB,EAAoD;eAC3C9zC,IAAP,CAAY,CACV8zC,OADU,EAEV;cAAA;oBAEY,KAFZ;kBAGU,KAAKE,SAAL,CAAeF,OAAf,CAHV;sBAIc;kBAEFA,QAAQhqC,aAAR,GAAwB,CAAxB,EAA2BG,cAA3B;aACF,KAAKgqC,WAAL,CACFH,OADE,EAEFzwC,IAFE,EAGF,KAAK6wC,aAAL,CAAmBJ,QAAQhqC,aAAR,GAAwB,CAAxB,EAA2B6mC,WAA3B,EAAnB,CAHE,KAIC;kBAAQ;WAPL,EAJd;sBAcc;kBAAQ;;SAhBZ,CAAZ;;;aAqBKnR,MAAP;;;QAGE,CAACuU,QAAA,CAAmB3jC,IAAnB,CAAL,EAA+B;aACtB,EAAP;;;UAGIy8B,SAAS,KAAKmH,SAAL,CAAe5jC,IAAf,CAAf;;QACIrI,WAAWstB,mBAAX,CAA+BjlB,IAA/B,CAAJ,EAA0C;YAClCgkC,iBAAiB/wC,KAAKgxC,iBAAL,EAAvB;;UACID,eAAevwC,MAAf,KAA0B,CAA9B,EAAiC;aAC1B8J,WAAL,CACEyC,IADF,EAEE,kEAFF,EAGEzE,eAAeioC,uBAHjB;eAKO,EAAP;;;YAEIU,gBAAgBF,eAAe,CAAf,CAAtB;YAEMtsC,aAAawsC,cAChBxqC,aADgB,GAEhB3H,GAFgB,CAEXoyC,SAAD,IAAe,KAAKC,cAAL,CAAoBD,SAApB,CAFH,EAGhB/wC,MAHgB,CAGT,KAAKixC,aAHI,CAAnB;YAIMpjB,aAAa,KAAK4iB,WAAL,CACjB7jC,IADiB,EAEjBkkC,cAAczB,aAAd,EAFiB,EAGjB,KAAKqB,aAAL,CAAmB9jC,KAAK+jC,iBAAL,EAAnB,CAHiB,CAAnB;YAKMvH,WAAW,KAAK8H,YAAL,CAAkBtkC,IAAlB,EAAwB,UAAxB,CAAjB;YACMH,OAAO;YAAA;gBAAA;cAAA;kBAAA;oBAKCohB,cAAc;gBAAQ;;OALpC;aAOO,CAAC,CAACjhB,IAAD,EAAOH,IAAP,CAAD,CAAP;KA7BF,MA8BO;YACCohB,aAAa,KAAK4iB,WAAL,CACjB7jC,IADiB,EAEjB/M,IAFiB,EAGjB,KAAK6wC,aAAL,CAAmB9jC,KAAKugC,WAAL,EAAnB,CAHiB,CAAnB;YAKM1gC,OAAO;YAAA;kBAED,IAFC;cAAA;oBAICohB,cAAc;gBAAQ;;OAJpC;aAOO,CAAC,CAACjhB,IAAD,EAAOH,IAAP,CAAD,CAAP;;;;WAIJ,CAAkBG,IAAlB,EAA2D;WAClD,KAAKskC,YAAL,CAAkBtkC,IAAlB,EAAwB,QAAxB,CAAP;;;cAGF,CACEA,IADF,EAEEhM,IAFF,EAGW;WACFgM,KACJ3F,aADI,GAEJgH,IAFI,CAEEwvB,SAAD,IACJ,KAAKyQ,SAAL,CACEzQ,UAAUnpB,aAAV,EADF,EAEE,KAAKvU,OAAL,CAAa09B,UAAUnpB,aAAV,EAAb,CAFF,EAGE1T,IAHF,CAHG,CAAP;;;gBAWF,CAAuB2F,KAAvB,EAAgE;UACxDqG,OAAO,KAAKk1B,aAAL,CAAmBv7B,MAAMkf,eAAN,GAAwB,CAAxB,CAAnB,CAAb;UACM0rB,KAAK5sC,WAAWipC,sBAAX,CAAkC5gC,IAAlC,IACP,KAAK8jC,aAAL,CAAmB9jC,KAAKugC,WAAL,EAAnB,CADO,GAEPnuC,SAFJ;UAIMa,OAAO,KAAK4wC,WAAL,CAAiB7jC,IAAjB,EAAuB,KAAKkjC,eAAL,CAAqBvpC,KAArB,EAA4BqG,IAA5B,CAAvB,EAA0DukC,EAA1D,CAAb;;QACItxC,QAAQ,IAAZ,EAAkB;aACTb,SAAP;;;6BAGUa,IAAZ;YAAwB0G,MAAMmG,OAAN;;;;aAG1B,CACEvQ,IADF,EAEEi1C,YAFF,EAGEC,cAHF,EAIyB;QACnBD,gBAAgB,IAAhB,IAAwBC,kBAAkB,IAA9C,EAAoD;WAC7ClnC,WAAL,CACEhO,IADF,EAEE,qCAFF,EAGEgM,eAAegkB,YAHjB;aAKOntB,SAAP;;;QAGEgT,aAAA,CAAwBo/B,YAAxB,CAAJ,EAA2C;aAClC;cAAQ;OAAf;KADF,MAEO,IAAI,KAAKrB,UAAL,CAAgBsB,cAAhB,EAAgC,SAAhC,CAAJ,EAAgD;aAC9C;cAAQ;OAAf;KADK,MAEA,IAAI,KAAKtB,UAAL,CAAgBsB,cAAhB,EAAgC,SAAhC,CAAJ,EAAgD;aAC9C;cAAQ;OAAf;KADK,MAEA,IAAI,KAAKtB,UAAL,CAAgBsB,cAAhB,EAAgC,WAAhC,CAAJ,EAAkD;aAChD;cAAQ;OAAf;KADK,MAEA,IAAI,KAAKtB,UAAL,CAAgBsB,cAAhB,EAAgC,WAAhC,CAAJ,EAAkD;aAChD;cAAQ;OAAf;KADK,MAEA,IAAIr/B,MAAA,CAAiBo/B,YAAjB,CAAJ,EAAoC;aAClC;cAAQ;OAAf;KADK,MAEA,IAAIp/B,YAAA,CAAuBo/B,YAAvB,CAAJ,EAA0C;aACxC;cAAQ;OAAf;KADK,MAEA,IAAIp/B,mBAAA,CAA8Bo/B,YAA9B,CAAJ,EAAiD;aAC/C;cAAQ,SAAR;kBAA6B;OAApC;KADK,MAEA,IAAI,KAAK3D,WAAL,CAAiBtxC,IAAjB,EAAuBi1C,YAAvB,KAAwCA,gBAAgB,IAA5D,EAAkE;YACjEE,WAAW,KAAKC,gBAAL,CAAsBH,YAAtB,CAAjB;aACO;cAAQ,SAAR;;OAAP;KAFK,MAGA,IAAIp/B,YAAA,CAAuBo/B,YAAvB,CAAJ,EAA0C;aACxC;cAAQ,SAAR;kBAA6B;OAApC;KADK,MAEA,IAAIp/B,WAAA,CAAsBo/B,YAAtB,KAAuCA,gBAAgB,IAA3D,EAAiE;YAChE/8B,QAAQ,KAAKo8B,WAAL,CAAiBt0C,IAAjB,EAAuBi1C,aAAaI,gBAAb,GAAgC,CAAhC,CAAvB,CAAd;;UACIn9B,SAAS,IAAb,EAAmB;eACV;gBAAQ,OAAR;;SAAP;;KAHG,MAKA,IAAI,KAAKkW,YAAL,CAAkBpuB,IAAlB,EAAwBi1C,YAAxB,EAAsC,QAAtC,CAAJ,EAAqD;aACnD;cAAQ;OAAf;KADK,MAEA;WACAjnC,WAAL,CACEhO,IADF,EAEE,wBAFF,EAGEgM,eAAespC,qBAHjB;;;WAOKzyC,SAAP;;;kBAGF,CAAyBa,IAAzB,EAA6C;WACnCA,KAAKmO,aAAL,GAAqB,CAArB,EAAwBI,oBAAxB,GAA+C,CAA/C,EACL8B,YADI,CACiBmE,KADxB;;;eAIF,CAAsBlY,IAAtB,EAA0E;WACjEA,QAAQ,IAAR,GACHA,IADG,GAEHA,KAAKu1C,mBAAL,CAAyBhpC,WAAW4nB,UAApC,CAFJ;;;aAKF,CAAoBn0B,IAApB,EAAgC0D,IAAhC,EAAgE;QAC1D0vC,WAAW,KAAf;;QACI1vC,QAAQ,IAAZ,EAAkB;WACXsK,WAAL,CAAiBhO,IAAjB,EAAuB,cAAvB,EAAuCgM,eAAegkB,YAAtD;KADF,MAEO,IAAI,KAAKshB,WAAL,CAAiBtxC,IAAjB,EAAuB0D,IAAvB,CAAJ,EAAkC;iBAC5B,QAAX;KADK,MAEA;iBACMA,KAAK8jB,OAAL,EAAX;;;WAGK4rB,QAAP;;;;;ACjgBG,MAAMoC,YAAY,CAAC;KAAA;eAAA;WAGf9H;CAHc,KAIgB;QACjCjM,UACJiM,aAAa,IAAI3E,OAAJ,CAAYiC,WAAWtJ,GAAX,CAAZ,EAA6B8K,QAAQ9K,GAAR,CAA7B,EAA2CyL,cAAczL,GAAd,CAA3C,CADf;QAEMmO,aAAa,IAAI0C,aAAJ,CAAkB9Q,OAAlB,EAA2BC,GAA3B,EAAgC8Q,aAAhC,CAAnB;SAEO3C,WAAW1rC,OAAX,EAAP;CATK;;MCKMsxC,kBAAkB,OAAO;KAAA;UAAA;;CAAP,KAI+B;QACtD/T,MAAM,MAAMsC,MAAA,CAAakK,GAAb,CAAlB;QACMsE,gBAAgB9Q,IACnB+N,oBADmB,CACE/J,QADF,EAEnBkH,eAFmB,CAEHnoC,IAFG,CAAtB;QAGM;SAAOixC,aAAP;cAAA;OAAA;;MAAmDF,UAAU;OAAA;;GAAV,CAAzD;QAIM;QAAA;aAAiBG;MAAiBlI,QAAQ;SACzCiI,aADyC;cAAA;;GAAR,CAAxC;SAMO;QAAA;iBAEQC,aAAaxM,WAFrB;;GAAP;CAnBK;;MCLMyM,gBAAgB,OAC3BC,OAD2B,EAE3BnU,GAF2B,EAG3BC,UAH2B,EAI3BmU,UAAkBjwC,OAAOkwC,KAAP,CAAa,CAAb,EAAgB,CAAhB,CAJS,KAKG;QACxBC,aAAa,MAAMC,WAAWC,MAAX,CAAkB;SACpC,MAAM;KAD8B;cAI/BC,IAJ+B;aAKhCC,eAAe;eACb;sBAAgBD,KAAQE;OADX;UAElBC;eAAA;KAFG,CALgC;MAAA;;GAAlB,CAAzB;QAeM;UAAQC,YAAR;;MAAkC9I,QAAQ;OAAA;;GAAR,CAAxC;QACM+I,QAAQ/U,QAAQ0H,WAAR,CAAoBtlC,MAApB,CACX4yC,UAAD,IAAgBA,WAAW/N,QAAX,KAAwBU,mBAAmBhoC,KAD/C,EAEZ,CAFY,CAAd;;MAGIo1C,SAAS,IAAb,EAAmB;UACX,IAAIp1C,KAAJ,CACH,sBAAqBo1C,MAAM/N,WAAY,OAAM+N,MAAMrX,MAAO,EADvD,CAAN;;;QAKIU,SAAS,MAAMmW,WAAWU,YAAX,CACnB7wC,OAAOwW,MAAP,CAAc,CAACy5B,OAAD,EAAUS,YAAV,CAAd,CADmB,EAEnBV,OAFmB,CAArB;SAIOhW,MAAP;CAnCK;;MCJM8W,OAAO,MAAOzI,GAAP,IAA2C;QACvDxM,MAAM,MAAMsC,MAAA,CAAakK,GAAb,CAAlB;QACMjF,OAAOuD,QAAQ9K,GAAR,CAAb;QACM8Q,gBAAgBvJ,KAAK0D,aAAL,CAAmBrjB,eAAnB,GAAqC,CAArC,CAAtB;SACOkpB,cAAciB,iBAAd,GAAkCjU,MAAlC,CACL,CAACC,GAAD,EAAMiU,OAAN,KAAkB;QACZ,CAACA,QAAQtC,UAAR,EAAL,EAA2B;YACnB7P,OAAOmS,QAAQ/K,aAAR,GAAwBvG,WAAxB,EAAb;;UACI3C,IAAI8B,IAAJ,KAAa,IAAjB,EAAuB;YACjBA,IAAJ,IAAY,EAAZ;;;UAEEA,IAAJ,EAAUlhC,IAAV,CAAeqzC,QAAQppC,cAAR,EAAf;;;WAGKm1B,GAAP;GAVG,EAYL,EAZK,CAAP;CAJK;;MCFMmX,eAAe,OAC1B1I,GAD0B,EAE1BzpC,IAF0B,KAGM;QAC1BoyC,YAAY,MAAMF,KAAKzI,GAAL,CAAxB;QACM4I,QAAQ1/B,OAAOwa,OAAP,CAAeilB,SAAf,EACXr0C,GADW,CACP,CAAC,CAACupC,IAAD,EAAOgL,aAAP,CAAD,MAA4B;QAAA;mBAEhBA,cAAclzC,MAAd,CACZmzC,YAAD,IAAkBvyC,SAASuyC,YADd;GAFZ,CADO,EAOXnzC,MAPW,CAOJ,CAAC;;GAAD,KAAuBkzC,cAAc7yC,MAAd,GAAuB,CAP1C,CAAd;;MAQI4yC,MAAM5yC,MAAN,GAAe,CAAnB,EAAsB;UACd,IAAI9C,KAAJ,CAAW,sCAAqCqD,IAAK,EAArD,CAAN;GADF,MAEO,IAAIqyC,MAAM5yC,MAAN,KAAiB,CAArB,EAAwB;UACvB,IAAI9C,KAAJ,CAAW,qCAAoCqD,IAAK,EAApD,CAAN;;;SAGK;cACKqyC,MAAM,CAAN,EAAS/K,IADd;;GAAP;CAnBK;;;;"}
\No newline at end of file