starknet 4.13.0 → 4.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/__tests__/contract.test.ts +1 -1
- package/dist/index.d.ts +315 -348
- package/dist/index.global.js +0 -4
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +0 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +0 -4
- package/dist/index.mjs.map +1 -1
- package/index.d.ts +315 -348
- package/index.global.js +0 -4
- package/index.global.js.map +1 -1
- package/index.js +0 -5
- package/index.js.map +1 -1
- package/index.mjs +0 -4
- package/index.mjs.map +1 -1
- package/package.json +12 -3
- package/src/account/default.ts +6 -7
- package/src/account/interface.ts +4 -6
- package/src/provider/default.ts +3 -5
- package/src/provider/interface.ts +4 -6
- package/src/provider/rpc.ts +4 -6
- package/src/provider/sequencer.ts +7 -8
- package/src/signer/default.ts +1 -1
- package/src/signer/interface.ts +8 -2
- package/src/types/api/index.ts +0 -3
- package/src/types/api/sequencer.ts +0 -4
- package/src/types/index.ts +2 -1
- package/src/utils/hash.ts +1 -1
- package/src/utils/responseParser/rpc.ts +1 -1
- package/src/utils/responseParser/sequencer.ts +1 -1
- package/tsup.config.ts +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/contract/default.ts","../src/utils/fetchPonyfill.ts","../src/utils/hash.ts","../src/constants.ts","../src/utils/number.ts","../src/utils/encode.ts","../src/utils/ellipticCurve.ts","../src/utils/json.ts","../src/utils/stark.ts","../src/utils/provider.ts","../src/utils/responseParser/rpc.ts","../src/provider/utils.ts","../src/provider/rpc.ts","../src/provider/sequencer.ts","../src/utils/responseParser/index.ts","../src/utils/responseParser/sequencer.ts","../src/utils/url.ts","../src/provider/errors.ts","../src/provider/default.ts","../src/provider/interface.ts","../src/provider/index.ts","../src/contract/interface.ts","../src/contract/contractFactory.ts","../src/types/api/index.ts","../src/signer/interface.ts","../src/utils/transaction.ts","../src/utils/typedData/index.ts","../src/utils/merkle.ts","../src/utils/shortString.ts","../src/utils/typedData/utils.ts","../src/signer/default.ts","../src/account/default.ts","../src/account/interface.ts","../src/utils/uint256.ts","../src/utils/address.ts"],"sourcesContent":["/**\n * Main\n */\nexport * from './contract';\nexport * from './types';\nexport * from './provider';\nexport * from './account';\nexport * from './signer';\n\n/**\n * Utils\n */\nexport * as constants from './constants';\nexport * as encode from './utils/encode';\nexport * as hash from './utils/hash';\nexport * as json from './utils/json';\nexport * as number from './utils/number';\nexport * as transaction from './utils/transaction';\nexport * as stark from './utils/stark';\nexport * as merkle from './utils/merkle';\nexport * as ec from './utils/ellipticCurve';\nexport * as uint256 from './utils/uint256';\nexport * as shortString from './utils/shortString';\nexport * as typedData from './utils/typedData';\nexport * from './utils/address';\nexport * from './utils/url';\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport {\n Abi,\n AbiEntry,\n Args,\n AsyncContractFunction,\n Call,\n Calldata,\n ContractFunction,\n FunctionAbi,\n InvokeFunctionResponse,\n Overrides,\n ParsedStruct,\n Result,\n StructAbi,\n} from '../types';\nimport { BigNumberish, toBN, toFelt } from '../utils/number';\nimport { ContractInterface } from './interface';\n\nfunction parseFelt(candidate: string): BN {\n try {\n return toBN(candidate);\n } catch (e) {\n throw Error('Couldnt parse felt');\n }\n}\n\n/**\n * Adds call methods to the contract\n *\n */\nfunction buildCall(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n return contract.call(functionAbi.name, args);\n };\n}\n\n/**\n * Adds invoke methods to the contract\n *\n */\nfunction buildInvoke(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const { inputs } = functionAbi;\n const inputsLength = inputs.reduce((acc, input) => {\n if (!/_len$/.test(input.name)) {\n return acc + 1;\n }\n return acc;\n }, 0);\n const options = {};\n if (inputsLength + 1 === args.length && typeof args[args.length - 1] === 'object') {\n Object.assign(options, args.pop());\n }\n return contract.invoke(functionAbi.name, args, options);\n };\n}\n\n/**\n * Adds call/invoke methods to the contract\n *\n */\nfunction buildDefault(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n if (functionAbi.stateMutability === 'view') {\n return buildCall(contract, functionAbi);\n }\n return buildInvoke(contract, functionAbi);\n}\n\n/**\n * Adds populate for methods to the contract\n *\n */\nfunction buildPopulate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.populate(functionAbi.name, args);\n };\n}\n\n/**\n * Adds estimateFee for methods to the contract\n *\n */\nfunction buildEstimate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.estimate(functionAbi.name, args);\n };\n}\n\nexport class Contract implements ContractInterface {\n abi: Abi;\n\n address: string;\n\n providerOrAccount: ProviderInterface | AccountInterface;\n\n deployTransactionHash?: string;\n\n protected readonly structs: { [name: string]: StructAbi };\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n /**\n * Contract class to handle contract methods\n *\n * @param abi - Abi of the contract object\n * @param address (optional) - address to connect to\n * @param providerOrAccount (optional) - Provider or Account to attach to\n */\n constructor(\n abi: Abi,\n address: string,\n providerOrAccount: ProviderInterface | AccountInterface = defaultProvider\n ) {\n this.address = address && address.toLowerCase();\n this.providerOrAccount = providerOrAccount;\n this.abi = abi;\n this.structs = abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n\n Object.defineProperty(this, 'functions', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'callStatic', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'populateTransaction', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'estimateFee', {\n enumerable: true,\n value: {},\n writable: false,\n });\n this.abi.forEach((abiElement) => {\n if (abiElement.type !== 'function') {\n return;\n }\n const signature = abiElement.name;\n if (!this[signature]) {\n Object.defineProperty(this, signature, {\n enumerable: true,\n value: buildDefault(this, abiElement),\n writable: false,\n });\n }\n if (!this.functions[signature]) {\n Object.defineProperty(this.functions, signature, {\n enumerable: true,\n value: buildDefault(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.callStatic[signature]) {\n Object.defineProperty(this.callStatic, signature, {\n enumerable: true,\n value: buildCall(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.populateTransaction[signature]) {\n Object.defineProperty(this.populateTransaction, signature, {\n enumerable: true,\n value: buildPopulate(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.estimateFee[signature]) {\n Object.defineProperty(this.estimateFee, signature, {\n enumerable: true,\n value: buildEstimate(this, abiElement),\n writable: false,\n });\n }\n });\n }\n\n public attach(address: string): void {\n this.address = address;\n }\n\n public connect(providerOrAccount: ProviderInterface | AccountInterface) {\n this.providerOrAccount = providerOrAccount;\n }\n\n public async deployed(): Promise<Contract> {\n if (this.deployTransactionHash) {\n await this.providerOrAccount.waitForTransaction(this.deployTransactionHash);\n this.deployTransactionHash = undefined;\n }\n return this;\n }\n\n public async call(\n method: string,\n args: Array<any> = [],\n {\n blockIdentifier = 'pending',\n }: {\n blockIdentifier?: BlockIdentifier;\n } = {}\n ): Promise<Result> {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n\n // validate method and args\n this.validateMethodAndArgs('CALL', method, args);\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n\n // compile calldata\n const calldata = this.compileCalldata(args, inputs);\n return this.providerOrAccount\n .callContract(\n {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n },\n blockIdentifier\n )\n .then((x) => this.parseResponse(method, x.result));\n }\n\n public invoke(\n method: string,\n args: Array<any> = [],\n options: Overrides = {}\n ): Promise<InvokeFunctionResponse> {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n // validate method and args\n this.validateMethodAndArgs('INVOKE', method, args);\n\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const inputsLength = inputs.reduce((acc, input) => {\n if (!/_len$/.test(input.name)) {\n return acc + 1;\n }\n return acc;\n }, 0);\n\n if (args.length !== inputsLength) {\n throw Error(\n `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`\n );\n }\n // compile calldata\n const calldata = this.compileCalldata(args, inputs);\n\n const invocation = {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n };\n if ('execute' in this.providerOrAccount) {\n return this.providerOrAccount.execute(invocation, undefined, {\n maxFee: options.maxFee,\n nonce: options.nonce,\n });\n }\n\n if (!options.nonce) {\n throw new Error(`Nonce is required when invoking a function without an account`);\n }\n\n // eslint-disable-next-line no-console\n console.warn(`Invoking ${method} without an account. This will not work on a public node.`);\n\n return this.providerOrAccount.invokeFunction(\n {\n ...invocation,\n signature: options.signature || [],\n },\n {\n nonce: options.nonce,\n }\n );\n }\n\n public async estimate(method: string, args: Array<any> = []) {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n\n // validate method and args\n this.validateMethodAndArgs('INVOKE', method, args);\n const invocation = this.populateTransaction[method](...args);\n if ('estimateInvokeFee' in this.providerOrAccount) {\n return this.providerOrAccount.estimateInvokeFee(invocation);\n }\n throw Error('Contract must be connected to the account contract to estimate');\n }\n\n public populate(method: string, args: Array<any> = []): Call {\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n return {\n contractAddress: this.address,\n entrypoint: method,\n calldata: this.compileCalldata(args, inputs),\n };\n }\n\n /**\n * Deep parse of the object that has been passed to the method\n *\n * @param struct - struct that needs to be calculated\n * @return {number} - number of members for the given struct\n */\n private calculateStructMembers(struct: string): number {\n return this.structs[struct].members.reduce((acc, member) => {\n if (member.type === 'felt') {\n return acc + 1;\n }\n return acc + this.calculateStructMembers(member.type);\n }, 0);\n }\n\n /**\n * Validates if all arguments that are passed to the method are corresponding to the ones in the abi\n *\n * @param type - type of the method\n * @param method - name of the method\n * @param args - arguments that are passed to the method\n */\n protected validateMethodAndArgs(type: 'INVOKE' | 'CALL', method: string, args: Array<any> = []) {\n // ensure provided method exists\n const invokeableFunctionNames = this.abi\n .filter((abi) => {\n if (abi.type !== 'function') return false;\n const isView = abi.stateMutability === 'view';\n return type === 'INVOKE' ? !isView : isView;\n })\n .map((abi) => abi.name);\n assert(\n invokeableFunctionNames.includes(method),\n `${type === 'INVOKE' ? 'invokeable' : 'viewable'} method not found in abi`\n );\n\n // ensure args match abi type\n const methodAbi = this.abi.find(\n (abi) => abi.name === method && abi.type === 'function'\n ) as FunctionAbi;\n let argPosition = 0;\n methodAbi.inputs.forEach((input) => {\n if (/_len$/.test(input.name)) {\n return;\n }\n if (input.type === 'felt') {\n assert(\n typeof args[argPosition] === 'string' ||\n typeof args[argPosition] === 'number' ||\n args[argPosition] instanceof BN,\n `arg ${input.name} should be a felt (string, number, BigNumber)`\n );\n argPosition += 1;\n } else if (input.type in this.structs && typeof args[argPosition] === 'object') {\n if (Array.isArray(args[argPosition])) {\n const structMembersLength = this.calculateStructMembers(input.type);\n assert(\n args[argPosition].length === structMembersLength,\n `arg should be of length ${structMembersLength}`\n );\n } else {\n this.structs[input.type].members.forEach(({ name }) => {\n assert(\n Object.keys(args[argPosition]).includes(name),\n `arg should have a property ${name}`\n );\n });\n }\n argPosition += 1;\n } else {\n assert(Array.isArray(args[argPosition]), `arg ${input.name} should be an Array`);\n if (input.type === 'felt*') {\n args[argPosition].forEach((felt: BigNumberish) => {\n assert(\n typeof felt === 'string' || typeof felt === 'number' || felt instanceof BN,\n `arg ${input.name} should be an array of string, number or BigNumber`\n );\n });\n argPosition += 1;\n } else if (/\\(felt/.test(input.type)) {\n const tupleLength = input.type.split(',').length;\n assert(\n args[argPosition].length === tupleLength,\n `arg ${input.name} should have ${tupleLength} elements in tuple`\n );\n args[argPosition].forEach((felt: BigNumberish) => {\n assert(\n typeof felt === 'string' || typeof felt === 'number' || felt instanceof BN,\n `arg ${input.name} should be an array of string, number or BigNumber`\n );\n });\n argPosition += 1;\n } else {\n const arrayType = input.type.replace('*', '');\n args[argPosition].forEach((struct: any) => {\n this.structs[arrayType].members.forEach(({ name }) => {\n if (Array.isArray(struct)) {\n const structMembersLength = this.calculateStructMembers(arrayType);\n assert(\n struct.length === structMembersLength,\n `arg should be of length ${structMembersLength}`\n );\n } else {\n assert(\n Object.keys(struct).includes(name),\n `arg ${input.name} should be an array of ${arrayType}`\n );\n }\n });\n });\n argPosition += 1;\n }\n }\n });\n }\n\n /**\n * Deep parse of the object that has been passed to the method\n *\n * @param element - element that needs to be parsed\n * @param type - name of the method\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\n\n protected parseCalldataValue(\n element: ParsedStruct | BigNumberish | BigNumberish[],\n type: string\n ): string | string[] {\n if (element === undefined) {\n throw Error('Missing element in calldata');\n }\n if (Array.isArray(element)) {\n const structMemberNum = this.calculateStructMembers(type);\n if (element.length !== structMemberNum) {\n throw Error('Missing element in calldata');\n }\n return element.map((el) => toFelt(el));\n }\n // checking if the passed element is struct or element in struct\n if (this.structs[type] && this.structs[type].members.length) {\n // going through all the members of the struct and parsing the value\n return this.structs[type].members.reduce((acc, member: AbiEntry) => {\n // if the member of the struct is another struct this will return array of the felts if not it will be single felt\n // TODO: refactor types so member name can be used as keyof ParsedStruct\n /* @ts-ignore */\n const parsedData = this.parseCalldataValue(element[member.name], member.type);\n if (typeof parsedData === 'string') {\n acc.push(parsedData);\n } else {\n acc.push(...parsedData);\n }\n return acc;\n }, [] as string[]);\n }\n return toFelt(element as BigNumberish);\n }\n\n /**\n * Parse of the response elements that are converted to Object (Struct) by using the abi\n *\n * @param responseIterator - iterator of the response\n * @param type - type of the struct\n * @return {BigNumberish | ParsedStruct} - parsed arguments in format that contract is expecting\n */\n protected parseResponseStruct(\n responseIterator: Iterator<string>,\n type: string\n ): BigNumberish | ParsedStruct {\n // check the type of current element\n if (type in this.structs && this.structs[type]) {\n return this.structs[type].members.reduce((acc, el) => {\n // parse each member of the struct (member can felt or nested struct)\n acc[el.name] = this.parseResponseStruct(responseIterator, el.type);\n return acc;\n }, {} as any);\n }\n return parseFelt(responseIterator.next().value);\n }\n\n /**\n * Parse one field of the calldata by using input field from the abi for that method\n *\n * @param args - value of the field\n * @param input - input(field) information from the abi that will be used to parse the data\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\n protected parseCalldataField(argsIterator: Iterator<any>, input: AbiEntry): string | string[] {\n const { name, type } = input;\n const { value } = argsIterator.next();\n\n const parsedCalldata: string[] = [];\n switch (true) {\n case /\\*/.test(type):\n if (Array.isArray(value)) {\n parsedCalldata.push(toFelt(value.length));\n return (value as (BigNumberish | ParsedStruct)[]).reduce((acc, el) => {\n if (/felt/.test(type)) {\n acc.push(toFelt(el as BigNumberish));\n } else {\n acc.push(...this.parseCalldataValue(el, type.replace('*', '')));\n }\n return acc;\n }, parsedCalldata);\n }\n throw Error(`Expected ${name} to be array`);\n case type in this.structs:\n return this.parseCalldataValue(value as ParsedStruct | BigNumberish[], type);\n case /\\(felt/.test(type):\n if (Array.isArray(value)) {\n return value.map((el) => toFelt(el as BigNumberish));\n }\n throw Error(`Expected ${name} to be array`);\n default:\n return toFelt(value as BigNumberish);\n }\n }\n\n /**\n * Parse the calldata by using input fields from the abi for that method\n *\n * @param args - arguments passed the the method\n * @param inputs - list of inputs(fields) that are in the abi\n * @return {Calldata} - parsed arguments in format that contract is expecting\n */\n protected compileCalldata(args: Array<any>, inputs: AbiEntry[]): Calldata {\n const argsIterator = args[Symbol.iterator]();\n return inputs.reduce((acc, input) => {\n if (/_len$/.test(input.name)) {\n return acc;\n }\n const parsedData = this.parseCalldataField(argsIterator, input);\n if (Array.isArray(parsedData)) {\n acc.push(...parsedData);\n } else {\n acc.push(parsedData);\n }\n return acc;\n }, [] as Calldata);\n }\n\n /**\n * Parse elements of the response and structuring them into one field by using output property from the abi for that method\n *\n * @param responseIterator - iterator of the response\n * @param output - output(field) information from the abi that will be used to parse the data\n * @return - parsed response corresponding to the abi structure of the field\n */\n protected parseResponseField(\n responseIterator: Iterator<string>,\n output: AbiEntry,\n parsedResult?: Args\n ): any {\n const { name, type } = output;\n const parsedDataArr: (BigNumberish | ParsedStruct)[] = [];\n switch (true) {\n case /_len$/.test(name):\n return parseFelt(responseIterator.next().value).toNumber();\n case /\\(felt/.test(type):\n return type.split(',').reduce((acc) => {\n acc.push(parseFelt(responseIterator.next().value));\n return acc;\n }, [] as BigNumberish[]);\n case /\\*/.test(type):\n if (parsedResult && parsedResult[`${name}_len`]) {\n const arrLen = parsedResult[`${name}_len`] as number;\n while (parsedDataArr.length < arrLen) {\n parsedDataArr.push(\n this.parseResponseStruct(responseIterator, output.type.replace('*', ''))\n );\n }\n }\n return parsedDataArr;\n case type in this.structs:\n return this.parseResponseStruct(responseIterator, type);\n default:\n return parseFelt(responseIterator.next().value);\n }\n }\n\n /**\n * Parse elements of the response array and structuring them into response object\n *\n * @param method - method name\n * @param response - response from the method\n * @return - parsed response corresponding to the abi\n */\n protected parseResponse(method: string, response: string[]): Result {\n const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const responseIterator = response.flat()[Symbol.iterator]();\n const resultObject = outputs.flat().reduce((acc, output) => {\n acc[output.name] = this.parseResponseField(responseIterator, output, acc);\n if (acc[output.name] && acc[`${output.name}_len`]) {\n delete acc[`${output.name}_len`];\n }\n return acc;\n }, {} as Args);\n return Object.entries(resultObject).reduce((acc, [key, value]) => {\n acc.push(value);\n acc[key] = value;\n return acc;\n }, [] as Result);\n }\n}\n","import isomorphicFetch from 'isomorphic-fetch';\n\nexport default (typeof window !== 'undefined' && window.fetch) || // use buildin fetch in browser if available\n (typeof global !== 'undefined' && global.fetch) || // use buildin fetch in node, react-native and service worker if available\n isomorphicFetch; // ponyfill fetch in node and browsers that don't have it\n","/* eslint-disable import/extensions */\nimport BN from 'bn.js';\nimport { keccak256 } from 'ethereum-cryptography/keccak.js';\nimport { hexToBytes } from 'ethereum-cryptography/utils.js';\nimport assert from 'minimalistic-assert';\n\nimport {\n CONSTANT_POINTS,\n FIELD_PRIME,\n MASK_250,\n ONE,\n StarknetChainId,\n TransactionHashPrefix,\n ZERO,\n} from '../constants';\nimport { RawCalldata } from '../types/lib';\nimport { ec } from './ellipticCurve';\nimport { addHexPrefix, buf2hex, removeHexPrefix, utf8ToArray } from './encode';\nimport {\n BigNumberish,\n isHex,\n isStringWholeNumber,\n toBN,\n toFelt,\n toHex,\n toHexString,\n} from './number';\n\nexport const transactionVersion = 1;\nexport const feeTransactionVersion = toBN(2).pow(toBN(128)).add(toBN(transactionVersion));\n\nexport function keccakBn(value: BigNumberish): string {\n const hexWithoutPrefix = removeHexPrefix(toHex(toBN(value)));\n const evenHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;\n return addHexPrefix(buf2hex(keccak256(hexToBytes(evenHex))));\n}\n\nfunction keccakHex(value: string): string {\n return addHexPrefix(buf2hex(keccak256(utf8ToArray(value))));\n}\n\n/**\n * Function to get the starknet keccak hash from a string\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L17-L22)\n * @param value - string you want to get the starknetKeccak hash from\n * @returns starknet keccak hash as BigNumber\n */\nexport function starknetKeccak(value: string): BN {\n return toBN(keccakHex(value)).and(MASK_250);\n}\n\n/**\n * Function to get the hex selector from a given function name\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L25-L26)\n * @param funcName - selectors abi function name\n * @returns hex selector of given abi function name\n */\nexport function getSelectorFromName(funcName: string) {\n // sometimes BigInteger pads the hex string with zeros, which is not allowed in the starknet api\n return toHex(starknetKeccak(funcName));\n}\n\n/**\n * Function to get hex selector from function name, decimal string or hex string\n * @param value hex string | decimal string | string\n * @returns Hex selector\n */\nexport function getSelector(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n return getSelectorFromName(value);\n}\n\nconst constantPoints = CONSTANT_POINTS.map((coords: string[]) =>\n ec.curve.point(coords[0], coords[1])\n);\n\nexport function pedersen(input: [BigNumberish, BigNumberish]) {\n let point = constantPoints[0];\n for (let i = 0; i < input.length; i += 1) {\n let x = toBN(input[i]);\n assert(x.gte(ZERO) && x.lt(toBN(addHexPrefix(FIELD_PRIME))), `Invalid input: ${input[i]}`);\n if (!x.isZero()) {\n for (let j = 0; j < 252; j += 1) {\n const pt = constantPoints[2 + i * 252 + j];\n assert(!point.getX().eq(pt.getX()));\n if (x.and(ONE).toNumber() !== 0) {\n point = point.add(pt);\n }\n x = x.shrn(1);\n }\n }\n }\n return addHexPrefix(point.getX().toString(16));\n}\n\nexport function computeHashOnElements(data: BigNumberish[]) {\n return [...data, data.length].reduce((x, y) => pedersen([x, y]), 0).toString();\n}\n\n// following implementation is based on this python implementation:\n// https://github.com/starkware-libs/cairo-lang/blob/b614d1867c64f3fb2cf4a4879348cfcf87c3a5a7/src/starkware/starknet/core/os/transaction_hash/transaction_hash.py\n\nexport function calculateTransactionHashCommon(\n txHashPrefix: TransactionHashPrefix,\n version: BigNumberish,\n contractAddress: BigNumberish,\n entryPointSelector: BigNumberish,\n calldata: BigNumberish[],\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n additionalData: BigNumberish[] = []\n): string {\n const calldataHash = computeHashOnElements(calldata);\n const dataToHash = [\n txHashPrefix,\n version,\n contractAddress,\n entryPointSelector,\n calldataHash,\n maxFee,\n chainId,\n ...additionalData,\n ];\n return computeHashOnElements(dataToHash);\n}\n\nexport function calculateDeployTransactionHash(\n contractAddress: BigNumberish,\n constructorCalldata: BigNumberish[],\n version: BigNumberish,\n chainId: StarknetChainId\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY,\n version,\n contractAddress,\n getSelectorFromName('constructor'),\n constructorCalldata,\n ZERO,\n chainId\n );\n}\n\nexport function calculateDeclareTransactionHash(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n classHash: BigNumberish,\n senderAddress: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DECLARE,\n version,\n senderAddress,\n 0,\n [classHash],\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateDeployAccountTransactionHash(\n contractAddress: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: BigNumberish[],\n salt: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n) {\n const calldata = [classHash, salt, ...constructorCalldata];\n\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY_ACCOUNT,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateTransactionHash(\n contractAddress: BigNumberish,\n version: BigNumberish,\n calldata: BigNumberish[],\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.INVOKE,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateContractAddressFromHash(\n salt: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: RawCalldata,\n deployerAddress: BigNumberish\n) {\n const constructorCalldataHash = computeHashOnElements(constructorCalldata);\n\n const CONTRACT_ADDRESS_PREFIX = toFelt('0x535441524b4e45545f434f4e54524143545f41444452455353'); // Equivalent to 'STARKNET_CONTRACT_ADDRESS'\n\n const dataToHash = [\n CONTRACT_ADDRESS_PREFIX,\n deployerAddress,\n salt,\n classHash,\n constructorCalldataHash,\n ];\n\n return computeHashOnElements(dataToHash);\n}\n","import { toBN } from './utils/number';\n\nexport { IS_BROWSER } from './utils/encode';\n\nexport const ZERO = toBN(0);\nexport const ONE = toBN(1);\nexport const TWO = toBN(2);\nexport const MASK_250 = TWO.pow(toBN(250)).sub(ONE); // 2 ** 250 - 1\nexport const MASK_251 = TWO.pow(toBN(251));\n\nexport enum StarknetChainId {\n MAINNET = '0x534e5f4d41494e', // encodeShortString('SN_MAIN'),\n TESTNET = '0x534e5f474f45524c49', // encodeShortString('SN_GOERLI'),\n TESTNET2 = '0x534e5f474f45524c4932',\n}\nexport enum TransactionHashPrefix {\n DECLARE = '0x6465636c617265', // encodeShortString('declare'),\n DEPLOY = '0x6465706c6f79', // encodeShortString('deploy'),\n DEPLOY_ACCOUNT = '0x6465706c6f795f6163636f756e74', // encodeShortString('deploy_account'),\n INVOKE = '0x696e766f6b65', // encodeShortString('invoke'),\n L1_HANDLER = '0x6c315f68616e646c6572', // encodeShortString('l1_handler'),\n}\n\nexport const UDC = {\n ADDRESS: '0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf',\n ENTRYPOINT: 'deployContract',\n};\n\n/**\n * The following is taken from https://github.com/starkware-libs/starkex-resources/blob/master/crypto/starkware/crypto/signature/pedersen_params.json but converted to hex, because JS is very bad handling big integers by default\n * Please do not edit until the JSON changes.\n */\nexport const FIELD_PRIME = '800000000000011000000000000000000000000000000000000000000000001';\nexport const FIELD_GEN = '3';\nexport const FIELD_SIZE = 251;\nexport const EC_ORDER = '800000000000010FFFFFFFFFFFFFFFFB781126DCAE7B2321E66A241ADC64D2F';\nexport const ALPHA = '1';\nexport const BETA = '6F21413EFBE40DE150E596D72F7A8C5609AD26C15C915C1F4CDFCB99CEE9E89';\nexport const MAX_ECDSA_VAL = '800000000000000000000000000000000000000000000000000000000000000';\nexport const CONSTANT_POINTS = [\n [\n '49ee3eba8c1600700ee1b87eb599f16716b0b1022947733551fde4050ca6804',\n '3ca0cfe4b3bc6ddf346d49d06ea0ed34e621062c0e056c1d0405d266e10268a',\n ],\n [\n '1ef15c18599971b7beced415a40f0c7deacfd9b0d1819e03d723d8bc943cfca',\n '5668060aa49730b7be4801df46ec62de53ecd11abe43a32873000c36e8dc1f',\n ],\n [\n '234287dcbaffe7f969c748655fca9e58fa8120b6d56eb0c1080d17957ebe47b',\n '3b056f100f96fb21e889527d41f4e39940135dd7a6c94cc6ed0268ee89e5615',\n ],\n [\n '3909690e1123c80678a7ba0fde0e8447f6f02b3f6b960034d1e93524f8b476',\n '7122e9063d239d89d4e336753845b76f2b33ca0d7f0c1acd4b9fe974994cc19',\n ],\n [\n '40fd002e38ea01a01b2702eb7c643e9decc2894cbf31765922e281939ab542c',\n '109f720a79e2a41471f054ca885efd90c8cfbbec37991d1b6343991e0a3e740',\n ],\n [\n '2f52066635c139fc2f64eb0bd5e3fd7a705f576854ec4f00aa60361fddb981b',\n '6d78a24d8a5f97fc600318ce16b3c840315979c3273078ec1a285f217ee6a26',\n ],\n [\n '6a0767a1fd60d5b9027a35af1b68e57a1c366ebcde2006cdd07af27043ef674',\n '606b72c0ca0498b8c1817ed7922d550894c324f5efdfc85a19a1ae382411ca2',\n ],\n [\n '7fa463ee2a2d6a585d5c3358918270f6c28c66df1f86803374d1edf3819cc62',\n 'a996edf01598832e644e1cae9a37288865ad80e2787f9bf958aceccc99afae',\n ],\n [\n '3d4da70d1540da597dbae1651d28487604a4e66a4a1823b97e8e9639393dbec',\n '45cdef70c35d3b6f0a2273a9886ccb6306d813e8204bdfd30b4efee63c8a3f9',\n ],\n [\n '1e448fdbcd9896c6fbf5f36cb7e7fcb77a751ff2d942593cae023363cc7750e',\n '30c81da0f3a8cb64468eaa491c7ae7b4842b62cb4148820da211afc4caffb3a',\n ],\n [\n '6531acf1a7cb90a4eb27de0b7f915e387a3b0fd063ba6e1289b91f48411be26',\n '31330f5daa091889981a3ea782ae997f5f171336ed0487a03f051551a2cafa2',\n ],\n [\n '54be016394d5662d67d7e82f5e889ed2f97ccf95d911f57dd2362c4040ed4f4',\n 'c6cb184053f054d6a59c1bf0986d17090d25089b3fdcdaf185edc87ef113e5',\n ],\n [\n '35b9ecd0499ca1d5d42dcbb0c6b4042b3733c64b607ca711e706e786ef2afc6',\n '5624b476a5b21c3a544f0712d4817b06ad380a5a6529d323bf64da8ef862d8d',\n ],\n [\n '4ce0378e3ee8f77ed58f2ddbd8bb7676c8a38bfb1d3694c275254bd8ca38e23',\n '5a16fcbff0769c9cf2b02c31621878ec819fff4b8231bff82c6183db2746820',\n ],\n [\n '648d5c6f98680a1b926bfeb01c00224c56fdcf751b251c4449c8a94f425cfcf',\n '72c05ac793cd1620a833fbe2214d36900ebe446e095c62fcb740937f98cca8c',\n ],\n [\n 'bd09be3e4e1af8a14189977e334f097c18e4a8bf42577ef5aafa0f807bd89b',\n '6e0e72ed7eb65c86cee29c411fb4761122558ee81013344ba8509c49de9f9b6',\n ],\n [\n '35ea4e339b44ae7724419bdfbe07022253137a4afb7cbaffad341ea61249357',\n '3665d676a026a174f367bb4417780e53a7803cb02d0db32eb4545c267c42f14',\n ],\n [\n '36457bc744f42e697b825c2d1afd8f4029d696a4514710f81da52d88e178643',\n '7c93715896735492a68c7969a024b3a8fd538bffc1521538107de1a5f13ce9c',\n ],\n [\n '5b3a08ebcf9c109cc9082f70d9df2b9c11b5428ee23917b4e790c4c10f6e661',\n '9d7b42ab0c20f5510df7ea5e196eec99342739077e9a168198c89da859753',\n ],\n [\n '21883ef8580fc06e59481955d52ece3aca6e82c8c9fc58e216dcf46f96990c6',\n '51a6423543e6e8a43e71da34cd90f5b520b8d33b67c4bf857573ab9e301aa4c',\n ],\n [\n '19e86b77f9b581e81092b305c852faf53940a8f15f0a6990c414f04c0fa7ef9',\n '515630e35d4398c9c79fc4ee08e1023fa47d8e03c6e7819c6d2ccef45398fa',\n ],\n [\n '888ab8eb4c31bb2ac5b54aa320dbe1a69c96b864e8a5f54d89c1d1a6b86c24',\n '730e148467f6a55ce22c5296f5380df88f38de76ef0b2de844cd3094aaaf3ea',\n ],\n [\n '75e79ff13a894e7120dac17b7429c0c32ce7828f726c9973728c0977a5f5977',\n '4960526e59c1c736561a201bc56f7d762641b39f609d273cc996f5d9197cfb8',\n ],\n [\n '640fe009249115d7254f72ecafb3006139e4bed7e9041af51458c737282d1d5',\n '3cc6c978a575246e2ce4f7ef1fcc7f63085db9ff98a1b1f3fe374087c0332c',\n ],\n [\n '6d6fd09ccab7c26de9b3906191235deb5c34685580c488275356a05e209ca96',\n '7157f81a34213dd8f91dea4f6df1bcfabc4ee091a3049eeeb3b7923d39b8645',\n ],\n [\n '5531ca1d00f151d71da820918f74caf2985b24dca20e124721fff507b5a5876',\n '518529643d3f25e47f72c322223ba60a63d6bfe78cf3f612215d9c19bf29200',\n ],\n [\n '6192d454e4f8fe212bdfccd5b15dd5056d7622ffe456c6c67e5a7265aea49c4',\n '2377a45dc630017ae863cb968ddb38333a70c7946d8684e6d7a6213f634b7bc',\n ],\n [\n '542fb44b4ef3640a64fdb22a2560fb26668065c069cf31d1df424819a39ff18',\n '5dbae9b0948e0361aea443503840341c322aa1a1366ce5390e71bf161f78f8c',\n ],\n [\n '299ff3e3412a7eb4cb4a3051b07b1be2e7b1c4b789f39ffb52cba3d048b71de',\n '1951d3175c02761b291d86b6c0a08387ad5e2a2130ccc33c852530572cb3958',\n ],\n [\n '628ce3f5367dadc1411133e55eb25e2e3c2880d6e28754a5cb1c5d109627e73',\n 'ae3e9b7d50964e28bd15380400b7659b87affdef5d2586cbefcd9be7d67c0d',\n ],\n [\n '6ea54aff064895eccf9db2283225d62044ae67621192b3346338948382f5933',\n '6431507e51aadacfaf39f102a8ff387756e9b5e1bc8323d44acae55130d93db',\n ],\n [\n '28097d50d175a6235320fe8cfe138dd9e46895d189582e472c38ad7a67d923a',\n '7f9eab4133d7d09a7ff63368d6135c26262b62336eca1b5ca33f2096ce388ba',\n ],\n [\n '619fd09cdd6ff4323973f256c2cbdcb224f7f25b8aef623af2d4a0105e62e02',\n '2c95f0ae11d47eeae1bc7f1350f75f9185c5bc840382ceb38a797cae9c40308',\n ],\n [\n '641c18982ced304512a3f2395942a38add0d6a7156229c2a7c8b8dfbe9beb96',\n '6f6288c9c659b6af5ac975f4180deffe53d516399b2cc62f31732e9d4ba9837',\n ],\n [\n '58ab546e51fe49fc5a382e4064a2bd6cfc268904412f86c26de14f28a71d0f2',\n '124b7217943e7e328408e8afdfa7da00dcbc94a2bb85fd8e01fb162d2c2c0a9',\n ],\n [\n 'a82c2fdedbb26c3c762a12f7e86b0e01e65320e0a25a8399d665f6e266bf74',\n '1a1de28e253f3e10f44d0111e8074f882d7f42e5900780ccbdc31da372d3fd8',\n ],\n [\n '744c725a7455a992e3cf5bd007bc234dd4668dba285f553f38350ad94c1615b',\n '7f721a87f48798bdc4a9c0eb88559e2ad7a74112fd901e70ea159e67a9c33f',\n ],\n [\n '434df142ddaa60f7881b6348d91687de40457de7ccfb07f0304b9e820705d0c',\n '7fae425e3b53f97dd1f5b20e49ed9fe24ff1efc341ba5e017ac89cf8df0cc39',\n ],\n [\n '7a1e2b809dff46277021cbc376f79c37e1b683bbd6bca5317014f0dc0e1ae73',\n '56790278a231912c334eff05281e08af1558e85516b4411ef64647c13bea431',\n ],\n [\n '4931b7990348d41cf8907be79f45bb7991fd18f8a57868351c92fa7a34cbcd7',\n 'ca35091815cdf0837d396e25aad6052ad32d497a33b123256cffdc008bc50e',\n ],\n [\n '250b815d352fd89f8210b624b147ea7d0a4f47bcac49f3ac9b777840da93ebe',\n '1173f10e9691948b7da7632f328520455aadcba46e017f891e0a1d7da2bef04',\n ],\n [\n '2223b85032fa67292f6e1f822628e6756e5c3cc08fc252ab88d63d624e4dfb2',\n '55619ba96a7dcec77832fcb22cd5c21c7dcebc0280d730cba0002b67e0a8c63',\n ],\n [\n '249b131e04de73af9820d3e22492d9ec51bdc0c4c4f34d95352fa44dd61f245',\n '7576d3b5d136368ff01170a77d8286d0d1c7c40688862fb40813b4af3c6065e',\n ],\n [\n '6777915d9b4769027eb7e04733f8a2d669c84fe06080f55e8a55674dfbf9efb',\n '640d0ff384c9635e1af364760f104e058e3c86209fa9d2320aeac887b2e02d8',\n ],\n [\n '2abe3f237681052f002414399111cf07f8421535af41251edc427a36b5b19c9',\n '636ce4deaf468a503ab20ccb2f7e5bdc98551656ebf53e9c7786b11dd9090be',\n ],\n [\n '4d5cc5414758ea1be55be779bd7da296c7e11f1564d9e8797ceea347c16f8ea',\n '1a680c4c410cf5ddc74e95ff2897c193edaaecce5b2cde4e96bbae5c0054eff',\n ],\n [\n '46c375c684b30adf4d51de81e92afee52b1a3847e177403372c82109373edca',\n '1eaadc5783c90a0261306423d52009e991126b3f620e9cb6cffca41ca096f4f',\n ],\n [\n '2ddfb71f51205888118cbabba8fd07d460a810289bfdeeb7118707e310cb152',\n '1fd905d07b3933be886f2518246bdafa6f33259a174668808223cd7c28183c7',\n ],\n [\n '386f3879960713d41fdb3b1e41bbebf26b1c0e27a9a75bb1adcc1a0d3e8547b',\n '2b21498c0f34ec6f17c720334dc0f36021c2f87afbbbc8847d0bd536eb265e5',\n ],\n [\n '407eae62c6c4de3b942195afec3f45efec71ddb5e6edee3d427631bcdbf9b90',\n '436e7f2d78268ef62c4172d2ff1469028bad1f1d0f97ab007064418e61caa8f',\n ],\n [\n '1b881175e21201d17e095e9b3966b354f47de8c1acee5177f5909e0fd72328f',\n '69954b1a9b8bfccf8ec384d32924518a935758f3d3662ef754bcc88f1f6f3ec',\n ],\n [\n '7d545a82bff003b8115be32a0c437f7c0a98f776bcf7fddb0392822844f3c5e',\n '34b6e53a9565a7daa010711f5bf72254a4e61da3e6a562210a9abc9e8b66d69',\n ],\n [\n '299b9fcd4fadfc4b6141457a3036aaa68501c23df579de26df69d4def89b913',\n 'b95bf2c2bb303c38bb396382edc798ca6a4847e573ce19b7b08533d1912675',\n ],\n [\n '551f5a4dae4a341a3e20336a7d2f365ddd45849351ec6dd4fcbedfe4806d5d5',\n '5865c977a0ecf13ce85ae14c5c316872080bd36f0f614f56b6dfc7ece83792e',\n ],\n [\n '7a1d69c08e68c80ad8b310736e6247a53bcba0183b9b8798833bc696a0fb6e2',\n '3ce803a20ebb3b120d5eaf0ad64bed0522fad1a0f2ce39a5c5cbae98c4438f6',\n ],\n [\n '28acacc0bc41d84e83663f02b36981a2c8272ecd72d3901164be2affb09c504',\n '7a5aee0b160eaff5b5968ab1a0304ce58c3d5ae0148d9191c39e87668229e5b',\n ],\n [\n '1f78cfdbcc767b68e69a224a077468cdfcb0afd6952b85bccbdb96d1fb8500b',\n '4772ba173c6b583284eb001cfc2a124104833f464ff9df096443e10ef3e9dd4',\n ],\n [\n '2774108962ca9897e7f22c064d2ccedac4fef5fc9569331c27cdc336c95774b',\n '9e13d79b68e8dc8091c019618f5b07283a710ddf1733dc674a99fc32c12911',\n ],\n [\n '770d116415cd2c4ace0d8b721dd77e4a2ef766591f9ec9fa0b61304548994ed',\n '42165d93c82f687635aa2b68492b3adffd516beb4baa94520efa11467a209fd',\n ],\n [\n '5e6e4ece6621e2275415e1fda1e7c4f496de498b77c0b913073c6a6099394b9',\n '3d92ce044fc77fa227adc31f6fc17ef8b4ec1c5aafc44630c0d9195075bf56d',\n ],\n [\n '6e69c717b5d98807ff1e404a5187a9ceaf0110b83aa15a84f930928b1171825',\n '1ee7cfc3a9744d7fa380ba28604af9df33ac077724374c04588bd71fa16b177',\n ],\n [\n '404318f2d2ceb44f549c80f9d7de9879d8f7da4b81e7350c00e974ebf2daef1',\n '3934831b5af70d17a3f1da9d2931bd757e6acf2893236264fc7e0d92ff1a1cb',\n ],\n [\n '20dcb6f394fea6d549b2e75748f61b7ec03b6e52319cb14163373a9c22bb9dc',\n '106a8c96cfb95a331618b7416d1498554730499e194a58fbf63019890480fc7',\n ],\n [\n '119000f277ccee013e6bb121194ec1ab5460fb6a96eb702a14079865f4170aa',\n '1737a32f5415e8720a5606ec1dd4756f02e7c6817e3723b453d091f2d192773',\n ],\n [\n '45d0fb5cd95db76d05dec3faa12e467a308eabaad363a062353db3cd2d9b749',\n 'ae08691b5b0cdd19ec499132421638f470f493320e4003d123ab1da761b965',\n ],\n [\n '1257b3e65cdfb6367c6d0942327e799bc66eb221e70c6573a9862889eb51c38',\n '593309fd45755dd2cc4afd2b9316bc4638b0c5ddb3009694fcb7b250d0c8a2f',\n ],\n [\n '186dcf9950f72e868014a8accf14aa36e82a7a2a29f86ba37f6632da4189db3',\n '55684c9f7a043fc523ed78f756f834b4db823d5e4161bd79602c17d55a5cd8c',\n ],\n [\n '58791d5569f282f5c3b01ecdc9388df7ba3ca223a2dc1eed5edaf2a1d302fb9',\n '6298d7dd51561a045bb4089deda9f40b2865589ed433e56d54554f8b45e79f0',\n ],\n [\n '13fd87144aa5aa4b24d5a7bf907d8280d15937fed262d41084898cb688fc28b',\n '3fa54367770cc4479a857411ddcabe86627b405ce1cd14ad3b2863bde13abe4',\n ],\n [\n '48118139445415f0c1879224e2dee744ed35280ff00537260402a1741ec3676',\n '4dfa39dadaabecfc54ecb7a25319444f8e952782d863790e42a9887064fc0c1',\n ],\n [\n '4ad031bb9eda84f2fe5d354c7948d41558ca657a04508654721810ee72ef158',\n '620ebd5d0086b92c6009a42777b946a351c2c7ba852b57d3c9905fc337459ef',\n ],\n [\n '4a34abb016ad8cb4575ea5bd28385d2348e5bcc0cbba90059f90f9c71f86e8b',\n '4f781829ad83f9ed1e1b6de0e5f4ac60dfdfe7f23cb4411e815817e705e52c8',\n ],\n [\n '7fc632d7512aab5356b7915dca854c8b12b369ab54f524fbce352f00eb9b9f9',\n '2ce80b944fc9158005f630b34385d50c3ad84450a9e1e529925b3211dd2a1de',\n ],\n [\n '65ed10347503cbc0216ca03f7536cca16b6abd18d332a9258685907f2e5c23f',\n '3be1a18c6bfa6f2f4898ebefad5a8e844c74626d5baa04a820d407fe28bbca6',\n ],\n [\n '1a8abba1be2e276cdd1f28c912280833a5ede1ec121738fcca47dc070dcc71d',\n '21b724378bc029a5199799df005922590d4e59cae52976f8e437bf6693eec4a',\n ],\n [\n '3a99c22dafcfe9004ebb674805736a26aeed7ed5d465ae37226dcbe270a972b',\n '5bf67552af08e1e6e2a24bf562c23225e89869cab9bef8becb3669175a3c94f',\n ],\n [\n '4a6a5e4b3501f2b7bbdd8da73ea81ffca347170bdfb6776a037cdd74c560fb4',\n '5af167ebb259c2da88740ec559ee04052bb66480b836cadd0e2590c32d7111b',\n ],\n [\n '6890d95308525f0bac9dc25cc1189eb92d29d4b3fe61bc8aee1c716ac17b1e8',\n 'e6f23f78e882026b53ea4fac6950e56e3da461e52339eb43d2fdb2dade7ca9',\n ],\n [\n '748f4cf4f027efdeaed7c7f91ef3730ff2f2bb0bfc2db8f27aadde947f7d4d5',\n '3a1cbc550699411052c76293b8c41a3a8a1ecf12cbbc029a1b2b6ea986fca93',\n ],\n [\n '7321f3f581690922cd0dec40c9c352aae412ec2ccdf718f137f7786ab452cd3',\n '5be5130c9277cdb76d7409452438ec15d246b211dd1e276ee58e82a81c98fd4',\n ],\n [\n '6c4d6cb7e7ae70955224b8a912ff57ca218635a2436b36cee25dce8a5cdf51f',\n '32f8c03c6db3246946e432e4148e69f5628b200c6d7d72449df6eeac0998039',\n ],\n [\n '1dad5f2e795ea6fa5177f110989516eacf8fb37bd6a091c7c93f1d73a2fe309',\n '56b2298c538180e99dea3e171dbb5c6fba0bd0a9ed40537277c0c2373a8e2c4',\n ],\n [\n '1610605baacc9bc62c4cc923dc943347cfece7ae241e746fbe6c2c878221dbd',\n '431a82d657e0d109d00dea88cf3fa9b999845221b7b5590a20c40fc71368c1c',\n ],\n [\n '6a4f5c787fb09a5be2b04d2eafa1e6f3d3c863ee22960eb0b64f6eaf6659162',\n '14dbc3eaea6146ee7eaace5a91ed9430dad3a47e9ca2f68b455171f8fe6a7b3',\n ],\n [\n '738415b73e55412b0e582e45ff0d7bf4b1bf2922db581783fdcc75559f40e',\n '33825aeb3fd8459999eb418d15102ba5864b069c6ea517f0c6e9eab8d9aca47',\n ],\n [\n '2603e72ce53985c70782774057a17944f7b4ce224a809be4e2b5af3606aa1d8',\n '92822921809c42318f42dac4d773325f41c43069e990adac7818a45e2554dc',\n ],\n [\n '181cd967ab4615357cc96c82eae9152ce7598c1a1dfdd91a458bddb016ae9fe',\n '5d562fdaeb0e12647e230e50eaf216bed52fa73c6b7378821a3bfc4cd66d4ff',\n ],\n [\n '1121726069b9ef5954ba6490100b226e0be53fef3e071b7c58a1286174b789a',\n '4b25594cf4e9eb2d14b3f52f2661a9992234fc222c0a0d44517cb77deb9c16f',\n ],\n [\n 'e543663969b915337f105f80995a77b356f1a51d8b4a4fb12d44364130e873',\n '34b2e3c009fdab4cb7349a580df2e64c0098a123280078e5da6623a9ec6b44f',\n ],\n [\n '4e2f8909bb62de5ef65600e61bbf969293815296b6e23702875e049b3ce5c45',\n '3cb81f2c21f22a7add26fa38a9ce5d9cce1bb251bd2698f90c34ff0a84f7af',\n ],\n [\n '37b546e403a1ba970c17b67c2f1361ab9c803f8d2b5cd93803014faa08861ed',\n '37079184ea46272f5809b523d060686633f7995167897a153be1772fd6566f6',\n ],\n [\n '27bddca77f7bd7f66b3693567a4238f2e6751d95b0bcb409f6b24d08f84798c',\n '6417a85cbfd6fc02df560d3963a241a986baacdfa423f65d7227ce49a96c57d',\n ],\n [\n '2de71a39aa043057d1bc66e45f804542acddf18f7a6d88c0d7fb0ca240debdf',\n '306c1ce39ab46300f7cca0f3a2fbfa77296a27e24bc66b0b8044968ec0ee413',\n ],\n [\n '307c877154364c0c03534e7327d5a88e1380ceef6481567ade37a14ee7c1a72',\n '3404bc7dbfb33b95d922d0693aaf9358f77888d7d95e773c38d83dbe2e5f995',\n ],\n [\n '79f09ff7c60850e5f5ea020722659a1ed27db4c95dca131f99552f785c8afbc',\n '40429528c099349b426ddbf129497176951a64a53db5f9d8bd2be0252cb22b2',\n ],\n [\n '4027dc6b56d446e5972f35464eeac85c5254ef377c902d9fe37aea841bb5292',\n '7c3ea37689ef679fa2f5c7e031a78e23d484a8317990fd34d44d95cc1db3717',\n ],\n [\n '645dbf78a3c228c4b7151450b5e65edb58e71f37e1e4bc5f471e0f1abd6d9c2',\n '15cfe7850f327b256e23b00627451560c5c6ab60db78d45b7ab286afb6f13ab',\n ],\n [\n '1503ca373757677ad1d911a2b599d01c46eb879d1ce21ae171c7e439846a85f',\n '583eb269b7030da6a0c324026919de3f9489d2ff6ae0e6320c36f05469ad66c',\n ],\n [\n '66e1819ba3ec4ad4ae9f7d7588d23baa004e29d3aad2393d52af204a81626ca',\n '505249980cbe6273b82ad5038fe04a981896f4117345ac1abcc67e2525c0ee4',\n ],\n [\n '5ec20dbb290254545f9292c0a8e4fbbfb80ad9aab0a0e0e9e9923f784d70ed1',\n 'bdb1ca3a859227cf5d00eaae1f22584e826ed83b7ccdb65483ed5213dc4323',\n ],\n [\n 'a5c1a5011f4b81c5c01ef0b07c0fbf0a166de77280f0ae241f2db6cba15194',\n '4444521fb9b33d7dfeb1247d0ee1a2b854ad166cb663d9dd2e686909362a689',\n ],\n [\n '1f35335de40e00c62642dac2fda8b30f071986ce4f11db849df11bc45ad4e0c',\n '7801a2c761b90fd4477ba0be9a775003d5dfcd959b1ed198b4681f15e7acbf',\n ],\n [\n '48db4798cf6821c1ffb8178b1d3bb6020e04186c96aaf4670972d367f4ed5f',\n '781019494df95b888f1578f1b4a3f8e125ea60eca47ef9207a10630671217a3',\n ],\n [\n '17f653d904210148a8e74d8e719a3061683c164aa6d79c902a19f185ab437bd',\n '6780e97985932c3860d810af1e065d454b1cb4be0e7ffe2d8cea7d52526e223',\n ],\n [\n '5c4d0c7432f9b0070436240f9855adae1467cdc9826952ae01b68cd52a3ad89',\n '1c5747f968ed91261b7ae9bf1023c999da9816e37de602d6a1a50d397752bff',\n ],\n [\n '6fedd7639fdaa2f7bad4ca0b391710f6f8a7e890250ae8ae4252bb8b39a1e58',\n '436a215f655a3fd3778b2335ffdc9aca6b98474e43d764c1f8362830b084f0e',\n ],\n [\n '7fbd45a889c5e9d127bb4f8474d6be7cb9796bbfff923b75e42a1ad4cae37d6',\n '484bd12622a6ba81cd53049c550d9ed682a8e765b656b1cbff9bbea637bd1f4',\n ],\n [\n '17d984d47937263f7966a3e7b1eea04071e678494bd749c9e02b48b3234f06d',\n '7b341ff08722c4e161005d0037204a7a2001fdda7af2cc1a0b04a027f115a0f',\n ],\n [\n '7f1822045db45ea07e1519c3ee1f7705915f35fe4dd8db1e8921b5d1c740edf',\n '33d41e06b93320ad1b3d9580380ec797a05dac3f1cc8008899110ebefde2f78',\n ],\n [\n '7b19453ecb74b7d0e2a66b9890ff73bfbbcd61a266abd6d82dbe665bf32f34d',\n '6dba2355420dac582b1f349609ea1c89b89bba2d1a68a0642f1dd12d86e73cb',\n ],\n [\n '273e82a15f395ddf2489a95685bec8bac62c4b459d1b28987d3cb27e4bc9128',\n '653375b48a4cf5d5b101c9ef533039bedce5dbeef3f59e8f168bdc99b06ca5f',\n ],\n [\n '3006c9e7fc6a553d8eb4e8a47ce9f10d1a39576ac255ae9e0a4ce3869e76212',\n '65fe9e2ef2aae608be309332d464f57e28f1df5de1a6a519751b056971f932e',\n ],\n [\n '5e8f384c8a4607fbe9789fcc52d54249d304d698562597d114c1d81452d3dee',\n '3c8bc78066b5d947dc1e405e326ee55ea606c7988f666748d259850fa259a22',\n ],\n [\n '7841b2102e9aa103fb53a642b3e167b21113ea44751ab38e0b5ef8312654db9',\n '71bf5c8308fcf9c4a7847494cd9bdd946fddf7d3a37e8bb0b201ff2343deb8e',\n ],\n [\n '40f68027420c11e3ade9aae041978dc18081c4f94943463aac92d887f922a62',\n '499c6062594a6c7e21a3cb91ea451813393bff365a27a08f1a515439b83cf42',\n ],\n [\n '6ce77a50d038b222634e87948df0590b79d66087b01e42b9b6d8fa30ebb1465',\n '35f5c46bb1be8555a93f155a174d54ec048c2ac8676e7c743054ddc52709d37',\n ],\n [\n '604f8b9f2dacb13d569262864063c2d4bb2b2cd716db6eeb2b1eeabc57746f6',\n '68c6799e24f3b44eec3049973445174727a66970f1614a782efa2b91ab1e457',\n ],\n [\n '73d620f3bfe77f672943d448d7dc05327adf64b8e7af50039c469d7f7c994c4',\n '4859deb36eaf0c802f0d1514602368143a33ec6ce8fd55248b59025debc6afb',\n ],\n [\n '3fd2bcd1c89d706a3647fbd354097f09c76636e93ae504973f944d8fc3bcc1',\n '677ef842cf5eb2444941f527abec567725e469469192354ad509a26ebb3d0e0',\n ],\n [\n '39222ea924ac17b533c72ffb2c47ffdc11d6a7f7c70fbde3a10fb0b8f35eb2f',\n '20dc4bd1089019bc1d7379b4feb3eae6eb5af59e9f253845da9fd633057e952',\n ],\n [\n '326f58994e1347f62e4102183215b5db956378d2f61f14aba4dec94577f53c',\n '7a03284c296003bbe05178a1d82efdb7b8125511d63e20e50aed789c2e52e1',\n ],\n [\n '53aa8939c74d4ee58f03bc88bace5a45c7bfcf27466201da05dc6723a5f5632',\n '2e32535ca7732904a048183247b04b426ecf9b39fc393a9cebe92fb1dc7a7f1',\n ],\n [\n '6cee1a03145e93b3e826e6067005f09c06099c98198c91c222407ba5c8c132e',\n 'beaecad1274e7c6e5476a100c271aa1a6f86ee5a9fa5c2f26124d5886fa63',\n ],\n [\n '3ec659b8175e1be1bd5a252108714776b813e330393f587814f5f1f32a73332',\n '529a5cf9f8c237ae69a94217d173c8d19c156952041f5c980da557990863fa7',\n ],\n [\n '3d66ec5963d0c534d4139c8cef2e1ac48b3e7965fafabf58be26f903318af4e',\n '3d3f2de7a95f59b683725ee6283cbaf31f97c4b600df9a4621413223a468740',\n ],\n [\n '7fb38ace8e0932fac2ea0d3eb676db8d684db1817e2e4d59da7996ce398b4a',\n '68f92bd5768cdd4710249f9d49ef1d5654e497b9a4ba10bd2971366d83fb400',\n ],\n [\n '1c4a49314d6b4969cdd142c76ceb7682bfb868ace7f7568b0fc8635bda5a9fb',\n '5fc0519f1f4cc10b5771312458748c036313b87707ed0540026ac64a5955aa9',\n ],\n [\n '3073c95d08d3b97caea5f0be16b2789bee766f76b7e5499f8ce8f96abb0f344',\n '52a8974b4eb9a1f6a0ae2c83cb4715bf18d73f057255fcb3f63b74f7e78f590',\n ],\n [\n '44485b16d597a5de3604df6f7ed7e00b8aeef9e7e8dea8688255153b8bb16aa',\n '6cccb0ba170123266f24b5d93a744397dc2c44820edc4f8f5b9a0f5c9b3b940',\n ],\n [\n '7618f77b7b32d512688dd62e0b48231d9574c6361e8be353a7dc04f7c3a115e',\n '78ffcd16d80636381ca231aae70d99c9e20298b4f5388fd823ea9fa2b8ddfd9',\n ],\n [\n '7dc82fee1ef95cf5b3720fcc07f63246654bfe39762627839da40e51c75654d',\n '4c0ccdd70955da74558de20c88352df8a02aa97e4d5971c500e884740a8cb62',\n ],\n [\n '7fa5d460dc10cbb418b444d9bde97e92c70a99a222b99f244dccee7e62cc04c',\n '636163901baa5b7576c38c43407af578b8c4607e01e86011ae2dde587a89f84',\n ],\n [\n '758930d46006623a756c89bd0cc378f6a3c1f43c9a0edbb42274c35e75c16d2',\n '1d74dd9f81c2fec811b8cbd6168a745b0a111932b2a345265ef2853b50b6245',\n ],\n [\n '7332ee0626b044d664ef228f8cb84df7c643e52f6a2591ae1c9007ad61ec16e',\n '229bd8e630572cbdee54283234cf3e9f060e6382f99943bf234119d47b54470',\n ],\n [\n '78a16ef803aa20a075bb2f66c61bb2dae5698bebb94a0995fa74c3d53de1614',\n '246d588b68edb6fed96c128349908c42dcd64c46341b205e79f4aed9b5d3675',\n ],\n [\n '6e1933939bd03b67bba753cc0cbe7d2f25bad68c993887ef8c9e2fcd59b0647',\n '599413f7c204a11a5ce315eab11299ab7326603412bb00bc1c59ff75a37d6b4',\n ],\n [\n '4a79957a5a1888ad063b51c69565a2b48e8eb917183e220a1c8d3374526d30e',\n '1f092de0e069bba7fc5386e2e9a114c1618f88c4b95e220cd35ffe96f99fcad',\n ],\n [\n '3148aa3df9ece39aca84f59489f2710522216f14be6055ee0027529d1d55e2d',\n '617e9a52a92975db0ba1977f71116f7058a0d31b869ac7f3ee2fd80b0c5100c',\n ],\n [\n '5c1188e72384160ae39d07328346cda4f6c12d227448e6236f04dc971625287',\n '1643006eb3a3bc6aafd5f685cf054f2a572e6ca58c0118bcec0b833741f116d',\n ],\n [\n '3f72efc93c9b71adc4c51d8fc69d3940b20d08733af2b7d05140fdb1d1c1004',\n '7399259987c8f4ebfab46e522380707e58427d3962ee0c2a91760813f76d232',\n ],\n [\n '3129b34c03c51aa8f611e91d5cfcc9bd3ef108ee66e6d3ee35a0e0e50055bb',\n '563b18b5650085efb4cf179a029e6afff27b1d3091cd28eaa68d24fa1f801c6',\n ],\n [\n '16eac0f9fb4c67cf89a7fa4ee615bbe731d8edcb709a1b9b50c7d873a530f52',\n '7ff8288b6e199ca8f316192881424a37fb080c29daa76b1f0edaccaf580a80e',\n ],\n [\n '75f6b6028c43ce832f65d7e8e620d43b16cba215b4b94df5b60fc24e9655ee4',\n '35e9ccfaed2293a8b94b28de03bcb13eb64a26c831e26cc61a39b97969a2ff0',\n ],\n [\n '3c6152fe093bd6316897917ec56a218640ec1b2148f21db9b14fc7a5ff362e8',\n '6eef2df27ae7d63a28856b07b73e7aad7ca94f317201a1e675ffc6f9a1710dd',\n ],\n [\n '54e01b5fe4fd96052aad55b3f26b1d254dfc7e2525fffb9ae0a77eb8cc5579',\n '7c3d39232ab333675b219abc766ed9b4782c840e6b046614dedb8a619696eb0',\n ],\n [\n 'd1e63f8ea8a76429cf254a6d3b668761f0dc572d4bfac4fd56d9eaf58fb6c0',\n '2bd0a84d3908a63085824c9329a0983913006ba155b56a58eb3f9becab29c45',\n ],\n [\n '2d6122f2a702edd4da7385b1580796a71d13bd72be94cfb3fec01149c006c2d',\n '70eb282fae992efa6f5915e578b640653549f23385ef3a29ab29b1b9b8ad63b',\n ],\n [\n '752fec14beaadb5ddbba6b3a17fcb86579fa588ef407fad0ea07dbb22a640d3',\n '3feb6728eca21a1e84e8f9f23010387a53a96a1cb62d86fb37996150a1299ef',\n ],\n [\n '63f94a92f27acde8f5ed949b459506f51d70c85bcc61a34d647264ecc53c65e',\n '37e5dce0646ee66f4fdb93b82d54d83a054948fa7d7fa74ab6b36246fc7383e',\n ],\n [\n 'd6aa909287a2f05b9528690c741702c4c5f4d486c19a46c38215f52ef79c7b',\n '5ebe1128dd81093df4aca0df365d58adab848d1be1a94b95eeb649afd66a018',\n ],\n [\n '12866812b3053e2f7a9572bdaf5ef2b48c6fb62a0eed9ff0356df50e7d05557',\n '6785f7eb2cd1c120e4c7167b46861d10117040a2e9f2ca86a71e9d67df90613',\n ],\n [\n '46a730d05330b1b13673cb8a1b8f45460035e4a9f1a1751cfba099c4355c1c',\n '76fb0ec6cd16a8141cdcd875c8b2de9fce42d296072643d148ac7e7fa7472df',\n ],\n [\n '4bd4380a22900bd34835e0a908eacf4b6edb61eda0cf483f9212453b37e7516',\n '5e9551cd20d8d7ddbf4366880b7d5267385afa1966ff30da4baaf273b009d29',\n ],\n [\n '71f1994ad40baa2922424ae222663a64f93d8b67929e9a10f9e4c1ab19f3833',\n '85320fe68ec0d37cc19fdfd03589d66906ffa4046c80e1b094a85f27676346',\n ],\n [\n '5a63b1bf5232f28f808765c6be7ce1f81c52145b39f01c879fae0f4303bee61',\n '3bc5d6df68bb6d0577bf9ae2ae59ec0e9b2dc7dd56ea179fb38a41e853db950',\n ],\n [\n '161ded55ff1087032381e6c1449704f63ad2d88df82dfc44a71890fa09b3941',\n '78a52e0013842037274ea75daaf8eb4afc04ccc4b07bfaf3f5ee47d165e01b',\n ],\n [\n '1bfce5229c5fbff5c0f452a22317fcfcd9262f23df41840f84fe7d44cfba1a1',\n '66b387872c00e63c73006a955d42cf49c46c5708fc9d1579b9ae38341b24a3d',\n ],\n [\n '56d47dadc9cbd1dcb2ee3efcd5d4af5e6aea71df10815c68b54a14e81d11b44',\n '47e966ba54df48e9b612a903685e0060a67e4725402e8cb4cf654e54e813a3e',\n ],\n [\n '4b1c44438afd4ddf20a2cf612df2ee494ce84c7274c5529e857693e73018491',\n '430403bd31d8f0677e06abff7159384560f27b9622943fea1a3192f14bf40d4',\n ],\n [\n '7f7281728fc2214aa1dbf13176a4624b53814734abd570eb6ef7c7e32379606',\n '312da47be347fb3fa2c9089b38df372560dcace2effeeacab4d96ab11567295',\n ],\n [\n '16a28884a1be8183e0d3fc0db84a9afbf47126fd3be548c2a584aaafbfa7dfe',\n '7c3f57b3b895564ba562c1cd80b71fda6d2e611665c6ab87744f5390858fe24',\n ],\n [\n '323339f37b327a731232a9580e79952063c7c232bd1380146d8a83c285f4b8b',\n '4f16be1d983c7232f92cce6b9690695978d42cecc8eeb8c206e125d1098a265',\n ],\n [\n '624d26cbaa197e104eb83cebf2adeed09a5cdad359993fe5e3529d4d0def21d',\n '261b7da3cfb55c788977e0d8d640e3e93ae5a325d962ce85c816d7d32cfc430',\n ],\n [\n 'f24ecb7ee83a3e28dab54a330dc93d0429a7aea36412e922dce8fbff40d60d',\n 'b043e36a258d1df1d21b0cc7be9c4dcae1bd4ed326c110e668ac23d86805a6',\n ],\n [\n '686cea46b710bde1231483bfdbc700cfa3da6ecd5841c0e0c782f9ea24328ec',\n '7eb7407aa58edd6911c7c7e8d1e03bb52ead4a2415a0c33325872ff3a521dd6',\n ],\n [\n '3866ee1186264549df3dfcdf8705c0380c9372eef6d4081c2454d3aded1720e',\n '634c6d3e8eb8af652a4be73e3b613452c2213104ca875b66b4b15ee5b1716af',\n ],\n [\n '484c687cd2969a1d20a58cdfb9a60f280a473284503b1ecff5de514aaf8206b',\n '34d44d26b7427e51a646d1b924084762f5b461685450f21d6a472de565bebd8',\n ],\n [\n '203561333771fa0fe22c4033349f7b877d15b0542a5598e81e067968768247a',\n '2b6a533aff6e2163a36a2a89cb7415848bef48db40f952ffd380f47676707c2',\n ],\n [\n '2ffa6cca6233695760251206fc5e34c8d3692498589478cdd3d5b09f0b7c05d',\n '6c57d605478fa9626c4ed769554d075daa53e1a1d0bd4d94174d3bfeeb11ad6',\n ],\n [\n '5dccf0fa46a5571f204d0b033b45f299cbb3d9f80fded57253ea4f1c64faaef',\n '30a38e131ee8756ee5ea2a3e16618a5dbc28b5b9311308bf037ecc2039dfc7d',\n ],\n [\n '57b0a2eaebeafd950221facdd24790d7d1ab8883e5c5d55635f0d14a1ee4741',\n '7b41cc478fa6be38417271db8ed12efc0da6982552c1496025d2df0576bf4ad',\n ],\n [\n '611b5725101f611c387ccaa13889ecf3bb5595071a179ce350029bfca4ad7f1',\n '3129755977abc8995fec7eec1123a1561e429fde37ff36af002d3211831ecf4',\n ],\n [\n '1c06bbd0c52fdab9fcaf680c7a93fb821e538a2ed79f00f3c34d5afb9ea6b31',\n '3873d3bdfe0be0157bbc141198dc95497823cc222986d24c594b87bd48dc527',\n ],\n [\n '275cdbabc989c615130d36dabfa55ca9d539ed5f67c187444b0a9a12e5b7234',\n '2b7f723e68e579e551115d56f0ae71a3b787b843cc04a35b9f11084b006521',\n ],\n [\n '6cc702eb20f8b5940c7da71f8b1801f55c8c2d8e2e4a3c6c983f00bc1ffdd95',\n '5d15b3727bc66f3aba6d589acdd139fae115232eb845abe61fbdfc51341352e',\n ],\n [\n '44defb418700cee8c9bd696b872adb005490512d8bba081f8f99a9f15cc981c',\n '3b2072cdb1d919b2b65b5cb3557f0a3381d7ca293c267ca4a38f83e77bcc96e',\n ],\n [\n 'fd83ce77b1578b3a9b8c3cbeaddb1504d2fd4a19c901c21ac65961224e4966',\n '110cbe64fc10c6b9c66f15ca406a35f50b723b35d83c5eb9797a57f8395f4f9',\n ],\n [\n '9dc6ff90e341875e113bbfb507724dc7095a280d2f32cb6ba61a1e0c2d2aef',\n '4aeb622896c852c2747454e8f172c9482955a42ecbe522d6ce07ecde79d0a51',\n ],\n [\n '71c58b0e47b9dd9107ebd8a8c8fa9f0534e78231bac612c1ddc7a94edf33eb7',\n '7f90edaf4792bf8334adbaa0f4ee7c654312725af188682d75f34874c4eccb9',\n ],\n [\n '1f6de1f14988778ceb2dfe844f92394f1f1e72fd1581ceb3bf336c95ce50345',\n '4f6007ed4e022d2ee9fe4ca8207c5f6c766c4f3b85260e941fb24ad0dcbf0bc',\n ],\n [\n '3ddc3ac25ede4a67a97547ed27dc920239b585fb3624177e2e8d59eba678115',\n 'a9afd8f8bb759cbd1dff2addc63f47da4ba1291ea34229c09c0637dc5c8d24',\n ],\n [\n 'c56b0269d8431556e471cab9d70edda3a37b391696f107b2dc370631de51d',\n '729c52f6b134f733eb750c14bd9f95c077f0f6f6ff4005701e5bedc6544599d',\n ],\n [\n '44d32ce19ac6807cb22e4f25fe1486a36a13926f147fbfa054b63ff0446177d',\n '212a21e8c124c9cd37c80d2dd66913ceaa6b6f666522f115c39382b2d5925e8',\n ],\n [\n '35dfc16f3ae6ccc06a267bf6d931601e52f3e45359ffc513570b65b96adc4f',\n '74311d10f4bece01b5ae65a6affe5c931463aa1b73a3320eeb41bbb7bb1ff62',\n ],\n [\n 'e0acd9d2d907031b319b80121dc90699d003d220ea785d50e5033cdb3b1a03',\n '3911ba78d6e507485d6374b0f7d2e6198f6462a7d6d3cf046404a07af690357',\n ],\n [\n '3c57918ca254c0cb7dac251ef4e10c7d82327969552eae15d26c4c52660922a',\n '5fd5f5ff3f14e671548074114c72c48409df8a2e71fc8aa3c8acb506e2a88df',\n ],\n [\n '222ad8b61e219ba2b581f606b7c996516850a46a3db72fe1f72b5a9be6c324c',\n '72015a5e2db648112abd284fd867b59fc5606645177d26cf6e9a655c9912d42',\n ],\n [\n '3c86d5d774bc614469768ad38f7be9a53e9a233942c5c553b82e49aae684764',\n '480febea8229e130dedffff89c11f3c43e11724e6bd89d5566d78752859d41c',\n ],\n [\n 'adb73bb8352d0c10175df371f7868ef2c9e0c79ac788430c480c0f7d85c187',\n '60b564785248111502e6f39c4994d6293fac22bc25f4d764b2fb1957d3c9bd8',\n ],\n [\n '3836ab8b46cf4f453a22532c886940b982029b29c42adca90ded5bf77e6bcb9',\n '7b15e91d6355f147b171a90b064a9d8b2d7bf3699bbf4987664c61c950d8996',\n ],\n [\n '12ed96af1a97c45ec31f1531e96f6fb28a03ba52ab8484545fbe0dddc97bb32',\n '6d1f522b6c6cad0940cff8e23decc72bb8d4164696af031415508b025aa8be1',\n ],\n [\n '27382994ae5878223ef802e9b4882f481a1b4008f1eec8484483471f7aa742b',\n 'c31750d242b3975b0026a0e86ccdd17d0f680a8c6f53f197fc25eb1f777917',\n ],\n [\n '431677eba3715455bc235557518a74f3b111a88844ef13e159ad44bc16de3e6',\n '30000e1eb6a17d9df776981e65c6e500fded1ac12003adc9446b269812c9197',\n ],\n [\n '4b563e6f42589671579eabfa2cda5502b361c46a5ac8d45c8ed44741a925b33',\n '627bdb41678443fdd1aa607709e9699b652308615f4bea760a3b79ee0d9ab5c',\n ],\n [\n '2932fd3f81fc973ca9def6b7f1bb50f980fe589187cfe9e9f52ba4d356cf2c8',\n '1e6bfd00fa976c4770263a227048214c38850fe0f059e7b3d2c7871ef07d68f',\n ],\n [\n 'e44e4f3d96d9dec775b996be57e57fdc28e7c68023109b221c414a244a0dbc',\n '58b1e52fa274812e5184e00e9ad812bec2463140adfb4bea3b2d665867dcc9',\n ],\n [\n '7fcb89be1f4bec745887bb891e53fefd665c53d00a9e74de16b8a7e1f7adfb5',\n '74af0b06633f779897e199609c71cc5649bbb65bc2c0abd4c678f0480c198d1',\n ],\n [\n '62a381ffb904ea3ff4d451d4c8459457cdbc3dc2fd2da646a95d8c1e90c0b7b',\n '1ba058658e09db9e319fa73de8ab4a992b71e4efc22c273725bdcab84e2a315',\n ],\n [\n '1b0fbb7a84c67e668450a54449c7a46261a2d355589f8b84ebfbaf9a77ee938',\n '44f8fffa33dd33a6146c35d196595e22cc4a215f61ee9197cd751400970a1b',\n ],\n [\n '78fe920bd96a356d4d95ee34adafe8fecf071d3107c36f047b4024ddc4b3eea',\n '6162f29607fdbec10181fbac6e57d5cb41b922c5791fb24bd28bcdd75d16c41',\n ],\n [\n '5629b849e026e65d119ac11821d7ab7efd9c52226f75c7427505d6818bb0c8d',\n '1539c0f90970ee8b490e45bbe5568170e5708521a0e59f976be680595906feb',\n ],\n [\n '62bc853f349bac8c6e5921d27ba85dbd9ba20a375d70a7bc008928f3e123b04',\n '6acfeb1de05ba43c3ef1a9110a983a320e77b3ca294abbc04aeca19b194f26f',\n ],\n [\n '4cf4bed663464418285cbae359b5d84ec76b5997d24f3640984c7663421190f',\n '941f818e3e3e8fb1568da85217d17f9250ebc948379014d900a7b1a848494',\n ],\n [\n '52ff3d9ffe9a302f6dfaaf74bab57c08027d5cb699a69b30830540c0a2d47a1',\n '987dd8876873778d933fbfed37aab2f7d6f669c37024f926b1edcb2ca55782',\n ],\n [\n '1109ee32f0bc53de6bfa457060b366e909d7c18061ec9845f46ac715496897f',\n '38f36f172bdfd454b9285f86e6bdece8fdffc95182c7d801b03c671cc55139b',\n ],\n [\n '4b4482f1d84efe23dadf3bb10df3dcaa251312dcdd604f616f1eb540e1f3232',\n '7c9c149dcae9135f940fb54482f9c3cd8193721643a6e23157b8020410d439c',\n ],\n [\n '69cb459b9e415b7581ca163611c470d875971d5d7949de732d1f0f200544a73',\n 'a7136fa9dd00c0469863b7def3f83a5611ed628810d7e807e7a873da5a9897',\n ],\n [\n 'b66a4e32ac9a4baa8f64780acd94ed3628b2b0ea874ba4dece629af65f9e62',\n '24328ba9996a24389658e3467b8b90dc3927ef8419fe28b3f55b1c1aaa51915',\n ],\n [\n '5ecc3080062dd451236de0e4eb91c5c75100733364bc5469f5fa76f79021ecb',\n '6da4abb9031a27b5be94529324fad8026e7d871570780081b0f424d4fe543c9',\n ],\n [\n '1e3146f00880bb22486d5bc73e54367d54251f4002bcf342d0393b05a4b9ce0',\n '23b6fb8e945d3205f633ba724202db5a99305f807137edf942cd60eef867699',\n ],\n [\n '2e1da8013285598b899f026c6974185db12c97b4c63509769d3d4ad1d18a4e5',\n '1e7e7b668674d1593c39d58bc7bccbf568208732b3519bc2cdf93db34366862',\n ],\n [\n 'd26c3f389d81709506f184b53871497c8d36c5c9eee8e3737358204c1acba3',\n '34649c3d39f3b825947fedbca215ae30c5a5995e93b1c8efca4944cf85a082a',\n ],\n [\n '91300478a83595d548f32f259033291fc7d083953b0b8bde88c7559660c563',\n 'e5d2bff57fc6551e9b80c06ac7314a71907cdcc66ce82f2cce721a670df10a',\n ],\n [\n '1f7abcb9d462c63ffe92aa56619ae8590089cca4d93ee3e5f34a63882452cc7',\n '7e9f85c7b7ca6e9a4f3a026d1048adbeef69ea9d876c6f647c257b879a81bdd',\n ],\n [\n '4d2caa1323012e4c83b0ad387308b8aef5637bc35ddd882e7f5e41cf2ca410f',\n '47150e808c81a540b6f8864e9d6636589cacaa516f82caaa96506edfbd6f0e',\n ],\n [\n '3c10a6083c38351deb3e6d1b386827d0acf48979b66b95249eb8700ec26b069',\n '47e34bfe561d903cffdd1d849b85aa3cbd31cb4a9bbd8cc2e5fd2f95016cabc',\n ],\n [\n '758bd54868eec045d0b4d3d2bc415d24bce13fee47cefdfda46425c109b657',\n '3392a7c66ea3bd7b044680bbe9f78ae86752097404c067e9d2572f55330df83',\n ],\n [\n '19e718e0ca1d2d6fadbc6006ee7dda7a385430e29f5e239cdd4bb7c3fdcb2f8',\n '5c68249b7fe03ea2e13481a63b6cd4bf74ce42009a89fee0b3f8f968b3ec709',\n ],\n [\n '28077f57ea62401806367e6d54fe45d02de5b072db787ffdcc3854e12a3e855',\n '14f3762689072f5fb41d03e94b01808c739f6d42b7b785b0e464100b150efd2',\n ],\n [\n '3b8a8cefd017363ce867265af3293cec081fa589fe561830f0078778cbd338f',\n '69ccf2383cb7b4f9c806d72535812483e7c5e9a1a5928529d64ca7e085e758d',\n ],\n [\n '77878f388d22161a2953e5aca6bac1ea480e102f329574b4b201640d44a296b',\n '7eb35706a90a03aff7c2fecca72659136547cee98038746db5aba16fd7178df',\n ],\n [\n '97332e6da70961f2ef31b7b628f1018d21db8db015922a301fca7d6fc6a8e6',\n '2e37b06f639fc7a82601b744570a2619e543cbfaf60e474107fcaf4686d3223',\n ],\n [\n 'a81518d452d3aac48bf0386c3ff170ef4e684a4def242c964e129c64f4d647',\n '37506e44c85908ec7b7adda9547fbdcc2e3605151fefa77fbf127ce3bc938f2',\n ],\n [\n 'e80336b2220b1d666074f6b0dac85353d0e4c2e8bd0f37055a2236a6a9fadc',\n '1cae76d73eda7a5964c5d9d3ad6748aff51f5543c56441d2fdb7b444a39846a',\n ],\n [\n '2c01fd8430ecb44e066f352c4f697fc9fda177dbe162f82862d7b9ea8c918de',\n '6e1dfa99640fdf5b30603d34c7c97c1aa6e6b7f3a2c52a21fc64b0fcac7d591',\n ],\n [\n '744e37b511cd0ddcfe15f3581947014c159de81ed055d15a13c7a2d1fa39f0f',\n '685caa8ff6979a6c63640ac638a3f9c75737f2031bd55322a47384357af164d',\n ],\n [\n '40e627ff84e1a7a9068b4368770f5956128a4d9e9e33e9cf5e24d9a242149fd',\n '2465bd6cb20bbdf810e2bc5c3c458cecf4f3aa163a7ac99c2579e5f33417f2e',\n ],\n [\n '5f635af7f554a17bceb6ccb6e637abf89ab6dadd399189b0a0390e87b1896bc',\n '2aa6238a69f89665646c0e3ca2ba5f709cc6e14351cf71e1b00ec45201417a2',\n ],\n [\n '5edad3063c9fa8305978d7e6a4e037c9fa519b8023c7608dfc3b66e5c1e8985',\n '49f405d07d7d01919da51159ecdad1031a5ac208c026fdfc14d38f633d92183',\n ],\n [\n '2fdf2e8a45858c12926a1f25a62255fb2d02d0149a15ef669f859806683e649',\n '61cfb686bb31e2524470d4ad2ae09e3cc91b16305a21d748098feb1d8ce3b3d',\n ],\n [\n 'ecdbd7c37f1dffa3943977278da3bb429afdf948b4ea6cdebace3d3be82381',\n '190b67fb34f7f3ad6afd3d6b6427aa327547d8ac0fb4deeb0feeba1f63d6c60',\n ],\n [\n '233021b483f578dfa5222f8cccba5766ceee0ac65f6d4a3b1673b302a21fb3c',\n '7d4b6d44d175d4b593f06f5a6dcba2cdbc4eaa2097abaf613123546866cf4ef',\n ],\n [\n '42db4e953c2a7a743de9fe20c5798f2247f51db4eabc6f40e86c13909a310ce',\n '12c1a0764a0b9f3666e431923ce15e7fcd0ded5ab153f0b48d362cca1604e65',\n ],\n [\n '30d539e2b545fb957e40e2255f6463b52d227c9808472cee6a3d521aa283a44',\n '5f9eccf747fe6313570f99e845db32b40070acee9ce9e34da7f3c29ca53a07a',\n ],\n [\n '4bd64e5ade3e2733580a6116b4af328751198e7128f9acfe3a3496b545efb5a',\n '4d584768900dabfc0dbaa086632b8051bb3905ef79b84d96c01514441d0cc93',\n ],\n [\n '62d6e771f02e591557197d13c3e77dfa2d1794ac1808407bd8227c4be31b466',\n '5c6f5607c1808e899ba36a425911fa8566b7ea9cc80de8a80538c0fceb837c0',\n ],\n [\n '5ce406218cb2852b1d2fe1836b19462f664631785216e87ffbce26030e2101f',\n '5225f107743c255ab50e7be4a090fe39478d1ef4ff558468559d8cfa87bb94',\n ],\n [\n '670286486e8dda3dc66b0ed3149be7697d3e06c8279844079daa7e42d5af728',\n '26becabe7430380c56e320f5ae3329569cae7b0af06fd5327ee23979d200eb0',\n ],\n [\n '3ef448df33a4394c43e93e5850cd0c5a6dcb18ae1cd865d00fe8ede9336a9f5',\n '56711f6ab7e0e4f7365ac34e284ac2879f40208c46f6febcc1dcf7146ecf015',\n ],\n [\n '4b63fc130288e92f2d6ba238caa7a6364804e29829ac037c57df32fbf762bc3',\n '1eb8c80af55278b4113286c038fff2bfad2da62763bb03426506b869139da0e',\n ],\n [\n '4e7e998557b29a95f805a6e2e26efc1e970108272d4755738c04f28572295c0',\n '97cfcc2f447bde61bde71049d8200a74a3028b21703bc139143d81a3623f09',\n ],\n [\n '574b67898f02964c408f68e9470e7b615be037e40b824e6617f89cb56c21219',\n '49392d5f8e6740a1b0b7444f56d7a17363f8656c6e4c628678c86223f2e46c8',\n ],\n [\n '7e8cb50ea5d5c1b09e219e7305bcb601d99b6d7185b1c388aa8e36fe1e56554',\n '47fefa308645455c12ccb5817da338f0c4f423b341aff4a9d158891a4fd69ba',\n ],\n [\n '67266dea9e71b4ed2bf24a597a823dd048cf31e725db511edceac72998c9ef6',\n '39babd65850befde1f7c28e41dbdbb4caf82bbcf3bcb5b33161f1c2960b2d8',\n ],\n [\n '63e99c2cb9c74eb9227d48065e27abb8f606df8fc83b2c44e4ea38b046bad2b',\n '60494a53dd13ecf34e08079d343c88fb655d6d810785af81f08d5aa9bcdcf9',\n ],\n [\n '3cf0600b0f5a2a4eb78c487cd385350e8c7848e3f6983231881d7f1bbe28543',\n '56dee4288528de609976ef6b903b652127c37b0590e91a2fdbebc3f11df2628',\n ],\n [\n '758f09245fa4b8b23d290ee2b3bfcede199b4fdb11f3cf2502a8ceedd61b129',\n '622d9baadfde781e985d9722e0a04715666769a4cc7a9bea0b96d6386be1746',\n ],\n [\n '38e1a45b81492aa95d7abea2b08b8c14dc0b8a41108b036871fb737910ae18c',\n '145c611262656385e5ed6243568cd3f9f59dbfed7a01ba11e22bb8bb272e08e',\n ],\n [\n '206e54ca53a2f155bd4fc45bf2edb77798ae6623defd4cf22f2dd4a7d119dad',\n '6c94e7f0825ad81680e4cdbcaaaf4df806d57a0d1fb2331926c3fe2b79d22e8',\n ],\n [\n '56e98d2862893caebf66180e84badf19ffc8b53041eaaa313ae7286a8fac3d',\n '526306f9c01afd6e0c1198ea5de17630f5a39c4ecd02d8e6f0d613c355995c6',\n ],\n [\n '4fa56f376c83db33f9dab2656558f3399099ec1de5e3018b7a6932dba8aa378',\n '3fa0984c931c9e38113e0c0e47e4401562761f92a7a23b45168f4e80ff5b54d',\n ],\n [\n '450cfaadfecdb8a2fbd4b95c44cb1db723ee5ac9677c9c188b3d7c8eff4ca58',\n '1a552bdfc0c81be734f1f6ca9a6dd3ab4daa61c11fb53ebb7046eee25d617c7',\n ],\n [\n '6fe20e5c8a8004e33eafc84d16ef770f2f0b7bace19adaaa150f987d295a34d',\n '28a35040a2ebe9a14a162d3208d5eabc6e2f3a8310f926bd80be65aa71775e2',\n ],\n [\n '1bd65f45a35bf62ae8f9ffcbd7de2976b90518b6820c219f039c50043bb1edf',\n 'fb5f0f8659f9b6ed7cb0ddd7999506d0c20b26bbe69d1915a31842cfac41eb',\n ],\n [\n '4ba4cc166be8dec764910f75b45f74b40c690c74709e90f3aa372f0bd2d6997',\n '40301cf5c1751f4b971e46c4ede85fcac5c59a5ce5ae7c48151f27b24b219c',\n ],\n [\n '21cfbc678f5a279ebb6ed124273c8df37eaf12a2d04180403ae6b5ec0b1e1ef',\n '4478ed6a346d899ad7b0b10350270aad39ddd5b68529297e4c91a54357f0a7f',\n ],\n [\n '350bfefbe3d864eaadac9cc1195c14159bb736be743aed7380d2384cadd2046',\n '5e2a4b3ad0e1d7b9b8ef72b10d68a80e5ee691d7db591fcfbaad6240d41da8b',\n ],\n [\n '529acd569127f73c8d34345f87e96cebfb48ee12a00a3861cda209337ed94e6',\n '3120671a89b705e5bfd99b0e7fd2118b4914a3ac309b3d74527cacb5ad7491',\n ],\n [\n '55d3d7956a97d10e65a4d8ffeba40deaf0db0b57f8e022cdb3df6df613f5c6d',\n '159e59a6f92f48fcf85aa96c1a03749a4c4e2cf9e2bc94dd36796daebd9b8b9',\n ],\n [\n '405f019ee8f2e972a005c549b0884b5051f63d1e78480b73208dc07d8c65a1f',\n '4301a3d0c285ad309ff24a12c100ead7f48ba1368143712f32ac141ab4d9e8d',\n ],\n [\n '376d59b298d982f02dccad0edd5bbd4e5e8fad7898750675ed0856850a7babe',\n '5233b12bbc50564eb61cc098a17d3d97f06ec7a230380e4c5d3b725cc318eba',\n ],\n [\n '2f55624af6109ef04b2ed035a44a904ace8627f55889f011f768aabf4de9a38',\n '7f64209ce7dfb63337ccf3d8c14f4093295f86996cabfee23b1655549aca089',\n ],\n [\n '3b8965e942bed2714bc2e685fb103496e1e3595ac6a343d6df45fb5ef6979ed',\n '5b7cac7a165cb69ae103dd9052fb39c00ed0aad47989005aee53972d82d45b5',\n ],\n [\n '7abfe3accdec1eae1a50049efdd9a8eb7c2921a08e8bf1fe606e9d5a4039ec4',\n '3af178e7e831f8148244d2d2b284a32991852db6212ad0a9d77540ef648a5fe',\n ],\n [\n '4983196df6ad7d6f0a8d76f86af3863ad8611374a03fc0fd00793181dbde9d',\n '204c1f91b70f975a21d24a8face664e496f00f602daaafa69a3b56098a4cf89',\n ],\n [\n '79e2b91c1531a3b16dbd53e72d94e16bf265cbec261658151acfaea3718ea72',\n '3d9bdb47e8b148c1c5e9e694ffbc2cf71aac74ae1a85e8d8c3f77e580f962eb',\n ],\n [\n '297efceec61b3be17565843cae465c52524b4ecd9331a4170f54f7de8c4556c',\n '6ccef1733624cc8b973ac63dd54e7a53604929affe81c3439525ae5ed6af993',\n ],\n [\n '44f04b1966264a23ccdc870c8563ad2efcd4c8087b5469b90e792287a5581c7',\n '1c417f0e9829fa3d3cbb7c3cf4dc7aac04c5bf66ff3f86b833a42c533aed1fc',\n ],\n [\n '6ff83f5d8b51db3be0bda80eed2e2adb7037f2f58f705e88f0f98197431ac26',\n '64f59b8428894c2b7afd740866065ded42e716c7d48accd3f117f22768ed9fd',\n ],\n [\n '14aa8187c9559f77cd1cf96b2dfc949182529936f2b0b4050ea56e134073b24',\n '5f36508c68b1dc586f3fd3f4e2bd29c6d8258491b8a6aa19ede811ce0d3d0a1',\n ],\n [\n '95e8882a68c5000d1c2be7c0b43e7f2a6f8de906485241f0285a5c73a27a83',\n '1e4cb67207ab73bc1e5d19fa2146fde6d03021393b77a55df4ddda1fd28f5b1',\n ],\n [\n '2ae0704dacb3da47d564514b4c3543505b403ba09a248c6e74593cba1867ff5',\n '5a4b5818088dc9ef4066b90a8893ae80fc89584f987ec1928ef9d72cea2bd67',\n ],\n [\n '61a10898a76fb99989e51c0e823cb60b95ec7ccccb917c42b2b28014f5fd94d',\n '23d8ec1de45366d3b86c64c2da05a2ce3d171adf52ca5522e652ffd0eeee795',\n ],\n [\n '79884133c879cf07734976fd64de220c5a972e04c2a3afb74c362d6c3beecbf',\n '2aaa0e6d4891b792b5643fdf09873343cd0e3fbba3cbd0601b481a4083f32b6',\n ],\n [\n '45f73d2fa82be6c5ccd0f62d2237efe8727c479967d27cce28e42b9a44bad5b',\n '2fa4932215f72d56d8be5205c5851c9b3e5f2a14468e4a7acace5437c6b27dd',\n ],\n [\n '37f53f771850f52f9c8f87b53c6bf0c93c2bed76f5fd1d5697356d0b2325007',\n '50f1a052b79b446fbc7b93ffa1a4515f6c3be3a76a2b0bc5eb8ff327549960c',\n ],\n [\n '71bd6d23e0d2f312d47582efa609101f15b9ccc571fca8ac4fe3457c67fbc9b',\n '3b3fdf86bd4c7fc26d60540a6439b4d179dcbf7b91efb0ddc60dfbff9a148c6',\n ],\n [\n '78219ba049438385b829c13a4993874a4a326c4143de0dd581c7b9956f99b06',\n '5505f1268dcdd4ee01b77abac3bfdcbf3f0513ab097c69ff777b4a631aaf256',\n ],\n [\n 'b81e924a86536dcf68bc5a2ca2065a61103ba6c9eb0ae4cf8cce9dbe286f15',\n '653a6dfb51acfe8a844fb8362795e5549d424aed88d3a090366a44f840b5b83',\n ],\n [\n '441c0d7b7aa705046dc0e07ba5f33a7d9df23f694a05192ff8c2d7be2aa3fdc',\n '4c06568c0902bb99d428bfa0a946ed0f0ca0a51fbf07cad88e06e9c78e38a59',\n ],\n [\n '2569c8c78b6d6b92533f29f767c95720d377fa63ad5a3b9827ee0a74b0488aa',\n '4b59c81d3cfe08834f946d9d57614f5366e0bcd9349475aaaebe01341196fe0',\n ],\n [\n '3f2fa285a0471647b214eac652bbad9d58a9f2dd2e812aff0210d0d8a6eb32f',\n '4cdb18e1c2848c2b52c1a6557165bd1a8f55c2f7562f5cc0b326f73c25b696c',\n ],\n [\n '5bb5141ab4fcc5290ae9151b8045a2cd8391547ce7b3b33cbbb10f8fb538092',\n '5a36bfd52acc6a83a9913b937ec086cc27fed030b5fa70dbc5d3c12c9515f56',\n ],\n [\n '3f3fed272edf91aa7f8ca5d70005d390fbc67830ffc69c5fa3ae17582d2771',\n '459057e0883c44d8776fa217405f443e5954f08c4a5db68e437becaa664a999',\n ],\n [\n '5237ca6656237a717a739a4509f70db1b9dedbb6cd232f60c9bd8c4563a6b1f',\n '56c7799dd02896dbe7d69dd8bb9718270549592099569d107b7b49c34bf5a49',\n ],\n [\n '1cf6b8499ac881e0b2fc7def9bc1a28937033b2fc52de99e75909a620c7a281',\n '5769cf4f735366fa386b6858043dc99a100f86fbc77b16d57d77766197ba27a',\n ],\n [\n '1b74b8a6b86dbf9638cdb0601e1a332b8d880753423d38c3394902c57f15e40',\n '6bb2dc10d2ecbb913219d0ebdc8d3337d644ed8b6c4e70637ef4c7e50887488',\n ],\n [\n '61e4da415661bba52a4737e2bcde1a837787c4796b2e1854778534f1582c29b',\n '27c43e632cb7652e8508c9c38e3b4ad0d3dd6ba748d42dc84ec2685e64b9aad',\n ],\n [\n '7c460a204d23f20ce86596dae6ac9b36734e4a9f7c5b43262c97a36c6a41c6e',\n '481a11f9300ab4c4bf6924c5ca884728cc361247377065920966785d043fbbf',\n ],\n [\n '124ff5e55e4effa40daa5b9618d75c49c8b6fad95cbe8c0bfdd83cb9bed8316',\n '33a2ea15d0f71f58a00de71acd7f22ccf9002115e49dd1f7631faa0d32f9987',\n ],\n [\n '61c9f8fc86715e95ff43583a865c5a6515f93381839d557ef884a68637eaf4c',\n '5877daaa42bbab9083b571e12648a9d62ced4470d71653092b6546f4a5acceb',\n ],\n [\n '70a6b9a9e5d1fcc07dd9ebef6d8f5fcf04c6cb34932d0fe2335330ac6dc8d3d',\n '3f0cbd332ac56922e886656bee74f6e9bb4bb88f7af7bba9098678af1f38fc',\n ],\n [\n '41db8a0f1ea78443a39e08a54323743c8897eed1ddc28f41aec6f2655040d9f',\n '7d4bf32f8f4719c2e4af8b7889f3b65cfdd033dc2f971798a12170f2b26efce',\n ],\n [\n '62f035e01acdfe841104942d6c8c07f0fbd618cb85998ea24bcc24cfac1f8',\n '1caa886104b7d753fda93645a746989794cd825c62473b526ea34b3d51b5771',\n ],\n [\n '441c6f016d270e86c19843727b83b864cec060cafc813b23d7e41e5abb1a60a',\n '29fece4e40400f3acae0586f4fc8ed535e805e472123ec38d662d8a0b01c086',\n ],\n [\n '2c791ba0fb0b66177815c98191fa6188dba9c795e34a7c3c8a19086215e3cee',\n '11123151389d4b330db6a665a560407e7cd8c3807c749e2b0cffd9c3074ba77',\n ],\n [\n '5292da4ca71ae75ed0554c267747e39c7a129b3b863e1af3ebb3e368439c4ea',\n '63af6a5016deea8cc674c44f16c63c1db31f09af4fb4d2ea7917c28116661fc',\n ],\n [\n '3367388d5d1b7758dc3d92e244f227bb8a54e3d9909e7b7dd62ab5965e3efc7',\n '7ffb4833071e4b03ea755ccb9938487a478248fe9b1158a08f1ac298801c092',\n ],\n [\n '95c863314b7f18090f8eee602403be823a367a1b416d54c32e5f914e67d922',\n '159c2824f899171deee23e0ed520d4825bd667983df0a8d45d3a1f7156d91f9',\n ],\n [\n '621c6e08b3c57404644ad49ac7629832c141273fa1f323781b3395393fe985c',\n '65d1eb0140652958c4371ebec791e03317d6b2e689d90e304666f1b610783dd',\n ],\n [\n '54313129bf13993952cd2b31ed06013aba85e74c1b8a00e062031f32188a84e',\n '680129efc9eb8ec07fc180e8f6877e5f0f9f44e3000a2c586ed4ce49d12a313',\n ],\n [\n '21ea57a1c8286bb45872e78617853c47b89091670ba51c124afa3362e7260d',\n '7087e5c1536df233ec9bfe2f983e8d7622892b9bf64c450c9823898e2cc2fc8',\n ],\n [\n '3793b05b99e7a57d88db4ed0dbc3b771285abcd9052da50f88595354409f3f3',\n '12164105041c056f127e737c7cd63981e05f246bd2b6b65d1f427019c7c3801',\n ],\n [\n 'befd345cef5fcae22ac37dacd6b9128cc58cbba3e3fd774e11b421c2ba392',\n '6209d25f24f88f7876ca604db23d05f78e6b3b67fb033f2f1bee221f352b8c8',\n ],\n [\n '15fa536045fda4c65ff74f10b4e669ce88b9996c6772288289d3ad725987fa6',\n '30e0c2124a35e265e931ccc66ce5ac3697d982814beb407144ff6762cb691df',\n ],\n [\n '38b795bd77ac573576dc204857a488cac2cce19809882631ca2069598c577c8',\n '786ba555d55ebef688b068bb9186a34a08cb00bdfef51619bbf911890ae9a13',\n ],\n [\n '6c66853592196c3eb8d9526dc155205e2c64097adf8684bb0e15eb460ce1c72',\n '1bb4ebf654f4250c8dd1061a4e1b464b31a8a9999ac9960446ef8108a66871a',\n ],\n [\n '5b08dfbc87ad9c00b88e78816973ad2f9c10c70f2156908892cc7b7a2a1fd30',\n '1151f407a77e2556073173d8f5c9ff561d8a23742121ca15f7d0ac391af50ea',\n ],\n [\n '309190eba106aa6ead54b5ca5817969aa68b4b4c627700799a49fc6bdd32ba1',\n '505b6a2bc7b0d78ca6ce2abe7dfb7312369918a4599cccf8a615f6701cfd851',\n ],\n [\n '89cc205966af08acc8910d563af7443d5dfbb5d88dae79c013c678c65dcecc',\n '1f8cf955694b246a423ac725791231257b88936e00347ecaa1e17045c0ab540',\n ],\n [\n '480086b61a80c36cf1e1a350baf554e58ee8d9333186b70c9c512fb9e9d5a84',\n '511edfe58f8d36a6170df743731da1ff525cfd5108be20e30ac4183d1281570',\n ],\n [\n '3caf14fb1d2e90a13ad4eb091250fe37133aabf6029633e905e5a93ead41dbb',\n '49122aff6059dfda19e4b973aba5ebe3804c91728936c6381c1ed1ea9380920',\n ],\n [\n '66d1b8fb2cabc46cd79741ce1cb7326077ad8ea3227a6427244bdd3806bdadd',\n '4a52eb74f4d5371ba3265dffd61c844f9e68d4ff0b44dc4936182f9280bb66b',\n ],\n [\n '373330c5afd53c31257fcc9050fef873e15ea9f81d9810f30744309b04e02b3',\n '5889806607b3dc97a9c5b0c8a2f16d1792099a22866b879ca480cb89a11ef5c',\n ],\n [\n '26840d0ec69a22c6818ff64b8b14633b531508c866e21d1dc9239778ae9e8c7',\n '157971f9a6e3a24d3b307be0e7c8cd352e2eb5cad33cf276270c0f309ee63fc',\n ],\n [\n 'ebb84848f1c38c19a754d1b5d9460e39624dadbb30800987c9419c0f933b9f',\n '517b297cf32f4064e6d6c8e761ba8db89809604a701c7b3aa1a9c6beb370ea7',\n ],\n [\n '25780380bc0795ed0dca727c55240f1d63593e552d224adb40df2d3721c0f66',\n '10215fb5a893e0275e9f1f66b217dde35addee91ed0e8f7d79531a2ff57b8c8',\n ],\n [\n '243e1581cd1abfbf18c31c19a4c3d1cedfe69a40bb57b607c9af2717eefc742',\n '1296c27929f14535718c3a4ebe045f00afdc60afc74c7d398d8ce1b6609dc0f',\n ],\n [\n '48babb8649e054bc8e0b902c89e6940c265f48464520649502ef1064eb94562',\n '3235be7852b0526d1a16f6969ec0e5b0e09cedaadc65863dea4e47f4f398264',\n ],\n [\n '592db7c27e63489ef4bcef2eafce89f40067cd9a1ba48bc3dc76b5fc62ad9ca',\n '48b7711b570cd9ac65910e75e752f4b751fdbfb4091a28f59b8c046d3d9f8bc',\n ],\n [\n '31d133456222586ae42a9ec7ce8539ee04afbe0b2ed00a2564dab0798d9b55d',\n 'a77c52fa1fd718db5c83e7fda6d7d4d9aafef9ad95cad621470f2b753729e5',\n ],\n [\n '4651668379883521e7983aafcb93811b4a72ef2975b3277773746708ef3e3fc',\n '512507f3f544d80ba5d47f73b571881e8d70d7b1d305b9704bdad036b7abc47',\n ],\n [\n '26069e359b2e847affaef604f772f36224608b7642245d0e643889ed231bddc',\n '75ae1ec379f074ebc91270077c74b4d34347ce183b676b4dbe100bfff143b9e',\n ],\n [\n '3196d01d1fa11dc3803b4813c4bbc6326869f61410f2bd14bc0f570d875aebe',\n '20313217cac79875bd2a503db1e86d1e5559911667a02524759344468d9561d',\n ],\n [\n '483256607f75f06fb126addc60cadddd602154cc4782bcc08351a48745d0b97',\n '2950a7e500ebbe9775f08be37cc2e62ccf9030de18948d1bab07a4a9173f75d',\n ],\n [\n '65f07b6050a2fc6eebe2c29ffa62f764060f7f9d3c82d2cb5e4e368aaa442c9',\n '562c9654b646cb84a213b41de203c871b3eae0a05c9c105a66a53c319c06373',\n ],\n [\n '284870f6181c43f3b01d94baa9c5b6ada0deb861145523ad9169580eb7bed35',\n '5e03e6c40c1cfa3cafb01fd0622349871832a9d35499d06408a83edc1b76d02',\n ],\n [\n '32229810a52137f0e6c3d37595c46f6132822d4b05f42674b48d7a7ac3ad85',\n '7babde959a0cf2c53ee59fc52c77c3adf899453f077f441965629f9aead30cd',\n ],\n [\n '1ea8b98a6b85e74e0a2fbc18b206e290f3ed94ce99ca665e8e2351dfade990a',\n '478e93c4724115fb1648c8d5347422adbc1a0bbf962b2312e14aec80e1be742',\n ],\n [\n '270cbaa08c79140c85b864475a0bf569cc03ac785e57f543dc444f37ce746cf',\n '3a9b8d894016680ae9d1bf3deb931d8987d4d8d8bfed45b81ccc595ec79046b',\n ],\n [\n '6943922708b8ae5b40dd7031ef2e487abc4ac39a3591368285e83d6c9c51f4d',\n '5f157c37d09634e8cbfbef90ea50af59815d011e419a691c67ca3402b5efc33',\n ],\n [\n '48ac6a80979fab4912cf0cb557d917a0bd68825d8658ec100496eaae6ff62e1',\n '2b6931350ab183402e39476340eb1177b7006f7a552915581e29a79bd7203a0',\n ],\n [\n 'e3adf9517d92ef22d1e2a787740a292ba32d5ca69faa9e8675f63ed816dce5',\n '36bccf69bb12dadd610145a3399213248d193660d8dc90a2e206f23bf2c7997',\n ],\n [\n '5e6c8ae5afb2fa470f767581f3d578cf6a49547e4b78665edfd45776948bef8',\n '6cbfc11953dd7e195d2ce74e52a60df524767b44c4608bdd755be4bc85eb74c',\n ],\n [\n '15a576a1242d39300f0db3ad770983825988da0457718ecd596c63a0a0eb4a6',\n '69a42e5f6f5a63349b57683a4609bba90f556a1680fa1ec3b02ee7d3211f903',\n ],\n [\n '274cd14e4fbf2ed07402e8ad8075b320c5f76b7ea45ea36af523e95ed63ab50',\n '6ca640f9557c5f2d8b27f6ce95b108880ff4e4816b26b70b6506114389ce656',\n ],\n [\n '4d8284e132e2fe81c5f71be1e3c79ab51b229e2c56c323e207cda179999d123',\n '116cfc00e9fbee1cf16af6282123cdf20eed13021c2037ef4c86f94eb6e6cba',\n ],\n [\n '4056194fb5643e97991942ef5b63cadd89080bf57a01489c4398aca03f0980a',\n '2e2cddb434fa6f6da7859c3d518f0ced8795eea043a6c9613fb3e020103339f',\n ],\n [\n '5d119d5c5ce532afc0875e0ee9b026d878c8773d34237f90a0d0670da6f01b3',\n '4a79fc025ce076b6a4742fbcc8cad313d0a8220c58024a41a5a674c0947e64b',\n ],\n [\n '11800ce4061d99b9d53fd4138802335258f7798c5a935c9979f5a949ce1d483',\n '36745a4741a5c7290eaa8f2a3f9ec955ccb7ca323272e5d35d35c2a724ffac8',\n ],\n [\n '4302525bceb97fa642fd5560a4a39fba3d2c06f68e6aff3332ff1854439ebb3',\n 'e31edfd081ce82f8177b2d7d96e69851d09e908c2517114ffb37ee12c0ac64',\n ],\n [\n '2f5fcbb96f0a66fd3bdfbcc78bda361cb812570f50e7c476533d56eee01c0e3',\n '527428a34855b5695c479d8fb7e831a299f7897f36682a74169cc60d160df2d',\n ],\n [\n '52167df045ad0dc999b98de3d035aced9da4434211149b8cf4bf20e774580cf',\n '19051d2a1ad3fab190c5dfaf45188b49b4e90cca22aae54f0a785562d3d3f41',\n ],\n [\n '541b5332491dbdb2b6f6bccceb7634970c046963891fae936dd950f4432b961',\n '78fa54da996a51e3a9c06091d58c2405a806649da2bb1f323807c4eec50eda2',\n ],\n [\n '5f11e973da659b7738f87ca5bd4f3bd02207dd3c8d978f0d3e83fe81030febd',\n '137aba7027069f62d25caed416e13537687bb1428e71e5f0a0c52d52f2e65bc',\n ],\n [\n '15ec941ee6c2110b819b5541be52981c09d83484c9dc735c43f39f5778718b4',\n '4561826142dc5b56acfcf605a78a4090472bb61235bcd605a765e05d0a7e549',\n ],\n [\n '68ba398736d659522f484406110b43c68158bf4992094acf797a38979c587a4',\n '7c1d9e1702e28afddf22fed7a7a79df4315c174d0c6c4f4c75bc77d9b56777f',\n ],\n [\n '67889cea31c81a429fbae643a4fce0ecd690a5c32b99397e39ed6d7a08702df',\n '7ea277c80b671146c9e455b98f42f45b941ac95ca2d15c8fa9ea82ee9b45e01',\n ],\n [\n '596f2c68390ac26505d3c2eca5c77d46f8f3acbed192a2649d8c525a58d2334',\n '49f3bd8c62c610d5c19c52d970bde24b270c4ff7ae900453b909e72483974a0',\n ],\n [\n '567779fb8b0afe592cea284629e3621ccfae3c4d7d3dc559c9fed750591a395',\n '6010bdc33f1cdb374facefff537e7910b72a1120502f312a7ce41df0d552ddd',\n ],\n [\n 'cebed0233e810aa6a29a8b0829d28f1c92f303d14dd73d6b12da98117dfc7',\n '4bdd51e1192a00df23aa8d0673e4915877ca41ddb8c9eaf21d39dd167fde7b7',\n ],\n [\n '4c7085f066adeb6781596771972b188177e63f2e2b3788d03e033cdd5af1f06',\n '2929ee89f525862b0cedb3ab9b5166e1680cb77fb4668f10a6a3d76b5434566',\n ],\n [\n '760e341bd836899c226176f47685f69438270c150c6fe7744cd723cd1e72359',\n '1bf09f2f1aac1a10ce8bdf20d5d178db747f01a4aa0aa8a5e4bfeef562cd94e',\n ],\n [\n '6016b94c00b54920027ef64902c61478244b1936337d2ad41d9a8d43dd6a4b2',\n '3bf3dd9bce7f6d6f120de87fcbce6219340b59c2c1d75ee0d45105d33aab1cd',\n ],\n [\n '4929e44ff692eb944d1045bee96e750219cda3bda0500029f0df49a1db30b5b',\n '2e138dcbd092242699004b4ce98764ffe4e892841f56830af298581cd1e523f',\n ],\n [\n '5972d0e526311bacb70a04e88969b6c63c7399b578f0dc28bbd00d65ef01da7',\n '76b22bca9ac12d26530e7b0757e646beb3bbc5680d0f3f82fb8ee57ed4b5e39',\n ],\n [\n '2ca0a42a26e26934ca2d48db960b4719113d87c5e57fb437d557c5eb4e03ac7',\n '62778c02561d4ec5d83a132afd7763a8349207c6b5d01fba70b56ba660cba2e',\n ],\n [\n '5137ee53f076e21a2c23da09f63c0d275408c31e4634a6b6373be5cf13e6c00',\n '14fb446c077beb78e04de3282a63bfde12f9af85caaca4ddfab506cee31c0c1',\n ],\n [\n '7d944853d1627b63f560aeda33acf640d35a4ee4d23a744957a2dae9d5b7c6c',\n 'bcb411a210710acbcb9ea12680d89e3e4e652228b6786d3886e95f4d9e6970',\n ],\n [\n '37d412c2ffb173a728477446b60b2b702d07a5243cb5fc8963e623a5ee75843',\n '672c79968908f92cd0cb0b4c65ba86e8f359b015623a89441e1bf859bba84cb',\n ],\n [\n '5b37f472aa80398bff12cc74c8ee784c4fc89757292580d3a498bff17e9f114',\n '7d79da1aab9cfef58a5f3d1c9ec466956a45f8d2af0c1da6dd4c93f720fae6e',\n ],\n [\n '25c09b3f1188c562571536202eb0f5fc4b9a7590417b8ea58b4343685d88a63',\n '3d5b817c73b37e9a1d24ca923351359b42ced2f3cafbcac8c2d6322dc767bb',\n ],\n [\n '32e60904e73f9756f71e0a918d302aeca17cad4acacc81bab15702ab5ff78f0',\n 'bcf4c0204f8275072f98a65b09ac58b87cdc9c70c4edfe99fe18870a3a5459',\n ],\n [\n '49c35575996c1517d2daed90d2fe4a58e674d6b4aaa7288d0642c8bf59e562f',\n '57eeee00adea4ca80eeabab57852cbf03f1a57e21872cd44221e0550b9193b8',\n ],\n [\n '10e1776b4c2a867bf1b028c6edec224cc6616c747e272f49e69b67b02a893dd',\n '8d45d62ec8e627b56950f2f7622a0438647f9e9f28e723e4a37cebc039a1b0',\n ],\n [\n '79a93a75ecbe943acc964fd39ecfc971dc6555b2bc335e7b53f52f4eb16cd36',\n '146132a68ce2ca8b48363612226771ac547eb3cf52b6eb7981718faac08aa3c',\n ],\n [\n '6b22d32e0590e169504e7f19864fd646d0994e7ed3e578a5b88f6e095913439',\n '68c3b22d859fb85e5c8fa0a8aea932285945b230957e603394333e9ad5acd82',\n ],\n [\n '71ce5ec8286eb8c93b8481c6d19cf0a288ef4da4397e9c80f65023e516bc097',\n '54470babc742780cd8a05499026e738ccbf81d4170d1731734de68a8e5b402c',\n ],\n [\n '27beb13a43bc6a1f6ce046da438b0beac5899ff4d57962dcfb6476b563f74b',\n '14074e9e93ee45394dfbe833998b9d1691961f8ba3166224b36404448c61bb3',\n ],\n [\n '6b1de6c8f161aa6509a1dcacf2c0aa1bcf6ee9d9b40e032a9d72f77a6fa298c',\n '5e9312eb5b59d6cbadd7d3dcbc39f1b5bd9a8346fdcfdf1107bada6f9cc048',\n ],\n [\n '32670fc3fa43bf39974ba72ea51f0d045d92d084a81fe5282dfc8309aa900b9',\n '518fee521bf1af62356aac3b7e53fdbf57121e030c6e9572b3de69912ca4eb4',\n ],\n [\n '4b9ca363eabed9c66091a347375f7065cd28f49f914447de7cc1461f1375f1e',\n '3a1a3a2e5e7e72476befe2571ece708052d740d02cbe6fed58740968ae609c4',\n ],\n [\n '4cc6da42863a3deca62fa218b7a3b50e034eb4bafd393eccba3f4cbe192ef10',\n '20bfa683c884f203713953b26d2821287ecd305fa2cb70570474533fc07f918',\n ],\n [\n '87705353c44a5ccec8de65cf5433be6b3d9bd21eea49b60e6c907cf1a67a6a',\n '112804b13eee56e3b01aff75fa08fa8374c44fc461aed8a30ad54acd09c24eb',\n ],\n [\n '6cf6eeeb9d339c0a05f72fd5af73fc7588e6d957100ee8999109437bc126cae',\n '54fa257cea22032eac272fcd034dadf2e00d602ef9e519cf7072023c130aad1',\n ],\n [\n '19b32925048c5519d929650c833661b452ef7be7963fab0b6b328ab7dd7a28a',\n '1bd0c14a10bf9b88ea61011c0b2e64d07da151c6203800d5a5d12063838a510',\n ],\n [\n '12a5fc5559428bc3b4eff97b21b63668b866e0722807f1db1f19696bacd9b0d',\n '4c2eb07f0c24047a3d73b560144f3fd32c99d6dbd9fc7cd2fd2a72a6e4b24c7',\n ],\n [\n '13662b7a7d390aa76eb86a7c3bff6d9913eb28db6bd1a7c42de5cdad2e35ce2',\n '40626aded7f56f82cc431ae30527b096f57fbfbc04d3e12a5abae3edf301cf1',\n ],\n [\n '255825bd49b8a2cce114360bd9c8fe8c641af64c8e7710107213cfcb006f43d',\n '3619cce4482335232f9e76a1460be9d296f2d468d26e4f95a78c71524fe59cc',\n ],\n [\n '7f83009eeed4f12f54d341bbf06066480cfcdf51dda103ac54d4bcecf6b3b31',\n '4269519d28faafd7fd68bebfd8404d71ba05d62c4bb6d65d24aa6802fb84ab6',\n ],\n [\n '2f325650eb316646b4eec903fe44828fcb11054f1bd42ca3a77f7e734110b35',\n '44f976082271016f9048e22c507d97d628722bb431f8d5cc1890524e6c386bf',\n ],\n [\n '750b166bb6edc0ee80fae39c7c106879036738df2d79fb2294e1c21e9a24d6b',\n '54f8aa297a1afafe2a17a3254f45861167414327e918d17003c6aad01d0b24c',\n ],\n [\n '3aedb10db9cf3285cdeee375879396fac1fb50dd259e1716f8c01e66f67ca72',\n '7feb9400f621f58c21601f23b7ec7c94a9b6b193c1cd74a8a60846aedadd359',\n ],\n [\n '4ab7151702de76faa493e7a0b1ac20ee4d10c33b83fec9477547cb1236973eb',\n '63f1f122e3ef3acc46b0915ac69c3f5772879799cad889a817f55f5853d1235',\n ],\n [\n '1675ead0d20e5bc3a7a7331999a87ac4c916ae29669e54197bb02aa6364520f',\n '4d1122da90d49e491922d9b533a6a668e2f65a2737ebb391ebb29fb7c1f8a9d',\n ],\n [\n '2f7148111ef53c613157aeec12e16a20f13481da4390b6ce18a85d1d8547087',\n '2eeda779ab395597651d2a0b833ccf53b10280750139916ae2baf4ec57c633d',\n ],\n [\n '4439c7810e7b2ba772b701ec3acdca0b80c9df23047710b87f7dc3f13b337d3',\n '5029cfe704c602a8a4662af0a5860ec03fb88f046d0e3400f2ce7638014c621',\n ],\n [\n '2248eec40b5732a6a488b681f093643af7937071bc73118acae295a32b51b05',\n '1577e4aec30a97b648de4d0b19cf8891151b4eb11f8de9c6d7312f091552e19',\n ],\n [\n '4738424e558d4e0d87a3124ca02ea24f0adc6b7a9768b0d3945ed2a6104857c',\n '33576f92aca3f0c8ae689c3c274c2de6b918940d86a6852e02fc99e35d1614',\n ],\n [\n '7829edd8b866ebf7baaf604ed13d19a9797578f44bbc51b1cd67ca53803e96b',\n '5559040a6083f2af1f9133ccaf5bc2ce06e56ddfc7dd410e9635c0116b62722',\n ],\n [\n '7f927b881f2cdc05e1a69e40bb714af47b630d1425f08ab5d574ee698f33d51',\n '26a465288e96572de303203bd38f4a03031e8158da0591cb037c0a5111d1056',\n ],\n [\n '36a65598552f8753580d1655417d645a140966e10a1e1663015f9fdfae44881',\n '33d5bbfaebf59eae72b89b1aea12ab2ba3c9617f8c3baed1ec16bdf668381b5',\n ],\n [\n '403becfa545c826782026ff409cc16c9d4fe428f1b5b6e630c92439d2fa5fd',\n '47bd6f2bf5d74f710ecb479c79b01fb774fbdad590e683a415cdedf33f71dc5',\n ],\n [\n '3a747826d241b877d3d56b16e0b810cf088eda4fd6048da174c9991a942a5eb',\n '2c7ba19b0a3486a2cdb84d4a388d34beb077a0e467ba44590166f93f6a09d2e',\n ],\n [\n '3d60cd375842714b37bda89dd1f13a7e0f3ff133b522209617d031bce05a537',\n 'f77f216451ab01ad5226844d2162a7f32744688bcb4325445539e2ce5cec4',\n ],\n [\n '235bf66f67c9100e7f0e22bb299cdfaa603644b240e0770aec7e7fd163e2a65',\n '37110b3fa83ece3990afca2bea8d5ebb3c7aace60a0147f8e6ab733e2f2b4d5',\n ],\n [\n '3b796d4eb69a55471fa86108f787b3604874e92b6887a7667a6c2bfbbd9a42b',\n '4912d6dc0419732ef82cb3278415851d4e2d7ca89e0f4d7128cc9de51b810fe',\n ],\n [\n '48d53516dd51e49faa7ab46c8c10db1befd10f23c6a9d9bc3640a2f0da44518',\n '73a2fb3d064adadf21aa1362c04affc660598f38a9e069b3afb74d0a99ae9ee',\n ],\n [\n '48c32cff161ed145da0d5b73084897647abb777adf65738559ceab6939cf3e0',\n '3d99308978e828f857c382df32b472bda81e8ec8e30c8844077ba6d6d2ba903',\n ],\n [\n '2947ff091a8ec9684affbc9a62e09e598841c4a6dc638088492aa47dea57097',\n '19a2cc97975e547f97a4d02e42f89e6ced6f5a953cfccdec347867d26926541',\n ],\n [\n '1960d85f30475615f82484eba0bdafb7ea7cac3809f0518a757d66f02b01676',\n '36c8f77baabf0cc8805d993bbe62041fcf4e3239cf9d53278a4fbd91e75eeb7',\n ],\n [\n '2765f28074d21d5a055340b6d40092d2bbef807e02009fabfa08ec0b9bdf38b',\n '7fb189e0553d5df52b6843661814824b3f3cbebbd54988f042fb256c6bf30b',\n ],\n [\n '348836cb2aaa00212f4b1a4e2d7fc5417f246bf2fe5c9a16ebabda449e2e08a',\n '3f7276fd7d69e0d55ce5ee1d2d830534a27227fe0b6d8a36c93f9a78b872969',\n ],\n [\n '7afb9d34b6a42ea8c6d870e4b8191c274201dc1f93a1a2219a2392b7e345a31',\n '42bbc20dc7115e0758b364a110227b16b64ec58fc535ce5ff1a9ad8b8a09fdd',\n ],\n [\n '2cae0c2afee1767fd4c66f52e1f176d217e92e89cc19eb36d5a6c1715f641a',\n '5335efe2d9bc3667d25ea88bf76438a4d6ab9ba5c512f9da7d0529b79b62d83',\n ],\n [\n '1cc5fde334707723c3a06f00c106db88664284a2df47bb6b144d9f960aea3e2',\n 'dbbf610d100316938bcd8bcd078513512ecb50d4579690dbefaa419c05980d',\n ],\n [\n '54e90cb8f3a2998d2675c5780679e06c0556b1e618f8fdf07f9a4b2466fbf1e',\n '16248676b6f06ec5e34994bc3115f85c8147b54f34d8500928f2fdc051e2089',\n ],\n [\n '525c70a2ba0dbdd68d75640f47f13d0d415ea595f7030f533f4625c2a46523b',\n '58292c8675e5e1a438f49e0c05648d9a7aa997f2f1fd77d5de1944afe5d7eea',\n ],\n [\n '54726d78d099007393348787a03107ab492e59690a46c87fb02ec554f2353bd',\n '53b54b77184ba75a3391e0ebfa6d6974db028f3f8e34bbd5460759a5848dd76',\n ],\n [\n '4ac81a66903537769d3aac6c483ccc08535cb767b6b5e1ec8017a7393ab70ae',\n '2cb22b77a8a05d26f11a4dec80eff292633aa05553a889c5ab16b6ac6e2ab17',\n ],\n [\n '21d0175349e21114988a2930b9a607d43245783cb4a0c984ce27f4c4206708',\n '59f1f49342cc5496213d3329bf4ca7fb0044337449c579bf53147a1dac9e67c',\n ],\n [\n '167f821b381f4c8adcc39789475fb55ba639e5124fe75f26dd61be396dd5e66',\n '22002c87d4cafb47ac9d27286d5cf5ff7a6715d69814118269b0729be9e4b3a',\n ],\n [\n '31010666c6db83a9f9e4db4c48173afd405783ac53852a6e38a8ff925528843',\n '1f466dc9b5d9094107c741dbf380f9fd98d8549cd50f67169901516f8cce74c',\n ],\n [\n '1ad3875769a5053388a86edc85dd80fdffbbda6a456aea497ff81a0f1f6707b',\n '2de7cdec5e2bad56a71bd2f33a4ae4c874e1ad4210a6ac32b443cfa34e85b1b',\n ],\n [\n 'c489650fb7f459ce09cd05a456fc5a46b849b38a671298ed645bcdaab168b0',\n '45610d092b8af1c43ceed474cd17f7bbee65120aa6fa4d37f949e7e41f25327',\n ],\n [\n '394256a5ef4d7af5459587a0bd2edb8acaf5ecfef2563c9a04daf34a4abe4c6',\n '1ebee390dae1403c0c53994e1d064fa64e20fcb45392e209b2b99486a559ffd',\n ],\n [\n '410a1511fead6151e9bedb089b9832d0fe01fab76d3f8459929f767525aeb27',\n '361f0a5ffe09fcc3ad4eff3f5e89508ac247af80267100b69de3c59df561cfa',\n ],\n [\n '38cd437c9f659e110a869605c182ee9fdc26de36baf559d9229e258267bb734',\n '624b1128ea7739bf1cbd0e423af92a4884323c868d2ba0ee9d362946edee2d1',\n ],\n [\n '78b126e50b7042d2a019f95cb87a3213c664ca1bafe345999b1e9e2dac1e608',\n '19e398196b22f4488cbe854c614ad8c353839abc5ab3a4f3f5c03c16ba8a198',\n ],\n [\n '6d3a5ce91132f385a91823c5c8046c4b638f5fe63357424410d901457cdb867',\n '7b80bae16d2d487e122495174f7a70992bc5dafbed72bf84127ead7c57302bb',\n ],\n [\n '32d053a904dc4d88fbe7d0b96e0cbeca22a00aa5c79c753d52b0b60abf31602',\n '3af6a02e5cae6d6490354ae51185149e3fdb6d0d9caab90e95ff58aa0c40377',\n ],\n [\n '49b1fbff5bdb0aa6938b066dde0ed772c0d81f9eff52e7fe038b0ccbd78adb5',\n '1c6e57834eb14d507eed8b36c81ddf92fa91c242467061927a742fafa82b43d',\n ],\n [\n '2f28b8994ca6f234d9293d26196b43b9d1d5306844348c4a638102c05de85f5',\n '759cfb172eab065d477248b3569f4ff5791055f01e95fe71b94b8e615d73c96',\n ],\n [\n '3c2ee954ff534f856f59188fa0f29ed8a022aee0cac52d634f6dc58cd514d70',\n '22bd162e74925f0a876bd8a206b8767dfdd7c898576a73a490f138d9a7f99c6',\n ],\n [\n '5763a7cab001e1aaeabf9ab5b9b2fffe6cc2b299ab04ec4933da74d960e1ab',\n '715ee4f8ee93ab5a1dba00f0a6abc4eec47d49b61254cc27fc36a031e32f0f8',\n ],\n [\n '19976ad8d7b7f47c785408243a227401996b36e47c7a78a7bc7d4256233ba9a',\n '896b713c5d7777b0703821a73c1d9a4c3755501042120534ff13990975e1f5',\n ],\n [\n '61674b992c29827186cab5ff454758dbbed8e89bc23d0bd33193afccc3a04bc',\n '38e1020744c13903809ea30a0662fdb5226ae760cdcf10800faabec452e00f8',\n ],\n [\n '2ea2d48bcb83c0c9cda4efe11f07165cfcbc9ccd26526e5fb12556316d4b1df',\n '1d2d68b74ad384c5c4a9c85453104216357bfcdf635680b40215f0f800974cb',\n ],\n [\n '7881212050264c40c336ed3a15dd2cd868ec9a558f5b728869eab66e8b8ed54',\n '21aaefcc8ad8a161b8971d6880321781dbd939570c540da4c330922b8c81e9b',\n ],\n [\n 'b6be88ce0461d20f59c5199573cda0170b61decf6e8e69a6d32f1695adc4ed',\n '5536e4808370716f2bb3423a9a49a38ddbfe91faf3b7a35eb53d3519238b6cf',\n ],\n [\n 'e5972af1655eb6dde2e8c77cc58044299922441b5ee41ceaf5cafedc765bcc',\n '550282f37a4783dd60801c237045992d6fbe82a5902e7d837ea25f6f98c7b3a',\n ],\n [\n '7efc1aad1f580d8f50274f1c114c40056be19a8c96fa8c4cb5bf85e1e7f3e4',\n '2689f1c3898b114d668be6413643ee9f879913d40c262541fd0316264c60a4f',\n ],\n [\n '7939db98037f59b0113e9d60051f75ac9c3cfd1a3eb535c73e2d945068c6c5c',\n '410914ca8bbf3c65cdf3e9772ca790c19131c50068d34b7346c10260a578a8e',\n ],\n [\n '225b77ad00a2b83d26690190b74867326eca4f55bfbc3a13be036225ca3b1b5',\n '411faafef89042ce6beb64309fdaff70fa53e9d32d79a21e7f82f80e79ff05e',\n ],\n [\n '1501e64c99c8b6658b0479f2c05c9142d246eaabfccf2fcec8dc4399539d8e1',\n '3bab1e3339e42c9ee66c65b0b20236fdd9362d3ce786ad3a9779ab578af50a8',\n ],\n [\n '59b907b941f24fb8ea2458153e55f07534b388e835af7b69f3c9f54392a335',\n '1d5438c4f2f68a417f3d56f916d899a6ffe910f5f2989ca31687f1b10f60db8',\n ],\n [\n '2887d08a26f484546f360e33abbf7a998b7170a5b30070938b84f072c676bf3',\n '62a78e8d00e5d3a59e2fc424ffa08961567ba1ef24c8531cd7bceee6074a535',\n ],\n [\n '6e3cc8076b3d45377929033af35aab0c6d19ae4fd47c0daf844079ca04c46eb',\n '7b90f338e4d848aa8f19d0b5c3bca916a2a9024acbf14bddb278bca2aa39e5f',\n ],\n [\n '34844dacdd3ec54a3af328bb9d67715ab33425e194ac9977ca02ef22e8f7a88',\n '3c1affc6372f32a1634748124f9e1a03c4f0c993971da0dc28888b0801279d',\n ],\n [\n '436b192e03a49796cf9bc5e93c88268b71c9c24f9c3a85322bba634ebea309d',\n '67a8091ef69d62abcb28ce5df4dc7d53f8dc2b9690344f75ecd03a6d9386044',\n ],\n [\n '592d25b68baff87a6d7fd41ff0dadbddc1bd1316683de3b2d677501c0eb14e4',\n '27ad1e1099683f54589010faeefb19e38569ace43653be8787a42b0591e7bc5',\n ],\n [\n '89a5111ae911512ba62e87b97f643c0219702f235c70f62c6678a129302009',\n '557fa3d98e9ce7b83b47545013a4498f3de43787fb66b1a54521222242f7c1b',\n ],\n [\n '1c9b5e53377e72da5066cb08566bbf9ec31ec1877f455d932cd9b1aa375d34e',\n '72f79555a8bc207863f32d482fca54692825449fd8963fcea3de3a8183a739a',\n ],\n [\n '574a6e05eb14591729515be239ea8c1fa9e12d4049d42876f76c8ff37bca03',\n '5f99b3af43ca68c1c73e8190d5f73c8de162ba643d7d5f0cd73cfa8135db6d3',\n ],\n [\n '513fc5c2e16505b2b25a2f284e167d5401194bcac0dc3ecf8b7c9acb560daa1',\n '687ee7a1a8954d08d3856e1a16ded808e419e789736d3f55f79f7693bad69f5',\n ],\n [\n '53d48bd1205274b1c2b0a0ceb3d21c5fcd7c8892a784931603240b288a598b9',\n '35387abd7ea59c9b956de44d36533cad1f6668c438d666651695ff3862159be',\n ],\n [\n '213eb1ea99e08825110dd61094eb6e8145119dc1c507636f068730b1e086d44',\n '744f6853f4f02f4f042468d0739e0c9f64df720b87ed77d1979547084ef7a89',\n ],\n [\n '735ef017d091ca23264ad0aa7bb9b2be3309b4539605e79ed4a652ccb2fbe3c',\n '7f0ccc7a5747c4e921fff97d431169f690763427e2cfd1ad74d7a0308d7faa9',\n ],\n [\n '3f36babc5a30070b610ed97db44997e6d9115c9c0579ad8f75d295a17130001',\n '79047908a2474e32d5c712a07bf5c4ad522590bb5d6cefda410d30528e12ca8',\n ],\n [\n '51c04907ae88a5926b242fb2862cb1f2c651a94e6caad5bff8601c079fded74',\n '10a585a269f460aed43f54c7de13cdf623fc8de5957526997278be939ef32ad',\n ],\n [\n 'c1e1bd626a735aa2c065831317217ecce68e377eb1f67e54ce2e97bc2ef2dc',\n '53c5af23a9b482f420be6dfd37b6886154cfd130794098e1f51c1885ac2556a',\n ],\n [\n '5aff3b30775ae4758e604a4a6262803a545f5ef4e7855fa245ac6a6431a9ece',\n '39a4799e5519047f29333bee9c86c99bfa8056d4aa381c396c4a44331fe795f',\n ],\n [\n '3d753e9723701a8e9d99b91bb93dee2eda7ffa5072fb2cd5c5fd99aebcdb299',\n '15798bf5c17d6d5880fed1553af32dd8d8baf2888c715a886575448a24c7975',\n ],\n [\n '6593e5078466b07a4222d2e544da826d2c583c9cc5f2eaea148b129b00d4aa0',\n '11b352b08a0a61d3cd67d1dc08069dec3bde907b3da0f56de5011b956bf8744',\n ],\n [\n '7a6eb353c5be9ff03fe4a06c01fb71aad2b38144179a291ebcbb2c2417cca65',\n '3de3ecb12f2fa699b46a9d399abf77ca17bebc3e491bfb2542dd0fba991e2bb',\n ],\n [\n '2c7ead583d6c32162091034a9eddfa775b4e84b8bdbea939edb2a80dcf64f6',\n '461790ce40d9c276d962b2a1e9a74d66e9d7335962e234e8a2fc6963d31722d',\n ],\n [\n '34285af023d9b4c2c2b88e8704bf2c05a9b553b00b2e70ff05f8c2970cb134f',\n '33fe678e7671760a83836107428dbade68c3593fbe568f3f8f1b2c568099c44',\n ],\n [\n '6222f720a24466263db6a11842f117fc4bb78da6705f140e48869db3e087441',\n '6eff5b9bf3aeedc962bc5a24b66e7bdad2153450ed53a058bf2c8dbf2907693',\n ],\n [\n '17c6ec5ea206eb97cbf53851e37ce391080e0d2bf1e5395610f79ab0503f7ce',\n '3adb71ca3523d88ceb1e365f12dfb24895453c14daf0046b2626cddadfdf5f7',\n ],\n [\n '70859f9771a713e54974ce11cdaf44b0dcc3e9befa0c0834908d877eeaafd27',\n 'd18f794bf0cc0623b711e7450030424e52326c45ba9b03341883ae4828a5f8',\n ],\n [\n '2a820cfd0fd4ab0871e7b303cd545a3086caf8fa818c087a4017197da74efbf',\n '5f992683ff37f6c041b84bfc01503d333ac9763505cc8f69473da01812969d1',\n ],\n [\n '5b0526de2c07fe7cd73e3884f642d57a0ac5e13c68590ed03a14e530616e8c1',\n 'eec69d0cbd92c9fca31ec967dba848bec368e792d6678797946a5e34fe3487',\n ],\n [\n '6cf6b3efee707210cb3a72f1e885c3d0953aefb43e5e148c740aa1641725c61',\n '911cb630b898e2c1a9115f9e45bafe3b819edfb1eab6e15612d14289939984',\n ],\n [\n '74e913de55f1e46143cb2ecfc580f8d3d3908f200281322b84e21c989cda293',\n '761d2736c9ac7670ba905bc2629c6c0dbe988820a4454ff415ba68710f7df92',\n ],\n [\n '44084305e0c911a40b7cbefe5f13cffe9a99375d1a584c4a2200958050af7a9',\n '249c83877371564708ea525b64b1e7e12785460d83364446531c9adcacba5f0',\n ],\n [\n '2bf71ad4d1bee1a67fb300477029f54bdb0e09f78bf2ac2e8afc7465a7adbcc',\n '6244dd6cad282539049be57487bfd9900bb0d5da805d02b535096368fcb4cd5',\n ],\n [\n '3a62d8f763b62def36e4089458046a49c5ecb91b861549530773e0548ff2bb',\n '6a10a03ba61e6ac657270465c09aa9526cf1ebe96bdecdf0e7000476a47b9eb',\n ],\n [\n '284eed3a17c51e0677d4fe897f056abe9def8af07a4630e6ca5723e2aa6677',\n '516a06ac1d5626ed03d2eee9de6f60f0311eca703a99b0fb31b9c66b01c27c7',\n ],\n [\n '2a2c63b16cccd685f731d06fe93ce2cffb358d34d03dda9a7368185c1eb0c32',\n '7180baca0ba81284809f92eca1654cd76b925a9242e5d5e0f18d0a55d13c6ec',\n ],\n [\n '5f9466017ec09769611389ea5370ad68dda936d3f5816c9e928ff9574abf9a7',\n '6619b5b145bb5f4f29deb7a4cd68ef4da3995312fa6537f0d01684da4267ece',\n ],\n [\n '74f229babe01b4962b3307589c1a13019134b1db6822698388bebb55d21c30f',\n '156ae857ab3279f754facba0db36398dffec8c31e5e160473198f2f891b7531',\n ],\n [\n '334b9fe3a5fd99bc966ddd1309698fd32afd1f235062f2c275b6616a185de45',\n '221a60053583cc0607f6f2e6966b62fc9dac00538bb7eb1148e007a92116d2',\n ],\n [\n '7ad710ba002a67c731efbaba2149d16fec5d2f7aa3d126fd9886172e9f4ea30',\n '3a10f8e902a7a13aec94d66415347e1314f9bac83a7db176096b809b25ffb86',\n ],\n [\n '4306dd0a184a3283c3097ff8f7434cec80912e9dc04b7df21ba73fda9f8e6d8',\n '6d42bd3d1a8dbddafd09e872e2aa3891ae79ec939dc1b382196bc21c4ab749',\n ],\n [\n '1c3f2124e1135c32a426d1d14e471edd9e0f2c7bd703ee123cbbd608e8c4be7',\n '3cc607a3c3f1ab68dd5fa56c65996002721b8ad8ad4b0dd9e5b1467d316583',\n ],\n [\n '294af33272ffcee0b56a436de1b73759cbddebef4c07888b42c2f92b0b68e1',\n 'd837164311d5dca8d37b99ef9eb22708643c83d1cbdfe852f63ea07b06fbad',\n ],\n [\n '753bdb5439a19bbffdfa02b1dc24e8368f22d0a8276b109c11e6feb26f56f39',\n '6ed396231af93647633eab467f1a034f38e76823eb85baf97cae56e2dcd9f75',\n ],\n [\n '5674f0cb892b733fc0b50e121d8679afed0a925c32594cc65ffe83bebe7748e',\n '7fbf0325dd38dd94905adab2c52758552292a6a103d9edfcb11938828e828c8',\n ],\n [\n '4a8f053573a0a74251059d0229d89b6660407ba0b491779fd10f87a5117c81f',\n '21b70112485398bf67ec9d733df24a1df30dea718a93b786f41ed04e3ae3c5e',\n ],\n [\n '726c01ec4a08df8fc8de173311f50d4f3b97c5a9cf68c1536146f827db95ae8',\n '15013cafadefa7f1c4e4dfdd70bd4d3979dd18bd7f0332572ce2a3fd8773d12',\n ],\n [\n '38ac0fbfa98937257460db7e6645d7e5112b6fce7234813fc8a704e8ade8da2',\n '73c0109f86048aad08c443f781ae60ad13b99f7b9cfdf3128fe6d6eeb799a7b',\n ],\n [\n '6f6d3a38621582ace092eb50ecfe9eff265df141ebdcab8653299116fcea291',\n '4a1bf3f39bc919c8f1b720a0b1ce952cad17f2ba98308ee6b76dd9b6f3d7b75',\n ],\n [\n '6a307fc28e1df8d9ad01766419e097797d65cb674436fa1c8f012d3de2c2a1f',\n '26911a635ba824db004875d79dd84834a97ac12643e42829015bf88c1fd6f05',\n ],\n [\n '2a74860e3336d6db916555894cc8028f41508812925db1925457afe40257155',\n '5f8da573f4c39816ce2dba8a20224223a7cfec53117ec78973930c0e9b60244',\n ],\n [\n '4d2b49e1ed0799f719b8269f092cb489a466a645bc0ccabafdc678864c176d7',\n '5410083df7d256f18cbf5697ae5e52c31e075d8a3b27e21d6f5177ca882f6c1',\n ],\n [\n '110ecb9fbf6c333d168cee473cc5ad98809b6cb9eb5d1f6cd28ab5fab504fd3',\n '7e3c54d7533d9f8c3310f219dab0cc3ea4d39b418a748eeffd6bae2b8637a43',\n ],\n [\n '5be4d711b80da70e6d3ac493250bbfd16f20b25f31919b3a91cf14ffbac1096',\n '7f55a0919f082e8885f1515e83c5b39b6022404503507498e1b4422d79c43e2',\n ],\n [\n '2605125b95ca4ba93a21cbbba5762898a7cf9e988f07ab9e64cb3868e3b139d',\n '62f0ccf55b9fc0eaf9736fc8ee484e2acdbe259813af9803cf815829a5e9d3b',\n ],\n [\n '1092bbbf206f2a3068167c3dd99a72de31e206f6c504c071c8214d105ff814d',\n '309f489f68a62089f53b96df5d4fbc3ecc5a1a42eb7ece0e49bad17ad490ff4',\n ],\n [\n '2abdee9409d9c92559ca3f4e6bddd649c31aa09b90bfcb4a612af491241e18d',\n '3ffa8eac180a29de3f8a69efca84bac046f921f5725e96a6ff0530be1436aaf',\n ],\n [\n '376313f27d00bb1aae7ec991745efe6ee28c6b50de0c6cd9845cc4bb4f83543',\n '6a8e0a9389ba528b156fa94ac090a895d7b795818d4941c29415d9e2984c547',\n ],\n [\n 'a80380c71bd466a696b3f0fbf02817c9459d9798f4f3899cf32edf647fe066',\n '6a09805e814e7cdfc76eba4b79f1df5ae559e0f0aba9f728d3cba4ea5c57471',\n ],\n [\n '223694b921d247d989a79b9b2b2f07496036c40cb043eab074a9d6a2cd2ffed',\n 'c247217f1b1df35e30d9e15fdaadf42d6fb0edd3a5a7e265d4cdc426c120aa',\n ],\n [\n '102333620df278c6714bbc880fc087db58c1b9b4d77ed4d61b32a74bfc7c3e2',\n '6a77d37727ccf71c2caeb151faf4404d4b94e9047f9f0a7c3966367f3b53c65',\n ],\n [\n '891626f466536929ee7eadcd18b41925706dedab7528ed5f0f7abf039eb9d2',\n '5f73d11c141c933a35b2d0d06e5cbae614a20d17dc3b439f8bcdc3413c5ea37',\n ],\n [\n '215c23fd3f073f870e5e80303967391bf173f8adcdbeec72d131c557babc203',\n '10634332e9d9439a321597dc5b0fac9ff478834c3d6e281735f21a4a5e13266',\n ],\n [\n '21ea0bdc1332bc36e6aeb43be9071651c27e4ea2eadec636c8d818d4af72a36',\n '3a523d9643dccc6bb9c7c58413312caa3e60ba9c7c7f0177e0f3f469a3241e3',\n ],\n [\n '60deaed1bffb6190beed40caaf2bfab5e43d3707aff7ad3f278d571aa247eae',\n 'e41f71ff254c1418e6a66992af307789fe04d6606fb2670900bb1a089fd879',\n ],\n [\n '1e1fac4a1646253fb1332fadc21fbdd3e3a24a840d129400f520ae4116a4cf5',\n '69c406f9f46576afad68808de0ab7e8922b6226af748e721d9097e21f1800f3',\n ],\n [\n '5db0ddcdf79ffe74d6454c12d2bc60b06776db03c75dc413f5be42ea9a91b5e',\n '134c3d6c699841f17306835bb193785228ffe7ab212a01a861c56b086a18cec',\n ],\n [\n '626814e320fb5bea505b248fd1c1389ad586c1cfe04923fe2f83173e915f4f8',\n '7ae407a926e887206a8b85cf485f1f327c9bb8ccbb6897024e2d122877d8ee0',\n ],\n [\n '23186237dc7d3b570cea645282ad4c359731bbfa54e7f036426bf6493812cd',\n '7d1fbab7e61a22d3b00993290d9f4cd5d820061573e787f66c2cff9a18e1eaf',\n ],\n [\n '54302dcb0e6cc1c6e44cca8f61a63bb2ca65048d53fb325d36ff12c49a58202',\n '1b77b3e37d13504b348046268d8ae25ce98ad783c25561a879dcc77e99c2426',\n ],\n [\n '13961b56b9fc0e412e468c385c22bd0680a25624ec211ffbb6bc877b2a6926c',\n '62f7f7792c77cd981fad13cb6863fe099c4d971c1374109185eae99943f16e9',\n ],\n [\n '47abd7308c70659af3f00fafe6837298af3cb530b6c2ba710ffd07a6bc1ae98',\n '75d0c8a7377aa9f0663d0c124a5659750847afabc29e39893fd27534a4a03cb',\n ],\n [\n '2c6276b764fb398fa555857dbe0ce0ec18fab7a233bf23851295739801f0585',\n '5d8f4897ce44007ec5bfcb9aeb78b8f6e1d40a514f72d213c9300d2770d2b8c',\n ],\n];\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { addHexPrefix, removeHexPrefix } from './encode';\n\nexport type BigNumberish = string | number | BN;\n\nexport function isHex(hex: string): boolean {\n return /^0x[0-9a-f]*$/i.test(hex);\n}\n\nexport function toBN(number: BigNumberish, base?: number | 'hex') {\n if (typeof number === 'string') {\n // eslint-disable-next-line no-param-reassign\n number = number.toLowerCase();\n }\n if (typeof number === 'string' && isHex(number) && !base)\n return new BN(removeHexPrefix(number), 'hex');\n return new BN(number, base);\n}\n\nexport function toHex(number: BN): string {\n return addHexPrefix(number.toString('hex'));\n}\n\nexport function hexToDecimalString(hex: string): string {\n return toBN(`0x${hex.replace(/^0x/, '')}`).toString();\n}\n\nexport function toFelt(num: BigNumberish): string {\n if (BN.isBN(num)) {\n return num.toString();\n }\n return toBN(num).toString();\n}\n\n/*\n Asserts input is equal to or greater then lowerBound and lower then upperBound.\n Assert message specifies inputName.\n input, lowerBound, and upperBound should be of type BN.\n inputName should be a string.\n*/\nexport function assertInRange(\n input: BigNumberish,\n lowerBound: BigNumberish,\n upperBound: BigNumberish,\n inputName = ''\n) {\n const messageSuffix = inputName === '' ? 'invalid length' : `invalid ${inputName} length`;\n const inputBn = toBN(input);\n assert(\n inputBn.gte(toBN(lowerBound)) && inputBn.lt(toBN(upperBound)),\n `Message not signable, ${messageSuffix}.`\n );\n}\n\nexport function bigNumberishArrayToDecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toBN(x).toString(10));\n}\n\nexport function bigNumberishArrayToHexadecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toHex(toBN(x)));\n}\n\nexport const isStringWholeNumber = (value: string) => /^\\d+$/.test(value);\nexport const toHexString = (value: string) => toHex(toBN(value));\n\nexport function getDecimalString(value: string) {\n if (isHex(value)) {\n return hexToDecimalString(value);\n }\n if (isStringWholeNumber(value)) {\n return value;\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\nexport function getHexString(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\nexport function getHexStringArray(value: Array<string>) {\n return value.map((el) => getHexString(el));\n}\n\nexport const toCairoBool = (value: boolean): string => (+value).toString();\n","/* eslint-disable no-param-reassign */\nexport const IS_BROWSER = typeof window !== 'undefined';\n\nconst STRING_ZERO = '0';\n\nexport function arrayBufferToString(array: ArrayBuffer): string {\n return new Uint8Array(array).reduce((data, byte) => data + String.fromCharCode(byte), '');\n}\n\nexport function btoaUniversal(b: ArrayBuffer): string {\n return IS_BROWSER ? btoa(arrayBufferToString(b)) : Buffer.from(b).toString('base64');\n}\n\nexport function buf2hex(buffer: Uint8Array) {\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Some function imported from https://github.com/pedrouid/enc-utils/blob/master/src/index.ts\n * enc-utils is no dependency to avoid using `Buffer` which just works in node and no browsers\n */\n\nexport function removeHexPrefix(hex: string): string {\n return hex.replace(/^0x/, '');\n}\n\nexport function addHexPrefix(hex: string): string {\n return `0x${removeHexPrefix(hex)}`;\n}\n\nfunction padString(str: string, length: number, left: boolean, padding = STRING_ZERO): string {\n const diff = length - str.length;\n let result = str;\n if (diff > 0) {\n const pad = padding.repeat(diff);\n result = left ? pad + str : str + pad;\n }\n return result;\n}\n\nexport function padLeft(str: string, length: number, padding = STRING_ZERO): string {\n return padString(str, length, true, padding);\n}\n\nexport function calcByteLength(length: number, byteSize = 8): number {\n const remainder = length % byteSize;\n return remainder ? ((length - remainder) / byteSize) * byteSize + byteSize : length;\n}\n\nexport function sanitizeBytes(str: string, byteSize = 8, padding = STRING_ZERO): string {\n return padLeft(str, calcByteLength(str.length, byteSize), padding);\n}\n\nexport function sanitizeHex(hex: string): string {\n hex = removeHexPrefix(hex);\n hex = sanitizeBytes(hex, 2);\n if (hex) {\n hex = addHexPrefix(hex);\n }\n return hex;\n}\n\n// implemented using TextEncoder to make it isomorphic\nexport function utf8ToArray(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n","import elliptic from 'elliptic';\nimport hashJS from 'hash.js';\nimport assert from 'minimalistic-assert';\n\nimport { CONSTANT_POINTS, EC_ORDER, FIELD_PRIME, MAX_ECDSA_VAL, ONE, ZERO } from '../constants';\nimport { KeyPair, Signature } from '../types';\nimport { addHexPrefix, removeHexPrefix, sanitizeBytes } from './encode';\nimport { BigNumberish, assertInRange, toBN, toHex } from './number';\n\nconst { ec: EC, curves } = elliptic;\n\nexport const ec = new EC(\n new curves.PresetCurve({\n type: 'short',\n prime: null,\n p: FIELD_PRIME,\n a: '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001',\n b: '06f21413 efbe40de 150e596d 72f7a8c5 609ad26c 15c915c1 f4cdfcb9 9cee9e89',\n n: EC_ORDER,\n hash: hashJS.sha256,\n gRed: false,\n g: CONSTANT_POINTS[1],\n })\n);\n\n/**\n * The function _truncateToN in lib/elliptic/ec/index.js does a shift-right of 4 bits\n * in some cases. This function does the opposite operation so that\n * _truncateToN(fixMessage(msg)) == msg.\n *\n * @param msg\n */\nfunction fixMessage(msg: string) {\n const pureHex = msg.replace(/^0x0*/, '');\n\n if (pureHex.length <= 62) {\n // In this case, pureHex should not be transformed, as the byteLength() is at most 31,\n // so delta < 0 (see _truncateToN).\n return pureHex;\n }\n assert(pureHex.length === 63);\n // In this case delta will be 4 so we perform a shift-left of 4 bits by adding a ZERO_BN.\n return `${pureHex}0`;\n}\n\nexport const genKeyPair = ec.genKeyPair.bind(ec);\n\nexport function getKeyPair(pk: BigNumberish): KeyPair {\n const pkBn = toBN(pk);\n return ec.keyFromPrivate(removeHexPrefix(toHex(pkBn)), 'hex');\n}\n\nexport function getStarkKey(keyPair: KeyPair): string {\n // this method needs to be run to generate the .pub property used below\n // the result can be dumped\n keyPair.getPublic(true, 'hex');\n return addHexPrefix(sanitizeBytes((keyPair as any).pub.getX().toString(16), 2));\n}\n\n/**\n * Takes a public key and casts it into `elliptic` KeyPair format.\n *\n * @param publicKey - public key which should get casted to a KeyPair\n * @returns keyPair with public key only, which can be used to verify signatures, but cant sign anything\n */\nexport function getKeyPairFromPublicKey(publicKey: BigNumberish): KeyPair {\n const publicKeyBn = toBN(publicKey);\n return ec.keyFromPublic(removeHexPrefix(toHex(publicKeyBn)), 'hex');\n}\n\n/**\n * Signs a message using the provided key.\n *\n * @param keyPair should be an KeyPair with a valid private key.\n * @returns an Signature.\n */\nexport function sign(keyPair: KeyPair, msgHash: string): Signature {\n const msgHashBN = toBN(addHexPrefix(msgHash));\n // Verify message hash has valid length.\n assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'msgHash');\n const msgSignature = keyPair.sign(fixMessage(msgHash));\n const { r, s } = msgSignature;\n const w = s.invm((ec as any).n);\n // Verify signature has valid length.\n assertInRange(r, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'r');\n assertInRange(s, ONE, toBN(addHexPrefix(EC_ORDER)), 's');\n assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'w');\n return [r.toString(), s.toString()];\n}\n\nfunction chunkArray(arr: any[], n: number): any[][] {\n return Array(Math.ceil(arr.length / n))\n .fill('')\n .map((_, i) => arr.slice(i * n, i * n + n));\n}\n\n/**\n * Verifies a message using the provided key.\n *\n * @param keyPair should be an KeyPair with a valid public key.\n * @param sig should be an Signature.\n * @returns true if the verification succeeds.\n */\nexport function verify(keyPair: KeyPair | KeyPair[], msgHash: string, sig: Signature): boolean {\n const keyPairArray = Array.isArray(keyPair) ? keyPair : [keyPair];\n const msgHashBN = toBN(addHexPrefix(msgHash));\n assert(sig.length % 2 === 0, 'Signature must be an array of length dividable by 2');\n assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'msgHash');\n assert(keyPairArray.length === sig.length / 2, 'Signature and keyPair length must be equal');\n\n return chunkArray(sig, 2).every(([r, s], i) => {\n const rBN = toBN(r);\n const sBN = toBN(s);\n const w = sBN.invm((ec as any).n);\n assertInRange(rBN, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'r');\n assertInRange(sBN, ONE, toBN(addHexPrefix(EC_ORDER)), 's');\n assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'w');\n return ec.verify(fixMessage(msgHash), { r: rBN, s: sBN }, keyPairArray[i]) ?? false;\n });\n}\n","import Json from 'json-bigint';\n\nconst json = (alwaysParseAsBig: boolean) => {\n return Json({\n alwaysParseAsBig,\n useNativeBigInt: true,\n protoAction: 'preserve',\n constructorAction: 'preserve',\n });\n};\n\nexport const { parse, stringify } = json(false);\nexport const { parse: parseAlwaysAsBig, stringify: stringifyAlwaysAsBig } = json(true);\n\nexport default { parse, stringify };\n","import BN from 'bn.js';\nimport { gzip } from 'pako';\n\nimport { Calldata, CompressedProgram, Program, RawArgs, Signature } from '../types';\nimport { genKeyPair, getStarkKey } from './ellipticCurve';\nimport { addHexPrefix, btoaUniversal } from './encode';\nimport { stringify } from './json';\nimport { BigNumberish, toBN } from './number';\n\n/**\n * Function to compress compiled cairo program\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/services/api/gateway/transaction.py#L54-L58)\n * @param jsonProgram - json file representing the compiled cairo program\n * @returns Compressed cairo program\n */\nexport function compressProgram(jsonProgram: Program | string): CompressedProgram {\n const stringified = typeof jsonProgram === 'string' ? jsonProgram : stringify(jsonProgram);\n const compressedProgram = gzip(stringified);\n return btoaUniversal(compressedProgram);\n}\n\nexport function randomAddress(): string {\n const randomKeyPair = genKeyPair();\n return getStarkKey(randomKeyPair);\n}\n\nexport function makeAddress(input: string): string {\n return addHexPrefix(input).toLowerCase();\n}\n\nexport function formatSignature(sig?: Signature): string[] {\n if (!sig) return [];\n try {\n return sig.map((x) => toBN(x)).map((x) => x.toString());\n } catch (e) {\n return [];\n }\n}\n\nexport function compileCalldata(args: RawArgs): Calldata {\n return Object.values(args).flatMap((value) => {\n if (Array.isArray(value))\n return [toBN(value.length).toString(), ...value.map((x) => toBN(x).toString())];\n if (typeof value === 'object' && 'type' in value)\n return Object.entries(value)\n .filter(([k]) => k !== 'type')\n .map(([, v]) => toBN(v).toString());\n return toBN(value).toString();\n });\n}\n\nexport function estimatedFeeToMaxFee(estimatedFee: BigNumberish, overhead: number = 0.5): BN {\n // BN can only handle Integers, so we need to do all calulations with integers\n const overHeadPercent = Math.round((1 + overhead) * 100);\n return toBN(estimatedFee).mul(toBN(overHeadPercent)).div(toBN(100));\n}\n","import { CompiledContract, ContractClass, RawCalldata } from '../types';\nimport { parse } from './json';\nimport { isHex, toBN, toHex } from './number';\nimport { compressProgram } from './stark';\n\nexport function wait(delay: number) {\n return new Promise((res) => {\n setTimeout(res, delay);\n });\n}\n\nexport function parseCalldata(calldata: RawCalldata = []) {\n return calldata.map((data) => {\n if (typeof data === 'string' && isHex(data as string)) {\n return data;\n }\n return toHex(toBN(data));\n });\n}\n\nexport function parseContract(contract: CompiledContract | string) {\n const parsedContract =\n typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;\n return {\n ...parsedContract,\n program: compressProgram(parsedContract.program),\n } as ContractClass;\n}\n","/**\n * Map RPC Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n CallContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionResponse,\n} from '../../types';\nimport { RPC } from '../../types/api';\nimport { toBN } from '../number';\nimport { ResponseParser } from '.';\n\ntype RpcGetBlockResponse = RPC.GetBlockWithTxHashesResponse & {\n [key: string]: any;\n};\n\ntype GetTransactionByHashResponse = RPC.GetTransactionByHashResponse & {\n [key: string]: any;\n};\n\nexport class RPCResponseParser\n implements\n Omit<\n ResponseParser,\n | 'parseDeclareContractResponse'\n | 'parseDeployContractResponse'\n | 'parseInvokeFunctionResponse'\n | 'parseGetTransactionReceiptResponse'\n >\n{\n public parseGetBlockResponse(res: RpcGetBlockResponse): GetBlockResponse {\n return {\n timestamp: res.timestamp,\n block_hash: res.block_hash,\n block_number: res.block_number,\n new_root: res.new_root,\n parent_hash: res.parent_hash,\n status: res.status,\n transactions: res.transactions,\n };\n }\n\n public parseGetTransactionResponse(res: GetTransactionByHashResponse): GetTransactionResponse {\n return {\n calldata: res.calldata || [],\n contract_address: res.contract_address,\n max_fee: res.max_fee,\n nonce: res.nonce,\n signature: res.signature || [],\n transaction_hash: res.transaction_hash,\n version: res.version,\n };\n }\n\n public parseFeeEstimateResponse(res: RPC.EstimateFeeResponse): EstimateFeeResponse {\n return {\n overall_fee: toBN(res.overall_fee),\n gas_consumed: toBN(res.gas_consumed),\n gas_price: toBN(res.gas_price),\n };\n }\n\n public parseCallContractResponse(res: Array<string>): CallContractResponse {\n return {\n result: res,\n };\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport type { BlockNumber } from '../types';\nimport { BigNumberish, isHex, toBN, toHex } from '../utils/number';\n\n/**\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L148-L153)\n *\n * @param hashValue\n * @param hashField\n */\nexport function formatHash(hashValue: BigNumberish): string {\n if (typeof hashValue === 'string') return hashValue;\n return toHex(toBN(hashValue));\n}\n\n/**\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L156-L161)\n * @param txHash\n * @param txId\n */\nexport function txIdentifier(txHash?: BigNumberish, txId?: BigNumberish): string {\n if (!txHash) {\n return `transactionId=${JSON.stringify(txId)}`;\n }\n const hashString = formatHash(txHash);\n\n return `transactionHash=${hashString}`;\n}\n\n// hex string and BN are detected as block hashes\n// decimal string and number are detected as block numbers\n// null appends nothing to the request url\n\nexport type BlockIdentifier = BlockNumber | BigNumberish;\n\nexport class Block {\n hash: BlockIdentifier = null;\n\n number: BlockIdentifier = null;\n\n tag: BlockIdentifier = null;\n\n private setIdentifier: (_identifier: BlockIdentifier) => void;\n\n constructor(_identifier: BlockIdentifier) {\n this.setIdentifier = function (__identifier: BlockIdentifier) {\n if (typeof __identifier === 'string' && isHex(__identifier)) {\n this.hash = __identifier;\n } else if (typeof __identifier === 'number') {\n this.number = __identifier;\n } else {\n this.tag = __identifier;\n }\n };\n\n this.setIdentifier(_identifier);\n }\n\n get queryIdentifier(): any {\n if (this.number !== null) {\n return `blockNumber=${this.number}`;\n }\n\n if (this.hash !== null) {\n return `blockHash=${this.hash}`;\n }\n\n return `blockNumber=${this.tag}`;\n }\n\n get identifier(): any {\n if (this.number !== null) {\n return { block_number: this.number };\n }\n\n if (this.hash !== null) {\n return { block_hash: this.hash };\n }\n\n return this.tag;\n }\n\n set identifier(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n valueOf = () => this.number;\n\n toString = () => this.hash;\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n DeclareContractResponse,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n} from '../types';\nimport { RPC } from '../types/api';\nimport {\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n InvocationsDetails,\n} from '../types/lib';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelectorFromName } from '../utils/hash';\nimport { stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToHexadecimalStringArray,\n toBN,\n toHex,\n} from '../utils/number';\nimport { parseCalldata, parseContract, wait } from '../utils/provider';\nimport { RPCResponseParser } from '../utils/responseParser/rpc';\nimport { randomAddress } from '../utils/stark';\nimport { ProviderInterface } from './interface';\nimport { Block, BlockIdentifier } from './utils';\n\nexport type RpcProviderOptions = {\n nodeUrl: string;\n retries?: number;\n headers?: object;\n};\n\nexport class RpcProvider implements ProviderInterface {\n public nodeUrl: string;\n\n // from interface\n public chainId!: StarknetChainId;\n\n public headers: object;\n\n private responseParser = new RPCResponseParser();\n\n private retries: number;\n\n constructor(optionsOrProvider: RpcProviderOptions) {\n const { nodeUrl, retries, headers } = optionsOrProvider;\n this.nodeUrl = nodeUrl;\n this.retries = retries || 200;\n this.headers = { 'Content-Type': 'application/json', ...headers };\n\n this.getChainId().then((chainId) => {\n this.chainId = chainId;\n });\n }\n\n public fetch(method: any, params: any): Promise<any> {\n return fetch(this.nodeUrl, {\n method: 'POST',\n body: stringify({ method, jsonrpc: '2.0', params, id: 0 }),\n headers: this.headers as Record<string, string>,\n });\n }\n\n protected errorHandler(error: any) {\n if (error) {\n const { code, message } = error;\n throw new Error(`${code}: ${message}`);\n }\n }\n\n protected async fetchEndpoint<T extends keyof RPC.Methods>(\n method: T,\n params?: RPC.Methods[T]['params']\n ): Promise<RPC.Methods[T]['result']> {\n try {\n const rawResult = await this.fetch(method, params);\n const { error, result } = await rawResult.json();\n this.errorHandler(error);\n return result as RPC.Methods[T]['result'];\n } catch (error: any) {\n this.errorHandler(error?.response?.data);\n throw error;\n }\n }\n\n // Methods from Interface\n public async getChainId(): Promise<any> {\n return this.fetchEndpoint('starknet_chainId');\n }\n\n // Methods from Interface\n public async getBlock(blockIdentifier: BlockIdentifier = 'pending'): Promise<GetBlockResponse> {\n return this.getBlockWithTxHashes(blockIdentifier).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getBlockHashAndNumber(): Promise<RPC.BlockHashAndNumber> {\n return this.fetchEndpoint('starknet_blockHashAndNumber');\n }\n\n public async getBlockWithTxHashes(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.GetBlockWithTxHashesResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxHashes', { block_id });\n }\n\n public async getBlockWithTxs(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.GetBlockWithTxs> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxs', { block_id });\n }\n\n public async getClassHashAt(\n contractAddress: RPC.ContractAddress,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.Felt> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassHashAt', {\n block_id,\n contract_address: contractAddress,\n });\n }\n\n public async getNonce(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.Nonce> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getNonce', {\n contract_address: contractAddress,\n block_id,\n });\n }\n\n public async getPendingTransactions(): Promise<RPC.PendingTransactions> {\n return this.fetchEndpoint('starknet_pendingTransactions');\n }\n\n public async getProtocolVersion(): Promise<Error> {\n throw new Error('Pathfinder does not implement this rpc 0.1.0 method');\n }\n\n public async getStateUpdate(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.StateUpdate> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStateUpdate', { block_id });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n const parsedKey = toHex(toBN(key));\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStorageAt', {\n contract_address: contractAddress,\n key: parsedKey,\n block_id,\n });\n }\n\n // Methods from Interface\n public async getTransaction(txHash: string): Promise<GetTransactionResponse> {\n return this.getTransactionByHash(txHash).then(this.responseParser.parseGetTransactionResponse);\n }\n\n public async getTransactionByHash(txHash: string): Promise<RPC.GetTransactionByHashResponse> {\n return this.fetchEndpoint('starknet_getTransactionByHash', { transaction_hash: txHash });\n }\n\n public async getTransactionByBlockIdAndIndex(\n blockIdentifier: BlockIdentifier,\n index: number\n ): Promise<RPC.GetTransactionByBlockIdAndIndex> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getTransactionByBlockIdAndIndex', { block_id, index });\n }\n\n public async getTransactionReceipt(txHash: string): Promise<RPC.TransactionReceipt> {\n return this.fetchEndpoint('starknet_getTransactionReceipt', { transaction_hash: txHash });\n }\n\n public async getClassByHash(classHash: RPC.Felt): Promise<RPC.ContractClass> {\n return this.getClass(classHash);\n }\n\n public async getClass(\n classHash: RPC.Felt,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.ContractClass> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClass', { class_hash: classHash, block_id });\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.ContractClass> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassAt', {\n block_id,\n contract_address: contractAddress,\n });\n }\n\n public async getCode(\n _contractAddress: string,\n _blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n throw new Error('RPC does not implement getCode function');\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'INVOKE',\n sender_address: invocation.contractAddress,\n calldata: parseCalldata(invocation.calldata),\n signature: bigNumberishArrayToHexadecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 0)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n max_fee: toHex(toBN(invocationDetails?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n // TODO: Revisit after Pathfinder release with JSON-RPC v0.2.1 RPC Spec\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'DECLARE',\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi, // rpc 2.0\n },\n sender_address: senderAddress,\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'DEPLOY_ACCOUNT',\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(toBN(classHash)),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n // TODO: Revisit after Pathfinder release with JSON-RPC v0.2.1 RPC Spec\n public async declareContract(\n { contractDefinition, signature, senderAddress }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.fetchEndpoint('starknet_addDeclareTransaction', {\n declare_transaction: {\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi, // rpc 2.0\n },\n type: 'DECLARE',\n version: toHex(toBN(details.version || 0)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n sender_address: senderAddress,\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n /**\n * @deprecated This method won't be supported, use Account.deploy instead\n */\n public async deployContract(\n { contract, constructorCalldata, addressSalt }: DeployContractPayload,\n details?: InvocationsDetails\n ): Promise<DeployContractResponse> {\n const contractDefinition = parseContract(contract);\n return this.fetchEndpoint('starknet_addDeployTransaction', {\n deploy_transaction: {\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata ?? []),\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi,\n },\n type: 'DEPLOY',\n version: toHex(toBN(details?.version || 0)),\n },\n });\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('starknet_addDeployAccountTransaction', {\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(toBN(classHash)),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n type: 'DEPLOY',\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n nonce: toHex(toBN(details.nonce)),\n });\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('starknet_addInvokeTransaction', {\n invoke_transaction: {\n sender_address: functionInvocation.contractAddress,\n calldata: parseCalldata(functionInvocation.calldata),\n type: 'INVOKE',\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(functionInvocation.signature || []),\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n // Methods from Interface\n public async callContract(\n call: Call,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<CallContractResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n const result = await this.fetchEndpoint('starknet_call', {\n request: {\n contract_address: call.contractAddress,\n entry_point_selector: getSelectorFromName(call.entrypoint),\n calldata: parseCalldata(call.calldata),\n },\n block_id,\n });\n\n return this.responseParser.parseCallContractResponse(result);\n }\n\n public async traceTransaction(transactionHash: RPC.TransactionHash): Promise<RPC.Trace> {\n return this.fetchEndpoint('starknet_traceTransaction', { transaction_hash: transactionHash });\n }\n\n public async traceBlockTransactions(blockHash: RPC.BlockHash): Promise<RPC.Traces> {\n return this.fetchEndpoint('starknet_traceBlockTransactions', { block_hash: blockHash });\n }\n\n public async waitForTransaction(txHash: string, retryInterval: number = 8000) {\n let { retries } = this;\n let onchain = false;\n\n while (!onchain) {\n const successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING'];\n const errorStates = ['REJECTED', 'NOT_RECEIVED'];\n\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n try {\n // eslint-disable-next-line no-await-in-loop\n const res = await this.getTransactionReceipt(txHash);\n\n if (!('status' in res)) {\n const error = new Error('pending transaction');\n throw error;\n }\n\n if (res.status && successStates.includes(res.status)) {\n onchain = true;\n } else if (res.status && errorStates.includes(res.status)) {\n const message = res.status;\n const error = new Error(message) as Error & { response: any };\n error.response = res;\n throw error;\n }\n } catch (error: unknown) {\n if (error instanceof Error && errorStates.includes(error.message)) {\n throw error;\n }\n\n if (retries === 0) {\n throw new Error('waitForTransaction timedout with retries');\n }\n }\n\n retries -= 1;\n }\n\n await wait(retryInterval);\n }\n\n /**\n * Gets the transaction count from a block.\n *\n *\n * @param blockIdentifier\n * @returns Number of transactions\n */\n public async getTransactionCount(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.GetTransactionCountResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockTransactionCount', { block_id });\n }\n\n /**\n * Gets the latest block number\n *\n *\n * @returns Number of the latest block\n */\n public async getBlockNumber(): Promise<RPC.GetBlockNumberResponse> {\n return this.fetchEndpoint('starknet_blockNumber');\n }\n\n /**\n * Gets syncing status of the node\n *\n *\n * @returns Object with the stats data\n */\n public async getSyncingStats(): Promise<RPC.GetSyncingStatsResponse> {\n return this.fetchEndpoint('starknet_syncing');\n }\n\n /**\n * Gets all the events filtered\n *\n *\n * @returns events and the pagination of the events\n */\n public async getEvents(eventFilter: RPC.EventFilter): Promise<RPC.GetEventsResponse> {\n return this.fetchEndpoint('starknet_getEvents', { filter: eventFilter });\n }\n}\n","import urljoin from 'url-join';\n\nimport { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n} from '../types';\nimport {\n CallL1Handler,\n GetContractAddressesResponse,\n GetTransactionStatusResponse,\n GetTransactionTraceResponse,\n Sequencer,\n} from '../types/api';\nimport { DeclareContractTransaction, DeployAccountContractTransaction } from '../types/lib';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelector, getSelectorFromName } from '../utils/hash';\nimport { parse, parseAlwaysAsBig, stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToDecimalStringArray,\n getDecimalString,\n getHexString,\n getHexStringArray,\n toBN,\n toHex,\n} from '../utils/number';\nimport { parseContract, wait } from '../utils/provider';\nimport { SequencerAPIResponseParser } from '../utils/responseParser/sequencer';\nimport { randomAddress } from '../utils/stark';\nimport { buildUrl } from '../utils/url';\nimport { GatewayError, HttpError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { Block, BlockIdentifier } from './utils';\n\ntype NetworkName = 'mainnet-alpha' | 'goerli-alpha' | 'goerli-alpha-2';\n\nfunction isEmptyQueryObject(obj?: Record<any, any>): obj is undefined {\n return (\n obj === undefined ||\n Object.keys(obj).length === 0 ||\n (Object.keys(obj).length === 1 &&\n Object.entries(obj).every(([k, v]) => k === 'blockIdentifier' && v === null))\n );\n}\n\nexport type SequencerProviderOptions =\n | { network: NetworkName }\n | {\n baseUrl: string;\n feederGatewayUrl?: string;\n gatewayUrl?: string;\n chainId?: StarknetChainId;\n headers?: object;\n };\n\nexport class SequencerProvider implements ProviderInterface {\n public baseUrl: string;\n\n public feederGatewayUrl: string;\n\n public gatewayUrl: string;\n\n public chainId: StarknetChainId;\n\n public headers: object | undefined;\n\n private responseParser = new SequencerAPIResponseParser();\n\n constructor(optionsOrProvider: SequencerProviderOptions = { network: 'goerli-alpha-2' }) {\n if ('network' in optionsOrProvider) {\n this.baseUrl = SequencerProvider.getNetworkFromName(optionsOrProvider.network);\n this.chainId = SequencerProvider.getChainIdFromBaseUrl(this.baseUrl);\n this.feederGatewayUrl = urljoin(this.baseUrl, 'feeder_gateway');\n this.gatewayUrl = urljoin(this.baseUrl, 'gateway');\n } else {\n this.baseUrl = optionsOrProvider.baseUrl;\n this.feederGatewayUrl = buildUrl(\n this.baseUrl,\n 'feeder_gateway',\n optionsOrProvider.feederGatewayUrl\n );\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway', optionsOrProvider.gatewayUrl);\n\n this.chainId =\n optionsOrProvider.chainId ??\n SequencerProvider.getChainIdFromBaseUrl(optionsOrProvider.baseUrl);\n\n this.headers = optionsOrProvider?.headers;\n }\n }\n\n protected static getNetworkFromName(name: NetworkName) {\n switch (name) {\n case 'mainnet-alpha':\n return 'https://alpha-mainnet.starknet.io';\n case 'goerli-alpha':\n return 'https://alpha4.starknet.io';\n case 'goerli-alpha-2':\n return 'https://alpha4-2.starknet.io';\n default:\n return 'https://alpha4.starknet.io';\n }\n }\n\n protected static getChainIdFromBaseUrl(baseUrl: string): StarknetChainId {\n try {\n const url = new URL(baseUrl);\n if (url.host.includes('mainnet.starknet.io')) {\n return StarknetChainId.MAINNET;\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Could not parse baseUrl: ${baseUrl}`);\n }\n return StarknetChainId.TESTNET;\n }\n\n private getFetchUrl(endpoint: keyof Sequencer.Endpoints) {\n const gatewayUrlEndpoints = ['add_transaction'];\n\n return gatewayUrlEndpoints.includes(endpoint) ? this.gatewayUrl : this.feederGatewayUrl;\n }\n\n private getFetchMethod(endpoint: keyof Sequencer.Endpoints) {\n const postMethodEndpoints = [\n 'add_transaction',\n 'call_contract',\n 'estimate_fee',\n 'estimate_message_fee',\n ];\n\n return postMethodEndpoints.includes(endpoint) ? 'POST' : 'GET';\n }\n\n private getQueryString(query?: Record<string, any>): string {\n if (isEmptyQueryObject(query)) {\n return '';\n }\n const queryString = Object.entries(query)\n .map(([key, value]) => {\n if (key === 'blockIdentifier') {\n const block = new Block(value);\n return `${block.queryIdentifier}`;\n }\n return `${key}=${value}`;\n })\n .join('&');\n\n return `?${queryString}`;\n }\n\n private getHeaders(method: 'POST' | 'GET'): object | undefined {\n if (method === 'POST') {\n return {\n 'Content-Type': 'application/json',\n ...this.headers,\n };\n }\n return this.headers;\n }\n\n // typesafe fetch\n protected async fetchEndpoint<T extends keyof Sequencer.Endpoints>(\n endpoint: T,\n // typescript type magic to create a nice fitting function interface\n ...[query, request]: Sequencer.Endpoints[T]['QUERY'] extends never\n ? Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [] // when no query and no request is needed, we can omit the query and request parameters\n : [undefined, Sequencer.Endpoints[T]['REQUEST']]\n : Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [Sequencer.Endpoints[T]['QUERY']] // when no request is needed, we can omit the request parameter\n : [Sequencer.Endpoints[T]['QUERY'], Sequencer.Endpoints[T]['REQUEST']] // when both query and request are needed, we cant omit anything\n ): Promise<Sequencer.Endpoints[T]['RESPONSE']> {\n const baseUrl = this.getFetchUrl(endpoint);\n const method = this.getFetchMethod(endpoint);\n const queryString = this.getQueryString(query);\n const headers = this.getHeaders(method);\n const url = urljoin(baseUrl, endpoint, queryString);\n\n try {\n const res = await fetch(url, {\n method,\n body: stringify(request),\n headers: headers as Record<string, string>,\n });\n const textResponse = await res.text();\n if (!res.ok) {\n // This will allow user to handle contract errors\n let responseBody: any;\n try {\n responseBody = parse(textResponse);\n } catch {\n // if error parsing fails, return an http error\n throw new HttpError(res.statusText, res.status);\n }\n\n const errorCode = responseBody.code || ((responseBody as any)?.status_code as string); // starknet-devnet uses status_code instead of code; They need to fix that\n throw new GatewayError(responseBody.message, errorCode); // Caught locally, and re-thrown for the user\n }\n\n if (endpoint === 'estimate_fee') {\n return parseAlwaysAsBig(textResponse, (_, v) => {\n if (v && typeof v === 'bigint') {\n return toBN(v.toString());\n }\n return v;\n });\n }\n return parse(textResponse) as Sequencer.Endpoints[T]['RESPONSE'];\n } catch (err) {\n // rethrow custom errors\n if (err instanceof GatewayError || err instanceof HttpError) {\n throw err;\n }\n if (err instanceof Error) {\n throw Error(`Could not ${method} from endpoint \\`${url}\\`: ${err.message}`);\n }\n throw err;\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return Promise.resolve(this.chainId);\n }\n\n public async callContract(\n { contractAddress, entrypoint: entryPointSelector, calldata = [] }: Call,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<CallContractResponse> {\n return this.fetchEndpoint(\n 'call_contract',\n { blockIdentifier },\n {\n signature: [],\n contract_address: contractAddress,\n entry_point_selector: getSelectorFromName(entryPointSelector),\n calldata,\n }\n ).then(this.responseParser.parseCallContractResponse);\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier = 'pending'): Promise<GetBlockResponse> {\n return this.fetchEndpoint('get_block', { blockIdentifier }).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getNonce(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n return this.fetchEndpoint('get_nonce', { contractAddress, blockIdentifier });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n const parsedKey = toBN(key).toString(10);\n return this.fetchEndpoint('get_storage_at', {\n blockIdentifier,\n contractAddress,\n key: parsedKey,\n });\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction', { transactionHash: txHashHex }).then((value) =>\n this.responseParser.parseGetTransactionResponse(value)\n );\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_receipt', { transactionHash: txHashHex }).then(\n this.responseParser.parseGetTransactionReceiptResponse\n );\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<ContractClass> {\n return this.fetchEndpoint('get_full_contract', { blockIdentifier, contractAddress }).then(\n parseContract\n );\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<string> {\n return this.fetchEndpoint('get_class_hash_at', { blockIdentifier, contractAddress });\n }\n\n public async getClassByHash(classHash: string): Promise<ContractClass> {\n return this.fetchEndpoint('get_class_by_hash', { classHash }).then(parseContract);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'INVOKE_FUNCTION',\n contract_address: functionInvocation.contractAddress,\n calldata: bigNumberishArrayToDecimalStringArray(functionInvocation.calldata ?? []),\n signature: bigNumberishArrayToDecimalStringArray(functionInvocation.signature ?? []),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n }).then(this.responseParser.parseInvokeFunctionResponse);\n }\n\n /**\n * @deprecated This method won't be supported, use Account.deploy instead\n */\n public async deployContract({\n contract,\n constructorCalldata,\n addressSalt,\n }: DeployContractPayload): Promise<DeployContractResponse> {\n const contractDefinition = parseContract(contract);\n\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DEPLOY',\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),\n contract_definition: contractDefinition,\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DEPLOY_ACCOUNT',\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),\n class_hash: toHex(toBN(classHash)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async declareContract(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DECLARE',\n contract_class: contractDefinition,\n nonce: toHex(toBN(details.nonce)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n sender_address: senderAddress,\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'INVOKE_FUNCTION',\n contract_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: bigNumberishArrayToDecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 1)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'DECLARE',\n sender_address: senderAddress,\n contract_class: contractDefinition,\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 1)),\n nonce: toHex(toBN(details.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, addressSalt, constructorCalldata, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'DEPLOY_ACCOUNT',\n class_hash: toHex(toBN(classHash)),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata || []),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<Sequencer.GetCodeResponse> {\n return this.fetchEndpoint('get_code', { contractAddress, blockIdentifier });\n }\n\n public async waitForTransaction(txHash: BigNumberish, retryInterval: number = 8000) {\n let onchain = false;\n\n while (!onchain) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n // eslint-disable-next-line no-await-in-loop\n const res = await this.getTransactionStatus(txHash);\n\n const successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING'];\n const errorStates = ['REJECTED', 'NOT_RECEIVED'];\n\n if (successStates.includes(res.tx_status)) {\n onchain = true;\n } else if (errorStates.includes(res.tx_status)) {\n const message = res.tx_failure_reason\n ? `${res.tx_status}: ${res.tx_failure_reason.code}\\n${res.tx_failure_reason.error_message}`\n : res.tx_status;\n const error = new Error(message) as Error & { response: GetTransactionStatusResponse };\n error.response = res;\n throw error;\n }\n }\n }\n\n /**\n * Gets the status of a transaction.\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L48-L52)\n *\n * @param txHash\n * @returns the transaction status object { block_number, tx_status: NOT_RECEIVED | RECEIVED | PENDING | REJECTED | ACCEPTED_ONCHAIN }\n */\n public async getTransactionStatus(txHash: BigNumberish): Promise<GetTransactionStatusResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_status', { transactionHash: txHashHex });\n }\n\n /**\n * Gets the smart contract address on the goerli testnet.\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L13-L15)\n * @returns starknet smart contract addresses\n */\n public async getContractAddresses(): Promise<GetContractAddressesResponse> {\n return this.fetchEndpoint('get_contract_addresses');\n }\n\n /**\n * Gets the transaction trace from a tx id.\n *\n *\n * @param txHash\n * @returns the transaction trace\n */\n public async getTransactionTrace(txHash: BigNumberish): Promise<GetTransactionTraceResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_trace', { transactionHash: txHashHex });\n }\n\n public async estimateMessageFee(\n { from_address, to_address, entry_point_selector, payload }: CallL1Handler,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<Sequencer.EstimateFeeResponse> {\n const validCallL1Handler = {\n from_address: getDecimalString(from_address),\n to_address: getHexString(to_address),\n entry_point_selector: getSelector(entry_point_selector),\n payload: getHexStringArray(payload),\n };\n\n return this.fetchEndpoint('estimate_message_fee', { blockIdentifier }, validCallL1Handler);\n }\n}\n","import {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n} from '../../types';\n\nexport abstract class ResponseParser {\n abstract parseGetBlockResponse(res: any): GetBlockResponse;\n\n abstract parseGetTransactionResponse(res: any): GetTransactionResponse;\n\n abstract parseGetTransactionReceiptResponse(res: any): GetTransactionReceiptResponse;\n\n abstract parseFeeEstimateResponse(res: any): EstimateFeeResponse;\n\n abstract parseCallContractResponse(res: any): CallContractResponse;\n\n abstract parseInvokeFunctionResponse(res: any): InvokeFunctionResponse;\n\n abstract parseDeployContractResponse(res: any): DeployContractResponse;\n\n abstract parseDeclareContractResponse(res: any): DeclareContractResponse;\n}\n","/**\n * Map Sequencer Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n} from '../../types';\nimport { Sequencer } from '../../types/api';\nimport { toBN } from '../number';\nimport { ResponseParser } from '.';\n\nexport class SequencerAPIResponseParser extends ResponseParser {\n public parseGetBlockResponse(res: Sequencer.GetBlockResponse): GetBlockResponse {\n return {\n ...res,\n new_root: res.state_root,\n parent_hash: res.parent_block_hash,\n transactions: Object.values(res.transactions)\n .map((value) => 'transaction_hash' in value && value.transaction_hash)\n .filter(Boolean) as Array<string>,\n };\n }\n\n public parseGetTransactionResponse(\n res: Sequencer.GetTransactionResponse\n ): GetTransactionResponse {\n return {\n ...res,\n calldata: 'calldata' in res.transaction ? (res.transaction.calldata as Array<string>) : [],\n contract_address:\n 'contract_address' in res.transaction ? res.transaction.contract_address : undefined,\n contract_class:\n 'contract_class' in res.transaction ? (res.transaction.contract_class as any) : undefined,\n entry_point_selector:\n 'entry_point_selector' in res.transaction\n ? res.transaction.entry_point_selector\n : undefined,\n max_fee: 'max_fee' in res.transaction ? (res.transaction.max_fee as string) : undefined,\n nonce: res.transaction.nonce as string,\n sender_address:\n 'sender_address' in res.transaction\n ? (res.transaction.sender_address as string)\n : undefined,\n signature: 'signature' in res.transaction ? res.transaction.signature : undefined,\n transaction_hash:\n 'transaction_hash' in res.transaction ? res.transaction.transaction_hash : undefined,\n version: 'version' in res.transaction ? (res.transaction.version as string) : undefined,\n };\n }\n\n public parseGetTransactionReceiptResponse(\n res: Sequencer.TransactionReceiptResponse\n ): GetTransactionReceiptResponse {\n return {\n transaction_hash: res.transaction_hash,\n status: res.status,\n messages_sent: res.l2_to_l1_messages as any, // TODO: parse\n events: res.events as any,\n ...('block_hash' in res && { block_hash: res.block_hash }),\n ...('block_number' in res && { block_number: res.block_number }),\n ...('actual_fee' in res && { actual_fee: res.actual_fee }),\n ...('transaction_index' in res && { transaction_index: res.transaction_index }),\n ...('execution_resources' in res && { execution_resources: res.execution_resources }),\n ...('l1_to_l2_consumed_message' in res && {\n // eslint-disable-next-line @typescript-eslint/dot-notation\n l1_to_l2_consumed_message: res['l1_to_l2_consumed_message'],\n }),\n ...('transaction_failure_reason' in res && {\n transaction_failure_reason: res.transaction_failure_reason,\n }),\n };\n }\n\n public parseFeeEstimateResponse(res: Sequencer.EstimateFeeResponse): EstimateFeeResponse {\n if ('overall_fee' in res) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBN(res.gas_usage),\n gas_price: toBN(res.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBN(res.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBN(res.amount),\n };\n }\n\n public parseCallContractResponse(res: Sequencer.CallContractResponse): CallContractResponse {\n return {\n result: res.result,\n };\n }\n\n public parseInvokeFunctionResponse(\n res: Sequencer.AddTransactionResponse\n ): InvokeFunctionResponse {\n return {\n transaction_hash: res.transaction_hash,\n };\n }\n\n public parseDeployContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeployContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n contract_address: res.address as string,\n };\n }\n\n public parseDeclareContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeclareContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n class_hash: res.class_hash as string,\n };\n }\n}\n","import urljoin from 'url-join';\n\n/**\n * Inspired from https://github.com/segmentio/is-url\n */\n\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\nconst protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nconst localhostDomainRE = /^localhost[:?\\d]*(?:[^:?\\d]\\S*)?$/;\nconst nonLocalhostDomainRE = /^[^\\s.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n * @param {String} s\n * @return {Boolean}\n */\nexport function isUrl(s?: string): boolean {\n if (!s) {\n return false;\n }\n\n if (typeof s !== 'string') {\n return false;\n }\n\n const match = s.match(protocolAndDomainRE);\n if (!match) {\n return false;\n }\n\n const everythingAfterProtocol = match[1];\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (\n localhostDomainRE.test(everythingAfterProtocol) ||\n nonLocalhostDomainRE.test(everythingAfterProtocol)\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function buildUrl(baseUrl: string, defaultPath: string, urlOrPath?: string) {\n return isUrl(urlOrPath) ? urlOrPath! : urljoin(baseUrl, urlOrPath ?? defaultPath);\n}\n","/* eslint-disable max-classes-per-file */\nimport { CustomError } from 'ts-custom-error';\n\nexport class GatewayError extends CustomError {\n constructor(message: string, public errorCode: string) {\n super(message);\n }\n}\n\nexport class HttpError extends CustomError {\n constructor(message: string, public errorCode: number) {\n super(message);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n} from '../types';\nimport {\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n InvocationsDetails,\n} from '../types/lib';\nimport { BigNumberish } from '../utils/number';\nimport { ProviderInterface } from './interface';\nimport { RpcProvider, RpcProviderOptions } from './rpc';\nimport { SequencerProvider, SequencerProviderOptions } from './sequencer';\nimport { BlockIdentifier } from './utils';\n\nexport interface ProviderOptions {\n sequencer?: SequencerProviderOptions;\n rpc?: RpcProviderOptions;\n}\n\nexport class Provider implements ProviderInterface {\n private provider!: ProviderInterface;\n\n constructor(providerOrOptions?: ProviderOptions | ProviderInterface) {\n if (providerOrOptions && 'chainId' in providerOrOptions) {\n this.provider = providerOrOptions;\n } else if (providerOrOptions?.rpc) {\n this.provider = new RpcProvider(providerOrOptions.rpc);\n } else if (providerOrOptions?.sequencer) {\n this.provider = new SequencerProvider(providerOrOptions.sequencer);\n } else {\n this.provider = new SequencerProvider();\n }\n }\n\n public get chainId(): StarknetChainId {\n return this.provider.chainId;\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return this.provider.getChainId();\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier = 'pending'): Promise<GetBlockResponse> {\n return this.provider.getBlock(blockIdentifier);\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<ContractClass> {\n return this.provider.getClassAt(contractAddress, blockIdentifier);\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<string> {\n return this.provider.getClassHashAt(contractAddress, blockIdentifier);\n }\n\n public getClassByHash(classHash: string): Promise<ContractClass> {\n return this.provider.getClassByHash(classHash);\n }\n\n public async getEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getEstimateFee(invocationWithTxType, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getInvokeEstimateFee(\n invocationWithTxType,\n invocationDetails,\n blockIdentifier\n );\n }\n\n public async getNonce(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish> {\n return this.provider.getNonce(contractAddress, blockIdentifier);\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n return this.provider.getStorageAt(contractAddress, key, blockIdentifier);\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n return this.provider.getTransaction(txHash);\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n return this.provider.getTransactionReceipt(txHash);\n }\n\n public async callContract(\n request: Call,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<CallContractResponse> {\n return this.provider.callContract(request, blockIdentifier);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.provider.invokeFunction(functionInvocation, details);\n }\n\n /**\n * @deprecated This method won't be supported, use Account.deploy instead\n */\n public async deployContract(\n payload: DeployContractPayload,\n details: InvocationsDetails\n ): Promise<DeployContractResponse> {\n return this.provider.deployContract(payload, details);\n }\n\n public async deployAccountContract(\n payload: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.provider.deployAccountContract(payload, details);\n }\n\n public async declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.provider.declareContract(transaction, details);\n }\n\n public async getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier);\n }\n\n public getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeployAccountEstimateFee(transaction, details, blockIdentifier);\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n return this.provider.getCode(contractAddress, blockIdentifier);\n }\n\n public async waitForTransaction(txHash: BigNumberish, retryInterval?: number): Promise<void> {\n return this.provider.waitForTransaction(txHash, retryInterval);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport type {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n} from '../types';\nimport {\n DeclareContractTransaction,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n InvocationsDetails,\n} from '../types/lib';\nimport type { BigNumberish } from '../utils/number';\nimport { BlockIdentifier } from './utils';\n\nexport abstract class ProviderInterface {\n public abstract chainId: StarknetChainId;\n\n /**\n * Gets the Starknet chain Id\n *\n * @returns the chain Id\n */\n public abstract getChainId(): Promise<StarknetChainId>;\n\n /**\n * Calls a function on the StarkNet contract.\n *\n * @param call transaction to be called\n * @param blockIdentifier block identifier\n * @returns the result of the function on the smart contract.\n */\n public abstract callContract(\n call: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse>;\n\n /**\n * Gets the block information\n *\n * @param blockIdentifier block identifier\n * @returns the block object\n */\n public abstract getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse>;\n\n /**\n * @deprecated The method should not be used\n */\n public abstract getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse>;\n\n /**\n * Gets the contract class of the deployed contract.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Contract class of compiled contract\n */\n public abstract getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClass>;\n\n /**\n * Returns the class hash deployed under the given address.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Class hash\n */\n public abstract getClassHashAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<string>;\n\n /**\n * Returns the contract class deployed under the given class hash.\n *\n * @param classHash - class hash\n * @returns Contract class of compiled contract\n */\n public abstract getClassByHash(classHash: string): Promise<ContractClass>;\n\n /**\n * Gets the nonce of a contract with respect to a specific block\n *\n * @param contractAddress - contract address\n * @returns the hex nonce\n */\n public abstract getNonce(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish>;\n\n /**\n * Gets the contract's storage variable at a specific key.\n *\n * @param contractAddress\n * @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)\n * @param blockIdentifier - block identifier\n * @returns the value of the storage variable\n */\n public abstract getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish>;\n\n /**\n * Gets the transaction information from a tx id.\n *\n * @param txHash\n * @returns the transacton object { transaction_id, status, transaction, block_number?, block_number?, transaction_index?, transaction_failure_reason? }\n */\n public abstract getTransaction(transactionHash: BigNumberish): Promise<GetTransactionResponse>;\n\n /**\n * Gets the transaction receipt from a tx hash.\n *\n * @param txHash\n * @returns the transaction receipt object\n */\n public abstract getTransactionReceipt(\n transactionHash: BigNumberish\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Deploys a given compiled contract (json) to starknet\n *\n * @deprecated This method won't be supported, use Account.deploy instead\n *\n * @param payload payload to be deployed containing:\n * - compiled contract code\n * - constructor calldata\n * - address salt\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployContract(\n payload: DeployContractPayload,\n details?: InvocationsDetails\n ): Promise<DeployContractResponse>;\n\n /**\n * Deploys a given compiled Account contract (json) to starknet\n *\n * @param payload payload to be deployed containing:\n * - compiled contract code\n * - constructor calldata\n * - address salt\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccountContract(\n payload: DeployAccountContractPayload,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse>;\n\n /**\n * Invokes a function on starknet\n * @deprecated This method wont be supported as soon as fees are mandatory\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * - maxFee - optional maxFee\n * @returns response from addTransaction\n */\n public abstract invokeFunction(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * @param transaction transaction payload to be deployed containing:\n * - compiled contract code\n * - sender address\n * - signature\n * @param details Invocation Details containing:\n * - nonce\n * - optional version\n * - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n * @deprecated Please use getInvokeEstimateFee or getDeclareEstimateFee instead\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param blockIdentifier - block identifier\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @returns the estimated fee\n */\n public abstract getEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param blockIdentifier - block identifier\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @returns the estimated fee\n */\n public abstract getInvokeEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DECLARE transaction\n *\n * @param transaction transaction payload to be declared containing:\n * - compiled contract code\n * - sender address\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DEPLOY_ACCOUNT transaction\n *\n * @param transaction transaction payload to be deployed containing:\n * - classHash\n * - constructorCalldata\n * - addressSalt\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Wait for the transaction to be accepted\n * @param txHash - transaction hash\n * @param retryInterval - retry interval\n */\n public abstract waitForTransaction(txHash: BigNumberish, retryInterval?: number): Promise<void>;\n}\n","import { Provider } from './default';\n\nexport * from './default';\nexport * from './errors';\nexport * from './sequencer';\nexport * from './interface';\nexport * from './rpc';\n\nexport const defaultProvider = new Provider();\n","import { AccountInterface } from '../account';\nimport { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport {\n Abi,\n AsyncContractFunction,\n ContractFunction,\n Invocation,\n InvokeFunctionResponse,\n Overrides,\n Result,\n} from '../types';\n\nexport abstract class ContractInterface {\n public abstract abi: Abi;\n\n public abstract address: string;\n\n public abstract providerOrAccount: ProviderInterface | AccountInterface;\n\n public abstract deployTransactionHash?: string;\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n /**\n * Saves the address of the contract deployed on network that will be used for interaction\n *\n * @param address - address of the contract\n */\n public abstract attach(address: string): void;\n\n /**\n * Attaches to new Provider or Account\n *\n * @param providerOrAccount - new Provider or Account to attach to\n */\n public abstract connect(providerOrAccount: ProviderInterface | AccountInterface): void;\n\n /**\n * Resolves when contract is deployed on the network or when no deployment transaction is found\n *\n * @returns Promise that resolves when contract is deployed on the network or when no deployment transaction is found\n * @throws When deployment fails\n */\n public abstract deployed(): Promise<ContractInterface>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n * @returns Result of the call as an array with key value pars\n */\n public abstract call(\n method: string,\n args?: Array<any>,\n options?: {\n blockIdentifier?: BlockIdentifier;\n }\n ): Promise<Result>;\n\n /**\n * Invokes a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the invoke\n * @param options\n * @returns Add Transaction Response\n */\n public abstract invoke(\n method: string,\n args?: Array<any>,\n options?: Overrides\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Estimates a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n */\n public abstract estimate(\n method: string,\n args?: Array<any>,\n options?: {\n blockIdentifier?: BlockIdentifier;\n }\n ): Promise<any>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @returns Invocation object\n */\n public abstract populate(method: string, args?: Array<any>): Invocation;\n}\n","import assert from 'minimalistic-assert';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport { Abi, CompiledContract, RawCalldata } from '../types';\nimport { Contract } from './default';\n\nexport class ContractFactory {\n abi: Abi;\n\n compiledContract: CompiledContract;\n\n providerOrAccount: ProviderInterface | AccountInterface;\n\n constructor(\n compiledContract: CompiledContract,\n providerOrAccount: ProviderInterface | AccountInterface = defaultProvider,\n abi: Abi = compiledContract.abi // abi can be different from the deployed contract ie for proxy contracts\n ) {\n this.abi = abi;\n this.compiledContract = compiledContract;\n this.providerOrAccount = providerOrAccount;\n }\n\n /**\n * Deploys contract and returns new instance of the Contract\n *\n * @param constructorCalldata - Constructor Calldata\n * @param addressSalt (optional) - Address Salt for deployment\n * @returns deployed Contract\n */\n public async deploy(\n constructorCalldata?: RawCalldata,\n addressSalt?: string | undefined\n ): Promise<Contract> {\n const { contract_address, transaction_hash } = await this.providerOrAccount.deployContract({\n contract: this.compiledContract,\n constructorCalldata,\n addressSalt,\n });\n assert(Boolean(contract_address), 'Deployment of the contract failed');\n\n const contractInstance = new Contract(\n this.compiledContract.abi,\n contract_address!,\n this.providerOrAccount\n );\n contractInstance.deployTransactionHash = transaction_hash;\n\n return contractInstance;\n }\n\n /**\n * Attaches to new Provider or Account\n *\n * @param providerOrAccount - new Provider or Account to attach to\n */\n connect(providerOrAccount: ProviderInterface | AccountInterface): ContractFactory {\n this.providerOrAccount = providerOrAccount;\n return this;\n }\n\n /**\n * Attaches current abi and provider or account to the new address\n *\n * @param address - Contract address\n * @returns Contract\n */\n attach(address: string): Contract {\n return new Contract(this.abi, address, this.providerOrAccount);\n }\n\n // ethers.js' getDeployTransaction cant be supported as it requires the account or signer to return a signed transaction which is not possible with the current implementation\n}\n","import { BigNumberish } from '../../utils/number';\nimport { Signature } from '../lib';\n\nexport type Calldata = string[];\n\nexport type Overrides = {\n maxFee?: BigNumberish;\n nonce?: BigNumberish;\n signature?: Signature;\n};\n\nexport * from './sequencer';\nexport * from './rpc';\n","import { Abi, Call, DeclareSignerDetails, InvocationsSignerDetails, Signature } from '../types';\nimport { DeployAccountSignerDetails } from '../types/signer';\nimport { TypedData } from '../utils/typedData';\n\nexport abstract class SignerInterface {\n /**\n * Method to get the public key of the signer\n *\n * @returns public key of signer as hex string with 0x prefix\n */\n public abstract getPubKey(): Promise<string>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param typedData - JSON object to be signed\n * @param accountAddress - account\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData, accountAddress: string): Promise<Signature>;\n\n /**\n * Signs a transaction with the starknet private key and returns the signature\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns signature\n */\n public abstract signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature>;\n\n /**\n * Signs a DEPLOY_ACCOUNT transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - contractAddress - the computed address of the contract\n * - constructorCalldata - calldata to be passed in deploy constructor\n * - addressSalt - contract address salt\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeployAccountTransaction(\n transaction: DeployAccountSignerDetails\n ): Promise<Signature>;\n\n /**\n * Signs a DECLARE transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - classHash - computed class hash. Will be replaced by ContractClass in future once class hash is present in CompiledContract\n * - senderAddress - the address of the sender\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeclareTransaction(transaction: DeclareSignerDetails): Promise<Signature>;\n}\n","import { Call, ParsedStruct } from '../types';\nimport { getSelectorFromName } from './hash';\nimport { BigNumberish, bigNumberishArrayToDecimalStringArray, toBN } from './number';\n\n/**\n * Transforms a list of Calls, each with their own calldata, into\n * two arrays: one with the entrypoints, and one with the concatenated calldata.\n * @param calls\n * @returns\n */\nexport const transformCallsToMulticallArrays = (calls: Call[]) => {\n const callArray: ParsedStruct[] = [];\n const calldata: BigNumberish[] = [];\n calls.forEach((call) => {\n const data = call.calldata || [];\n callArray.push({\n to: toBN(call.contractAddress).toString(10),\n selector: toBN(getSelectorFromName(call.entrypoint)).toString(10),\n data_offset: calldata.length.toString(),\n data_len: data.length.toString(),\n });\n calldata.push(...data);\n });\n return {\n callArray,\n calldata: bigNumberishArrayToDecimalStringArray(calldata),\n };\n};\n\n/**\n * Transforms a list of calls in the full flattened calldata expected\n * by the __execute__ protocol.\n * @param calls\n * @returns\n */\nexport const fromCallsToExecuteCalldata = (calls: Call[]): string[] => {\n const { callArray, calldata } = transformCallsToMulticallArrays(calls);\n return [\n callArray.length.toString(),\n ...callArray\n .map(\n ({ to, selector, data_offset, data_len }) =>\n [to, selector, data_offset, data_len] as string[]\n )\n .flat(),\n calldata.length.toString(),\n ...calldata,\n ];\n};\n\nexport const fromCallsToExecuteCalldataWithNonce = (\n calls: Call[],\n nonce: BigNumberish\n): string[] => {\n return [...fromCallsToExecuteCalldata(calls), toBN(nonce).toString()];\n};\n","import { computeHashOnElements, getSelectorFromName } from '../hash';\nimport { MerkleTree } from '../merkle';\nimport { BigNumberish, isHex, toBN, toHex } from '../number';\nimport { encodeShortString } from '../shortString';\nimport { StarkNetMerkleType, StarkNetType, TypedData } from './types';\nimport { validateTypedData } from './utils';\n\nexport * from './types';\n\nfunction getHex(value: BigNumberish): string {\n try {\n return toHex(toBN(value));\n } catch (e) {\n if (typeof value === 'string') {\n return toHex(toBN(encodeShortString(value)));\n }\n throw new Error(`Invalid BigNumberish: ${value}`);\n }\n}\n\nexport function prepareSelector(selector: string): string {\n return isHex(selector) ? selector : getSelectorFromName(selector);\n}\n\nexport function isMerkleTreeType(type: StarkNetType): type is StarkNetMerkleType {\n return type.type === 'merkletree';\n}\n\ninterface Context {\n parent?: string;\n key?: string;\n}\n\n/**\n * Get the dependencies of a struct type. If a struct has the same dependency multiple times, it's only included once\n * in the resulting array.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {string[]} [dependencies]\n * @return {string[]}\n */\nexport const getDependencies = (\n types: TypedData['types'],\n type: string,\n dependencies: string[] = []\n): string[] => {\n // Include pointers (struct arrays)\n if (type[type.length - 1] === '*') {\n // eslint-disable-next-line no-param-reassign\n type = type.slice(0, -1);\n }\n\n if (dependencies.includes(type)) {\n return dependencies;\n }\n\n if (!types[type]) {\n return dependencies;\n }\n\n return [\n type,\n ...types[type].reduce<string[]>(\n (previous, t) => [\n ...previous,\n ...getDependencies(types, t.type, previous).filter(\n (dependency) => !previous.includes(dependency)\n ),\n ],\n []\n ),\n ];\n};\n\nfunction getMerkleTreeType(types: TypedData['types'], ctx: Context) {\n if (ctx.parent && ctx.key) {\n const parentType = types[ctx.parent];\n const merkleType = parentType.find((t) => t.name === ctx.key)!;\n const isMerkleTree = isMerkleTreeType(merkleType);\n if (!isMerkleTree) {\n throw new Error(`${ctx.key} is not a merkle tree`);\n }\n if (merkleType.contains.endsWith('*')) {\n throw new Error(`Merkle tree contain property must not be an array but was given ${ctx.key}`);\n }\n return merkleType.contains;\n }\n return 'raw';\n}\n\n/**\n * Encode a type to a string. All dependant types are alphabetically sorted.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @return {string}\n */\nexport const encodeType = (types: TypedData['types'], type: string): string => {\n const [primary, ...dependencies] = getDependencies(types, type);\n const newTypes = !primary ? [] : [primary, ...dependencies.sort()];\n\n return newTypes\n .map((dependency) => {\n return `${dependency}(${types[dependency].map((t) => `${t.name}:${t.type}`)})`;\n })\n .join('');\n};\n\n/**\n * Get a type string as hash.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @return {string}\n */\nexport const getTypeHash = (types: TypedData['types'], type: string): string => {\n return getSelectorFromName(encodeType(types, type));\n};\n\n/**\n * Encodes a single value to an ABI serialisable string, number or Buffer. Returns the data as tuple, which consists of\n * an array of ABI compatible types, and an array of corresponding values.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {any} data\n * @returns {[string, string]}\n */\nexport const encodeValue = (\n types: TypedData['types'],\n type: string,\n data: unknown,\n ctx: Context = {}\n): [string, string] => {\n if (types[type]) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return [type, getStructHash(types, type, data as Record<string, unknown>)];\n }\n\n if (\n Object.keys(types)\n .map((x) => `${x}*`)\n .includes(type)\n ) {\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return getStructHash(types, type.slice(0, -1), struct as Record<string, unknown>);\n });\n return [type, computeHashOnElements(structHashes)];\n }\n\n if (type === 'merkletree') {\n const merkleTreeType = getMerkleTreeType(types, ctx);\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return encodeValue(types, merkleTreeType, struct as Record<string, unknown>)[1];\n });\n const { root } = new MerkleTree(structHashes as string[]);\n return ['felt', root];\n }\n\n if (type === 'felt*') {\n return ['felt*', computeHashOnElements(data as string[])];\n }\n\n if (type === 'selector') {\n return ['felt', prepareSelector(data as string)];\n }\n\n return [type, getHex(data as string)];\n};\n\n/**\n * Encode the data to an ABI encoded Buffer. The data should be a key -> value object with all the required values. All\n * dependant types are automatically encoded.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {Record<string, any>} data\n */\nexport const encodeData = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n const [returnTypes, values] = types[type].reduce<[string[], string[]]>(\n ([ts, vs], field) => {\n if (data[field.name] === undefined || data[field.name] === null) {\n throw new Error(`Cannot encode data: missing data for '${field.name}'`);\n }\n\n const value = data[field.name];\n const [t, encodedValue] = encodeValue(types, field.type, value, {\n parent: type,\n key: field.name,\n });\n\n return [\n [...ts, t],\n [...vs, encodedValue],\n ];\n },\n [['felt'], [getTypeHash(types, type)]]\n );\n\n return [returnTypes, values];\n};\n\n/**\n * Get encoded data as a hash. The data should be a key -> value object with all the required values. All dependant\n * types are automatically encoded.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {Record<string, any>} data\n * @return {Buffer}\n */\nexport const getStructHash = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n return computeHashOnElements(encodeData(types, type, data)[1]);\n};\n\n/**\n * Get the EIP-191 encoded message to sign, from the typedData object.\n *\n * @param {TypedData} typedData\n * @param {BigNumberish} account\n * @return {string}\n */\nexport const getMessageHash = (typedData: TypedData, account: BigNumberish): string => {\n if (!validateTypedData(typedData)) {\n throw new Error('Typed data does not match JSON schema');\n }\n\n const message = [\n encodeShortString('StarkNet Message'),\n getStructHash(typedData.types, 'StarkNetDomain', typedData.domain),\n account,\n getStructHash(typedData.types, typedData.primaryType, typedData.message),\n ];\n\n return computeHashOnElements(message);\n};\n","import { pedersen } from './hash';\nimport { toBN } from './number';\n\nexport class MerkleTree {\n public leaves: string[];\n\n public branches: string[][] = [];\n\n public root: string;\n\n constructor(leafHashes: string[]) {\n this.leaves = leafHashes;\n this.root = this.build(leafHashes);\n }\n\n private build(leaves: string[]): string {\n if (leaves.length === 1) {\n return leaves[0];\n }\n if (leaves.length !== this.leaves.length) {\n this.branches.push(leaves);\n }\n const newLeaves = [];\n for (let i = 0; i < leaves.length; i += 2) {\n if (i + 1 === leaves.length) {\n newLeaves.push(MerkleTree.hash(leaves[i], '0x0'));\n } else {\n newLeaves.push(MerkleTree.hash(leaves[i], leaves[i + 1]));\n }\n }\n return this.build(newLeaves);\n }\n\n static hash(a: string, b: string) {\n const [aSorted, bSorted] = [toBN(a), toBN(b)].sort((x: any, y: any) => (x.gte(y) ? 1 : -1));\n return pedersen([aSorted, bSorted]);\n }\n\n public getProof(leaf: string, branch = this.leaves, hashPath: string[] = []): string[] {\n const index = branch.indexOf(leaf);\n if (index === -1) {\n throw new Error('leaf not found');\n }\n if (branch.length === 1) {\n return hashPath;\n }\n const isLeft = index % 2 === 0;\n const neededBranch = (isLeft ? branch[index + 1] : branch[index - 1]) ?? '0x0';\n const newHashPath = [...hashPath, neededBranch];\n const currentBranchLevelIndex =\n this.leaves.length === branch.length\n ? -1\n : this.branches.findIndex((b) => b.length === branch.length);\n const nextBranch = this.branches[currentBranchLevelIndex + 1] ?? [this.root];\n return this.getProof(\n MerkleTree.hash(isLeft ? leaf : neededBranch, isLeft ? neededBranch : leaf),\n nextBranch,\n newHashPath\n );\n }\n}\n\nexport function proofMerklePath(root: string, leaf: string, path: string[]): boolean {\n if (path.length === 0) {\n return root === leaf;\n }\n const [next, ...rest] = path;\n return proofMerklePath(root, MerkleTree.hash(leaf, next), rest);\n}\n","import { addHexPrefix, removeHexPrefix } from './encode';\n\nexport function isASCII(str: string) {\n // eslint-disable-next-line no-control-regex\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\n// function to check if string has less or equal 31 characters\nexport function isShortString(str: string) {\n return str.length <= 31;\n}\n\nexport function encodeShortString(str: string) {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (!isShortString(str)) throw new Error(`${str} is too long`);\n return addHexPrefix(str.replace(/./g, (char) => char.charCodeAt(0).toString(16)));\n}\n\nexport function decodeShortString(str: string) {\n return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));\n}\n","import { TypedData } from './types';\n\n/**\n * Validates that `data` matches the EIP-712 JSON schema.\n *\n * @param {any} data\n * @return {boolean}\n */\nexport const validateTypedData = (data: unknown): data is TypedData => {\n const typedData = data as TypedData;\n\n // Validate that the data matches the EIP-712 JSON schema\n const valid = Boolean(typedData.types && typedData.primaryType && typedData.message);\n\n return valid;\n};\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n InvocationsSignerDetails,\n KeyPair,\n Signature,\n} from '../types';\nimport { DeployAccountSignerDetails } from '../types/signer';\nimport { genKeyPair, getStarkKey, sign } from '../utils/ellipticCurve';\nimport {\n calculateDeclareTransactionHash,\n calculateDeployAccountTransactionHash,\n calculateTransactionHash,\n} from '../utils/hash';\nimport { fromCallsToExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { SignerInterface } from './interface';\n\nexport class Signer implements SignerInterface {\n protected keyPair: KeyPair;\n\n constructor(keyPair: KeyPair = genKeyPair()) {\n this.keyPair = keyPair;\n }\n\n public async getPubKey(): Promise<string> {\n return getStarkKey(this.keyPair);\n }\n\n public async signMessage(typedData: TypedData, accountAddress: string): Promise<Signature> {\n const msgHash = getMessageHash(typedData, accountAddress);\n return sign(this.keyPair, msgHash);\n }\n\n public async signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature> {\n if (abis && abis.length !== transactions.length) {\n throw new Error('ABI must be provided for each transaction or no transaction');\n }\n // now use abi to display decoded data somewhere, but as this signer is headless, we can't do that\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n\n const msgHash = calculateTransactionHash(\n transactionsDetail.walletAddress,\n transactionsDetail.version,\n calldata,\n transactionsDetail.maxFee,\n transactionsDetail.chainId,\n transactionsDetail.nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n\n public async signDeployAccountTransaction({\n classHash,\n contractAddress,\n constructorCalldata,\n addressSalt,\n maxFee,\n version,\n chainId,\n nonce,\n }: DeployAccountSignerDetails) {\n const msgHash = calculateDeployAccountTransactionHash(\n contractAddress,\n classHash,\n constructorCalldata,\n addressSalt,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n\n public async signDeclareTransaction(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n { classHash, senderAddress, chainId, maxFee, version, nonce }: DeclareSignerDetails\n ) {\n const msgHash = calculateDeclareTransactionHash(\n classHash,\n senderAddress,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n}\n","import { UDC, ZERO } from '../constants';\nimport { ProviderInterface, ProviderOptions } from '../provider';\nimport { Provider } from '../provider/default';\nimport { BlockIdentifier } from '../provider/utils';\nimport { Signer, SignerInterface } from '../signer';\nimport {\n Abi,\n Call,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeAction,\n InvocationsDetails,\n InvocationsSignerDetails,\n InvokeFunctionResponse,\n KeyPair,\n Signature,\n} from '../types';\nimport { EstimateFee, EstimateFeeDetails } from '../types/account';\nimport {\n AllowArray,\n DeclareContractPayload,\n DeployAccountContractPayload,\n UniversalDeployerContractPayload,\n} from '../types/lib';\nimport {\n calculateContractAddressFromHash,\n feeTransactionVersion,\n transactionVersion,\n} from '../utils/hash';\nimport { BigNumberish, toBN, toCairoBool } from '../utils/number';\nimport { parseContract } from '../utils/provider';\nimport { compileCalldata, estimatedFeeToMaxFee } from '../utils/stark';\nimport { fromCallsToExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { AccountInterface } from './interface';\n\nexport class Account extends Provider implements AccountInterface {\n public signer: SignerInterface;\n\n public address: string;\n\n constructor(\n providerOrOptions: ProviderOptions | ProviderInterface,\n address: string,\n keyPairOrSigner: KeyPair | SignerInterface\n ) {\n super(providerOrOptions);\n this.address = address.toLowerCase();\n this.signer =\n 'getPubKey' in keyPairOrSigner ? keyPairOrSigner : new Signer(keyPairOrSigner as KeyPair);\n }\n\n public async getNonce(blockIdentifier?: BlockIdentifier): Promise<BigNumberish> {\n return super.getNonce(this.address, blockIdentifier);\n }\n\n public async estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails | undefined\n ): Promise<EstimateFee> {\n return this.estimateInvokeFee(calls, estimateFeeDetails);\n }\n\n public async estimateInvokeFee(\n calls: AllowArray<Call>,\n { nonce: providedNonce, blockIdentifier }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee: ZERO,\n version,\n chainId,\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails);\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n const response = await super.getInvokeEstimateFee(\n { contractAddress: this.address, calldata, signature },\n { version, nonce },\n blockIdentifier\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeclareFee(\n { classHash, contract }: DeclareContractPayload,\n { blockIdentifier, nonce: providedNonce }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n const contractDefinition = parseContract(contract);\n\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n senderAddress: this.address,\n chainId,\n maxFee: ZERO,\n version,\n nonce,\n });\n\n const response = await super.getDeclareEstimateFee(\n { senderAddress: this.address, signature, contractDefinition },\n { version, nonce },\n blockIdentifier\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateAccountDeployFee(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { blockIdentifier, nonce: providedNonce }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n contractAddress,\n chainId,\n maxFee: ZERO,\n version,\n nonce,\n addressSalt,\n constructorCalldata,\n });\n\n const response = await super.getDeployAccountEstimateFee(\n { classHash, addressSalt, constructorCalldata, signature },\n { version, nonce },\n blockIdentifier\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeployFee(\n {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n additionalCalls = [],\n }: UniversalDeployerContractPayload,\n transactionsDetail?: InvocationsDetails | undefined\n ): Promise<EstimateFee> {\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n\n const callsArray = Array.isArray(additionalCalls) ? additionalCalls : [additionalCalls];\n return this.estimateInvokeFee(\n [\n {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n salt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n ...callsArray,\n ],\n transactionsDetail\n );\n }\n\n public async execute(\n calls: AllowArray<Call>,\n abis: Abi[] | undefined = undefined,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<InvokeFunctionResponse> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee({ type: 'INVOKE', payload: calls }, transactionsDetail));\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee,\n version,\n chainId,\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails, abis);\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n\n return this.invokeFunction(\n { contractAddress: this.address, calldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async declare(\n { classHash, contract }: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n { type: 'DECLARE', payload: { classHash, contract } },\n transactionsDetail\n ));\n\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n senderAddress: this.address,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n const contractDefinition = parseContract(contract);\n\n return this.declareContract(\n { contractDefinition, senderAddress: this.address, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async deploy(\n {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n additionalCalls = [],\n }: UniversalDeployerContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<InvokeFunctionResponse> {\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n\n const callsArray = Array.isArray(additionalCalls) ? additionalCalls : [additionalCalls];\n\n return this.execute(\n [\n {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n salt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n ...callsArray,\n ],\n undefined,\n transactionsDetail\n );\n }\n\n public async deployAccount(\n {\n classHash,\n constructorCalldata = [],\n addressSalt = 0,\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeployContractResponse> {\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);\n\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: 'DEPLOY_ACCOUNT',\n payload: { classHash, constructorCalldata, addressSalt, contractAddress },\n },\n transactionsDetail\n ));\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n constructorCalldata,\n contractAddress,\n addressSalt,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return this.deployAccountContract(\n { classHash, addressSalt, constructorCalldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async signMessage(typedData: TypedData): Promise<Signature> {\n return this.signer.signMessage(typedData, this.address);\n }\n\n public async hashMessage(typedData: TypedData): Promise<string> {\n return getMessageHash(typedData, this.address);\n }\n\n public async verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean> {\n try {\n await this.callContract({\n contractAddress: this.address,\n entrypoint: 'isValidSignature',\n calldata: compileCalldata({\n hash: toBN(hash).toString(),\n signature: signature.map((x) => toBN(x).toString()),\n }),\n });\n return true;\n } catch {\n return false;\n }\n }\n\n public async verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean> {\n const hash = await this.hashMessage(typedData);\n return this.verifyMessageHash(hash, signature);\n }\n\n public async getSuggestedMaxFee(\n { type, payload }: EstimateFeeAction,\n details: EstimateFeeDetails\n ) {\n let feeEstimate: EstimateFee;\n\n switch (type) {\n case 'INVOKE':\n feeEstimate = await this.estimateInvokeFee(payload, details);\n break;\n\n case 'DECLARE':\n feeEstimate = await this.estimateDeclareFee(payload, details);\n break;\n\n case 'DEPLOY_ACCOUNT':\n feeEstimate = await this.estimateAccountDeployFee(payload, details);\n break;\n\n case 'DEPLOY':\n feeEstimate = await this.estimateDeployFee(payload, details);\n break;\n\n default:\n feeEstimate = { suggestedMaxFee: ZERO, overall_fee: ZERO };\n break;\n }\n\n return feeEstimate.suggestedMaxFee.toString();\n }\n}\n","import { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport { SignerInterface } from '../signer';\nimport {\n Abi,\n Call,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeAction,\n EstimateFeeDetails,\n EstimateFeeResponse,\n InvocationsDetails,\n InvokeFunctionResponse,\n Signature,\n} from '../types';\nimport {\n AllowArray,\n DeclareContractPayload,\n DeployAccountContractPayload,\n UniversalDeployerContractPayload,\n} from '../types/lib';\nimport { BigNumberish } from '../utils/number';\nimport { TypedData } from '../utils/typedData/types';\n\nexport abstract class AccountInterface extends ProviderInterface {\n public abstract address: string;\n\n public abstract signer: SignerInterface;\n\n /**\n * @deprecated Use estimateInvokeFee or estimateDeclareFee instead\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateInvokeFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DECLARE transaction on starknet\n *\n * @param contractPayload the payload object containing:\n * - contract - the compiled contract to be declared\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n *\n * @returns response from estimate_fee\n */\n public abstract estimateDeclareFee(\n contractPayload: DeclareContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DEPLOY_ACCOUNT transaction on starknet\n *\n * @param contractPayload the payload object containing:\n * - contract - the compiled contract to be deployed\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n *\n * @returns response from estimate_fee\n */\n public abstract estimateAccountDeployFee(\n contractPayload: DeployAccountContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a UDC DEPLOY transaction on starknet\n * This is different from the normal DEPLOY transaction as it goes through the Universal Deployer Contract (UDC)\n \n * @param deployContractPayload containing\n * - classHash: computed class hash of compiled contract\n * - salt: address salt\n * - unique: bool if true ensure unique salt\n * - calldata: constructor calldata\n * - additionalCalls - optional additional calls array to support multicall\n * \n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract estimateDeployFee(\n deployContractPayload: UniversalDeployerContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Invoke execute function in account contract\n *\n * @param transactions the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n public abstract execute(\n transactions: AllowArray<Call>,\n abis?: Abi[],\n transactionsDetail?: InvocationsDetails\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - contract: compiled contract code\n - classHash: computed class hash of compiled contract\n - signature\n * @param transactionsDetail Invocation Details containing:\n - optional nonce\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declare(\n contractPayload: DeclareContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeclareContractResponse>;\n\n /**\n * Deploys a given compiled contract (json) to starknet using Universal Deployer Contract (UDC)\n * This is different from the normal DEPLOY transaction as it goes through the Universal Deployer Contract (UDC)\n *\n * @param deployContractPayload containing\n * - classHash: computed class hash of compiled contract\n * - salt: address salt\n * - unique: bool if true ensure unique salt\n * - calldata: constructor calldata\n * - additionalCalls - optional additional calls array to support multicall\n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract deploy(\n deployContractPayload: UniversalDeployerContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Deploy the account on Starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - classHash: computed class hash of compiled contract\n - optional constructor calldata\n - optional address salt \n - optional contractAddress\n * @param transactionsDetail Invocation Details containing:\n - optional nonce\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccount(\n contractPayload: DeployAccountContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeployContractResponse>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData): Promise<Signature>;\n\n /**\n * Hash a JSON object with pederson hash and return the hash\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be hashed\n * @returns the hash of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract hashMessage(typedData: TypedData): Promise<string>;\n\n /**\n * Verify a signature of a JSON object\n *\n * @param typedData - JSON object to be verified\n * @param signature - signature of the JSON object\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the JSON object is not a valid JSON or the signature is not a valid signature\n */\n public abstract verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean>;\n\n /**\n * Verify a signature of a given hash\n * @warning This method is not recommended, use verifyMessage instead\n *\n * @param hash - hash to be verified\n * @param signature - signature of the hash\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the signature is not a valid signature\n */\n public abstract verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean>;\n\n /**\n * Gets the nonce of the account with respect to a specific block\n *\n * @param {BlockIdentifier} blockIdentifier - optional blockIdentifier. Defaults to 'pending'\n * @returns nonce of the account\n */\n public abstract getNonce(blockIdentifier?: BlockIdentifier): Promise<BigNumberish>;\n\n /**\n * Gets Suggested Max Fee based on the transaction type\n *\n * @param {EstimateFeeAction} estimateFeeAction\n * @param {EstimateFeeDetails} details\n * @returns suggestedMaxFee\n */\n public abstract getSuggestedMaxFee(\n estimateFeeAction: EstimateFeeAction,\n details: EstimateFeeDetails\n ): Promise<BigNumberish>;\n}\n","import { addHexPrefix } from './encode';\nimport { BigNumberish, toBN } from './number';\n\n// Represents an integer in the range [0, 2^256).\nexport interface Uint256 {\n // The low 128 bits of the value.\n low: BigNumberish;\n // The high 128 bits of the value.\n high: BigNumberish;\n}\n\n// function to convert Uint256 to BN\nexport function uint256ToBN(uint256: Uint256) {\n return toBN(uint256.high).shln(128).add(toBN(uint256.low));\n}\n\nexport const UINT_128_MAX = toBN(1).shln(128).sub(toBN(1));\nexport const UINT_256_MAX = toBN(1).shln(256).sub(toBN(1));\n// function to check if BN is smaller or equal 2**256-1\nexport function isUint256(bn: BigNumberish): boolean {\n return toBN(bn).lte(UINT_256_MAX);\n}\n\n// function to convert BN to Uint256\nexport function bnToUint256(bignumber: BigNumberish): Uint256 {\n const bn = toBN(bignumber);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n low: addHexPrefix(bn.maskn(128).toString(16)),\n high: addHexPrefix(bn.shrn(128).toString(16)),\n };\n}\n","/* eslint-disable no-bitwise */\nimport { arrayify } from '@ethersproject/bytes';\n\nimport { MASK_251, ZERO } from '../constants';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { keccakBn } from './hash';\nimport { BigNumberish, assertInRange, toBN, toHex } from './number';\n\nexport function addAddressPadding(address: BigNumberish): string {\n return addHexPrefix(removeHexPrefix(toHex(toBN(address))).padStart(64, '0'));\n}\n\nexport function validateAndParseAddress(address: BigNumberish): string {\n assertInRange(address, ZERO, MASK_251, 'Starknet Address');\n\n const result = addAddressPadding(address);\n\n if (!result.match(/^(0x)?[0-9a-fA-F]{64}$/)) {\n throw new Error('Invalid Address Format');\n }\n\n return result;\n}\n\n// from https://github.com/ethers-io/ethers.js/blob/fc1e006575d59792fa97b4efb9ea2f8cca1944cf/packages/address/src.ts/index.ts#L12\nexport function getChecksumAddress(address: BigNumberish): string {\n const chars = removeHexPrefix(validateAndParseAddress(address)).toLowerCase().split('');\n const hashed = arrayify(keccakBn(address), { hexPad: 'left' }); // in case the hash is 251 bits (63 chars) we need to pad it to 64 chars without changing the number value (\"left\")\n\n for (let i = 0; i < chars.length; i += 2) {\n if (hashed[i >> 1] >> 4 >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n\n return addHexPrefix(chars.join(''));\n}\n\nexport function validateChecksumAddress(address: string): boolean {\n return getChecksumAddress(address) === address;\n}\n"],"mappings":"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,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AACF;;;AGhhEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AACrB,kBAAmB;AACnB,IAAAC,8BAAmB;AAOnB,IAAM,EAAE,IAAI,IAAI,OAAO,IAAI,gBAAAC;AAEpB,IAAM,KAAK,IAAI;AAAA,EACpB,IAAI,OAAO,YAAY;AAAA,IACrB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,MAAM,YAAAC,QAAO;AAAA,IACb,MAAM;AAAA,IACN,GAAG,gBAAgB;AAAA,EACrB,CAAC;AACH;AASA,SAAS,WAAW,KAAa;AAC/B,QAAM,UAAU,IAAI,QAAQ,SAAS,EAAE;AAEvC,MAAI,QAAQ,UAAU,IAAI;AAGxB,WAAO;AAAA,EACT;AACA,kCAAAC,SAAO,QAAQ,WAAW,EAAE;AAE5B,SAAO,GAAG;AACZ;AAEO,IAAM,aAAa,GAAG,WAAW,KAAK,EAAE;AAExC,SAAS,WAAW,IAA2B;AACpD,QAAM,OAAO,KAAK,EAAE;AACpB,SAAO,GAAG,eAAe,gBAAgB,MAAM,IAAI,CAAC,GAAG,KAAK;AAC9D;AAEO,SAAS,YAAY,SAA0B;AAGpD,UAAQ,UAAU,MAAM,KAAK;AAC7B,SAAO,aAAa,cAAe,QAAgB,IAAI,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAChF;AAQO,SAAS,wBAAwB,WAAkC;AACxE,QAAM,cAAc,KAAK,SAAS;AAClC,SAAO,GAAG,cAAc,gBAAgB,MAAM,WAAW,CAAC,GAAG,KAAK;AACpE;AAQO,SAAS,KAAK,SAAkB,SAA4B;AACjE,QAAM,YAAY,KAAK,aAAa,OAAO,CAAC;AAE5C,gBAAc,WAAW,MAAM,KAAK,aAAa,aAAa,CAAC,GAAG,SAAS;AAC3E,QAAM,eAAe,QAAQ,KAAK,WAAW,OAAO,CAAC;AACrD,QAAM,EAAE,GAAG,EAAE,IAAI;AACjB,QAAM,IAAI,EAAE,KAAM,GAAW,CAAC;AAE9B,gBAAc,GAAG,KAAK,KAAK,aAAa,aAAa,CAAC,GAAG,GAAG;AAC5D,gBAAc,GAAG,KAAK,KAAK,aAAa,QAAQ,CAAC,GAAG,GAAG;AACvD,gBAAc,GAAG,KAAK,KAAK,aAAa,aAAa,CAAC,GAAG,GAAG;AAC5D,SAAO,CAAC,EAAE,SAAS,GAAG,EAAE,SAAS,CAAC;AACpC;AAEA,SAAS,WAAW,KAAY,GAAoB;AAClD,SAAO,MAAM,KAAK,KAAK,IAAI,SAAS,CAAC,CAAC,EACnC,KAAK,EAAE,EACP,IAAI,CAAC,GAAG,MAAM,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AAC9C;AASO,SAAS,OAAO,SAA8B,SAAiB,KAAyB;AAC7F,QAAM,eAAe,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAChE,QAAM,YAAY,KAAK,aAAa,OAAO,CAAC;AAC5C,kCAAAA,SAAO,IAAI,SAAS,MAAM,GAAG,qDAAqD;AAClF,gBAAc,WAAW,MAAM,KAAK,aAAa,aAAa,CAAC,GAAG,SAAS;AAC3E,kCAAAA,SAAO,aAAa,WAAW,IAAI,SAAS,GAAG,4CAA4C;AAE3F,SAAO,WAAW,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM;AAC7C,UAAM,MAAM,KAAK,CAAC;AAClB,UAAM,MAAM,KAAK,CAAC;AAClB,UAAM,IAAI,IAAI,KAAM,GAAW,CAAC;AAChC,kBAAc,KAAK,KAAK,KAAK,aAAa,aAAa,CAAC,GAAG,GAAG;AAC9D,kBAAc,KAAK,KAAK,KAAK,aAAa,QAAQ,CAAC,GAAG,GAAG;AACzD,kBAAc,GAAG,KAAK,KAAK,aAAa,aAAa,CAAC,GAAG,GAAG;AAC5D,WAAO,GAAG,OAAO,WAAW,OAAO,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,aAAa,EAAE,KAAK;AAAA,EAChF,CAAC;AACH;;;AJ3FO,IAAM,qBAAqB;AAC3B,IAAM,wBAAwB,KAAK,CAAC,EAAE,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,KAAK,kBAAkB,CAAC;AAEjF,SAAS,SAAS,OAA6B;AACpD,QAAM,mBAAmB,gBAAgB,MAAM,KAAK,KAAK,CAAC,CAAC;AAC3D,QAAM,UAAU,iBAAiB,SAAS,MAAM,IAAI,mBAAmB,IAAI;AAC3E,SAAO,aAAa,YAAQ,6BAAU,yBAAW,OAAO,CAAC,CAAC,CAAC;AAC7D;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,aAAa,YAAQ,yBAAU,YAAY,KAAK,CAAC,CAAC,CAAC;AAC5D;AASO,SAAS,eAAe,OAAmB;AAChD,SAAO,KAAK,UAAU,KAAK,CAAC,EAAE,IAAI,QAAQ;AAC5C;AASO,SAAS,oBAAoB,UAAkB;AAEpD,SAAO,MAAM,eAAe,QAAQ,CAAC;AACvC;AAOO,SAAS,YAAY,OAAe;AACzC,MAAI,MAAM,KAAK,GAAG;AAChB,WAAO;AAAA,EACT;AACA,MAAI,oBAAoB,KAAK,GAAG;AAC9B,WAAO,YAAY,KAAK;AAAA,EAC1B;AACA,SAAO,oBAAoB,KAAK;AAClC;AAEA,IAAM,iBAAiB,gBAAgB;AAAA,EAAI,CAAC,WAC1C,GAAG,MAAM,MAAM,OAAO,IAAI,OAAO,EAAE;AACrC;AAEO,SAAS,SAAS,OAAqC;AAC5D,MAAI,QAAQ,eAAe;AAC3B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,QAAI,IAAI,KAAK,MAAM,EAAE;AACrB,oCAAAC,SAAO,EAAE,IAAI,IAAI,KAAK,EAAE,GAAG,KAAK,aAAa,WAAW,CAAC,CAAC,GAAG,kBAAkB,MAAM,IAAI;AACzF,QAAI,CAAC,EAAE,OAAO,GAAG;AACf,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAC/B,cAAM,KAAK,eAAe,IAAI,IAAI,MAAM;AACxC,wCAAAA,SAAO,CAAC,MAAM,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;AAClC,YAAI,EAAE,IAAI,GAAG,EAAE,SAAS,MAAM,GAAG;AAC/B,kBAAQ,MAAM,IAAI,EAAE;AAAA,QACtB;AACA,YAAI,EAAE,KAAK,CAAC;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACA,SAAO,aAAa,MAAM,KAAK,EAAE,SAAS,EAAE,CAAC;AAC/C;AAEO,SAAS,sBAAsB,MAAsB;AAC1D,SAAO,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS;AAC/E;AAKO,SAAS,+BACd,cACA,SACA,iBACA,oBACA,UACA,QACA,SACA,iBAAiC,CAAC,GAC1B;AACR,QAAM,eAAe,sBAAsB,QAAQ;AACnD,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL;AACA,SAAO,sBAAsB,UAAU;AACzC;AAEO,SAAS,+BACd,iBACA,qBACA,SACA,SACQ;AACR,SAAO;AAAA;AAAA,IAEL;AAAA,IACA;AAAA,IACA,oBAAoB,aAAa;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,gCAEd,WACA,eACA,SACA,QACA,SACA,OACQ;AACR,SAAO;AAAA;AAAA,IAEL;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC,SAAS;AAAA,IACV;AAAA,IACA;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AACF;AAEO,SAAS,sCACd,iBACA,WACA,qBACA,MACA,SACA,QACA,SACA,OACA;AACA,QAAM,WAAW,CAAC,WAAW,MAAM,GAAG,mBAAmB;AAEzD,SAAO;AAAA;AAAA,IAEL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AACF;AAEO,SAAS,yBACd,iBACA,SACA,UACA,QACA,SACA,OACQ;AACR,SAAO;AAAA;AAAA,IAEL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AACF;AAEO,SAAS,iCACd,MACA,WACA,qBACA,iBACA;AACA,QAAM,0BAA0B,sBAAsB,mBAAmB;AAEzE,QAAM,0BAA0B,OAAO,sDAAsD;AAE7F,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,sBAAsB,UAAU;AACzC;;;AK1OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAiB;AAEjB,IAAM,OAAO,CAAC,qBAA8B;AAC1C,aAAO,mBAAAC,SAAK;AAAA,IACV;AAAA,IACA,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,mBAAmB;AAAA,EACrB,CAAC;AACH;AAEO,IAAM,EAAE,OAAO,UAAU,IAAI,KAAK,KAAK;AACvC,IAAM,EAAE,OAAO,kBAAkB,WAAW,qBAAqB,IAAI,KAAK,IAAI;AAErF,IAAO,eAAQ,EAAE,OAAO,UAAU;;;ACdlC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAqB;AAed,SAAS,gBAAgB,aAAkD;AAChF,QAAM,cAAc,OAAO,gBAAgB,WAAW,cAAc,UAAU,WAAW;AACzF,QAAM,wBAAoB,kBAAK,WAAW;AAC1C,SAAO,cAAc,iBAAiB;AACxC;AAEO,SAAS,gBAAwB;AACtC,QAAM,gBAAgB,WAAW;AACjC,SAAO,YAAY,aAAa;AAClC;AAEO,SAAS,YAAY,OAAuB;AACjD,SAAO,aAAa,KAAK,EAAE,YAAY;AACzC;AAEO,SAAS,gBAAgB,KAA2B;AACzD,MAAI,CAAC;AAAK,WAAO,CAAC;AAClB,MAAI;AACF,WAAO,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,EACxD,SAAS,GAAP;AACA,WAAO,CAAC;AAAA,EACV;AACF;AAEO,SAAS,gBAAgB,MAAyB;AACvD,SAAO,OAAO,OAAO,IAAI,EAAE,QAAQ,CAAC,UAAU;AAC5C,QAAI,MAAM,QAAQ,KAAK;AACrB,aAAO,CAAC,KAAK,MAAM,MAAM,EAAE,SAAS,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;AAChF,QAAI,OAAO,UAAU,YAAY,UAAU;AACzC,aAAO,OAAO,QAAQ,KAAK,EACxB,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,MAAM,EAC5B,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,SAAS,CAAC;AACtC,WAAO,KAAK,KAAK,EAAE,SAAS;AAAA,EAC9B,CAAC;AACH;AAEO,SAAS,qBAAqB,cAA4B,WAAmB,KAAS;AAE3F,QAAM,kBAAkB,KAAK,OAAO,IAAI,YAAY,GAAG;AACvD,SAAO,KAAK,YAAY,EAAE,IAAI,KAAK,eAAe,CAAC,EAAE,IAAI,KAAK,GAAG,CAAC;AACpE;;;ACnDO,SAAS,KAAK,OAAe;AAClC,SAAO,IAAI,QAAQ,CAAC,QAAQ;AAC1B,eAAW,KAAK,KAAK;AAAA,EACvB,CAAC;AACH;AAEO,SAAS,cAAc,WAAwB,CAAC,GAAG;AACxD,SAAO,SAAS,IAAI,CAAC,SAAS;AAC5B,QAAI,OAAO,SAAS,YAAY,MAAM,IAAc,GAAG;AACrD,aAAO;AAAA,IACT;AACA,WAAO,MAAM,KAAK,IAAI,CAAC;AAAA,EACzB,CAAC;AACH;AAEO,SAAS,cAAc,UAAqC;AACjE,QAAM,iBACJ,OAAO,aAAa,WAAY,MAAM,QAAQ,IAAyB;AACzE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,gBAAgB,eAAe,OAAO;AAAA,EACjD;AACF;;;ACLO,IAAM,oBAAN,MASP;AAAA,EACS,sBAAsB,KAA4C;AACvE,WAAO;AAAA,MACL,WAAW,IAAI;AAAA,MACf,YAAY,IAAI;AAAA,MAChB,cAAc,IAAI;AAAA,MAClB,UAAU,IAAI;AAAA,MACd,aAAa,IAAI;AAAA,MACjB,QAAQ,IAAI;AAAA,MACZ,cAAc,IAAI;AAAA,IACpB;AAAA,EACF;AAAA,EAEO,4BAA4B,KAA2D;AAC5F,WAAO;AAAA,MACL,UAAU,IAAI,YAAY,CAAC;AAAA,MAC3B,kBAAkB,IAAI;AAAA,MACtB,SAAS,IAAI;AAAA,MACb,OAAO,IAAI;AAAA,MACX,WAAW,IAAI,aAAa,CAAC;AAAA,MAC7B,kBAAkB,IAAI;AAAA,MACtB,SAAS,IAAI;AAAA,IACf;AAAA,EACF;AAAA,EAEO,yBAAyB,KAAmD;AACjF,WAAO;AAAA,MACL,aAAa,KAAK,IAAI,WAAW;AAAA,MACjC,cAAc,KAAK,IAAI,YAAY;AAAA,MACnC,WAAW,KAAK,IAAI,SAAS;AAAA,IAC/B;AAAA,EACF;AAAA,EAEO,0BAA0B,KAA0C;AACzE,WAAO;AAAA,MACL,QAAQ;AAAA,IACV;AAAA,EACF;AACF;;;AChCO,IAAM,QAAN,MAAY;AAAA,EASjB,YAAY,aAA8B;AAR1C,gBAAwB;AAExB,kBAA0B;AAE1B,eAAuB;AA8CvB,mBAAU,MAAM,KAAK;AAErB,oBAAW,MAAM,KAAK;AA3CpB,SAAK,gBAAgB,SAAU,cAA+B;AAC5D,UAAI,OAAO,iBAAiB,YAAY,MAAM,YAAY,GAAG;AAC3D,aAAK,OAAO;AAAA,MACd,WAAW,OAAO,iBAAiB,UAAU;AAC3C,aAAK,SAAS;AAAA,MAChB,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,IACF;AAEA,SAAK,cAAc,WAAW;AAAA,EAChC;AAAA,EAEA,IAAI,kBAAuB;AACzB,QAAI,KAAK,WAAW,MAAM;AACxB,aAAO,eAAe,KAAK;AAAA,IAC7B;AAEA,QAAI,KAAK,SAAS,MAAM;AACtB,aAAO,aAAa,KAAK;AAAA,IAC3B;AAEA,WAAO,eAAe,KAAK;AAAA,EAC7B;AAAA,EAEA,IAAI,aAAkB;AACpB,QAAI,KAAK,WAAW,MAAM;AACxB,aAAO,EAAE,cAAc,KAAK,OAAO;AAAA,IACrC;AAEA,QAAI,KAAK,SAAS,MAAM;AACtB,aAAO,EAAE,YAAY,KAAK,KAAK;AAAA,IACjC;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,WAAW,aAA8B;AAC3C,SAAK,cAAc,WAAW;AAAA,EAChC;AAKF;;;ACjDO,IAAM,cAAN,MAA+C;AAAA,EAYpD,YAAY,mBAAuC;AAJnD,SAAQ,iBAAiB,IAAI,kBAAkB;AAK7C,UAAM,EAAE,SAAS,SAAS,QAAQ,IAAI;AACtC,SAAK,UAAU;AACf,SAAK,UAAU,WAAW;AAC1B,SAAK,UAAU,EAAE,gBAAgB,oBAAoB,GAAG,QAAQ;AAEhE,SAAK,WAAW,EAAE,KAAK,CAAC,YAAY;AAClC,WAAK,UAAU;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEO,MAAM,QAAa,QAA2B;AACnD,WAAO,sBAAM,KAAK,SAAS;AAAA,MACzB,QAAQ;AAAA,MACR,MAAM,UAAU,EAAE,QAAQ,SAAS,OAAO,QAAQ,IAAI,EAAE,CAAC;AAAA,MACzD,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEU,aAAa,OAAY;AACjC,QAAI,OAAO;AACT,YAAM,EAAE,MAAM,QAAQ,IAAI;AAC1B,YAAM,IAAI,MAAM,GAAG,SAAS,SAAS;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAgB,cACd,QACA,QACmC;AAnFvC;AAoFI,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,MAAM,QAAQ,MAAM;AACjD,YAAM,EAAE,OAAO,OAAO,IAAI,MAAM,UAAU,KAAK;AAC/C,WAAK,aAAa,KAAK;AACvB,aAAO;AAAA,IACT,SAAS,OAAP;AACA,WAAK,cAAa,oCAAO,aAAP,mBAAiB,IAAI;AACvC,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAGA,MAAa,aAA2B;AACtC,WAAO,KAAK,cAAc,kBAAkB;AAAA,EAC9C;AAAA,EAGA,MAAa,SAAS,kBAAmC,WAAsC;AAC7F,WAAO,KAAK,qBAAqB,eAAe,EAAE;AAAA,MAChD,KAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAa,wBAAyD;AACpE,WAAO,KAAK,cAAc,6BAA6B;AAAA,EACzD;AAAA,EAEA,MAAa,qBACX,kBAAmC,WACQ;AAC3C,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,iCAAiC,EAAE,SAAS,CAAC;AAAA,EACzE;AAAA,EAEA,MAAa,gBACX,kBAAmC,WACL;AAC9B,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,4BAA4B,EAAE,SAAS,CAAC;AAAA,EACpE;AAAA,EAEA,MAAa,eACX,iBACA,kBAAmC,WAChB;AACnB,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,2BAA2B;AAAA,MACnD;AAAA,MACA,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,SACX,iBACA,kBAAmC,WACf;AACpB,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,qBAAqB;AAAA,MAC7C,kBAAkB;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,yBAA2D;AACtE,WAAO,KAAK,cAAc,8BAA8B;AAAA,EAC1D;AAAA,EAEA,MAAa,qBAAqC;AAChD,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAAA,EAEA,MAAa,eACX,kBAAmC,WACT;AAC1B,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,2BAA2B,EAAE,SAAS,CAAC;AAAA,EACnE;AAAA,EAEA,MAAa,aACX,iBACA,KACA,kBAAmC,WACZ;AACvB,UAAM,YAAY,MAAM,KAAK,GAAG,CAAC;AACjC,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,yBAAyB;AAAA,MACjD,kBAAkB;AAAA,MAClB,KAAK;AAAA,MACL;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAGA,MAAa,eAAe,QAAiD;AAC3E,WAAO,KAAK,qBAAqB,MAAM,EAAE,KAAK,KAAK,eAAe,2BAA2B;AAAA,EAC/F;AAAA,EAEA,MAAa,qBAAqB,QAA2D;AAC3F,WAAO,KAAK,cAAc,iCAAiC,EAAE,kBAAkB,OAAO,CAAC;AAAA,EACzF;AAAA,EAEA,MAAa,gCACX,iBACA,OAC8C;AAC9C,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,4CAA4C,EAAE,UAAU,MAAM,CAAC;AAAA,EAC3F;AAAA,EAEA,MAAa,sBAAsB,QAAiD;AAClF,WAAO,KAAK,cAAc,kCAAkC,EAAE,kBAAkB,OAAO,CAAC;AAAA,EAC1F;AAAA,EAEA,MAAa,eAAe,WAAiD;AAC3E,WAAO,KAAK,SAAS,SAAS;AAAA,EAChC;AAAA,EAEA,MAAa,SACX,WACA,kBAAmC,WACP;AAC5B,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,qBAAqB,EAAE,YAAY,WAAW,SAAS,CAAC;AAAA,EACpF;AAAA,EAEA,MAAa,WACX,iBACA,kBAAmC,WACP;AAC5B,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,uBAAuB;AAAA,MAC/C;AAAA,MACA,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,QACX,kBACA,kBAC0B;AAC1B,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAAA,EAEA,MAAa,eACX,YACA,mBACA,kBAAmC,WACL;AAC9B,WAAO,KAAK,qBAAqB,YAAY,mBAAmB,eAAe;AAAA,EACjF;AAAA,EAEA,MAAa,qBACX,YACA,mBACA,kBAAmC,WACL;AAC9B,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,wBAAwB;AAAA,MAChD,SAAS;AAAA,QACP,MAAM;AAAA,QACN,gBAAgB,WAAW;AAAA,QAC3B,UAAU,cAAc,WAAW,QAAQ;AAAA,QAC3C,WAAW,0CAA0C,WAAW,aAAa,CAAC,CAAC;AAAA,QAC/E,SAAS,MAAM,MAAK,uDAAmB,YAAW,CAAC,CAAC;AAAA,QACpD,OAAO,MAAM,KAAK,kBAAkB,KAAK,CAAC;AAAA,QAC1C,SAAS,MAAM,MAAK,uDAAmB,WAAU,CAAC,CAAC;AAAA,MACrD;AAAA,MACA;AAAA,IACF,CAAC,EAAE,KAAK,KAAK,eAAe,wBAAwB;AAAA,EACtD;AAAA,EAIA,MAAa,sBACX,EAAE,eAAe,oBAAoB,UAAU,GAC/C,SACA,kBAAmC,WACL;AAC9B,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,wBAAwB;AAAA,MAChD,SAAS;AAAA,QACP,MAAM;AAAA,QACN,gBAAgB;AAAA,UACd,SAAS,mBAAmB;AAAA,UAC5B,sBAAsB,mBAAmB;AAAA,UACzC,KAAK,mBAAmB;AAAA,QAC1B;AAAA,QACA,gBAAgB;AAAA,QAChB,WAAW,0CAA0C,aAAa,CAAC,CAAC;AAAA,QACpE,SAAS,MAAM,MAAK,mCAAS,YAAW,CAAC,CAAC;AAAA,QAC1C,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,QAChC,SAAS,MAAM,MAAK,mCAAS,WAAU,CAAC,CAAC;AAAA,MAC3C;AAAA,MACA;AAAA,IACF,CAAC,EAAE,KAAK,KAAK,eAAe,wBAAwB;AAAA,EACtD;AAAA,EAEA,MAAa,4BACX,EAAE,WAAW,qBAAqB,aAAa,UAAU,GACzD,SACA,kBAAmC,WACL;AAC9B,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,wBAAwB;AAAA,MAChD,SAAS;AAAA,QACP,MAAM;AAAA,QACN,sBAAsB,0CAA0C,uBAAuB,CAAC,CAAC;AAAA,QACzF,YAAY,MAAM,KAAK,SAAS,CAAC;AAAA,QACjC,uBAAuB,MAAM,KAAK,eAAe,CAAC,CAAC;AAAA,QACnD,WAAW,0CAA0C,aAAa,CAAC,CAAC;AAAA,QACpE,SAAS,MAAM,MAAK,mCAAS,YAAW,CAAC,CAAC;AAAA,QAC1C,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,QAChC,SAAS,MAAM,MAAK,mCAAS,WAAU,CAAC,CAAC;AAAA,MAC3C;AAAA,MACA;AAAA,IACF,CAAC,EAAE,KAAK,KAAK,eAAe,wBAAwB;AAAA,EACtD;AAAA,EAGA,MAAa,gBACX,EAAE,oBAAoB,WAAW,cAAc,GAC/C,SACkC;AAClC,WAAO,KAAK,cAAc,kCAAkC;AAAA,MAC1D,qBAAqB;AAAA,QACnB,gBAAgB;AAAA,UACd,SAAS,mBAAmB;AAAA,UAC5B,sBAAsB,mBAAmB;AAAA,UACzC,KAAK,mBAAmB;AAAA,QAC1B;AAAA,QACA,MAAM;AAAA,QACN,SAAS,MAAM,KAAK,QAAQ,WAAW,CAAC,CAAC;AAAA,QACzC,SAAS,MAAM,KAAK,QAAQ,UAAU,CAAC,CAAC;AAAA,QACxC,WAAW,0CAA0C,aAAa,CAAC,CAAC;AAAA,QACpE,gBAAgB;AAAA,QAChB,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAKA,MAAa,eACX,EAAE,UAAU,qBAAqB,YAAY,GAC7C,SACiC;AACjC,UAAM,qBAAqB,cAAc,QAAQ;AACjD,WAAO,KAAK,cAAc,iCAAiC;AAAA,MACzD,oBAAoB;AAAA,QAClB,uBAAuB,eAAe,cAAc;AAAA,QACpD,sBAAsB,0CAA0C,uBAAuB,CAAC,CAAC;AAAA,QACzF,gBAAgB;AAAA,UACd,SAAS,mBAAmB;AAAA,UAC5B,sBAAsB,mBAAmB;AAAA,UACzC,KAAK,mBAAmB;AAAA,QAC1B;AAAA,QACA,MAAM;AAAA,QACN,SAAS,MAAM,MAAK,mCAAS,YAAW,CAAC,CAAC;AAAA,MAC5C;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,sBACX,EAAE,WAAW,qBAAqB,aAAa,UAAU,GACzD,SACiC;AACjC,WAAO,KAAK,cAAc,wCAAwC;AAAA,MAChE,sBAAsB,0CAA0C,uBAAuB,CAAC,CAAC;AAAA,MACzF,YAAY,MAAM,KAAK,SAAS,CAAC;AAAA,MACjC,uBAAuB,MAAM,KAAK,eAAe,CAAC,CAAC;AAAA,MACnD,MAAM;AAAA,MACN,SAAS,MAAM,KAAK,QAAQ,UAAU,CAAC,CAAC;AAAA,MACxC,SAAS,MAAM,KAAK,QAAQ,WAAW,CAAC,CAAC;AAAA,MACzC,WAAW,0CAA0C,aAAa,CAAC,CAAC;AAAA,MACpE,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,eACX,oBACA,SACiC;AACjC,WAAO,KAAK,cAAc,iCAAiC;AAAA,MACzD,oBAAoB;AAAA,QAClB,gBAAgB,mBAAmB;AAAA,QACnC,UAAU,cAAc,mBAAmB,QAAQ;AAAA,QACnD,MAAM;AAAA,QACN,SAAS,MAAM,KAAK,QAAQ,UAAU,CAAC,CAAC;AAAA,QACxC,SAAS,MAAM,KAAK,QAAQ,WAAW,CAAC,CAAC;AAAA,QACzC,WAAW,0CAA0C,mBAAmB,aAAa,CAAC,CAAC;AAAA,QACvF,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAGA,MAAa,aACX,MACA,kBAAmC,WACJ;AAC/B,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,UAAM,SAAS,MAAM,KAAK,cAAc,iBAAiB;AAAA,MACvD,SAAS;AAAA,QACP,kBAAkB,KAAK;AAAA,QACvB,sBAAsB,oBAAoB,KAAK,UAAU;AAAA,QACzD,UAAU,cAAc,KAAK,QAAQ;AAAA,MACvC;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,KAAK,eAAe,0BAA0B,MAAM;AAAA,EAC7D;AAAA,EAEA,MAAa,iBAAiB,iBAA0D;AACtF,WAAO,KAAK,cAAc,6BAA6B,EAAE,kBAAkB,gBAAgB,CAAC;AAAA,EAC9F;AAAA,EAEA,MAAa,uBAAuB,WAA+C;AACjF,WAAO,KAAK,cAAc,mCAAmC,EAAE,YAAY,UAAU,CAAC;AAAA,EACxF;AAAA,EAEA,MAAa,mBAAmB,QAAgB,gBAAwB,KAAM;AAC5E,QAAI,EAAE,QAAQ,IAAI;AAClB,QAAI,UAAU;AAEd,WAAO,CAAC,SAAS;AACf,YAAM,gBAAgB,CAAC,kBAAkB,kBAAkB,SAAS;AACpE,YAAM,cAAc,CAAC,YAAY,cAAc;AAG/C,YAAM,KAAK,aAAa;AACxB,UAAI;AAEF,cAAM,MAAM,MAAM,KAAK,sBAAsB,MAAM;AAEnD,YAAI,EAAE,YAAY,MAAM;AACtB,gBAAM,QAAQ,IAAI,MAAM,qBAAqB;AAC7C,gBAAM;AAAA,QACR;AAEA,YAAI,IAAI,UAAU,cAAc,SAAS,IAAI,MAAM,GAAG;AACpD,oBAAU;AAAA,QACZ,WAAW,IAAI,UAAU,YAAY,SAAS,IAAI,MAAM,GAAG;AACzD,gBAAM,UAAU,IAAI;AACpB,gBAAM,QAAQ,IAAI,MAAM,OAAO;AAC/B,gBAAM,WAAW;AACjB,gBAAM;AAAA,QACR;AAAA,MACF,SAAS,OAAP;AACA,YAAI,iBAAiB,SAAS,YAAY,SAAS,MAAM,OAAO,GAAG;AACjE,gBAAM;AAAA,QACR;AAEA,YAAI,YAAY,GAAG;AACjB,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AAAA,MACF;AAEA,iBAAW;AAAA,IACb;AAEA,UAAM,KAAK,aAAa;AAAA,EAC1B;AAAA,EASA,MAAa,oBACX,kBAAmC,WACO;AAC1C,UAAM,WAAW,IAAI,MAAM,eAAe,EAAE;AAC5C,WAAO,KAAK,cAAc,qCAAqC,EAAE,SAAS,CAAC;AAAA,EAC7E;AAAA,EAQA,MAAa,iBAAsD;AACjE,WAAO,KAAK,cAAc,sBAAsB;AAAA,EAClD;AAAA,EAQA,MAAa,kBAAwD;AACnE,WAAO,KAAK,cAAc,kBAAkB;AAAA,EAC9C;AAAA,EAQA,MAAa,UAAU,aAA8D;AACnF,WAAO,KAAK,cAAc,sBAAsB,EAAE,QAAQ,YAAY,CAAC;AAAA,EACzE;AACF;;;AC5eA,IAAAC,mBAAoB;;;ACWb,IAAe,iBAAf,MAA8B;AAgBrC;;;ACTO,IAAM,6BAAN,cAAyC,eAAe;AAAA,EACtD,sBAAsB,KAAmD;AAC9E,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU,IAAI;AAAA,MACd,aAAa,IAAI;AAAA,MACjB,cAAc,OAAO,OAAO,IAAI,YAAY,EACzC,IAAI,CAAC,UAAU,sBAAsB,SAAS,MAAM,gBAAgB,EACpE,OAAO,OAAO;AAAA,IACnB;AAAA,EACF;AAAA,EAEO,4BACL,KACwB;AACxB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU,cAAc,IAAI,cAAe,IAAI,YAAY,WAA6B,CAAC;AAAA,MACzF,kBACE,sBAAsB,IAAI,cAAc,IAAI,YAAY,mBAAmB;AAAA,MAC7E,gBACE,oBAAoB,IAAI,cAAe,IAAI,YAAY,iBAAyB;AAAA,MAClF,sBACE,0BAA0B,IAAI,cAC1B,IAAI,YAAY,uBAChB;AAAA,MACN,SAAS,aAAa,IAAI,cAAe,IAAI,YAAY,UAAqB;AAAA,MAC9E,OAAO,IAAI,YAAY;AAAA,MACvB,gBACE,oBAAoB,IAAI,cACnB,IAAI,YAAY,iBACjB;AAAA,MACN,WAAW,eAAe,IAAI,cAAc,IAAI,YAAY,YAAY;AAAA,MACxE,kBACE,sBAAsB,IAAI,cAAc,IAAI,YAAY,mBAAmB;AAAA,MAC7E,SAAS,aAAa,IAAI,cAAe,IAAI,YAAY,UAAqB;AAAA,IAChF;AAAA,EACF;AAAA,EAEO,mCACL,KAC+B;AAC/B,WAAO;AAAA,MACL,kBAAkB,IAAI;AAAA,MACtB,QAAQ,IAAI;AAAA,MACZ,eAAe,IAAI;AAAA,MACnB,QAAQ,IAAI;AAAA,MACZ,GAAI,gBAAgB,OAAO,EAAE,YAAY,IAAI,WAAW;AAAA,MACxD,GAAI,kBAAkB,OAAO,EAAE,cAAc,IAAI,aAAa;AAAA,MAC9D,GAAI,gBAAgB,OAAO,EAAE,YAAY,IAAI,WAAW;AAAA,MACxD,GAAI,uBAAuB,OAAO,EAAE,mBAAmB,IAAI,kBAAkB;AAAA,MAC7E,GAAI,yBAAyB,OAAO,EAAE,qBAAqB,IAAI,oBAAoB;AAAA,MACnF,GAAI,+BAA+B,OAAO;AAAA,QAExC,2BAA2B,IAAI;AAAA,MACjC;AAAA,MACA,GAAI,gCAAgC,OAAO;AAAA,QACzC,4BAA4B,IAAI;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAAA,EAEO,yBAAyB,KAAyD;AACvF,QAAI,iBAAiB,KAAK;AACxB,UAAI,UAAU,CAAC;AAEf,UAAI;AACF,kBAAU;AAAA,UACR,cAAc,KAAK,IAAI,SAAS;AAAA,UAChC,WAAW,KAAK,IAAI,SAAS;AAAA,QAC/B;AAAA,MACF,QAAE;AAAA,MAEF;AAEA,aAAO;AAAA,QACL,aAAa,KAAK,IAAI,WAAW;AAAA,QACjC,GAAG;AAAA,MACL;AAAA,IACF;AACA,WAAO;AAAA,MACL,aAAa,KAAK,IAAI,MAAM;AAAA,IAC9B;AAAA,EACF;AAAA,EAEO,0BAA0B,KAA2D;AAC1F,WAAO;AAAA,MACL,QAAQ,IAAI;AAAA,IACd;AAAA,EACF;AAAA,EAEO,4BACL,KACwB;AACxB,WAAO;AAAA,MACL,kBAAkB,IAAI;AAAA,IACxB;AAAA,EACF;AAAA,EAEO,4BACL,KACwB;AACxB,WAAO;AAAA,MACL,kBAAkB,IAAI;AAAA,MACtB,kBAAkB,IAAI;AAAA,IACxB;AAAA,EACF;AAAA,EAEO,6BACL,KACyB;AACzB,WAAO;AAAA,MACL,kBAAkB,IAAI;AAAA,MACtB,YAAY,IAAI;AAAA,IAClB;AAAA,EACF;AACF;;;ACtIA,sBAAoB;AAWpB,IAAM,sBAAsB;AAE5B,IAAM,oBAAoB;AAC1B,IAAM,uBAAuB;AAOtB,SAAS,MAAM,GAAqB;AACzC,MAAI,CAAC,GAAG;AACN,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,MAAM,UAAU;AACzB,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,EAAE,MAAM,mBAAmB;AACzC,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,QAAM,0BAA0B,MAAM;AACtC,MAAI,CAAC,yBAAyB;AAC5B,WAAO;AAAA,EACT;AAEA,MACE,kBAAkB,KAAK,uBAAuB,KAC9C,qBAAqB,KAAK,uBAAuB,GACjD;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,SAAS,SAAiB,aAAqB,WAAoB;AACjF,SAAO,MAAM,SAAS,IAAI,gBAAa,gBAAAC,SAAQ,SAAS,aAAa,WAAW;AAClF;;;ACnDA,6BAA4B;AAErB,IAAM,eAAN,cAA2B,mCAAY;AAAA,EAC5C,YAAY,SAAwB,WAAmB;AACrD,UAAM,OAAO;AADqB;AAAA,EAEpC;AACF;AAEO,IAAM,YAAN,cAAwB,mCAAY;AAAA,EACzC,YAAY,SAAwB,WAAmB;AACrD,UAAM,OAAO;AADqB;AAAA,EAEpC;AACF;;;AJmCA,SAAS,mBAAmB,KAA0C;AACpE,SACE,QAAQ,UACR,OAAO,KAAK,GAAG,EAAE,WAAW,KAC3B,OAAO,KAAK,GAAG,EAAE,WAAW,KAC3B,OAAO,QAAQ,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,MAAM,qBAAqB,MAAM,IAAI;AAEjF;AAYO,IAAM,oBAAN,MAAqD;AAAA,EAa1D,YAAY,oBAA8C,EAAE,SAAS,iBAAiB,GAAG;AAFzF,SAAQ,iBAAiB,IAAI,2BAA2B;AAGtD,QAAI,aAAa,mBAAmB;AAClC,WAAK,UAAU,kBAAkB,mBAAmB,kBAAkB,OAAO;AAC7E,WAAK,UAAU,kBAAkB,sBAAsB,KAAK,OAAO;AACnE,WAAK,uBAAmB,iBAAAC,SAAQ,KAAK,SAAS,gBAAgB;AAC9D,WAAK,iBAAa,iBAAAA,SAAQ,KAAK,SAAS,SAAS;AAAA,IACnD,OAAO;AACL,WAAK,UAAU,kBAAkB;AACjC,WAAK,mBAAmB;AAAA,QACtB,KAAK;AAAA,QACL;AAAA,QACA,kBAAkB;AAAA,MACpB;AACA,WAAK,aAAa,SAAS,KAAK,SAAS,WAAW,kBAAkB,UAAU;AAEhF,WAAK,UACH,kBAAkB,WAClB,kBAAkB,sBAAsB,kBAAkB,OAAO;AAEnE,WAAK,UAAU,uDAAmB;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,OAAiB,mBAAmB,MAAmB;AACrD,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEA,OAAiB,sBAAsB,SAAkC;AACvE,QAAI;AACF,YAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,UAAI,IAAI,KAAK,SAAS,qBAAqB,GAAG;AAC5C;AAAA,MACF;AAAA,IACF,QAAE;AAEA,cAAQ,MAAM,4BAA4B,SAAS;AAAA,IACrD;AACA;AAAA,EACF;AAAA,EAEQ,YAAY,UAAqC;AACvD,UAAM,sBAAsB,CAAC,iBAAiB;AAE9C,WAAO,oBAAoB,SAAS,QAAQ,IAAI,KAAK,aAAa,KAAK;AAAA,EACzE;AAAA,EAEQ,eAAe,UAAqC;AAC1D,UAAM,sBAAsB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,oBAAoB,SAAS,QAAQ,IAAI,SAAS;AAAA,EAC3D;AAAA,EAEQ,eAAe,OAAqC;AAC1D,QAAI,mBAAmB,KAAK,GAAG;AAC7B,aAAO;AAAA,IACT;AACA,UAAM,cAAc,OAAO,QAAQ,KAAK,EACrC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,UAAI,QAAQ,mBAAmB;AAC7B,cAAM,QAAQ,IAAI,MAAM,KAAK;AAC7B,eAAO,GAAG,MAAM;AAAA,MAClB;AACA,aAAO,GAAG,OAAO;AAAA,IACnB,CAAC,EACA,KAAK,GAAG;AAEX,WAAO,IAAI;AAAA,EACb;AAAA,EAEQ,WAAW,QAA4C;AAC7D,QAAI,WAAW,QAAQ;AACrB,aAAO;AAAA,QACL,gBAAgB;AAAA,QAChB,GAAG,KAAK;AAAA,MACV;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAGA,MAAgB,cACd,aAEG,CAAC,OAAO,OAAO,GAO2B;AAC7C,UAAM,UAAU,KAAK,YAAY,QAAQ;AACzC,UAAM,SAAS,KAAK,eAAe,QAAQ;AAC3C,UAAM,cAAc,KAAK,eAAe,KAAK;AAC7C,UAAM,UAAU,KAAK,WAAW,MAAM;AACtC,UAAM,UAAM,iBAAAA,SAAQ,SAAS,UAAU,WAAW;AAElD,QAAI;AACF,YAAM,MAAM,MAAM,sBAAM,KAAK;AAAA,QAC3B;AAAA,QACA,MAAM,UAAU,OAAO;AAAA,QACvB;AAAA,MACF,CAAC;AACD,YAAM,eAAe,MAAM,IAAI,KAAK;AACpC,UAAI,CAAC,IAAI,IAAI;AAEX,YAAI;AACJ,YAAI;AACF,yBAAe,MAAM,YAAY;AAAA,QACnC,QAAE;AAEA,gBAAM,IAAI,UAAU,IAAI,YAAY,IAAI,MAAM;AAAA,QAChD;AAEA,cAAM,YAAY,aAAa,SAAU,6CAAsB;AAC/D,cAAM,IAAI,aAAa,aAAa,SAAS,SAAS;AAAA,MACxD;AAEA,UAAI,aAAa,gBAAgB;AAC/B,eAAO,iBAAiB,cAAc,CAAC,GAAG,MAAM;AAC9C,cAAI,KAAK,OAAO,MAAM,UAAU;AAC9B,mBAAO,KAAK,EAAE,SAAS,CAAC;AAAA,UAC1B;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA,aAAO,MAAM,YAAY;AAAA,IAC3B,SAAS,KAAP;AAEA,UAAI,eAAe,gBAAgB,eAAe,WAAW;AAC3D,cAAM;AAAA,MACR;AACA,UAAI,eAAe,OAAO;AACxB,cAAM,MAAM,aAAa,0BAA0B,UAAU,IAAI,SAAS;AAAA,MAC5E;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAa,aAAuC;AAClD,WAAO,QAAQ,QAAQ,KAAK,OAAO;AAAA,EACrC;AAAA,EAEA,MAAa,aACX,EAAE,iBAAiB,YAAY,oBAAoB,WAAW,CAAC,EAAE,GACjE,kBAAmC,WACJ;AAC/B,WAAO,KAAK;AAAA,MACV;AAAA,MACA,EAAE,gBAAgB;AAAA,MAClB;AAAA,QACE,WAAW,CAAC;AAAA,QACZ,kBAAkB;AAAA,QAClB,sBAAsB,oBAAoB,kBAAkB;AAAA,QAC5D;AAAA,MACF;AAAA,IACF,EAAE,KAAK,KAAK,eAAe,yBAAyB;AAAA,EACtD;AAAA,EAEA,MAAa,SAAS,kBAAmC,WAAsC;AAC7F,WAAO,KAAK,cAAc,aAAa,EAAE,gBAAgB,CAAC,EAAE;AAAA,MAC1D,KAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAa,SACX,iBACA,kBAAmC,WACZ;AACvB,WAAO,KAAK,cAAc,aAAa,EAAE,iBAAiB,gBAAgB,CAAC;AAAA,EAC7E;AAAA,EAEA,MAAa,aACX,iBACA,KACA,kBAAmC,WACZ;AACvB,UAAM,YAAY,KAAK,GAAG,EAAE,SAAS,EAAE;AACvC,WAAO,KAAK,cAAc,kBAAkB;AAAA,MAC1C;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAEA,MAAa,eAAe,QAAuD;AACjF,UAAM,YAAY,MAAM,KAAK,MAAM,CAAC;AACpC,WAAO,KAAK,cAAc,mBAAmB,EAAE,iBAAiB,UAAU,CAAC,EAAE;AAAA,MAAK,CAAC,UACjF,KAAK,eAAe,4BAA4B,KAAK;AAAA,IACvD;AAAA,EACF;AAAA,EAEA,MAAa,sBAAsB,QAA8D;AAC/F,UAAM,YAAY,MAAM,KAAK,MAAM,CAAC;AACpC,WAAO,KAAK,cAAc,2BAA2B,EAAE,iBAAiB,UAAU,CAAC,EAAE;AAAA,MACnF,KAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAa,WACX,iBACA,kBAAmC,WACX;AACxB,WAAO,KAAK,cAAc,qBAAqB,EAAE,iBAAiB,gBAAgB,CAAC,EAAE;AAAA,MACnF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,eACX,iBACA,kBAAmC,WAClB;AACjB,WAAO,KAAK,cAAc,qBAAqB,EAAE,iBAAiB,gBAAgB,CAAC;AAAA,EACrF;AAAA,EAEA,MAAa,eAAe,WAA2C;AACrE,WAAO,KAAK,cAAc,qBAAqB,EAAE,UAAU,CAAC,EAAE,KAAK,aAAa;AAAA,EAClF;AAAA,EAEA,MAAa,eACX,oBACA,SACiC;AACjC,WAAO,KAAK,cAAc,mBAAmB,QAAW;AAAA,MACtD,MAAM;AAAA,MACN,kBAAkB,mBAAmB;AAAA,MACrC,UAAU,sCAAsC,mBAAmB,YAAY,CAAC,CAAC;AAAA,MACjF,WAAW,sCAAsC,mBAAmB,aAAa,CAAC,CAAC;AAAA,MACnF,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,MAChC,SAAS,MAAM,KAAK,QAAQ,UAAU,CAAC,CAAC;AAAA,MACxC,SAAS,MAAM,KAAK,QAAQ,WAAW,CAAC,CAAC;AAAA,IAC3C,CAAC,EAAE,KAAK,KAAK,eAAe,2BAA2B;AAAA,EACzD;AAAA,EAKA,MAAa,eAAe;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA2D;AACzD,UAAM,qBAAqB,cAAc,QAAQ;AAEjD,WAAO,KAAK,cAAc,mBAAmB,QAAW;AAAA,MACtD,MAAM;AAAA,MACN,uBAAuB,eAAe,cAAc;AAAA,MACpD,sBAAsB,sCAAsC,uBAAuB,CAAC,CAAC;AAAA,MACrF,qBAAqB;AAAA,IACvB,CAAC,EAAE,KAAK,KAAK,eAAe,2BAA2B;AAAA,EACzD;AAAA,EAEA,MAAa,sBACX,EAAE,WAAW,qBAAqB,aAAa,UAAU,GACzD,SACiC;AACjC,WAAO,KAAK,cAAc,mBAAmB,QAAW;AAAA,MACtD,MAAM;AAAA,MACN,uBAAuB,eAAe,cAAc;AAAA,MACpD,sBAAsB,sCAAsC,uBAAuB,CAAC,CAAC;AAAA,MACrF,YAAY,MAAM,KAAK,SAAS,CAAC;AAAA,MACjC,SAAS,MAAM,KAAK,QAAQ,UAAU,CAAC,CAAC;AAAA,MACxC,SAAS,MAAM,KAAK,QAAQ,WAAW,CAAC,CAAC;AAAA,MACzC,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,MAChC,WAAW,sCAAsC,aAAa,CAAC,CAAC;AAAA,IAClE,CAAC,EAAE,KAAK,KAAK,eAAe,2BAA2B;AAAA,EACzD;AAAA,EAEA,MAAa,gBACX,EAAE,eAAe,oBAAoB,UAAU,GAC/C,SACkC;AAClC,WAAO,KAAK,cAAc,mBAAmB,QAAW;AAAA,MACtD,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,MAChC,WAAW,sCAAsC,aAAa,CAAC,CAAC;AAAA,MAChE,gBAAgB;AAAA,MAChB,SAAS,MAAM,KAAK,QAAQ,UAAU,CAAC,CAAC;AAAA,MACxC,SAAS,MAAM,KAAK,QAAQ,WAAW,CAAC,CAAC;AAAA,IAC3C,CAAC,EAAE,KAAK,KAAK,eAAe,4BAA4B;AAAA,EAC1D;AAAA,EAEA,MAAa,eACX,YACA,mBACA,kBAAmC,WACL;AAC9B,WAAO,KAAK,qBAAqB,YAAY,mBAAmB,eAAe;AAAA,EACjF;AAAA,EAEA,MAAa,qBACX,YACA,mBACA,kBAAmC,WACL;AAC9B,WAAO,KAAK;AAAA,MACV;AAAA,MACA,EAAE,gBAAgB;AAAA,MAClB;AAAA,QACE,MAAM;AAAA,QACN,kBAAkB,WAAW;AAAA,QAC7B,UAAU,WAAW,YAAY,CAAC;AAAA,QAClC,WAAW,sCAAsC,WAAW,aAAa,CAAC,CAAC;AAAA,QAC3E,SAAS,MAAM,MAAK,uDAAmB,YAAW,CAAC,CAAC;AAAA,QACpD,OAAO,MAAM,KAAK,kBAAkB,KAAK,CAAC;AAAA,MAC5C;AAAA,IACF,EAAE,KAAK,KAAK,eAAe,wBAAwB;AAAA,EACrD;AAAA,EAEA,MAAa,sBACX,EAAE,eAAe,oBAAoB,UAAU,GAC/C,SACA,kBAAmC,WACL;AAC9B,WAAO,KAAK;AAAA,MACV;AAAA,MACA,EAAE,gBAAgB;AAAA,MAClB;AAAA,QACE,MAAM;AAAA,QACN,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,WAAW,sCAAsC,aAAa,CAAC,CAAC;AAAA,QAChE,SAAS,MAAM,MAAK,mCAAS,YAAW,CAAC,CAAC;AAAA,QAC1C,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,MAClC;AAAA,IACF,EAAE,KAAK,KAAK,eAAe,wBAAwB;AAAA,EACrD;AAAA,EAEA,MAAa,4BACX,EAAE,WAAW,aAAa,qBAAqB,UAAU,GACzD,SACA,kBAAmC,WACL;AAC9B,WAAO,KAAK;AAAA,MACV;AAAA,MACA,EAAE,gBAAgB;AAAA,MAClB;AAAA,QACE,MAAM;AAAA,QACN,YAAY,MAAM,KAAK,SAAS,CAAC;AAAA,QACjC,sBAAsB,sCAAsC,uBAAuB,CAAC,CAAC;AAAA,QACrF,uBAAuB,MAAM,KAAK,eAAe,CAAC,CAAC;AAAA,QACnD,WAAW,sCAAsC,aAAa,CAAC,CAAC;AAAA,QAChE,SAAS,MAAM,MAAK,mCAAS,YAAW,CAAC,CAAC;AAAA,QAC1C,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,MAClC;AAAA,IACF,EAAE,KAAK,KAAK,eAAe,wBAAwB;AAAA,EACrD;AAAA,EAEA,MAAa,QACX,iBACA,kBAAmC,WACC;AACpC,WAAO,KAAK,cAAc,YAAY,EAAE,iBAAiB,gBAAgB,CAAC;AAAA,EAC5E;AAAA,EAEA,MAAa,mBAAmB,QAAsB,gBAAwB,KAAM;AAClF,QAAI,UAAU;AAEd,WAAO,CAAC,SAAS;AAEf,YAAM,KAAK,aAAa;AAExB,YAAM,MAAM,MAAM,KAAK,qBAAqB,MAAM;AAElD,YAAM,gBAAgB,CAAC,kBAAkB,kBAAkB,SAAS;AACpE,YAAM,cAAc,CAAC,YAAY,cAAc;AAE/C,UAAI,cAAc,SAAS,IAAI,SAAS,GAAG;AACzC,kBAAU;AAAA,MACZ,WAAW,YAAY,SAAS,IAAI,SAAS,GAAG;AAC9C,cAAM,UAAU,IAAI,oBAChB,GAAG,IAAI,cAAc,IAAI,kBAAkB;AAAA,EAAS,IAAI,kBAAkB,kBAC1E,IAAI;AACR,cAAM,QAAQ,IAAI,MAAM,OAAO;AAC/B,cAAM,WAAW;AACjB,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAUA,MAAa,qBAAqB,QAA6D;AAC7F,UAAM,YAAY,MAAM,KAAK,MAAM,CAAC;AACpC,WAAO,KAAK,cAAc,0BAA0B,EAAE,iBAAiB,UAAU,CAAC;AAAA,EACpF;AAAA,EAQA,MAAa,uBAA8D;AACzE,WAAO,KAAK,cAAc,wBAAwB;AAAA,EACpD;AAAA,EASA,MAAa,oBAAoB,QAA4D;AAC3F,UAAM,YAAY,MAAM,KAAK,MAAM,CAAC;AACpC,WAAO,KAAK,cAAc,yBAAyB,EAAE,iBAAiB,UAAU,CAAC;AAAA,EACnF;AAAA,EAEA,MAAa,mBACX,EAAE,cAAc,YAAY,sBAAsB,QAAQ,GAC1D,kBAAmC,WACK;AACxC,UAAM,qBAAqB;AAAA,MACzB,cAAc,iBAAiB,YAAY;AAAA,MAC3C,YAAY,aAAa,UAAU;AAAA,MACnC,sBAAsB,YAAY,oBAAoB;AAAA,MACtD,SAAS,kBAAkB,OAAO;AAAA,IACpC;AAEA,WAAO,KAAK,cAAc,wBAAwB,EAAE,gBAAgB,GAAG,kBAAkB;AAAA,EAC3F;AACF;;;AK1eO,IAAM,WAAN,MAA4C;AAAA,EAGjD,YAAY,mBAAyD;AACnE,QAAI,qBAAqB,aAAa,mBAAmB;AACvD,WAAK,WAAW;AAAA,IAClB,WAAW,uDAAmB,KAAK;AACjC,WAAK,WAAW,IAAI,YAAY,kBAAkB,GAAG;AAAA,IACvD,WAAW,uDAAmB,WAAW;AACvC,WAAK,WAAW,IAAI,kBAAkB,kBAAkB,SAAS;AAAA,IACnE,OAAO;AACL,WAAK,WAAW,IAAI,kBAAkB;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,IAAW,UAA2B;AACpC,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,MAAa,aAAuC;AAClD,WAAO,KAAK,SAAS,WAAW;AAAA,EAClC;AAAA,EAEA,MAAa,SAAS,kBAAmC,WAAsC;AAC7F,WAAO,KAAK,SAAS,SAAS,eAAe;AAAA,EAC/C;AAAA,EAEA,MAAa,WACX,iBACA,kBAAmC,WACX;AACxB,WAAO,KAAK,SAAS,WAAW,iBAAiB,eAAe;AAAA,EAClE;AAAA,EAEA,MAAa,eACX,iBACA,kBAAmC,WAClB;AACjB,WAAO,KAAK,SAAS,eAAe,iBAAiB,eAAe;AAAA,EACtE;AAAA,EAEO,eAAe,WAA2C;AAC/D,WAAO,KAAK,SAAS,eAAe,SAAS;AAAA,EAC/C;AAAA,EAEA,MAAa,eACX,sBACA,mBACA,kBAAmC,WACL;AAC9B,WAAO,KAAK,SAAS,eAAe,sBAAsB,mBAAmB,eAAe;AAAA,EAC9F;AAAA,EAEA,MAAa,qBACX,sBACA,mBACA,kBAAmC,WACL;AAC9B,WAAO,KAAK,SAAS;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,SACX,iBACA,iBACuB;AACvB,WAAO,KAAK,SAAS,SAAS,iBAAiB,eAAe;AAAA,EAChE;AAAA,EAEA,MAAa,aACX,iBACA,KACA,kBAAmC,WACZ;AACvB,WAAO,KAAK,SAAS,aAAa,iBAAiB,KAAK,eAAe;AAAA,EACzE;AAAA,EAEA,MAAa,eAAe,QAAuD;AACjF,WAAO,KAAK,SAAS,eAAe,MAAM;AAAA,EAC5C;AAAA,EAEA,MAAa,sBAAsB,QAA8D;AAC/F,WAAO,KAAK,SAAS,sBAAsB,MAAM;AAAA,EACnD;AAAA,EAEA,MAAa,aACX,SACA,kBAAmC,WACJ;AAC/B,WAAO,KAAK,SAAS,aAAa,SAAS,eAAe;AAAA,EAC5D;AAAA,EAEA,MAAa,eACX,oBACA,SACiC;AACjC,WAAO,KAAK,SAAS,eAAe,oBAAoB,OAAO;AAAA,EACjE;AAAA,EAKA,MAAa,eACX,SACA,SACiC;AACjC,WAAO,KAAK,SAAS,eAAe,SAAS,OAAO;AAAA,EACtD;AAAA,EAEA,MAAa,sBACX,SACA,SACiC;AACjC,WAAO,KAAK,SAAS,sBAAsB,SAAS,OAAO;AAAA,EAC7D;AAAA,EAEA,MAAa,gBACX,aACA,SACkC;AAClC,WAAO,KAAK,SAAS,gBAAgB,aAAa,OAAO;AAAA,EAC3D;AAAA,EAEA,MAAa,sBACX,aACA,SACA,kBAAmC,WACL;AAC9B,WAAO,KAAK,SAAS,sBAAsB,aAAa,SAAS,eAAe;AAAA,EAClF;AAAA,EAEO,4BACL,aACA,SACA,kBAAmC,WACL;AAC9B,WAAO,KAAK,SAAS,4BAA4B,aAAa,SAAS,eAAe;AAAA,EACxF;AAAA,EAEA,MAAa,QACX,iBACA,iBAC0B;AAC1B,WAAO,KAAK,SAAS,QAAQ,iBAAiB,eAAe;AAAA,EAC/D;AAAA,EAEA,MAAa,mBAAmB,QAAsB,eAAuC;AAC3F,WAAO,KAAK,SAAS,mBAAmB,QAAQ,aAAa;AAAA,EAC/D;AACF;;;AC/JO,IAAe,oBAAf,MAAiC;AA4QxC;;;AC9RO,IAAM,kBAAkB,IAAI,SAAS;;;ApBgB5C,SAAS,UAAU,WAAuB;AACxC,MAAI;AACF,WAAO,KAAK,SAAS;AAAA,EACvB,SAAS,GAAP;AACA,UAAM,MAAM,oBAAoB;AAAA,EAClC;AACF;AAMA,SAAS,UAAU,UAAoB,aAAiD;AACtF,SAAO,kBAAmB,MAAgC;AACxD,WAAO,SAAS,KAAK,YAAY,MAAM,IAAI;AAAA,EAC7C;AACF;AAMA,SAAS,YAAY,UAAoB,aAAiD;AACxF,SAAO,kBAAmB,MAAgC;AACxD,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,eAAe,OAAO,OAAO,CAAC,KAAK,UAAU;AACjD,UAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG;AAC7B,eAAO,MAAM;AAAA,MACf;AACA,aAAO;AAAA,IACT,GAAG,CAAC;AACJ,UAAM,UAAU,CAAC;AACjB,QAAI,eAAe,MAAM,KAAK,UAAU,OAAO,KAAK,KAAK,SAAS,OAAO,UAAU;AACjF,aAAO,OAAO,SAAS,KAAK,IAAI,CAAC;AAAA,IACnC;AACA,WAAO,SAAS,OAAO,YAAY,MAAM,MAAM,OAAO;AAAA,EACxD;AACF;AAMA,SAAS,aAAa,UAAoB,aAAiD;AACzF,MAAI,YAAY,oBAAoB,QAAQ;AAC1C,WAAO,UAAU,UAAU,WAAW;AAAA,EACxC;AACA,SAAO,YAAY,UAAU,WAAW;AAC1C;AAMA,SAAS,cAAc,UAAoB,aAA4C;AACrF,SAAO,YAAa,MAAuB;AACzC,WAAO,SAAS,SAAS,YAAY,MAAM,IAAI;AAAA,EACjD;AACF;AAMA,SAAS,cAAc,UAAoB,aAA4C;AACrF,SAAO,YAAa,MAAuB;AACzC,WAAO,SAAS,SAAS,YAAY,MAAM,IAAI;AAAA,EACjD;AACF;AAEO,IAAM,WAAN,MAA4C;AAAA,EA4BjD,YACE,KACA,SACA,oBAA0D,iBAC1D;AACA,SAAK,UAAU,WAAW,QAAQ,YAAY;AAC9C,SAAK,oBAAoB;AACzB,SAAK,MAAM;AACX,SAAK,UAAU,IACZ,OAAO,CAAC,aAAa,SAAS,SAAS,QAAQ,EAC/C;AAAA,MACC,CAAC,KAAK,cAAc;AAAA,QAClB,GAAG;AAAA,QACH,CAAC,SAAS,OAAO;AAAA,MACnB;AAAA,MACA,CAAC;AAAA,IACH;AAEF,WAAO,eAAe,MAAM,aAAa;AAAA,MACvC,YAAY;AAAA,MACZ,OAAO,CAAC;AAAA,MACR,UAAU;AAAA,IACZ,CAAC;AACD,WAAO,eAAe,MAAM,cAAc;AAAA,MACxC,YAAY;AAAA,MACZ,OAAO,CAAC;AAAA,MACR,UAAU;AAAA,IACZ,CAAC;AACD,WAAO,eAAe,MAAM,uBAAuB;AAAA,MACjD,YAAY;AAAA,MACZ,OAAO,CAAC;AAAA,MACR,UAAU;AAAA,IACZ,CAAC;AACD,WAAO,eAAe,MAAM,eAAe;AAAA,MACzC,YAAY;AAAA,MACZ,OAAO,CAAC;AAAA,MACR,UAAU;AAAA,IACZ,CAAC;AACD,SAAK,IAAI,QAAQ,CAAC,eAAe;AAC/B,UAAI,WAAW,SAAS,YAAY;AAClC;AAAA,MACF;AACA,YAAM,YAAY,WAAW;AAC7B,UAAI,CAAC,KAAK,YAAY;AACpB,eAAO,eAAe,MAAM,WAAW;AAAA,UACrC,YAAY;AAAA,UACZ,OAAO,aAAa,MAAM,UAAU;AAAA,UACpC,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,UAAI,CAAC,KAAK,UAAU,YAAY;AAC9B,eAAO,eAAe,KAAK,WAAW,WAAW;AAAA,UAC/C,YAAY;AAAA,UACZ,OAAO,aAAa,MAAM,UAAU;AAAA,UACpC,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAEA,UAAI,CAAC,KAAK,WAAW,YAAY;AAC/B,eAAO,eAAe,KAAK,YAAY,WAAW;AAAA,UAChD,YAAY;AAAA,UACZ,OAAO,UAAU,MAAM,UAAU;AAAA,UACjC,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAEA,UAAI,CAAC,KAAK,oBAAoB,YAAY;AACxC,eAAO,eAAe,KAAK,qBAAqB,WAAW;AAAA,UACzD,YAAY;AAAA,UACZ,OAAO,cAAc,MAAM,UAAU;AAAA,UACrC,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAEA,UAAI,CAAC,KAAK,YAAY,YAAY;AAChC,eAAO,eAAe,KAAK,aAAa,WAAW;AAAA,UACjD,YAAY;AAAA,UACZ,OAAO,cAAc,MAAM,UAAU;AAAA,UACrC,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEO,OAAO,SAAuB;AACnC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEO,QAAQ,mBAAyD;AACtE,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EAEA,MAAa,WAA8B;AACzC,QAAI,KAAK,uBAAuB;AAC9B,YAAM,KAAK,kBAAkB,mBAAmB,KAAK,qBAAqB;AAC1E,WAAK,wBAAwB;AAAA,IAC/B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,KACX,QACA,OAAmB,CAAC,GACpB;AAAA,IACE,kBAAkB;AAAA,EACpB,IAEI,CAAC,GACY;AAEjB,oCAAAC,SAAO,KAAK,YAAY,MAAM,yCAAyC;AAGvE,SAAK,sBAAsB,QAAQ,QAAQ,IAAI;AAC/C,UAAM,EAAE,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS,MAAM;AAG7D,UAAM,WAAW,KAAK,gBAAgB,MAAM,MAAM;AAClD,WAAO,KAAK,kBACT;AAAA,MACC;AAAA,QACE,iBAAiB,KAAK;AAAA,QACtB;AAAA,QACA,YAAY;AAAA,MACd;AAAA,MACA;AAAA,IACF,EACC,KAAK,CAAC,MAAM,KAAK,cAAc,QAAQ,EAAE,MAAM,CAAC;AAAA,EACrD;AAAA,EAEO,OACL,QACA,OAAmB,CAAC,GACpB,UAAqB,CAAC,GACW;AAEjC,oCAAAA,SAAO,KAAK,YAAY,MAAM,yCAAyC;AAEvE,SAAK,sBAAsB,UAAU,QAAQ,IAAI;AAEjD,UAAM,EAAE,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS,MAAM;AAC7D,UAAM,eAAe,OAAO,OAAO,CAAC,KAAK,UAAU;AACjD,UAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG;AAC7B,eAAO,MAAM;AAAA,MACf;AACA,aAAO;AAAA,IACT,GAAG,CAAC;AAEJ,QAAI,KAAK,WAAW,cAAc;AAChC,YAAM;AAAA,QACJ,yCAAyC,mCAAmC,KAAK;AAAA,MACnF;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,gBAAgB,MAAM,MAAM;AAElD,UAAM,aAAa;AAAA,MACjB,iBAAiB,KAAK;AAAA,MACtB;AAAA,MACA,YAAY;AAAA,IACd;AACA,QAAI,aAAa,KAAK,mBAAmB;AACvC,aAAO,KAAK,kBAAkB,QAAQ,YAAY,QAAW;AAAA,QAC3D,QAAQ,QAAQ;AAAA,QAChB,OAAO,QAAQ;AAAA,MACjB,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,QAAQ,OAAO;AAClB,YAAM,IAAI,MAAM,+DAA+D;AAAA,IACjF;AAGA,YAAQ,KAAK,YAAY,iEAAiE;AAE1F,WAAO,KAAK,kBAAkB;AAAA,MAC5B;AAAA,QACE,GAAG;AAAA,QACH,WAAW,QAAQ,aAAa,CAAC;AAAA,MACnC;AAAA,MACA;AAAA,QACE,OAAO,QAAQ;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,SAAS,QAAgB,OAAmB,CAAC,GAAG;AAE3D,oCAAAA,SAAO,KAAK,YAAY,MAAM,yCAAyC;AAGvE,SAAK,sBAAsB,UAAU,QAAQ,IAAI;AACjD,UAAM,aAAa,KAAK,oBAAoB,QAAQ,GAAG,IAAI;AAC3D,QAAI,uBAAuB,KAAK,mBAAmB;AACjD,aAAO,KAAK,kBAAkB,kBAAkB,UAAU;AAAA,IAC5D;AACA,UAAM,MAAM,gEAAgE;AAAA,EAC9E;AAAA,EAEO,SAAS,QAAgB,OAAmB,CAAC,GAAS;AAC3D,UAAM,EAAE,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS,MAAM;AAC7D,WAAO;AAAA,MACL,iBAAiB,KAAK;AAAA,MACtB,YAAY;AAAA,MACZ,UAAU,KAAK,gBAAgB,MAAM,MAAM;AAAA,IAC7C;AAAA,EACF;AAAA,EAQQ,uBAAuB,QAAwB;AACrD,WAAO,KAAK,QAAQ,QAAQ,QAAQ,OAAO,CAAC,KAAK,WAAW;AAC1D,UAAI,OAAO,SAAS,QAAQ;AAC1B,eAAO,MAAM;AAAA,MACf;AACA,aAAO,MAAM,KAAK,uBAAuB,OAAO,IAAI;AAAA,IACtD,GAAG,CAAC;AAAA,EACN;AAAA,EASU,sBAAsB,MAAyB,QAAgB,OAAmB,CAAC,GAAG;AAE9F,UAAM,0BAA0B,KAAK,IAClC,OAAO,CAAC,QAAQ;AACf,UAAI,IAAI,SAAS;AAAY,eAAO;AACpC,YAAM,SAAS,IAAI,oBAAoB;AACvC,aAAO,SAAS,WAAW,CAAC,SAAS;AAAA,IACvC,CAAC,EACA,IAAI,CAAC,QAAQ,IAAI,IAAI;AACxB,oCAAAA;AAAA,MACE,wBAAwB,SAAS,MAAM;AAAA,MACvC,GAAG,SAAS,WAAW,eAAe;AAAA,IACxC;AAGA,UAAM,YAAY,KAAK,IAAI;AAAA,MACzB,CAAC,QAAQ,IAAI,SAAS,UAAU,IAAI,SAAS;AAAA,IAC/C;AACA,QAAI,cAAc;AAClB,cAAU,OAAO,QAAQ,CAAC,UAAU;AAClC,UAAI,QAAQ,KAAK,MAAM,IAAI,GAAG;AAC5B;AAAA,MACF;AACA,UAAI,MAAM,SAAS,QAAQ;AACzB,wCAAAA;AAAA,UACE,OAAO,KAAK,iBAAiB,YAC3B,OAAO,KAAK,iBAAiB,YAC7B,KAAK,wBAAwB,WAAAC;AAAA,UAC/B,OAAO,MAAM;AAAA,QACf;AACA,uBAAe;AAAA,MACjB,WAAW,MAAM,QAAQ,KAAK,WAAW,OAAO,KAAK,iBAAiB,UAAU;AAC9E,YAAI,MAAM,QAAQ,KAAK,YAAY,GAAG;AACpC,gBAAM,sBAAsB,KAAK,uBAAuB,MAAM,IAAI;AAClE,0CAAAD;AAAA,YACE,KAAK,aAAa,WAAW;AAAA,YAC7B,2BAA2B;AAAA,UAC7B;AAAA,QACF,OAAO;AACL,eAAK,QAAQ,MAAM,MAAM,QAAQ,QAAQ,CAAC,EAAE,KAAK,MAAM;AACrD,4CAAAA;AAAA,cACE,OAAO,KAAK,KAAK,YAAY,EAAE,SAAS,IAAI;AAAA,cAC5C,8BAA8B;AAAA,YAChC;AAAA,UACF,CAAC;AAAA,QACH;AACA,uBAAe;AAAA,MACjB,OAAO;AACL,wCAAAA,SAAO,MAAM,QAAQ,KAAK,YAAY,GAAG,OAAO,MAAM,yBAAyB;AAC/E,YAAI,MAAM,SAAS,SAAS;AAC1B,eAAK,aAAa,QAAQ,CAAC,SAAuB;AAChD,4CAAAA;AAAA,cACE,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY,gBAAgB,WAAAC;AAAA,cACxE,OAAO,MAAM;AAAA,YACf;AAAA,UACF,CAAC;AACD,yBAAe;AAAA,QACjB,WAAW,SAAS,KAAK,MAAM,IAAI,GAAG;AACpC,gBAAM,cAAc,MAAM,KAAK,MAAM,GAAG,EAAE;AAC1C,0CAAAD;AAAA,YACE,KAAK,aAAa,WAAW;AAAA,YAC7B,OAAO,MAAM,oBAAoB;AAAA,UACnC;AACA,eAAK,aAAa,QAAQ,CAAC,SAAuB;AAChD,4CAAAA;AAAA,cACE,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY,gBAAgB,WAAAC;AAAA,cACxE,OAAO,MAAM;AAAA,YACf;AAAA,UACF,CAAC;AACD,yBAAe;AAAA,QACjB,OAAO;AACL,gBAAM,YAAY,MAAM,KAAK,QAAQ,KAAK,EAAE;AAC5C,eAAK,aAAa,QAAQ,CAAC,WAAgB;AACzC,iBAAK,QAAQ,WAAW,QAAQ,QAAQ,CAAC,EAAE,KAAK,MAAM;AACpD,kBAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,sBAAM,sBAAsB,KAAK,uBAAuB,SAAS;AACjE,gDAAAD;AAAA,kBACE,OAAO,WAAW;AAAA,kBAClB,2BAA2B;AAAA,gBAC7B;AAAA,cACF,OAAO;AACL,gDAAAA;AAAA,kBACE,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI;AAAA,kBACjC,OAAO,MAAM,8BAA8B;AAAA,gBAC7C;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH,CAAC;AACD,yBAAe;AAAA,QACjB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAUU,mBACR,SACA,MACmB;AACnB,QAAI,YAAY,QAAW;AACzB,YAAM,MAAM,6BAA6B;AAAA,IAC3C;AACA,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,YAAM,kBAAkB,KAAK,uBAAuB,IAAI;AACxD,UAAI,QAAQ,WAAW,iBAAiB;AACtC,cAAM,MAAM,6BAA6B;AAAA,MAC3C;AACA,aAAO,QAAQ,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC;AAAA,IACvC;AAEA,QAAI,KAAK,QAAQ,SAAS,KAAK,QAAQ,MAAM,QAAQ,QAAQ;AAE3D,aAAO,KAAK,QAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,WAAqB;AAIlE,cAAM,aAAa,KAAK,mBAAmB,QAAQ,OAAO,OAAO,OAAO,IAAI;AAC5E,YAAI,OAAO,eAAe,UAAU;AAClC,cAAI,KAAK,UAAU;AAAA,QACrB,OAAO;AACL,cAAI,KAAK,GAAG,UAAU;AAAA,QACxB;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAa;AAAA,IACnB;AACA,WAAO,OAAO,OAAuB;AAAA,EACvC;AAAA,EASU,oBACR,kBACA,MAC6B;AAE7B,QAAI,QAAQ,KAAK,WAAW,KAAK,QAAQ,OAAO;AAC9C,aAAO,KAAK,QAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,OAAO;AAEpD,YAAI,GAAG,QAAQ,KAAK,oBAAoB,kBAAkB,GAAG,IAAI;AACjE,eAAO;AAAA,MACT,GAAG,CAAC,CAAQ;AAAA,IACd;AACA,WAAO,UAAU,iBAAiB,KAAK,EAAE,KAAK;AAAA,EAChD;AAAA,EASU,mBAAmB,cAA6B,OAAoC;AAC5F,UAAM,EAAE,MAAM,KAAK,IAAI;AACvB,UAAM,EAAE,MAAM,IAAI,aAAa,KAAK;AAEpC,UAAM,iBAA2B,CAAC;AAClC,YAAQ,MAAM;AAAA,MACZ,KAAK,KAAK,KAAK,IAAI;AACjB,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,yBAAe,KAAK,OAAO,MAAM,MAAM,CAAC;AACxC,iBAAQ,MAA0C,OAAO,CAAC,KAAK,OAAO;AACpE,gBAAI,OAAO,KAAK,IAAI,GAAG;AACrB,kBAAI,KAAK,OAAO,EAAkB,CAAC;AAAA,YACrC,OAAO;AACL,kBAAI,KAAK,GAAG,KAAK,mBAAmB,IAAI,KAAK,QAAQ,KAAK,EAAE,CAAC,CAAC;AAAA,YAChE;AACA,mBAAO;AAAA,UACT,GAAG,cAAc;AAAA,QACnB;AACA,cAAM,MAAM,YAAY,kBAAkB;AAAA,MAC5C,KAAK,QAAQ,KAAK;AAChB,eAAO,KAAK,mBAAmB,OAAwC,IAAI;AAAA,MAC7E,KAAK,SAAS,KAAK,IAAI;AACrB,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAO,MAAM,IAAI,CAAC,OAAO,OAAO,EAAkB,CAAC;AAAA,QACrD;AACA,cAAM,MAAM,YAAY,kBAAkB;AAAA,MAC5C;AACE,eAAO,OAAO,KAAqB;AAAA,IACvC;AAAA,EACF;AAAA,EASU,gBAAgB,MAAkB,QAA8B;AACxE,UAAM,eAAe,KAAK,OAAO,UAAU;AAC3C,WAAO,OAAO,OAAO,CAAC,KAAK,UAAU;AACnC,UAAI,QAAQ,KAAK,MAAM,IAAI,GAAG;AAC5B,eAAO;AAAA,MACT;AACA,YAAM,aAAa,KAAK,mBAAmB,cAAc,KAAK;AAC9D,UAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,YAAI,KAAK,GAAG,UAAU;AAAA,MACxB,OAAO;AACL,YAAI,KAAK,UAAU;AAAA,MACrB;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAa;AAAA,EACnB;AAAA,EASU,mBACR,kBACA,QACA,cACK;AACL,UAAM,EAAE,MAAM,KAAK,IAAI;AACvB,UAAM,gBAAiD,CAAC;AACxD,YAAQ,MAAM;AAAA,MACZ,KAAK,QAAQ,KAAK,IAAI;AACpB,eAAO,UAAU,iBAAiB,KAAK,EAAE,KAAK,EAAE,SAAS;AAAA,MAC3D,KAAK,SAAS,KAAK,IAAI;AACrB,eAAO,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,QAAQ;AACrC,cAAI,KAAK,UAAU,iBAAiB,KAAK,EAAE,KAAK,CAAC;AACjD,iBAAO;AAAA,QACT,GAAG,CAAC,CAAmB;AAAA,MACzB,KAAK,KAAK,KAAK,IAAI;AACjB,YAAI,gBAAgB,aAAa,GAAG,aAAa;AAC/C,gBAAM,SAAS,aAAa,GAAG;AAC/B,iBAAO,cAAc,SAAS,QAAQ;AACpC,0BAAc;AAAA,cACZ,KAAK,oBAAoB,kBAAkB,OAAO,KAAK,QAAQ,KAAK,EAAE,CAAC;AAAA,YACzE;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT,KAAK,QAAQ,KAAK;AAChB,eAAO,KAAK,oBAAoB,kBAAkB,IAAI;AAAA,MACxD;AACE,eAAO,UAAU,iBAAiB,KAAK,EAAE,KAAK;AAAA,IAClD;AAAA,EACF;AAAA,EASU,cAAc,QAAgB,UAA4B;AAClE,UAAM,EAAE,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS,MAAM;AAC9D,UAAM,mBAAmB,SAAS,KAAK,EAAE,OAAO,UAAU;AAC1D,UAAM,eAAe,QAAQ,KAAK,EAAE,OAAO,CAAC,KAAK,WAAW;AAC1D,UAAI,OAAO,QAAQ,KAAK,mBAAmB,kBAAkB,QAAQ,GAAG;AACxE,UAAI,IAAI,OAAO,SAAS,IAAI,GAAG,OAAO,aAAa;AACjD,eAAO,IAAI,GAAG,OAAO;AAAA,MACvB;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAS;AACb,WAAO,OAAO,QAAQ,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AAChE,UAAI,KAAK,KAAK;AACd,UAAI,OAAO;AACX,aAAO;AAAA,IACT,GAAG,CAAC,CAAW;AAAA,EACjB;AACF;;;AqB3mBO,IAAe,oBAAf,MAAiC;AA8FxC;;;AC3GA,IAAAE,8BAAmB;AAOZ,IAAM,kBAAN,MAAsB;AAAA,EAO3B,YACE,kBACA,oBAA0D,iBAC1D,MAAW,iBAAiB,KAC5B;AACA,SAAK,MAAM;AACX,SAAK,mBAAmB;AACxB,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EASA,MAAa,OACX,qBACA,aACmB;AACnB,UAAM,EAAE,kBAAkB,iBAAiB,IAAI,MAAM,KAAK,kBAAkB,eAAe;AAAA,MACzF,UAAU,KAAK;AAAA,MACf;AAAA,MACA;AAAA,IACF,CAAC;AACD,oCAAAC,SAAO,QAAQ,gBAAgB,GAAG,mCAAmC;AAErE,UAAM,mBAAmB,IAAI;AAAA,MAC3B,KAAK,iBAAiB;AAAA,MACtB;AAAA,MACA,KAAK;AAAA,IACP;AACA,qBAAiB,wBAAwB;AAEzC,WAAO;AAAA,EACT;AAAA,EAOA,QAAQ,mBAA0E;AAChF,SAAK,oBAAoB;AACzB,WAAO;AAAA,EACT;AAAA,EAQA,OAAO,SAA2B;AAChC,WAAO,IAAI,SAAS,KAAK,KAAK,SAAS,KAAK,iBAAiB;AAAA,EAC/D;AAGF;;;ACzEA;;;ACIO,IAAe,kBAAf,MAA+B;AAkEtC;;;ACtEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,IAAM,kCAAkC,CAAC,UAAkB;AAChE,QAAM,YAA4B,CAAC;AACnC,QAAM,WAA2B,CAAC;AAClC,QAAM,QAAQ,CAAC,SAAS;AACtB,UAAM,OAAO,KAAK,YAAY,CAAC;AAC/B,cAAU,KAAK;AAAA,MACb,IAAI,KAAK,KAAK,eAAe,EAAE,SAAS,EAAE;AAAA,MAC1C,UAAU,KAAK,oBAAoB,KAAK,UAAU,CAAC,EAAE,SAAS,EAAE;AAAA,MAChE,aAAa,SAAS,OAAO,SAAS;AAAA,MACtC,UAAU,KAAK,OAAO,SAAS;AAAA,IACjC,CAAC;AACD,aAAS,KAAK,GAAG,IAAI;AAAA,EACvB,CAAC;AACD,SAAO;AAAA,IACL;AAAA,IACA,UAAU,sCAAsC,QAAQ;AAAA,EAC1D;AACF;AAQO,IAAM,6BAA6B,CAAC,UAA4B;AACrE,QAAM,EAAE,WAAW,SAAS,IAAI,gCAAgC,KAAK;AACrE,SAAO;AAAA,IACL,UAAU,OAAO,SAAS;AAAA,IAC1B,GAAG,UACA;AAAA,MACC,CAAC,EAAE,IAAI,UAAU,aAAa,SAAS,MACrC,CAAC,IAAI,UAAU,aAAa,QAAQ;AAAA,IACxC,EACC,KAAK;AAAA,IACR,SAAS,OAAO,SAAS;AAAA,IACzB,GAAG;AAAA,EACL;AACF;AAEO,IAAM,sCAAsC,CACjD,OACA,UACa;AACb,SAAO,CAAC,GAAG,2BAA2B,KAAK,GAAG,KAAK,KAAK,EAAE,SAAS,CAAC;AACtE;;;ACvDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAGO,IAAM,aAAN,MAAiB;AAAA,EAOtB,YAAY,YAAsB;AAJlC,SAAO,WAAuB,CAAC;AAK7B,SAAK,SAAS;AACd,SAAK,OAAO,KAAK,MAAM,UAAU;AAAA,EACnC;AAAA,EAEQ,MAAM,QAA0B;AACtC,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO,OAAO;AAAA,IAChB;AACA,QAAI,OAAO,WAAW,KAAK,OAAO,QAAQ;AACxC,WAAK,SAAS,KAAK,MAAM;AAAA,IAC3B;AACA,UAAM,YAAY,CAAC;AACnB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACzC,UAAI,IAAI,MAAM,OAAO,QAAQ;AAC3B,kBAAU,KAAK,WAAW,KAAK,OAAO,IAAI,KAAK,CAAC;AAAA,MAClD,OAAO;AACL,kBAAU,KAAK,WAAW,KAAK,OAAO,IAAI,OAAO,IAAI,EAAE,CAAC;AAAA,MAC1D;AAAA,IACF;AACA,WAAO,KAAK,MAAM,SAAS;AAAA,EAC7B;AAAA,EAEA,OAAO,KAAK,GAAW,GAAW;AAChC,UAAM,CAAC,SAAS,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAQ,MAAY,EAAE,IAAI,CAAC,IAAI,IAAI,EAAG;AAC1F,WAAO,SAAS,CAAC,SAAS,OAAO,CAAC;AAAA,EACpC;AAAA,EAEO,SAAS,MAAc,SAAS,KAAK,QAAQ,WAAqB,CAAC,GAAa;AACrF,UAAM,QAAQ,OAAO,QAAQ,IAAI;AACjC,QAAI,UAAU,IAAI;AAChB,YAAM,IAAI,MAAM,gBAAgB;AAAA,IAClC;AACA,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,QAAQ,MAAM;AAC7B,UAAM,gBAAgB,SAAS,OAAO,QAAQ,KAAK,OAAO,QAAQ,OAAO;AACzE,UAAM,cAAc,CAAC,GAAG,UAAU,YAAY;AAC9C,UAAM,0BACJ,KAAK,OAAO,WAAW,OAAO,SAC1B,KACA,KAAK,SAAS,UAAU,CAAC,MAAM,EAAE,WAAW,OAAO,MAAM;AAC/D,UAAM,aAAa,KAAK,SAAS,0BAA0B,MAAM,CAAC,KAAK,IAAI;AAC3E,WAAO,KAAK;AAAA,MACV,WAAW,KAAK,SAAS,OAAO,cAAc,SAAS,eAAe,IAAI;AAAA,MAC1E;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,gBAAgB,MAAc,MAAc,MAAyB;AACnF,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO,SAAS;AAAA,EAClB;AACA,QAAM,CAAC,SAAS,IAAI,IAAI;AACxB,SAAO,gBAAgB,MAAM,WAAW,KAAK,MAAM,IAAI,GAAG,IAAI;AAChE;;;ACpEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,QAAQ,KAAa;AAEnC,SAAO,iBAAiB,KAAK,GAAG;AAClC;AAGO,SAAS,cAAc,KAAa;AACzC,SAAO,IAAI,UAAU;AACvB;AAEO,SAAS,kBAAkB,KAAa;AAC7C,MAAI,CAAC,QAAQ,GAAG;AAAG,UAAM,IAAI,MAAM,GAAG,4BAA4B;AAClE,MAAI,CAAC,cAAc,GAAG;AAAG,UAAM,IAAI,MAAM,GAAG,iBAAiB;AAC7D,SAAO,aAAa,IAAI,QAAQ,MAAM,CAAC,SAAS,KAAK,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AAClF;AAEO,SAAS,kBAAkB,KAAa;AAC7C,SAAO,gBAAgB,GAAG,EAAE,QAAQ,SAAS,CAAC,QAAQ,OAAO,aAAa,SAAS,KAAK,EAAE,CAAC,CAAC;AAC9F;;;ACZO,IAAM,oBAAoB,CAAC,SAAqC;AACrE,QAAM,YAAY;AAGlB,QAAM,QAAQ,QAAQ,UAAU,SAAS,UAAU,eAAe,UAAU,OAAO;AAEnF,SAAO;AACT;;;AHNA,SAAS,OAAO,OAA6B;AAC3C,MAAI;AACF,WAAO,MAAM,KAAK,KAAK,CAAC;AAAA,EAC1B,SAAS,GAAP;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,MAAM,KAAK,kBAAkB,KAAK,CAAC,CAAC;AAAA,IAC7C;AACA,UAAM,IAAI,MAAM,yBAAyB,OAAO;AAAA,EAClD;AACF;AAEO,SAAS,gBAAgB,UAA0B;AACxD,SAAO,MAAM,QAAQ,IAAI,WAAW,oBAAoB,QAAQ;AAClE;AAEO,SAAS,iBAAiB,MAAgD;AAC/E,SAAO,KAAK,SAAS;AACvB;AAgBO,IAAM,kBAAkB,CAC7B,OACA,MACA,eAAyB,CAAC,MACb;AAEb,MAAI,KAAK,KAAK,SAAS,OAAO,KAAK;AAEjC,WAAO,KAAK,MAAM,GAAG,EAAE;AAAA,EACzB;AAEA,MAAI,aAAa,SAAS,IAAI,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,MAAM,OAAO;AAChB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA,GAAG,MAAM,MAAM;AAAA,MACb,CAAC,UAAU,MAAM;AAAA,QACf,GAAG;AAAA,QACH,GAAG,gBAAgB,OAAO,EAAE,MAAM,QAAQ,EAAE;AAAA,UAC1C,CAAC,eAAe,CAAC,SAAS,SAAS,UAAU;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,OAA2B,KAAc;AAClE,MAAI,IAAI,UAAU,IAAI,KAAK;AACzB,UAAM,aAAa,MAAM,IAAI;AAC7B,UAAM,aAAa,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG;AAC5D,UAAM,eAAe,iBAAiB,UAAU;AAChD,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI,MAAM,GAAG,IAAI,0BAA0B;AAAA,IACnD;AACA,QAAI,WAAW,SAAS,SAAS,GAAG,GAAG;AACrC,YAAM,IAAI,MAAM,mEAAmE,IAAI,KAAK;AAAA,IAC9F;AACA,WAAO,WAAW;AAAA,EACpB;AACA,SAAO;AACT;AASO,IAAM,aAAa,CAAC,OAA2B,SAAyB;AAC7E,QAAM,CAAC,YAAY,YAAY,IAAI,gBAAgB,OAAO,IAAI;AAC9D,QAAM,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,GAAG,aAAa,KAAK,CAAC;AAEjE,SAAO,SACJ,IAAI,CAAC,eAAe;AACnB,WAAO,GAAG,cAAc,MAAM,YAAY,IAAI,CAAC,MAAM,GAAG,EAAE,QAAQ,EAAE,MAAM;AAAA,EAC5E,CAAC,EACA,KAAK,EAAE;AACZ;AASO,IAAM,cAAc,CAAC,OAA2B,SAAyB;AAC9E,SAAO,oBAAoB,WAAW,OAAO,IAAI,CAAC;AACpD;AAWO,IAAM,cAAc,CACzB,OACA,MACA,MACA,MAAe,CAAC,MACK;AACrB,MAAI,MAAM,OAAO;AAEf,WAAO,CAAC,MAAM,cAAc,OAAO,MAAM,IAA+B,CAAC;AAAA,EAC3E;AAEA,MACE,OAAO,KAAK,KAAK,EACd,IAAI,CAAC,MAAM,GAAG,IAAI,EAClB,SAAS,IAAI,GAChB;AACA,UAAM,eAA0B,KAAmB,IAAI,CAAC,WAAW;AAEjE,aAAO,cAAc,OAAO,KAAK,MAAM,GAAG,EAAE,GAAG,MAAiC;AAAA,IAClF,CAAC;AACD,WAAO,CAAC,MAAM,sBAAsB,YAAY,CAAC;AAAA,EACnD;AAEA,MAAI,SAAS,cAAc;AACzB,UAAM,iBAAiB,kBAAkB,OAAO,GAAG;AACnD,UAAM,eAA0B,KAAmB,IAAI,CAAC,WAAW;AAEjE,aAAO,YAAY,OAAO,gBAAgB,MAAiC,EAAE;AAAA,IAC/E,CAAC;AACD,UAAM,EAAE,KAAK,IAAI,IAAI,WAAW,YAAwB;AACxD,WAAO,CAAC,QAAQ,IAAI;AAAA,EACtB;AAEA,MAAI,SAAS,SAAS;AACpB,WAAO,CAAC,SAAS,sBAAsB,IAAgB,CAAC;AAAA,EAC1D;AAEA,MAAI,SAAS,YAAY;AACvB,WAAO,CAAC,QAAQ,gBAAgB,IAAc,CAAC;AAAA,EACjD;AAEA,SAAO,CAAC,MAAM,OAAO,IAAc,CAAC;AACtC;AAUO,IAAM,aAAa,CACxB,OACA,MACA,SACG;AACH,QAAM,CAAC,aAAa,MAAM,IAAI,MAAM,MAAM;AAAA,IACxC,CAAC,CAAC,IAAI,EAAE,GAAG,UAAU;AACnB,UAAI,KAAK,MAAM,UAAU,UAAa,KAAK,MAAM,UAAU,MAAM;AAC/D,cAAM,IAAI,MAAM,yCAAyC,MAAM,OAAO;AAAA,MACxE;AAEA,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,CAAC,GAAG,YAAY,IAAI,YAAY,OAAO,MAAM,MAAM,OAAO;AAAA,QAC9D,QAAQ;AAAA,QACR,KAAK,MAAM;AAAA,MACb,CAAC;AAED,aAAO;AAAA,QACL,CAAC,GAAG,IAAI,CAAC;AAAA,QACT,CAAC,GAAG,IAAI,YAAY;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,CAAC,MAAM,GAAG,CAAC,YAAY,OAAO,IAAI,CAAC,CAAC;AAAA,EACvC;AAEA,SAAO,CAAC,aAAa,MAAM;AAC7B;AAWO,IAAM,gBAAgB,CAC3B,OACA,MACA,SACG;AACH,SAAO,sBAAsB,WAAW,OAAO,MAAM,IAAI,EAAE,EAAE;AAC/D;AASO,IAAM,iBAAiB,CAAC,WAAsB,YAAkC;AACrF,MAAI,CAAC,kBAAkB,SAAS,GAAG;AACjC,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AAEA,QAAM,UAAU;AAAA,IACd,kBAAkB,kBAAkB;AAAA,IACpC,cAAc,UAAU,OAAO,kBAAkB,UAAU,MAAM;AAAA,IACjE;AAAA,IACA,cAAc,UAAU,OAAO,UAAU,aAAa,UAAU,OAAO;AAAA,EACzE;AAEA,SAAO,sBAAsB,OAAO;AACtC;;;AInOO,IAAM,SAAN,MAAwC;AAAA,EAG7C,YAAY,UAAmB,WAAW,GAAG;AAC3C,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAa,YAA6B;AACxC,WAAO,YAAY,KAAK,OAAO;AAAA,EACjC;AAAA,EAEA,MAAa,YAAY,WAAsB,gBAA4C;AACzF,UAAM,UAAU,eAAe,WAAW,cAAc;AACxD,WAAO,KAAK,KAAK,SAAS,OAAO;AAAA,EACnC;AAAA,EAEA,MAAa,gBACX,cACA,oBACA,MACoB;AACpB,QAAI,QAAQ,KAAK,WAAW,aAAa,QAAQ;AAC/C,YAAM,IAAI,MAAM,6DAA6D;AAAA,IAC/E;AAGA,UAAM,WAAW,2BAA2B,YAAY;AAExD,UAAM,UAAU;AAAA,MACd,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB;AAAA,MACA,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,IACrB;AAEA,WAAO,KAAK,KAAK,SAAS,OAAO;AAAA,EACnC;AAAA,EAEA,MAAa,6BAA6B;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA+B;AAC7B,UAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,KAAK,KAAK,SAAS,OAAO;AAAA,EACnC;AAAA,EAEA,MAAa,uBAEX,EAAE,WAAW,eAAe,SAAS,QAAQ,SAAS,MAAM,GAC5D;AACA,UAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,KAAK,KAAK,SAAS,OAAO;AAAA,EACnC;AACF;;;AC9DO,IAAM,UAAN,cAAsB,SAAqC;AAAA,EAKhE,YACE,mBACA,SACA,iBACA;AACA,UAAM,iBAAiB;AACvB,SAAK,UAAU,QAAQ,YAAY;AACnC,SAAK,SACH,eAAe,kBAAkB,kBAAkB,IAAI,OAAO,eAA0B;AAAA,EAC5F;AAAA,EAEA,MAAa,SAAS,iBAA0D;AAC9E,WAAO,MAAM,SAAS,KAAK,SAAS,eAAe;AAAA,EACrD;AAAA,EAEA,MAAa,YACX,OACA,oBACsB;AACtB,WAAO,KAAK,kBAAkB,OAAO,kBAAkB;AAAA,EACzD;AAAA,EAEA,MAAa,kBACX,OACA,EAAE,OAAO,eAAe,gBAAgB,IAAwB,CAAC,GAC3C;AACtB,UAAM,eAAe,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAC1D,UAAM,QAAQ,KAAK,iBAAkB,MAAM,KAAK,SAAS,CAAE;AAC3D,UAAM,UAAU,KAAK,qBAAqB;AAC1C,UAAM,UAAU,MAAM,KAAK,WAAW;AAEtC,UAAM,gBAA0C;AAAA,MAC9C,eAAe,KAAK;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAEA,UAAM,YAAY,MAAM,KAAK,OAAO,gBAAgB,cAAc,aAAa;AAE/E,UAAM,WAAW,2BAA2B,YAAY;AACxD,UAAM,WAAW,MAAM,MAAM;AAAA,MAC3B,EAAE,iBAAiB,KAAK,SAAS,UAAU,UAAU;AAAA,MACrD,EAAE,SAAS,MAAM;AAAA,MACjB;AAAA,IACF;AAEA,UAAM,kBAAkB,qBAAqB,SAAS,WAAW;AAEjE,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,mBACX,EAAE,WAAW,SAAS,GACtB,EAAE,iBAAiB,OAAO,cAAc,IAAwB,CAAC,GAC3C;AACtB,UAAM,QAAQ,KAAK,iBAAkB,MAAM,KAAK,SAAS,CAAE;AAC3D,UAAM,UAAU,KAAK,qBAAqB;AAC1C,UAAM,UAAU,MAAM,KAAK,WAAW;AACtC,UAAM,qBAAqB,cAAc,QAAQ;AAEjD,UAAM,YAAY,MAAM,KAAK,OAAO,uBAAuB;AAAA,MACzD;AAAA,MACA,eAAe,KAAK;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,WAAW,MAAM,MAAM;AAAA,MAC3B,EAAE,eAAe,KAAK,SAAS,WAAW,mBAAmB;AAAA,MAC7D,EAAE,SAAS,MAAM;AAAA,MACjB;AAAA,IACF;AACA,UAAM,kBAAkB,qBAAqB,SAAS,WAAW;AAEjE,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,yBACX;AAAA,IACE;AAAA,IACA,cAAc;AAAA,IACd,sBAAsB,CAAC;AAAA,IACvB,iBAAiB;AAAA,EACnB,GACA,EAAE,iBAAiB,OAAO,cAAc,IAAwB,CAAC,GAC3C;AACtB,UAAM,QAAQ,KAAK,iBAAkB,MAAM,KAAK,SAAS,CAAE;AAC3D,UAAM,UAAU,KAAK,qBAAqB;AAC1C,UAAM,UAAU,MAAM,KAAK,WAAW;AACtC,UAAM,kBACJ,2BACA,iCAAiC,aAAa,WAAW,qBAAqB,CAAC;AAEjF,UAAM,YAAY,MAAM,KAAK,OAAO,6BAA6B;AAAA,MAC/D;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,WAAW,MAAM,MAAM;AAAA,MAC3B,EAAE,WAAW,aAAa,qBAAqB,UAAU;AAAA,MACzD,EAAE,SAAS,MAAM;AAAA,MACjB;AAAA,IACF;AACA,UAAM,kBAAkB,qBAAqB,SAAS,WAAW;AAEjE,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,kBACX;AAAA,IACE;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,sBAAsB,CAAC;AAAA,IACvB,kBAAkB,CAAC;AAAA,EACrB,GACA,oBACsB;AACtB,UAAM,8BAA8B,gBAAgB,mBAAmB;AAEvE,UAAM,aAAa,MAAM,QAAQ,eAAe,IAAI,kBAAkB,CAAC,eAAe;AACtF,WAAO,KAAK;AAAA,MACV;AAAA,QACE;AAAA,UACE,iBAAiB,IAAI;AAAA,UACrB,YAAY,IAAI;AAAA,UAChB,UAAU;AAAA,YACR;AAAA,YACA;AAAA,YACA,YAAY,MAAM;AAAA,YAClB,4BAA4B;AAAA,YAC5B,GAAG;AAAA,UACL;AAAA,QACF;AAAA,QACA,GAAG;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,QACX,OACA,OAA0B,QAC1B,qBAAyC,CAAC,GACT;AACjC,UAAM,eAAe,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAC1D,UAAM,QAAQ,KAAK,mBAAmB,SAAU,MAAM,KAAK,SAAS,CAAE;AACtE,UAAM,SACJ,mBAAmB,UAClB,MAAM,KAAK,mBAAmB,EAAE,MAAM,UAAU,SAAS,MAAM,GAAG,kBAAkB;AACvF,UAAM,UAAU,KAAK,kBAAkB;AACvC,UAAM,UAAU,MAAM,KAAK,WAAW;AAEtC,UAAM,gBAA0C;AAAA,MAC9C,eAAe,KAAK;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,YAAY,MAAM,KAAK,OAAO,gBAAgB,cAAc,eAAe,IAAI;AAErF,UAAM,WAAW,2BAA2B,YAAY;AAExD,WAAO,KAAK;AAAA,MACV,EAAE,iBAAiB,KAAK,SAAS,UAAU,UAAU;AAAA,MACrD;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,QACX,EAAE,WAAW,SAAS,GACtB,qBAAyC,CAAC,GACR;AAClC,UAAM,QAAQ,KAAK,mBAAmB,SAAU,MAAM,KAAK,SAAS,CAAE;AACtE,UAAM,SACJ,mBAAmB,UAClB,MAAM,KAAK;AAAA,MACV,EAAE,MAAM,WAAW,SAAS,EAAE,WAAW,SAAS,EAAE;AAAA,MACpD;AAAA,IACF;AAEF,UAAM,UAAU,KAAK,kBAAkB;AACvC,UAAM,UAAU,MAAM,KAAK,WAAW;AAEtC,UAAM,YAAY,MAAM,KAAK,OAAO,uBAAuB;AAAA,MACzD;AAAA,MACA,eAAe,KAAK;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,qBAAqB,cAAc,QAAQ;AAEjD,WAAO,KAAK;AAAA,MACV,EAAE,oBAAoB,eAAe,KAAK,SAAS,UAAU;AAAA,MAC7D;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,OACX;AAAA,IACE;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,sBAAsB,CAAC;AAAA,IACvB,kBAAkB,CAAC;AAAA,EACrB,GACA,qBAAyC,CAAC,GACT;AACjC,UAAM,8BAA8B,gBAAgB,mBAAmB;AAEvE,UAAM,aAAa,MAAM,QAAQ,eAAe,IAAI,kBAAkB,CAAC,eAAe;AAEtF,WAAO,KAAK;AAAA,MACV;AAAA,QACE;AAAA,UACE,iBAAiB,IAAI;AAAA,UACrB,YAAY,IAAI;AAAA,UAChB,UAAU;AAAA,YACR;AAAA,YACA;AAAA,YACA,YAAY,MAAM;AAAA,YAClB,4BAA4B;AAAA,YAC5B,GAAG;AAAA,UACL;AAAA,QACF;AAAA,QACA,GAAG;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,cACX;AAAA,IACE;AAAA,IACA,sBAAsB,CAAC;AAAA,IACvB,cAAc;AAAA,IACd,iBAAiB;AAAA,EACnB,GACA,qBAAyC,CAAC,GACT;AACjC,UAAM,QAAQ,KAAK,mBAAmB,SAAU,MAAM,KAAK,SAAS,CAAE;AACtE,UAAM,UAAU,KAAK,kBAAkB;AACvC,UAAM,UAAU,MAAM,KAAK,WAAW;AAEtC,UAAM,kBACJ,2BACA,iCAAiC,aAAa,WAAW,qBAAqB,CAAC;AAEjF,UAAM,SACJ,mBAAmB,UAClB,MAAM,KAAK;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,WAAW,qBAAqB,aAAa,gBAAgB;AAAA,MAC1E;AAAA,MACA;AAAA,IACF;AAEF,UAAM,YAAY,MAAM,KAAK,OAAO,6BAA6B;AAAA,MAC/D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,KAAK;AAAA,MACV,EAAE,WAAW,aAAa,qBAAqB,UAAU;AAAA,MACzD;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,YAAY,WAA0C;AACjE,WAAO,KAAK,OAAO,YAAY,WAAW,KAAK,OAAO;AAAA,EACxD;AAAA,EAEA,MAAa,YAAY,WAAuC;AAC9D,WAAO,eAAe,WAAW,KAAK,OAAO;AAAA,EAC/C;AAAA,EAEA,MAAa,kBAAkB,MAAoB,WAAwC;AACzF,QAAI;AACF,YAAM,KAAK,aAAa;AAAA,QACtB,iBAAiB,KAAK;AAAA,QACtB,YAAY;AAAA,QACZ,UAAU,gBAAgB;AAAA,UACxB,MAAM,KAAK,IAAI,EAAE,SAAS;AAAA,UAC1B,WAAW,UAAU,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,SAAS,CAAC;AAAA,QACpD,CAAC;AAAA,MACH,CAAC;AACD,aAAO;AAAA,IACT,QAAE;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAa,cAAc,WAAsB,WAAwC;AACvF,UAAM,OAAO,MAAM,KAAK,YAAY,SAAS;AAC7C,WAAO,KAAK,kBAAkB,MAAM,SAAS;AAAA,EAC/C;AAAA,EAEA,MAAa,mBACX,EAAE,MAAM,QAAQ,GAChB,SACA;AACA,QAAI;AAEJ,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,sBAAc,MAAM,KAAK,kBAAkB,SAAS,OAAO;AAC3D;AAAA,MAEF,KAAK;AACH,sBAAc,MAAM,KAAK,mBAAmB,SAAS,OAAO;AAC5D;AAAA,MAEF,KAAK;AACH,sBAAc,MAAM,KAAK,yBAAyB,SAAS,OAAO;AAClE;AAAA,MAEF,KAAK;AACH,sBAAc,MAAM,KAAK,kBAAkB,SAAS,OAAO;AAC3D;AAAA,MAEF;AACE,sBAAc,EAAE,iBAAiB,MAAM,aAAa,KAAK;AACzD;AAAA,IACJ;AAEA,WAAO,YAAY,gBAAgB,SAAS;AAAA,EAC9C;AACF;;;ACpYO,IAAe,mBAAf,cAAwC,kBAAkB;AA4NjE;;;ACpPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYO,SAAS,YAAY,SAAkB;AAC5C,SAAO,KAAK,QAAQ,IAAI,EAAE,KAAK,GAAG,EAAE,IAAI,KAAK,QAAQ,GAAG,CAAC;AAC3D;AAEO,IAAM,eAAe,KAAK,CAAC,EAAE,KAAK,GAAG,EAAE,IAAI,KAAK,CAAC,CAAC;AAClD,IAAM,eAAe,KAAK,CAAC,EAAE,KAAK,GAAG,EAAE,IAAI,KAAK,CAAC,CAAC;AAElD,SAAS,UAAU,IAA2B;AACnD,SAAO,KAAK,EAAE,EAAE,IAAI,YAAY;AAClC;AAGO,SAAS,YAAY,WAAkC;AAC5D,QAAM,KAAK,KAAK,SAAS;AACzB,MAAI,CAAC,UAAU,EAAE;AAAG,UAAM,IAAI,MAAM,qBAAqB;AACzD,SAAO;AAAA,IACL,KAAK,aAAa,GAAG,MAAM,GAAG,EAAE,SAAS,EAAE,CAAC;AAAA,IAC5C,MAAM,aAAa,GAAG,KAAK,GAAG,EAAE,SAAS,EAAE,CAAC;AAAA,EAC9C;AACF;;;AC9BA,mBAAyB;AAOlB,SAAS,kBAAkB,SAA+B;AAC/D,SAAO,aAAa,gBAAgB,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,SAAS,IAAI,GAAG,CAAC;AAC7E;AAEO,SAAS,wBAAwB,SAA+B;AACrE,gBAAc,SAAS,MAAM,UAAU,kBAAkB;AAEzD,QAAM,SAAS,kBAAkB,OAAO;AAExC,MAAI,CAAC,OAAO,MAAM,wBAAwB,GAAG;AAC3C,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,SAAO;AACT;AAGO,SAAS,mBAAmB,SAA+B;AAChE,QAAM,QAAQ,gBAAgB,wBAAwB,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE;AACtF,QAAM,aAAS,uBAAS,SAAS,OAAO,GAAG,EAAE,QAAQ,OAAO,CAAC;AAE7D,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,QAAI,OAAO,KAAK,MAAM,KAAK,GAAG;AAC5B,YAAM,KAAK,MAAM,GAAG,YAAY;AAAA,IAClC;AACA,SAAK,OAAO,KAAK,KAAK,OAAS,GAAG;AAChC,YAAM,IAAI,KAAK,MAAM,IAAI,GAAG,YAAY;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO,aAAa,MAAM,KAAK,EAAE,CAAC;AACpC;AAEO,SAAS,wBAAwB,SAA0B;AAChE,SAAO,mBAAmB,OAAO,MAAM;AACzC;","names":["import_bn","import_minimalistic_assert","isomorphicFetch","import_minimalistic_assert","BN","assert","StarknetChainId","TransactionHashPrefix","import_minimalistic_assert","elliptic","hashJS","assert","assert","Json","import_url_join","urljoin","urljoin","assert","BN","import_minimalistic_assert","assert"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/contract/default.ts","../src/utils/fetchPonyfill.ts","../src/utils/hash.ts","../src/constants.ts","../src/utils/number.ts","../src/utils/encode.ts","../src/utils/ellipticCurve.ts","../src/utils/json.ts","../src/utils/stark.ts","../src/utils/provider.ts","../src/utils/responseParser/rpc.ts","../src/provider/utils.ts","../src/provider/rpc.ts","../src/provider/sequencer.ts","../src/utils/responseParser/index.ts","../src/utils/responseParser/sequencer.ts","../src/utils/url.ts","../src/provider/errors.ts","../src/provider/default.ts","../src/provider/interface.ts","../src/provider/index.ts","../src/contract/interface.ts","../src/contract/contractFactory.ts","../src/signer/interface.ts","../src/utils/transaction.ts","../src/utils/typedData/index.ts","../src/utils/merkle.ts","../src/utils/shortString.ts","../src/utils/typedData/utils.ts","../src/signer/default.ts","../src/account/default.ts","../src/account/interface.ts","../src/utils/uint256.ts","../src/utils/address.ts"],"sourcesContent":["/**\n * Main\n */\nexport * from './contract';\nexport * from './types';\nexport * from './provider';\nexport * from './account';\nexport * from './signer';\n\n/**\n * Utils\n */\nexport * as constants from './constants';\nexport * as encode from './utils/encode';\nexport * as hash from './utils/hash';\nexport * as json from './utils/json';\nexport * as number from './utils/number';\nexport * as transaction from './utils/transaction';\nexport * as stark from './utils/stark';\nexport * as merkle from './utils/merkle';\nexport * as ec from './utils/ellipticCurve';\nexport * as uint256 from './utils/uint256';\nexport * as shortString from './utils/shortString';\nexport * as typedData from './utils/typedData';\nexport * from './utils/address';\nexport * from './utils/url';\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport {\n Abi,\n AbiEntry,\n Args,\n AsyncContractFunction,\n Call,\n Calldata,\n ContractFunction,\n FunctionAbi,\n InvokeFunctionResponse,\n Overrides,\n ParsedStruct,\n Result,\n StructAbi,\n} from '../types';\nimport { BigNumberish, toBN, toFelt } from '../utils/number';\nimport { ContractInterface } from './interface';\n\nfunction parseFelt(candidate: string): BN {\n try {\n return toBN(candidate);\n } catch (e) {\n throw Error('Couldnt parse felt');\n }\n}\n\n/**\n * Adds call methods to the contract\n *\n */\nfunction buildCall(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n return contract.call(functionAbi.name, args);\n };\n}\n\n/**\n * Adds invoke methods to the contract\n *\n */\nfunction buildInvoke(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const { inputs } = functionAbi;\n const inputsLength = inputs.reduce((acc, input) => {\n if (!/_len$/.test(input.name)) {\n return acc + 1;\n }\n return acc;\n }, 0);\n const options = {};\n if (inputsLength + 1 === args.length && typeof args[args.length - 1] === 'object') {\n Object.assign(options, args.pop());\n }\n return contract.invoke(functionAbi.name, args, options);\n };\n}\n\n/**\n * Adds call/invoke methods to the contract\n *\n */\nfunction buildDefault(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n if (functionAbi.stateMutability === 'view') {\n return buildCall(contract, functionAbi);\n }\n return buildInvoke(contract, functionAbi);\n}\n\n/**\n * Adds populate for methods to the contract\n *\n */\nfunction buildPopulate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.populate(functionAbi.name, args);\n };\n}\n\n/**\n * Adds estimateFee for methods to the contract\n *\n */\nfunction buildEstimate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.estimate(functionAbi.name, args);\n };\n}\n\nexport class Contract implements ContractInterface {\n abi: Abi;\n\n address: string;\n\n providerOrAccount: ProviderInterface | AccountInterface;\n\n deployTransactionHash?: string;\n\n protected readonly structs: { [name: string]: StructAbi };\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n /**\n * Contract class to handle contract methods\n *\n * @param abi - Abi of the contract object\n * @param address (optional) - address to connect to\n * @param providerOrAccount (optional) - Provider or Account to attach to\n */\n constructor(\n abi: Abi,\n address: string,\n providerOrAccount: ProviderInterface | AccountInterface = defaultProvider\n ) {\n this.address = address && address.toLowerCase();\n this.providerOrAccount = providerOrAccount;\n this.abi = abi;\n this.structs = abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n\n Object.defineProperty(this, 'functions', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'callStatic', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'populateTransaction', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'estimateFee', {\n enumerable: true,\n value: {},\n writable: false,\n });\n this.abi.forEach((abiElement) => {\n if (abiElement.type !== 'function') {\n return;\n }\n const signature = abiElement.name;\n if (!this[signature]) {\n Object.defineProperty(this, signature, {\n enumerable: true,\n value: buildDefault(this, abiElement),\n writable: false,\n });\n }\n if (!this.functions[signature]) {\n Object.defineProperty(this.functions, signature, {\n enumerable: true,\n value: buildDefault(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.callStatic[signature]) {\n Object.defineProperty(this.callStatic, signature, {\n enumerable: true,\n value: buildCall(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.populateTransaction[signature]) {\n Object.defineProperty(this.populateTransaction, signature, {\n enumerable: true,\n value: buildPopulate(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.estimateFee[signature]) {\n Object.defineProperty(this.estimateFee, signature, {\n enumerable: true,\n value: buildEstimate(this, abiElement),\n writable: false,\n });\n }\n });\n }\n\n public attach(address: string): void {\n this.address = address;\n }\n\n public connect(providerOrAccount: ProviderInterface | AccountInterface) {\n this.providerOrAccount = providerOrAccount;\n }\n\n public async deployed(): Promise<Contract> {\n if (this.deployTransactionHash) {\n await this.providerOrAccount.waitForTransaction(this.deployTransactionHash);\n this.deployTransactionHash = undefined;\n }\n return this;\n }\n\n public async call(\n method: string,\n args: Array<any> = [],\n {\n blockIdentifier = 'pending',\n }: {\n blockIdentifier?: BlockIdentifier;\n } = {}\n ): Promise<Result> {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n\n // validate method and args\n this.validateMethodAndArgs('CALL', method, args);\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n\n // compile calldata\n const calldata = this.compileCalldata(args, inputs);\n return this.providerOrAccount\n .callContract(\n {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n },\n blockIdentifier\n )\n .then((x) => this.parseResponse(method, x.result));\n }\n\n public invoke(\n method: string,\n args: Array<any> = [],\n options: Overrides = {}\n ): Promise<InvokeFunctionResponse> {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n // validate method and args\n this.validateMethodAndArgs('INVOKE', method, args);\n\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const inputsLength = inputs.reduce((acc, input) => {\n if (!/_len$/.test(input.name)) {\n return acc + 1;\n }\n return acc;\n }, 0);\n\n if (args.length !== inputsLength) {\n throw Error(\n `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`\n );\n }\n // compile calldata\n const calldata = this.compileCalldata(args, inputs);\n\n const invocation = {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n };\n if ('execute' in this.providerOrAccount) {\n return this.providerOrAccount.execute(invocation, undefined, {\n maxFee: options.maxFee,\n nonce: options.nonce,\n });\n }\n\n if (!options.nonce) {\n throw new Error(`Nonce is required when invoking a function without an account`);\n }\n\n // eslint-disable-next-line no-console\n console.warn(`Invoking ${method} without an account. This will not work on a public node.`);\n\n return this.providerOrAccount.invokeFunction(\n {\n ...invocation,\n signature: options.signature || [],\n },\n {\n nonce: options.nonce,\n }\n );\n }\n\n public async estimate(method: string, args: Array<any> = []) {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n\n // validate method and args\n this.validateMethodAndArgs('INVOKE', method, args);\n const invocation = this.populateTransaction[method](...args);\n if ('estimateInvokeFee' in this.providerOrAccount) {\n return this.providerOrAccount.estimateInvokeFee(invocation);\n }\n throw Error('Contract must be connected to the account contract to estimate');\n }\n\n public populate(method: string, args: Array<any> = []): Call {\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n return {\n contractAddress: this.address,\n entrypoint: method,\n calldata: this.compileCalldata(args, inputs),\n };\n }\n\n /**\n * Deep parse of the object that has been passed to the method\n *\n * @param struct - struct that needs to be calculated\n * @return {number} - number of members for the given struct\n */\n private calculateStructMembers(struct: string): number {\n return this.structs[struct].members.reduce((acc, member) => {\n if (member.type === 'felt') {\n return acc + 1;\n }\n return acc + this.calculateStructMembers(member.type);\n }, 0);\n }\n\n /**\n * Validates if all arguments that are passed to the method are corresponding to the ones in the abi\n *\n * @param type - type of the method\n * @param method - name of the method\n * @param args - arguments that are passed to the method\n */\n protected validateMethodAndArgs(type: 'INVOKE' | 'CALL', method: string, args: Array<any> = []) {\n // ensure provided method exists\n const invokeableFunctionNames = this.abi\n .filter((abi) => {\n if (abi.type !== 'function') return false;\n const isView = abi.stateMutability === 'view';\n return type === 'INVOKE' ? !isView : isView;\n })\n .map((abi) => abi.name);\n assert(\n invokeableFunctionNames.includes(method),\n `${type === 'INVOKE' ? 'invokeable' : 'viewable'} method not found in abi`\n );\n\n // ensure args match abi type\n const methodAbi = this.abi.find(\n (abi) => abi.name === method && abi.type === 'function'\n ) as FunctionAbi;\n let argPosition = 0;\n methodAbi.inputs.forEach((input) => {\n if (/_len$/.test(input.name)) {\n return;\n }\n if (input.type === 'felt') {\n assert(\n typeof args[argPosition] === 'string' ||\n typeof args[argPosition] === 'number' ||\n args[argPosition] instanceof BN,\n `arg ${input.name} should be a felt (string, number, BigNumber)`\n );\n argPosition += 1;\n } else if (input.type in this.structs && typeof args[argPosition] === 'object') {\n if (Array.isArray(args[argPosition])) {\n const structMembersLength = this.calculateStructMembers(input.type);\n assert(\n args[argPosition].length === structMembersLength,\n `arg should be of length ${structMembersLength}`\n );\n } else {\n this.structs[input.type].members.forEach(({ name }) => {\n assert(\n Object.keys(args[argPosition]).includes(name),\n `arg should have a property ${name}`\n );\n });\n }\n argPosition += 1;\n } else {\n assert(Array.isArray(args[argPosition]), `arg ${input.name} should be an Array`);\n if (input.type === 'felt*') {\n args[argPosition].forEach((felt: BigNumberish) => {\n assert(\n typeof felt === 'string' || typeof felt === 'number' || felt instanceof BN,\n `arg ${input.name} should be an array of string, number or BigNumber`\n );\n });\n argPosition += 1;\n } else if (/\\(felt/.test(input.type)) {\n const tupleLength = input.type.split(',').length;\n assert(\n args[argPosition].length === tupleLength,\n `arg ${input.name} should have ${tupleLength} elements in tuple`\n );\n args[argPosition].forEach((felt: BigNumberish) => {\n assert(\n typeof felt === 'string' || typeof felt === 'number' || felt instanceof BN,\n `arg ${input.name} should be an array of string, number or BigNumber`\n );\n });\n argPosition += 1;\n } else {\n const arrayType = input.type.replace('*', '');\n args[argPosition].forEach((struct: any) => {\n this.structs[arrayType].members.forEach(({ name }) => {\n if (Array.isArray(struct)) {\n const structMembersLength = this.calculateStructMembers(arrayType);\n assert(\n struct.length === structMembersLength,\n `arg should be of length ${structMembersLength}`\n );\n } else {\n assert(\n Object.keys(struct).includes(name),\n `arg ${input.name} should be an array of ${arrayType}`\n );\n }\n });\n });\n argPosition += 1;\n }\n }\n });\n }\n\n /**\n * Deep parse of the object that has been passed to the method\n *\n * @param element - element that needs to be parsed\n * @param type - name of the method\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\n\n protected parseCalldataValue(\n element: ParsedStruct | BigNumberish | BigNumberish[],\n type: string\n ): string | string[] {\n if (element === undefined) {\n throw Error('Missing element in calldata');\n }\n if (Array.isArray(element)) {\n const structMemberNum = this.calculateStructMembers(type);\n if (element.length !== structMemberNum) {\n throw Error('Missing element in calldata');\n }\n return element.map((el) => toFelt(el));\n }\n // checking if the passed element is struct or element in struct\n if (this.structs[type] && this.structs[type].members.length) {\n // going through all the members of the struct and parsing the value\n return this.structs[type].members.reduce((acc, member: AbiEntry) => {\n // if the member of the struct is another struct this will return array of the felts if not it will be single felt\n // TODO: refactor types so member name can be used as keyof ParsedStruct\n /* @ts-ignore */\n const parsedData = this.parseCalldataValue(element[member.name], member.type);\n if (typeof parsedData === 'string') {\n acc.push(parsedData);\n } else {\n acc.push(...parsedData);\n }\n return acc;\n }, [] as string[]);\n }\n return toFelt(element as BigNumberish);\n }\n\n /**\n * Parse of the response elements that are converted to Object (Struct) by using the abi\n *\n * @param responseIterator - iterator of the response\n * @param type - type of the struct\n * @return {BigNumberish | ParsedStruct} - parsed arguments in format that contract is expecting\n */\n protected parseResponseStruct(\n responseIterator: Iterator<string>,\n type: string\n ): BigNumberish | ParsedStruct {\n // check the type of current element\n if (type in this.structs && this.structs[type]) {\n return this.structs[type].members.reduce((acc, el) => {\n // parse each member of the struct (member can felt or nested struct)\n acc[el.name] = this.parseResponseStruct(responseIterator, el.type);\n return acc;\n }, {} as any);\n }\n return parseFelt(responseIterator.next().value);\n }\n\n /**\n * Parse one field of the calldata by using input field from the abi for that method\n *\n * @param args - value of the field\n * @param input - input(field) information from the abi that will be used to parse the data\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\n protected parseCalldataField(argsIterator: Iterator<any>, input: AbiEntry): string | string[] {\n const { name, type } = input;\n const { value } = argsIterator.next();\n\n const parsedCalldata: string[] = [];\n switch (true) {\n case /\\*/.test(type):\n if (Array.isArray(value)) {\n parsedCalldata.push(toFelt(value.length));\n return (value as (BigNumberish | ParsedStruct)[]).reduce((acc, el) => {\n if (/felt/.test(type)) {\n acc.push(toFelt(el as BigNumberish));\n } else {\n acc.push(...this.parseCalldataValue(el, type.replace('*', '')));\n }\n return acc;\n }, parsedCalldata);\n }\n throw Error(`Expected ${name} to be array`);\n case type in this.structs:\n return this.parseCalldataValue(value as ParsedStruct | BigNumberish[], type);\n case /\\(felt/.test(type):\n if (Array.isArray(value)) {\n return value.map((el) => toFelt(el as BigNumberish));\n }\n throw Error(`Expected ${name} to be array`);\n default:\n return toFelt(value as BigNumberish);\n }\n }\n\n /**\n * Parse the calldata by using input fields from the abi for that method\n *\n * @param args - arguments passed the the method\n * @param inputs - list of inputs(fields) that are in the abi\n * @return {Calldata} - parsed arguments in format that contract is expecting\n */\n protected compileCalldata(args: Array<any>, inputs: AbiEntry[]): Calldata {\n const argsIterator = args[Symbol.iterator]();\n return inputs.reduce((acc, input) => {\n if (/_len$/.test(input.name)) {\n return acc;\n }\n const parsedData = this.parseCalldataField(argsIterator, input);\n if (Array.isArray(parsedData)) {\n acc.push(...parsedData);\n } else {\n acc.push(parsedData);\n }\n return acc;\n }, [] as Calldata);\n }\n\n /**\n * Parse elements of the response and structuring them into one field by using output property from the abi for that method\n *\n * @param responseIterator - iterator of the response\n * @param output - output(field) information from the abi that will be used to parse the data\n * @return - parsed response corresponding to the abi structure of the field\n */\n protected parseResponseField(\n responseIterator: Iterator<string>,\n output: AbiEntry,\n parsedResult?: Args\n ): any {\n const { name, type } = output;\n const parsedDataArr: (BigNumberish | ParsedStruct)[] = [];\n switch (true) {\n case /_len$/.test(name):\n return parseFelt(responseIterator.next().value).toNumber();\n case /\\(felt/.test(type):\n return type.split(',').reduce((acc) => {\n acc.push(parseFelt(responseIterator.next().value));\n return acc;\n }, [] as BigNumberish[]);\n case /\\*/.test(type):\n if (parsedResult && parsedResult[`${name}_len`]) {\n const arrLen = parsedResult[`${name}_len`] as number;\n while (parsedDataArr.length < arrLen) {\n parsedDataArr.push(\n this.parseResponseStruct(responseIterator, output.type.replace('*', ''))\n );\n }\n }\n return parsedDataArr;\n case type in this.structs:\n return this.parseResponseStruct(responseIterator, type);\n default:\n return parseFelt(responseIterator.next().value);\n }\n }\n\n /**\n * Parse elements of the response array and structuring them into response object\n *\n * @param method - method name\n * @param response - response from the method\n * @return - parsed response corresponding to the abi\n */\n protected parseResponse(method: string, response: string[]): Result {\n const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const responseIterator = response.flat()[Symbol.iterator]();\n const resultObject = outputs.flat().reduce((acc, output) => {\n acc[output.name] = this.parseResponseField(responseIterator, output, acc);\n if (acc[output.name] && acc[`${output.name}_len`]) {\n delete acc[`${output.name}_len`];\n }\n return acc;\n }, {} as Args);\n return Object.entries(resultObject).reduce((acc, [key, value]) => {\n acc.push(value);\n acc[key] = value;\n return acc;\n }, [] as Result);\n }\n}\n","import isomorphicFetch from 'isomorphic-fetch';\n\nexport default (typeof window !== 'undefined' && window.fetch) || // use buildin fetch in browser if available\n (typeof global !== 'undefined' && global.fetch) || // use buildin fetch in node, react-native and service worker if available\n isomorphicFetch; // ponyfill fetch in node and browsers that don't have it\n","/* eslint-disable import/extensions */\nimport BN from 'bn.js';\nimport { keccak256 } from 'ethereum-cryptography/keccak.js';\nimport { hexToBytes } from 'ethereum-cryptography/utils.js';\nimport assert from 'minimalistic-assert';\n\nimport {\n CONSTANT_POINTS,\n FIELD_PRIME,\n MASK_250,\n ONE,\n StarknetChainId,\n TransactionHashPrefix,\n ZERO,\n} from '../constants';\nimport { RawCalldata } from '../types';\nimport { ec } from './ellipticCurve';\nimport { addHexPrefix, buf2hex, removeHexPrefix, utf8ToArray } from './encode';\nimport {\n BigNumberish,\n isHex,\n isStringWholeNumber,\n toBN,\n toFelt,\n toHex,\n toHexString,\n} from './number';\n\nexport const transactionVersion = 1;\nexport const feeTransactionVersion = toBN(2).pow(toBN(128)).add(toBN(transactionVersion));\n\nexport function keccakBn(value: BigNumberish): string {\n const hexWithoutPrefix = removeHexPrefix(toHex(toBN(value)));\n const evenHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;\n return addHexPrefix(buf2hex(keccak256(hexToBytes(evenHex))));\n}\n\nfunction keccakHex(value: string): string {\n return addHexPrefix(buf2hex(keccak256(utf8ToArray(value))));\n}\n\n/**\n * Function to get the starknet keccak hash from a string\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L17-L22)\n * @param value - string you want to get the starknetKeccak hash from\n * @returns starknet keccak hash as BigNumber\n */\nexport function starknetKeccak(value: string): BN {\n return toBN(keccakHex(value)).and(MASK_250);\n}\n\n/**\n * Function to get the hex selector from a given function name\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L25-L26)\n * @param funcName - selectors abi function name\n * @returns hex selector of given abi function name\n */\nexport function getSelectorFromName(funcName: string) {\n // sometimes BigInteger pads the hex string with zeros, which is not allowed in the starknet api\n return toHex(starknetKeccak(funcName));\n}\n\n/**\n * Function to get hex selector from function name, decimal string or hex string\n * @param value hex string | decimal string | string\n * @returns Hex selector\n */\nexport function getSelector(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n return getSelectorFromName(value);\n}\n\nconst constantPoints = CONSTANT_POINTS.map((coords: string[]) =>\n ec.curve.point(coords[0], coords[1])\n);\n\nexport function pedersen(input: [BigNumberish, BigNumberish]) {\n let point = constantPoints[0];\n for (let i = 0; i < input.length; i += 1) {\n let x = toBN(input[i]);\n assert(x.gte(ZERO) && x.lt(toBN(addHexPrefix(FIELD_PRIME))), `Invalid input: ${input[i]}`);\n if (!x.isZero()) {\n for (let j = 0; j < 252; j += 1) {\n const pt = constantPoints[2 + i * 252 + j];\n assert(!point.getX().eq(pt.getX()));\n if (x.and(ONE).toNumber() !== 0) {\n point = point.add(pt);\n }\n x = x.shrn(1);\n }\n }\n }\n return addHexPrefix(point.getX().toString(16));\n}\n\nexport function computeHashOnElements(data: BigNumberish[]) {\n return [...data, data.length].reduce((x, y) => pedersen([x, y]), 0).toString();\n}\n\n// following implementation is based on this python implementation:\n// https://github.com/starkware-libs/cairo-lang/blob/b614d1867c64f3fb2cf4a4879348cfcf87c3a5a7/src/starkware/starknet/core/os/transaction_hash/transaction_hash.py\n\nexport function calculateTransactionHashCommon(\n txHashPrefix: TransactionHashPrefix,\n version: BigNumberish,\n contractAddress: BigNumberish,\n entryPointSelector: BigNumberish,\n calldata: BigNumberish[],\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n additionalData: BigNumberish[] = []\n): string {\n const calldataHash = computeHashOnElements(calldata);\n const dataToHash = [\n txHashPrefix,\n version,\n contractAddress,\n entryPointSelector,\n calldataHash,\n maxFee,\n chainId,\n ...additionalData,\n ];\n return computeHashOnElements(dataToHash);\n}\n\nexport function calculateDeployTransactionHash(\n contractAddress: BigNumberish,\n constructorCalldata: BigNumberish[],\n version: BigNumberish,\n chainId: StarknetChainId\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY,\n version,\n contractAddress,\n getSelectorFromName('constructor'),\n constructorCalldata,\n ZERO,\n chainId\n );\n}\n\nexport function calculateDeclareTransactionHash(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n classHash: BigNumberish,\n senderAddress: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DECLARE,\n version,\n senderAddress,\n 0,\n [classHash],\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateDeployAccountTransactionHash(\n contractAddress: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: BigNumberish[],\n salt: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n) {\n const calldata = [classHash, salt, ...constructorCalldata];\n\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY_ACCOUNT,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateTransactionHash(\n contractAddress: BigNumberish,\n version: BigNumberish,\n calldata: BigNumberish[],\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.INVOKE,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateContractAddressFromHash(\n salt: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: RawCalldata,\n deployerAddress: BigNumberish\n) {\n const constructorCalldataHash = computeHashOnElements(constructorCalldata);\n\n const CONTRACT_ADDRESS_PREFIX = toFelt('0x535441524b4e45545f434f4e54524143545f41444452455353'); // Equivalent to 'STARKNET_CONTRACT_ADDRESS'\n\n const dataToHash = [\n CONTRACT_ADDRESS_PREFIX,\n deployerAddress,\n salt,\n classHash,\n constructorCalldataHash,\n ];\n\n return computeHashOnElements(dataToHash);\n}\n","import { toBN } from './utils/number';\n\nexport { IS_BROWSER } from './utils/encode';\n\nexport const ZERO = toBN(0);\nexport const ONE = toBN(1);\nexport const TWO = toBN(2);\nexport const MASK_250 = TWO.pow(toBN(250)).sub(ONE); // 2 ** 250 - 1\nexport const MASK_251 = TWO.pow(toBN(251));\n\nexport enum StarknetChainId {\n MAINNET = '0x534e5f4d41494e', // encodeShortString('SN_MAIN'),\n TESTNET = '0x534e5f474f45524c49', // encodeShortString('SN_GOERLI'),\n TESTNET2 = '0x534e5f474f45524c4932',\n}\nexport enum TransactionHashPrefix {\n DECLARE = '0x6465636c617265', // encodeShortString('declare'),\n DEPLOY = '0x6465706c6f79', // encodeShortString('deploy'),\n DEPLOY_ACCOUNT = '0x6465706c6f795f6163636f756e74', // encodeShortString('deploy_account'),\n INVOKE = '0x696e766f6b65', // encodeShortString('invoke'),\n L1_HANDLER = '0x6c315f68616e646c6572', // encodeShortString('l1_handler'),\n}\n\nexport const UDC = {\n ADDRESS: '0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf',\n ENTRYPOINT: 'deployContract',\n};\n\n/**\n * The following is taken from https://github.com/starkware-libs/starkex-resources/blob/master/crypto/starkware/crypto/signature/pedersen_params.json but converted to hex, because JS is very bad handling big integers by default\n * Please do not edit until the JSON changes.\n */\nexport const FIELD_PRIME = '800000000000011000000000000000000000000000000000000000000000001';\nexport const FIELD_GEN = '3';\nexport const FIELD_SIZE = 251;\nexport const EC_ORDER = '800000000000010FFFFFFFFFFFFFFFFB781126DCAE7B2321E66A241ADC64D2F';\nexport const ALPHA = '1';\nexport const BETA = '6F21413EFBE40DE150E596D72F7A8C5609AD26C15C915C1F4CDFCB99CEE9E89';\nexport const MAX_ECDSA_VAL = '800000000000000000000000000000000000000000000000000000000000000';\nexport const CONSTANT_POINTS = [\n [\n '49ee3eba8c1600700ee1b87eb599f16716b0b1022947733551fde4050ca6804',\n '3ca0cfe4b3bc6ddf346d49d06ea0ed34e621062c0e056c1d0405d266e10268a',\n ],\n [\n '1ef15c18599971b7beced415a40f0c7deacfd9b0d1819e03d723d8bc943cfca',\n '5668060aa49730b7be4801df46ec62de53ecd11abe43a32873000c36e8dc1f',\n ],\n [\n '234287dcbaffe7f969c748655fca9e58fa8120b6d56eb0c1080d17957ebe47b',\n '3b056f100f96fb21e889527d41f4e39940135dd7a6c94cc6ed0268ee89e5615',\n ],\n [\n '3909690e1123c80678a7ba0fde0e8447f6f02b3f6b960034d1e93524f8b476',\n '7122e9063d239d89d4e336753845b76f2b33ca0d7f0c1acd4b9fe974994cc19',\n ],\n [\n '40fd002e38ea01a01b2702eb7c643e9decc2894cbf31765922e281939ab542c',\n '109f720a79e2a41471f054ca885efd90c8cfbbec37991d1b6343991e0a3e740',\n ],\n [\n '2f52066635c139fc2f64eb0bd5e3fd7a705f576854ec4f00aa60361fddb981b',\n '6d78a24d8a5f97fc600318ce16b3c840315979c3273078ec1a285f217ee6a26',\n ],\n [\n '6a0767a1fd60d5b9027a35af1b68e57a1c366ebcde2006cdd07af27043ef674',\n '606b72c0ca0498b8c1817ed7922d550894c324f5efdfc85a19a1ae382411ca2',\n ],\n [\n '7fa463ee2a2d6a585d5c3358918270f6c28c66df1f86803374d1edf3819cc62',\n 'a996edf01598832e644e1cae9a37288865ad80e2787f9bf958aceccc99afae',\n ],\n [\n '3d4da70d1540da597dbae1651d28487604a4e66a4a1823b97e8e9639393dbec',\n '45cdef70c35d3b6f0a2273a9886ccb6306d813e8204bdfd30b4efee63c8a3f9',\n ],\n [\n '1e448fdbcd9896c6fbf5f36cb7e7fcb77a751ff2d942593cae023363cc7750e',\n '30c81da0f3a8cb64468eaa491c7ae7b4842b62cb4148820da211afc4caffb3a',\n ],\n [\n '6531acf1a7cb90a4eb27de0b7f915e387a3b0fd063ba6e1289b91f48411be26',\n '31330f5daa091889981a3ea782ae997f5f171336ed0487a03f051551a2cafa2',\n ],\n [\n '54be016394d5662d67d7e82f5e889ed2f97ccf95d911f57dd2362c4040ed4f4',\n 'c6cb184053f054d6a59c1bf0986d17090d25089b3fdcdaf185edc87ef113e5',\n ],\n [\n '35b9ecd0499ca1d5d42dcbb0c6b4042b3733c64b607ca711e706e786ef2afc6',\n '5624b476a5b21c3a544f0712d4817b06ad380a5a6529d323bf64da8ef862d8d',\n ],\n [\n '4ce0378e3ee8f77ed58f2ddbd8bb7676c8a38bfb1d3694c275254bd8ca38e23',\n '5a16fcbff0769c9cf2b02c31621878ec819fff4b8231bff82c6183db2746820',\n ],\n [\n '648d5c6f98680a1b926bfeb01c00224c56fdcf751b251c4449c8a94f425cfcf',\n '72c05ac793cd1620a833fbe2214d36900ebe446e095c62fcb740937f98cca8c',\n ],\n [\n 'bd09be3e4e1af8a14189977e334f097c18e4a8bf42577ef5aafa0f807bd89b',\n '6e0e72ed7eb65c86cee29c411fb4761122558ee81013344ba8509c49de9f9b6',\n ],\n [\n '35ea4e339b44ae7724419bdfbe07022253137a4afb7cbaffad341ea61249357',\n '3665d676a026a174f367bb4417780e53a7803cb02d0db32eb4545c267c42f14',\n ],\n [\n '36457bc744f42e697b825c2d1afd8f4029d696a4514710f81da52d88e178643',\n '7c93715896735492a68c7969a024b3a8fd538bffc1521538107de1a5f13ce9c',\n ],\n [\n '5b3a08ebcf9c109cc9082f70d9df2b9c11b5428ee23917b4e790c4c10f6e661',\n '9d7b42ab0c20f5510df7ea5e196eec99342739077e9a168198c89da859753',\n ],\n [\n '21883ef8580fc06e59481955d52ece3aca6e82c8c9fc58e216dcf46f96990c6',\n '51a6423543e6e8a43e71da34cd90f5b520b8d33b67c4bf857573ab9e301aa4c',\n ],\n [\n '19e86b77f9b581e81092b305c852faf53940a8f15f0a6990c414f04c0fa7ef9',\n '515630e35d4398c9c79fc4ee08e1023fa47d8e03c6e7819c6d2ccef45398fa',\n ],\n [\n '888ab8eb4c31bb2ac5b54aa320dbe1a69c96b864e8a5f54d89c1d1a6b86c24',\n '730e148467f6a55ce22c5296f5380df88f38de76ef0b2de844cd3094aaaf3ea',\n ],\n [\n '75e79ff13a894e7120dac17b7429c0c32ce7828f726c9973728c0977a5f5977',\n '4960526e59c1c736561a201bc56f7d762641b39f609d273cc996f5d9197cfb8',\n ],\n [\n '640fe009249115d7254f72ecafb3006139e4bed7e9041af51458c737282d1d5',\n '3cc6c978a575246e2ce4f7ef1fcc7f63085db9ff98a1b1f3fe374087c0332c',\n ],\n [\n '6d6fd09ccab7c26de9b3906191235deb5c34685580c488275356a05e209ca96',\n '7157f81a34213dd8f91dea4f6df1bcfabc4ee091a3049eeeb3b7923d39b8645',\n ],\n [\n '5531ca1d00f151d71da820918f74caf2985b24dca20e124721fff507b5a5876',\n '518529643d3f25e47f72c322223ba60a63d6bfe78cf3f612215d9c19bf29200',\n ],\n [\n '6192d454e4f8fe212bdfccd5b15dd5056d7622ffe456c6c67e5a7265aea49c4',\n '2377a45dc630017ae863cb968ddb38333a70c7946d8684e6d7a6213f634b7bc',\n ],\n [\n '542fb44b4ef3640a64fdb22a2560fb26668065c069cf31d1df424819a39ff18',\n '5dbae9b0948e0361aea443503840341c322aa1a1366ce5390e71bf161f78f8c',\n ],\n [\n '299ff3e3412a7eb4cb4a3051b07b1be2e7b1c4b789f39ffb52cba3d048b71de',\n '1951d3175c02761b291d86b6c0a08387ad5e2a2130ccc33c852530572cb3958',\n ],\n [\n '628ce3f5367dadc1411133e55eb25e2e3c2880d6e28754a5cb1c5d109627e73',\n 'ae3e9b7d50964e28bd15380400b7659b87affdef5d2586cbefcd9be7d67c0d',\n ],\n [\n '6ea54aff064895eccf9db2283225d62044ae67621192b3346338948382f5933',\n '6431507e51aadacfaf39f102a8ff387756e9b5e1bc8323d44acae55130d93db',\n ],\n [\n '28097d50d175a6235320fe8cfe138dd9e46895d189582e472c38ad7a67d923a',\n '7f9eab4133d7d09a7ff63368d6135c26262b62336eca1b5ca33f2096ce388ba',\n ],\n [\n '619fd09cdd6ff4323973f256c2cbdcb224f7f25b8aef623af2d4a0105e62e02',\n '2c95f0ae11d47eeae1bc7f1350f75f9185c5bc840382ceb38a797cae9c40308',\n ],\n [\n '641c18982ced304512a3f2395942a38add0d6a7156229c2a7c8b8dfbe9beb96',\n '6f6288c9c659b6af5ac975f4180deffe53d516399b2cc62f31732e9d4ba9837',\n ],\n [\n '58ab546e51fe49fc5a382e4064a2bd6cfc268904412f86c26de14f28a71d0f2',\n '124b7217943e7e328408e8afdfa7da00dcbc94a2bb85fd8e01fb162d2c2c0a9',\n ],\n [\n 'a82c2fdedbb26c3c762a12f7e86b0e01e65320e0a25a8399d665f6e266bf74',\n '1a1de28e253f3e10f44d0111e8074f882d7f42e5900780ccbdc31da372d3fd8',\n ],\n [\n '744c725a7455a992e3cf5bd007bc234dd4668dba285f553f38350ad94c1615b',\n '7f721a87f48798bdc4a9c0eb88559e2ad7a74112fd901e70ea159e67a9c33f',\n ],\n [\n '434df142ddaa60f7881b6348d91687de40457de7ccfb07f0304b9e820705d0c',\n '7fae425e3b53f97dd1f5b20e49ed9fe24ff1efc341ba5e017ac89cf8df0cc39',\n ],\n [\n '7a1e2b809dff46277021cbc376f79c37e1b683bbd6bca5317014f0dc0e1ae73',\n '56790278a231912c334eff05281e08af1558e85516b4411ef64647c13bea431',\n ],\n [\n '4931b7990348d41cf8907be79f45bb7991fd18f8a57868351c92fa7a34cbcd7',\n 'ca35091815cdf0837d396e25aad6052ad32d497a33b123256cffdc008bc50e',\n ],\n [\n '250b815d352fd89f8210b624b147ea7d0a4f47bcac49f3ac9b777840da93ebe',\n '1173f10e9691948b7da7632f328520455aadcba46e017f891e0a1d7da2bef04',\n ],\n [\n '2223b85032fa67292f6e1f822628e6756e5c3cc08fc252ab88d63d624e4dfb2',\n '55619ba96a7dcec77832fcb22cd5c21c7dcebc0280d730cba0002b67e0a8c63',\n ],\n [\n '249b131e04de73af9820d3e22492d9ec51bdc0c4c4f34d95352fa44dd61f245',\n '7576d3b5d136368ff01170a77d8286d0d1c7c40688862fb40813b4af3c6065e',\n ],\n [\n '6777915d9b4769027eb7e04733f8a2d669c84fe06080f55e8a55674dfbf9efb',\n '640d0ff384c9635e1af364760f104e058e3c86209fa9d2320aeac887b2e02d8',\n ],\n [\n '2abe3f237681052f002414399111cf07f8421535af41251edc427a36b5b19c9',\n '636ce4deaf468a503ab20ccb2f7e5bdc98551656ebf53e9c7786b11dd9090be',\n ],\n [\n '4d5cc5414758ea1be55be779bd7da296c7e11f1564d9e8797ceea347c16f8ea',\n '1a680c4c410cf5ddc74e95ff2897c193edaaecce5b2cde4e96bbae5c0054eff',\n ],\n [\n '46c375c684b30adf4d51de81e92afee52b1a3847e177403372c82109373edca',\n '1eaadc5783c90a0261306423d52009e991126b3f620e9cb6cffca41ca096f4f',\n ],\n [\n '2ddfb71f51205888118cbabba8fd07d460a810289bfdeeb7118707e310cb152',\n '1fd905d07b3933be886f2518246bdafa6f33259a174668808223cd7c28183c7',\n ],\n [\n '386f3879960713d41fdb3b1e41bbebf26b1c0e27a9a75bb1adcc1a0d3e8547b',\n '2b21498c0f34ec6f17c720334dc0f36021c2f87afbbbc8847d0bd536eb265e5',\n ],\n [\n '407eae62c6c4de3b942195afec3f45efec71ddb5e6edee3d427631bcdbf9b90',\n '436e7f2d78268ef62c4172d2ff1469028bad1f1d0f97ab007064418e61caa8f',\n ],\n [\n '1b881175e21201d17e095e9b3966b354f47de8c1acee5177f5909e0fd72328f',\n '69954b1a9b8bfccf8ec384d32924518a935758f3d3662ef754bcc88f1f6f3ec',\n ],\n [\n '7d545a82bff003b8115be32a0c437f7c0a98f776bcf7fddb0392822844f3c5e',\n '34b6e53a9565a7daa010711f5bf72254a4e61da3e6a562210a9abc9e8b66d69',\n ],\n [\n '299b9fcd4fadfc4b6141457a3036aaa68501c23df579de26df69d4def89b913',\n 'b95bf2c2bb303c38bb396382edc798ca6a4847e573ce19b7b08533d1912675',\n ],\n [\n '551f5a4dae4a341a3e20336a7d2f365ddd45849351ec6dd4fcbedfe4806d5d5',\n '5865c977a0ecf13ce85ae14c5c316872080bd36f0f614f56b6dfc7ece83792e',\n ],\n [\n '7a1d69c08e68c80ad8b310736e6247a53bcba0183b9b8798833bc696a0fb6e2',\n '3ce803a20ebb3b120d5eaf0ad64bed0522fad1a0f2ce39a5c5cbae98c4438f6',\n ],\n [\n '28acacc0bc41d84e83663f02b36981a2c8272ecd72d3901164be2affb09c504',\n '7a5aee0b160eaff5b5968ab1a0304ce58c3d5ae0148d9191c39e87668229e5b',\n ],\n [\n '1f78cfdbcc767b68e69a224a077468cdfcb0afd6952b85bccbdb96d1fb8500b',\n '4772ba173c6b583284eb001cfc2a124104833f464ff9df096443e10ef3e9dd4',\n ],\n [\n '2774108962ca9897e7f22c064d2ccedac4fef5fc9569331c27cdc336c95774b',\n '9e13d79b68e8dc8091c019618f5b07283a710ddf1733dc674a99fc32c12911',\n ],\n [\n '770d116415cd2c4ace0d8b721dd77e4a2ef766591f9ec9fa0b61304548994ed',\n '42165d93c82f687635aa2b68492b3adffd516beb4baa94520efa11467a209fd',\n ],\n [\n '5e6e4ece6621e2275415e1fda1e7c4f496de498b77c0b913073c6a6099394b9',\n '3d92ce044fc77fa227adc31f6fc17ef8b4ec1c5aafc44630c0d9195075bf56d',\n ],\n [\n '6e69c717b5d98807ff1e404a5187a9ceaf0110b83aa15a84f930928b1171825',\n '1ee7cfc3a9744d7fa380ba28604af9df33ac077724374c04588bd71fa16b177',\n ],\n [\n '404318f2d2ceb44f549c80f9d7de9879d8f7da4b81e7350c00e974ebf2daef1',\n '3934831b5af70d17a3f1da9d2931bd757e6acf2893236264fc7e0d92ff1a1cb',\n ],\n [\n '20dcb6f394fea6d549b2e75748f61b7ec03b6e52319cb14163373a9c22bb9dc',\n '106a8c96cfb95a331618b7416d1498554730499e194a58fbf63019890480fc7',\n ],\n [\n '119000f277ccee013e6bb121194ec1ab5460fb6a96eb702a14079865f4170aa',\n '1737a32f5415e8720a5606ec1dd4756f02e7c6817e3723b453d091f2d192773',\n ],\n [\n '45d0fb5cd95db76d05dec3faa12e467a308eabaad363a062353db3cd2d9b749',\n 'ae08691b5b0cdd19ec499132421638f470f493320e4003d123ab1da761b965',\n ],\n [\n '1257b3e65cdfb6367c6d0942327e799bc66eb221e70c6573a9862889eb51c38',\n '593309fd45755dd2cc4afd2b9316bc4638b0c5ddb3009694fcb7b250d0c8a2f',\n ],\n [\n '186dcf9950f72e868014a8accf14aa36e82a7a2a29f86ba37f6632da4189db3',\n '55684c9f7a043fc523ed78f756f834b4db823d5e4161bd79602c17d55a5cd8c',\n ],\n [\n '58791d5569f282f5c3b01ecdc9388df7ba3ca223a2dc1eed5edaf2a1d302fb9',\n '6298d7dd51561a045bb4089deda9f40b2865589ed433e56d54554f8b45e79f0',\n ],\n [\n '13fd87144aa5aa4b24d5a7bf907d8280d15937fed262d41084898cb688fc28b',\n '3fa54367770cc4479a857411ddcabe86627b405ce1cd14ad3b2863bde13abe4',\n ],\n [\n '48118139445415f0c1879224e2dee744ed35280ff00537260402a1741ec3676',\n '4dfa39dadaabecfc54ecb7a25319444f8e952782d863790e42a9887064fc0c1',\n ],\n [\n '4ad031bb9eda84f2fe5d354c7948d41558ca657a04508654721810ee72ef158',\n '620ebd5d0086b92c6009a42777b946a351c2c7ba852b57d3c9905fc337459ef',\n ],\n [\n '4a34abb016ad8cb4575ea5bd28385d2348e5bcc0cbba90059f90f9c71f86e8b',\n '4f781829ad83f9ed1e1b6de0e5f4ac60dfdfe7f23cb4411e815817e705e52c8',\n ],\n [\n '7fc632d7512aab5356b7915dca854c8b12b369ab54f524fbce352f00eb9b9f9',\n '2ce80b944fc9158005f630b34385d50c3ad84450a9e1e529925b3211dd2a1de',\n ],\n [\n '65ed10347503cbc0216ca03f7536cca16b6abd18d332a9258685907f2e5c23f',\n '3be1a18c6bfa6f2f4898ebefad5a8e844c74626d5baa04a820d407fe28bbca6',\n ],\n [\n '1a8abba1be2e276cdd1f28c912280833a5ede1ec121738fcca47dc070dcc71d',\n '21b724378bc029a5199799df005922590d4e59cae52976f8e437bf6693eec4a',\n ],\n [\n '3a99c22dafcfe9004ebb674805736a26aeed7ed5d465ae37226dcbe270a972b',\n '5bf67552af08e1e6e2a24bf562c23225e89869cab9bef8becb3669175a3c94f',\n ],\n [\n '4a6a5e4b3501f2b7bbdd8da73ea81ffca347170bdfb6776a037cdd74c560fb4',\n '5af167ebb259c2da88740ec559ee04052bb66480b836cadd0e2590c32d7111b',\n ],\n [\n '6890d95308525f0bac9dc25cc1189eb92d29d4b3fe61bc8aee1c716ac17b1e8',\n 'e6f23f78e882026b53ea4fac6950e56e3da461e52339eb43d2fdb2dade7ca9',\n ],\n [\n '748f4cf4f027efdeaed7c7f91ef3730ff2f2bb0bfc2db8f27aadde947f7d4d5',\n '3a1cbc550699411052c76293b8c41a3a8a1ecf12cbbc029a1b2b6ea986fca93',\n ],\n [\n '7321f3f581690922cd0dec40c9c352aae412ec2ccdf718f137f7786ab452cd3',\n '5be5130c9277cdb76d7409452438ec15d246b211dd1e276ee58e82a81c98fd4',\n ],\n [\n '6c4d6cb7e7ae70955224b8a912ff57ca218635a2436b36cee25dce8a5cdf51f',\n '32f8c03c6db3246946e432e4148e69f5628b200c6d7d72449df6eeac0998039',\n ],\n [\n '1dad5f2e795ea6fa5177f110989516eacf8fb37bd6a091c7c93f1d73a2fe309',\n '56b2298c538180e99dea3e171dbb5c6fba0bd0a9ed40537277c0c2373a8e2c4',\n ],\n [\n '1610605baacc9bc62c4cc923dc943347cfece7ae241e746fbe6c2c878221dbd',\n '431a82d657e0d109d00dea88cf3fa9b999845221b7b5590a20c40fc71368c1c',\n ],\n [\n '6a4f5c787fb09a5be2b04d2eafa1e6f3d3c863ee22960eb0b64f6eaf6659162',\n '14dbc3eaea6146ee7eaace5a91ed9430dad3a47e9ca2f68b455171f8fe6a7b3',\n ],\n [\n '738415b73e55412b0e582e45ff0d7bf4b1bf2922db581783fdcc75559f40e',\n '33825aeb3fd8459999eb418d15102ba5864b069c6ea517f0c6e9eab8d9aca47',\n ],\n [\n '2603e72ce53985c70782774057a17944f7b4ce224a809be4e2b5af3606aa1d8',\n '92822921809c42318f42dac4d773325f41c43069e990adac7818a45e2554dc',\n ],\n [\n '181cd967ab4615357cc96c82eae9152ce7598c1a1dfdd91a458bddb016ae9fe',\n '5d562fdaeb0e12647e230e50eaf216bed52fa73c6b7378821a3bfc4cd66d4ff',\n ],\n [\n '1121726069b9ef5954ba6490100b226e0be53fef3e071b7c58a1286174b789a',\n '4b25594cf4e9eb2d14b3f52f2661a9992234fc222c0a0d44517cb77deb9c16f',\n ],\n [\n 'e543663969b915337f105f80995a77b356f1a51d8b4a4fb12d44364130e873',\n '34b2e3c009fdab4cb7349a580df2e64c0098a123280078e5da6623a9ec6b44f',\n ],\n [\n '4e2f8909bb62de5ef65600e61bbf969293815296b6e23702875e049b3ce5c45',\n '3cb81f2c21f22a7add26fa38a9ce5d9cce1bb251bd2698f90c34ff0a84f7af',\n ],\n [\n '37b546e403a1ba970c17b67c2f1361ab9c803f8d2b5cd93803014faa08861ed',\n '37079184ea46272f5809b523d060686633f7995167897a153be1772fd6566f6',\n ],\n [\n '27bddca77f7bd7f66b3693567a4238f2e6751d95b0bcb409f6b24d08f84798c',\n '6417a85cbfd6fc02df560d3963a241a986baacdfa423f65d7227ce49a96c57d',\n ],\n [\n '2de71a39aa043057d1bc66e45f804542acddf18f7a6d88c0d7fb0ca240debdf',\n '306c1ce39ab46300f7cca0f3a2fbfa77296a27e24bc66b0b8044968ec0ee413',\n ],\n [\n '307c877154364c0c03534e7327d5a88e1380ceef6481567ade37a14ee7c1a72',\n '3404bc7dbfb33b95d922d0693aaf9358f77888d7d95e773c38d83dbe2e5f995',\n ],\n [\n '79f09ff7c60850e5f5ea020722659a1ed27db4c95dca131f99552f785c8afbc',\n '40429528c099349b426ddbf129497176951a64a53db5f9d8bd2be0252cb22b2',\n ],\n [\n '4027dc6b56d446e5972f35464eeac85c5254ef377c902d9fe37aea841bb5292',\n '7c3ea37689ef679fa2f5c7e031a78e23d484a8317990fd34d44d95cc1db3717',\n ],\n [\n '645dbf78a3c228c4b7151450b5e65edb58e71f37e1e4bc5f471e0f1abd6d9c2',\n '15cfe7850f327b256e23b00627451560c5c6ab60db78d45b7ab286afb6f13ab',\n ],\n [\n '1503ca373757677ad1d911a2b599d01c46eb879d1ce21ae171c7e439846a85f',\n '583eb269b7030da6a0c324026919de3f9489d2ff6ae0e6320c36f05469ad66c',\n ],\n [\n '66e1819ba3ec4ad4ae9f7d7588d23baa004e29d3aad2393d52af204a81626ca',\n '505249980cbe6273b82ad5038fe04a981896f4117345ac1abcc67e2525c0ee4',\n ],\n [\n '5ec20dbb290254545f9292c0a8e4fbbfb80ad9aab0a0e0e9e9923f784d70ed1',\n 'bdb1ca3a859227cf5d00eaae1f22584e826ed83b7ccdb65483ed5213dc4323',\n ],\n [\n 'a5c1a5011f4b81c5c01ef0b07c0fbf0a166de77280f0ae241f2db6cba15194',\n '4444521fb9b33d7dfeb1247d0ee1a2b854ad166cb663d9dd2e686909362a689',\n ],\n [\n '1f35335de40e00c62642dac2fda8b30f071986ce4f11db849df11bc45ad4e0c',\n '7801a2c761b90fd4477ba0be9a775003d5dfcd959b1ed198b4681f15e7acbf',\n ],\n [\n '48db4798cf6821c1ffb8178b1d3bb6020e04186c96aaf4670972d367f4ed5f',\n '781019494df95b888f1578f1b4a3f8e125ea60eca47ef9207a10630671217a3',\n ],\n [\n '17f653d904210148a8e74d8e719a3061683c164aa6d79c902a19f185ab437bd',\n '6780e97985932c3860d810af1e065d454b1cb4be0e7ffe2d8cea7d52526e223',\n ],\n [\n '5c4d0c7432f9b0070436240f9855adae1467cdc9826952ae01b68cd52a3ad89',\n '1c5747f968ed91261b7ae9bf1023c999da9816e37de602d6a1a50d397752bff',\n ],\n [\n '6fedd7639fdaa2f7bad4ca0b391710f6f8a7e890250ae8ae4252bb8b39a1e58',\n '436a215f655a3fd3778b2335ffdc9aca6b98474e43d764c1f8362830b084f0e',\n ],\n [\n '7fbd45a889c5e9d127bb4f8474d6be7cb9796bbfff923b75e42a1ad4cae37d6',\n '484bd12622a6ba81cd53049c550d9ed682a8e765b656b1cbff9bbea637bd1f4',\n ],\n [\n '17d984d47937263f7966a3e7b1eea04071e678494bd749c9e02b48b3234f06d',\n '7b341ff08722c4e161005d0037204a7a2001fdda7af2cc1a0b04a027f115a0f',\n ],\n [\n '7f1822045db45ea07e1519c3ee1f7705915f35fe4dd8db1e8921b5d1c740edf',\n '33d41e06b93320ad1b3d9580380ec797a05dac3f1cc8008899110ebefde2f78',\n ],\n [\n '7b19453ecb74b7d0e2a66b9890ff73bfbbcd61a266abd6d82dbe665bf32f34d',\n '6dba2355420dac582b1f349609ea1c89b89bba2d1a68a0642f1dd12d86e73cb',\n ],\n [\n '273e82a15f395ddf2489a95685bec8bac62c4b459d1b28987d3cb27e4bc9128',\n '653375b48a4cf5d5b101c9ef533039bedce5dbeef3f59e8f168bdc99b06ca5f',\n ],\n [\n '3006c9e7fc6a553d8eb4e8a47ce9f10d1a39576ac255ae9e0a4ce3869e76212',\n '65fe9e2ef2aae608be309332d464f57e28f1df5de1a6a519751b056971f932e',\n ],\n [\n '5e8f384c8a4607fbe9789fcc52d54249d304d698562597d114c1d81452d3dee',\n '3c8bc78066b5d947dc1e405e326ee55ea606c7988f666748d259850fa259a22',\n ],\n [\n '7841b2102e9aa103fb53a642b3e167b21113ea44751ab38e0b5ef8312654db9',\n '71bf5c8308fcf9c4a7847494cd9bdd946fddf7d3a37e8bb0b201ff2343deb8e',\n ],\n [\n '40f68027420c11e3ade9aae041978dc18081c4f94943463aac92d887f922a62',\n '499c6062594a6c7e21a3cb91ea451813393bff365a27a08f1a515439b83cf42',\n ],\n [\n '6ce77a50d038b222634e87948df0590b79d66087b01e42b9b6d8fa30ebb1465',\n '35f5c46bb1be8555a93f155a174d54ec048c2ac8676e7c743054ddc52709d37',\n ],\n [\n '604f8b9f2dacb13d569262864063c2d4bb2b2cd716db6eeb2b1eeabc57746f6',\n '68c6799e24f3b44eec3049973445174727a66970f1614a782efa2b91ab1e457',\n ],\n [\n '73d620f3bfe77f672943d448d7dc05327adf64b8e7af50039c469d7f7c994c4',\n '4859deb36eaf0c802f0d1514602368143a33ec6ce8fd55248b59025debc6afb',\n ],\n [\n '3fd2bcd1c89d706a3647fbd354097f09c76636e93ae504973f944d8fc3bcc1',\n '677ef842cf5eb2444941f527abec567725e469469192354ad509a26ebb3d0e0',\n ],\n [\n '39222ea924ac17b533c72ffb2c47ffdc11d6a7f7c70fbde3a10fb0b8f35eb2f',\n '20dc4bd1089019bc1d7379b4feb3eae6eb5af59e9f253845da9fd633057e952',\n ],\n [\n '326f58994e1347f62e4102183215b5db956378d2f61f14aba4dec94577f53c',\n '7a03284c296003bbe05178a1d82efdb7b8125511d63e20e50aed789c2e52e1',\n ],\n [\n '53aa8939c74d4ee58f03bc88bace5a45c7bfcf27466201da05dc6723a5f5632',\n '2e32535ca7732904a048183247b04b426ecf9b39fc393a9cebe92fb1dc7a7f1',\n ],\n [\n '6cee1a03145e93b3e826e6067005f09c06099c98198c91c222407ba5c8c132e',\n 'beaecad1274e7c6e5476a100c271aa1a6f86ee5a9fa5c2f26124d5886fa63',\n ],\n [\n '3ec659b8175e1be1bd5a252108714776b813e330393f587814f5f1f32a73332',\n '529a5cf9f8c237ae69a94217d173c8d19c156952041f5c980da557990863fa7',\n ],\n [\n '3d66ec5963d0c534d4139c8cef2e1ac48b3e7965fafabf58be26f903318af4e',\n '3d3f2de7a95f59b683725ee6283cbaf31f97c4b600df9a4621413223a468740',\n ],\n [\n '7fb38ace8e0932fac2ea0d3eb676db8d684db1817e2e4d59da7996ce398b4a',\n '68f92bd5768cdd4710249f9d49ef1d5654e497b9a4ba10bd2971366d83fb400',\n ],\n [\n '1c4a49314d6b4969cdd142c76ceb7682bfb868ace7f7568b0fc8635bda5a9fb',\n '5fc0519f1f4cc10b5771312458748c036313b87707ed0540026ac64a5955aa9',\n ],\n [\n '3073c95d08d3b97caea5f0be16b2789bee766f76b7e5499f8ce8f96abb0f344',\n '52a8974b4eb9a1f6a0ae2c83cb4715bf18d73f057255fcb3f63b74f7e78f590',\n ],\n [\n '44485b16d597a5de3604df6f7ed7e00b8aeef9e7e8dea8688255153b8bb16aa',\n '6cccb0ba170123266f24b5d93a744397dc2c44820edc4f8f5b9a0f5c9b3b940',\n ],\n [\n '7618f77b7b32d512688dd62e0b48231d9574c6361e8be353a7dc04f7c3a115e',\n '78ffcd16d80636381ca231aae70d99c9e20298b4f5388fd823ea9fa2b8ddfd9',\n ],\n [\n '7dc82fee1ef95cf5b3720fcc07f63246654bfe39762627839da40e51c75654d',\n '4c0ccdd70955da74558de20c88352df8a02aa97e4d5971c500e884740a8cb62',\n ],\n [\n '7fa5d460dc10cbb418b444d9bde97e92c70a99a222b99f244dccee7e62cc04c',\n '636163901baa5b7576c38c43407af578b8c4607e01e86011ae2dde587a89f84',\n ],\n [\n '758930d46006623a756c89bd0cc378f6a3c1f43c9a0edbb42274c35e75c16d2',\n '1d74dd9f81c2fec811b8cbd6168a745b0a111932b2a345265ef2853b50b6245',\n ],\n [\n '7332ee0626b044d664ef228f8cb84df7c643e52f6a2591ae1c9007ad61ec16e',\n '229bd8e630572cbdee54283234cf3e9f060e6382f99943bf234119d47b54470',\n ],\n [\n '78a16ef803aa20a075bb2f66c61bb2dae5698bebb94a0995fa74c3d53de1614',\n '246d588b68edb6fed96c128349908c42dcd64c46341b205e79f4aed9b5d3675',\n ],\n [\n '6e1933939bd03b67bba753cc0cbe7d2f25bad68c993887ef8c9e2fcd59b0647',\n '599413f7c204a11a5ce315eab11299ab7326603412bb00bc1c59ff75a37d6b4',\n ],\n [\n '4a79957a5a1888ad063b51c69565a2b48e8eb917183e220a1c8d3374526d30e',\n '1f092de0e069bba7fc5386e2e9a114c1618f88c4b95e220cd35ffe96f99fcad',\n ],\n [\n '3148aa3df9ece39aca84f59489f2710522216f14be6055ee0027529d1d55e2d',\n '617e9a52a92975db0ba1977f71116f7058a0d31b869ac7f3ee2fd80b0c5100c',\n ],\n [\n '5c1188e72384160ae39d07328346cda4f6c12d227448e6236f04dc971625287',\n '1643006eb3a3bc6aafd5f685cf054f2a572e6ca58c0118bcec0b833741f116d',\n ],\n [\n '3f72efc93c9b71adc4c51d8fc69d3940b20d08733af2b7d05140fdb1d1c1004',\n '7399259987c8f4ebfab46e522380707e58427d3962ee0c2a91760813f76d232',\n ],\n [\n '3129b34c03c51aa8f611e91d5cfcc9bd3ef108ee66e6d3ee35a0e0e50055bb',\n '563b18b5650085efb4cf179a029e6afff27b1d3091cd28eaa68d24fa1f801c6',\n ],\n [\n '16eac0f9fb4c67cf89a7fa4ee615bbe731d8edcb709a1b9b50c7d873a530f52',\n '7ff8288b6e199ca8f316192881424a37fb080c29daa76b1f0edaccaf580a80e',\n ],\n [\n '75f6b6028c43ce832f65d7e8e620d43b16cba215b4b94df5b60fc24e9655ee4',\n '35e9ccfaed2293a8b94b28de03bcb13eb64a26c831e26cc61a39b97969a2ff0',\n ],\n [\n '3c6152fe093bd6316897917ec56a218640ec1b2148f21db9b14fc7a5ff362e8',\n '6eef2df27ae7d63a28856b07b73e7aad7ca94f317201a1e675ffc6f9a1710dd',\n ],\n [\n '54e01b5fe4fd96052aad55b3f26b1d254dfc7e2525fffb9ae0a77eb8cc5579',\n '7c3d39232ab333675b219abc766ed9b4782c840e6b046614dedb8a619696eb0',\n ],\n [\n 'd1e63f8ea8a76429cf254a6d3b668761f0dc572d4bfac4fd56d9eaf58fb6c0',\n '2bd0a84d3908a63085824c9329a0983913006ba155b56a58eb3f9becab29c45',\n ],\n [\n '2d6122f2a702edd4da7385b1580796a71d13bd72be94cfb3fec01149c006c2d',\n '70eb282fae992efa6f5915e578b640653549f23385ef3a29ab29b1b9b8ad63b',\n ],\n [\n '752fec14beaadb5ddbba6b3a17fcb86579fa588ef407fad0ea07dbb22a640d3',\n '3feb6728eca21a1e84e8f9f23010387a53a96a1cb62d86fb37996150a1299ef',\n ],\n [\n '63f94a92f27acde8f5ed949b459506f51d70c85bcc61a34d647264ecc53c65e',\n '37e5dce0646ee66f4fdb93b82d54d83a054948fa7d7fa74ab6b36246fc7383e',\n ],\n [\n 'd6aa909287a2f05b9528690c741702c4c5f4d486c19a46c38215f52ef79c7b',\n '5ebe1128dd81093df4aca0df365d58adab848d1be1a94b95eeb649afd66a018',\n ],\n [\n '12866812b3053e2f7a9572bdaf5ef2b48c6fb62a0eed9ff0356df50e7d05557',\n '6785f7eb2cd1c120e4c7167b46861d10117040a2e9f2ca86a71e9d67df90613',\n ],\n [\n '46a730d05330b1b13673cb8a1b8f45460035e4a9f1a1751cfba099c4355c1c',\n '76fb0ec6cd16a8141cdcd875c8b2de9fce42d296072643d148ac7e7fa7472df',\n ],\n [\n '4bd4380a22900bd34835e0a908eacf4b6edb61eda0cf483f9212453b37e7516',\n '5e9551cd20d8d7ddbf4366880b7d5267385afa1966ff30da4baaf273b009d29',\n ],\n [\n '71f1994ad40baa2922424ae222663a64f93d8b67929e9a10f9e4c1ab19f3833',\n '85320fe68ec0d37cc19fdfd03589d66906ffa4046c80e1b094a85f27676346',\n ],\n [\n '5a63b1bf5232f28f808765c6be7ce1f81c52145b39f01c879fae0f4303bee61',\n '3bc5d6df68bb6d0577bf9ae2ae59ec0e9b2dc7dd56ea179fb38a41e853db950',\n ],\n [\n '161ded55ff1087032381e6c1449704f63ad2d88df82dfc44a71890fa09b3941',\n '78a52e0013842037274ea75daaf8eb4afc04ccc4b07bfaf3f5ee47d165e01b',\n ],\n [\n '1bfce5229c5fbff5c0f452a22317fcfcd9262f23df41840f84fe7d44cfba1a1',\n '66b387872c00e63c73006a955d42cf49c46c5708fc9d1579b9ae38341b24a3d',\n ],\n [\n '56d47dadc9cbd1dcb2ee3efcd5d4af5e6aea71df10815c68b54a14e81d11b44',\n '47e966ba54df48e9b612a903685e0060a67e4725402e8cb4cf654e54e813a3e',\n ],\n [\n '4b1c44438afd4ddf20a2cf612df2ee494ce84c7274c5529e857693e73018491',\n '430403bd31d8f0677e06abff7159384560f27b9622943fea1a3192f14bf40d4',\n ],\n [\n '7f7281728fc2214aa1dbf13176a4624b53814734abd570eb6ef7c7e32379606',\n '312da47be347fb3fa2c9089b38df372560dcace2effeeacab4d96ab11567295',\n ],\n [\n '16a28884a1be8183e0d3fc0db84a9afbf47126fd3be548c2a584aaafbfa7dfe',\n '7c3f57b3b895564ba562c1cd80b71fda6d2e611665c6ab87744f5390858fe24',\n ],\n [\n '323339f37b327a731232a9580e79952063c7c232bd1380146d8a83c285f4b8b',\n '4f16be1d983c7232f92cce6b9690695978d42cecc8eeb8c206e125d1098a265',\n ],\n [\n '624d26cbaa197e104eb83cebf2adeed09a5cdad359993fe5e3529d4d0def21d',\n '261b7da3cfb55c788977e0d8d640e3e93ae5a325d962ce85c816d7d32cfc430',\n ],\n [\n 'f24ecb7ee83a3e28dab54a330dc93d0429a7aea36412e922dce8fbff40d60d',\n 'b043e36a258d1df1d21b0cc7be9c4dcae1bd4ed326c110e668ac23d86805a6',\n ],\n [\n '686cea46b710bde1231483bfdbc700cfa3da6ecd5841c0e0c782f9ea24328ec',\n '7eb7407aa58edd6911c7c7e8d1e03bb52ead4a2415a0c33325872ff3a521dd6',\n ],\n [\n '3866ee1186264549df3dfcdf8705c0380c9372eef6d4081c2454d3aded1720e',\n '634c6d3e8eb8af652a4be73e3b613452c2213104ca875b66b4b15ee5b1716af',\n ],\n [\n '484c687cd2969a1d20a58cdfb9a60f280a473284503b1ecff5de514aaf8206b',\n '34d44d26b7427e51a646d1b924084762f5b461685450f21d6a472de565bebd8',\n ],\n [\n '203561333771fa0fe22c4033349f7b877d15b0542a5598e81e067968768247a',\n '2b6a533aff6e2163a36a2a89cb7415848bef48db40f952ffd380f47676707c2',\n ],\n [\n '2ffa6cca6233695760251206fc5e34c8d3692498589478cdd3d5b09f0b7c05d',\n '6c57d605478fa9626c4ed769554d075daa53e1a1d0bd4d94174d3bfeeb11ad6',\n ],\n [\n '5dccf0fa46a5571f204d0b033b45f299cbb3d9f80fded57253ea4f1c64faaef',\n '30a38e131ee8756ee5ea2a3e16618a5dbc28b5b9311308bf037ecc2039dfc7d',\n ],\n [\n '57b0a2eaebeafd950221facdd24790d7d1ab8883e5c5d55635f0d14a1ee4741',\n '7b41cc478fa6be38417271db8ed12efc0da6982552c1496025d2df0576bf4ad',\n ],\n [\n '611b5725101f611c387ccaa13889ecf3bb5595071a179ce350029bfca4ad7f1',\n '3129755977abc8995fec7eec1123a1561e429fde37ff36af002d3211831ecf4',\n ],\n [\n '1c06bbd0c52fdab9fcaf680c7a93fb821e538a2ed79f00f3c34d5afb9ea6b31',\n '3873d3bdfe0be0157bbc141198dc95497823cc222986d24c594b87bd48dc527',\n ],\n [\n '275cdbabc989c615130d36dabfa55ca9d539ed5f67c187444b0a9a12e5b7234',\n '2b7f723e68e579e551115d56f0ae71a3b787b843cc04a35b9f11084b006521',\n ],\n [\n '6cc702eb20f8b5940c7da71f8b1801f55c8c2d8e2e4a3c6c983f00bc1ffdd95',\n '5d15b3727bc66f3aba6d589acdd139fae115232eb845abe61fbdfc51341352e',\n ],\n [\n '44defb418700cee8c9bd696b872adb005490512d8bba081f8f99a9f15cc981c',\n '3b2072cdb1d919b2b65b5cb3557f0a3381d7ca293c267ca4a38f83e77bcc96e',\n ],\n [\n 'fd83ce77b1578b3a9b8c3cbeaddb1504d2fd4a19c901c21ac65961224e4966',\n '110cbe64fc10c6b9c66f15ca406a35f50b723b35d83c5eb9797a57f8395f4f9',\n ],\n [\n '9dc6ff90e341875e113bbfb507724dc7095a280d2f32cb6ba61a1e0c2d2aef',\n '4aeb622896c852c2747454e8f172c9482955a42ecbe522d6ce07ecde79d0a51',\n ],\n [\n '71c58b0e47b9dd9107ebd8a8c8fa9f0534e78231bac612c1ddc7a94edf33eb7',\n '7f90edaf4792bf8334adbaa0f4ee7c654312725af188682d75f34874c4eccb9',\n ],\n [\n '1f6de1f14988778ceb2dfe844f92394f1f1e72fd1581ceb3bf336c95ce50345',\n '4f6007ed4e022d2ee9fe4ca8207c5f6c766c4f3b85260e941fb24ad0dcbf0bc',\n ],\n [\n '3ddc3ac25ede4a67a97547ed27dc920239b585fb3624177e2e8d59eba678115',\n 'a9afd8f8bb759cbd1dff2addc63f47da4ba1291ea34229c09c0637dc5c8d24',\n ],\n [\n 'c56b0269d8431556e471cab9d70edda3a37b391696f107b2dc370631de51d',\n '729c52f6b134f733eb750c14bd9f95c077f0f6f6ff4005701e5bedc6544599d',\n ],\n [\n '44d32ce19ac6807cb22e4f25fe1486a36a13926f147fbfa054b63ff0446177d',\n '212a21e8c124c9cd37c80d2dd66913ceaa6b6f666522f115c39382b2d5925e8',\n ],\n [\n '35dfc16f3ae6ccc06a267bf6d931601e52f3e45359ffc513570b65b96adc4f',\n '74311d10f4bece01b5ae65a6affe5c931463aa1b73a3320eeb41bbb7bb1ff62',\n ],\n [\n 'e0acd9d2d907031b319b80121dc90699d003d220ea785d50e5033cdb3b1a03',\n '3911ba78d6e507485d6374b0f7d2e6198f6462a7d6d3cf046404a07af690357',\n ],\n [\n '3c57918ca254c0cb7dac251ef4e10c7d82327969552eae15d26c4c52660922a',\n '5fd5f5ff3f14e671548074114c72c48409df8a2e71fc8aa3c8acb506e2a88df',\n ],\n [\n '222ad8b61e219ba2b581f606b7c996516850a46a3db72fe1f72b5a9be6c324c',\n '72015a5e2db648112abd284fd867b59fc5606645177d26cf6e9a655c9912d42',\n ],\n [\n '3c86d5d774bc614469768ad38f7be9a53e9a233942c5c553b82e49aae684764',\n '480febea8229e130dedffff89c11f3c43e11724e6bd89d5566d78752859d41c',\n ],\n [\n 'adb73bb8352d0c10175df371f7868ef2c9e0c79ac788430c480c0f7d85c187',\n '60b564785248111502e6f39c4994d6293fac22bc25f4d764b2fb1957d3c9bd8',\n ],\n [\n '3836ab8b46cf4f453a22532c886940b982029b29c42adca90ded5bf77e6bcb9',\n '7b15e91d6355f147b171a90b064a9d8b2d7bf3699bbf4987664c61c950d8996',\n ],\n [\n '12ed96af1a97c45ec31f1531e96f6fb28a03ba52ab8484545fbe0dddc97bb32',\n '6d1f522b6c6cad0940cff8e23decc72bb8d4164696af031415508b025aa8be1',\n ],\n [\n '27382994ae5878223ef802e9b4882f481a1b4008f1eec8484483471f7aa742b',\n 'c31750d242b3975b0026a0e86ccdd17d0f680a8c6f53f197fc25eb1f777917',\n ],\n [\n '431677eba3715455bc235557518a74f3b111a88844ef13e159ad44bc16de3e6',\n '30000e1eb6a17d9df776981e65c6e500fded1ac12003adc9446b269812c9197',\n ],\n [\n '4b563e6f42589671579eabfa2cda5502b361c46a5ac8d45c8ed44741a925b33',\n '627bdb41678443fdd1aa607709e9699b652308615f4bea760a3b79ee0d9ab5c',\n ],\n [\n '2932fd3f81fc973ca9def6b7f1bb50f980fe589187cfe9e9f52ba4d356cf2c8',\n '1e6bfd00fa976c4770263a227048214c38850fe0f059e7b3d2c7871ef07d68f',\n ],\n [\n 'e44e4f3d96d9dec775b996be57e57fdc28e7c68023109b221c414a244a0dbc',\n '58b1e52fa274812e5184e00e9ad812bec2463140adfb4bea3b2d665867dcc9',\n ],\n [\n '7fcb89be1f4bec745887bb891e53fefd665c53d00a9e74de16b8a7e1f7adfb5',\n '74af0b06633f779897e199609c71cc5649bbb65bc2c0abd4c678f0480c198d1',\n ],\n [\n '62a381ffb904ea3ff4d451d4c8459457cdbc3dc2fd2da646a95d8c1e90c0b7b',\n '1ba058658e09db9e319fa73de8ab4a992b71e4efc22c273725bdcab84e2a315',\n ],\n [\n '1b0fbb7a84c67e668450a54449c7a46261a2d355589f8b84ebfbaf9a77ee938',\n '44f8fffa33dd33a6146c35d196595e22cc4a215f61ee9197cd751400970a1b',\n ],\n [\n '78fe920bd96a356d4d95ee34adafe8fecf071d3107c36f047b4024ddc4b3eea',\n '6162f29607fdbec10181fbac6e57d5cb41b922c5791fb24bd28bcdd75d16c41',\n ],\n [\n '5629b849e026e65d119ac11821d7ab7efd9c52226f75c7427505d6818bb0c8d',\n '1539c0f90970ee8b490e45bbe5568170e5708521a0e59f976be680595906feb',\n ],\n [\n '62bc853f349bac8c6e5921d27ba85dbd9ba20a375d70a7bc008928f3e123b04',\n '6acfeb1de05ba43c3ef1a9110a983a320e77b3ca294abbc04aeca19b194f26f',\n ],\n [\n '4cf4bed663464418285cbae359b5d84ec76b5997d24f3640984c7663421190f',\n '941f818e3e3e8fb1568da85217d17f9250ebc948379014d900a7b1a848494',\n ],\n [\n '52ff3d9ffe9a302f6dfaaf74bab57c08027d5cb699a69b30830540c0a2d47a1',\n '987dd8876873778d933fbfed37aab2f7d6f669c37024f926b1edcb2ca55782',\n ],\n [\n '1109ee32f0bc53de6bfa457060b366e909d7c18061ec9845f46ac715496897f',\n '38f36f172bdfd454b9285f86e6bdece8fdffc95182c7d801b03c671cc55139b',\n ],\n [\n '4b4482f1d84efe23dadf3bb10df3dcaa251312dcdd604f616f1eb540e1f3232',\n '7c9c149dcae9135f940fb54482f9c3cd8193721643a6e23157b8020410d439c',\n ],\n [\n '69cb459b9e415b7581ca163611c470d875971d5d7949de732d1f0f200544a73',\n 'a7136fa9dd00c0469863b7def3f83a5611ed628810d7e807e7a873da5a9897',\n ],\n [\n 'b66a4e32ac9a4baa8f64780acd94ed3628b2b0ea874ba4dece629af65f9e62',\n '24328ba9996a24389658e3467b8b90dc3927ef8419fe28b3f55b1c1aaa51915',\n ],\n [\n '5ecc3080062dd451236de0e4eb91c5c75100733364bc5469f5fa76f79021ecb',\n '6da4abb9031a27b5be94529324fad8026e7d871570780081b0f424d4fe543c9',\n ],\n [\n '1e3146f00880bb22486d5bc73e54367d54251f4002bcf342d0393b05a4b9ce0',\n '23b6fb8e945d3205f633ba724202db5a99305f807137edf942cd60eef867699',\n ],\n [\n '2e1da8013285598b899f026c6974185db12c97b4c63509769d3d4ad1d18a4e5',\n '1e7e7b668674d1593c39d58bc7bccbf568208732b3519bc2cdf93db34366862',\n ],\n [\n 'd26c3f389d81709506f184b53871497c8d36c5c9eee8e3737358204c1acba3',\n '34649c3d39f3b825947fedbca215ae30c5a5995e93b1c8efca4944cf85a082a',\n ],\n [\n '91300478a83595d548f32f259033291fc7d083953b0b8bde88c7559660c563',\n 'e5d2bff57fc6551e9b80c06ac7314a71907cdcc66ce82f2cce721a670df10a',\n ],\n [\n '1f7abcb9d462c63ffe92aa56619ae8590089cca4d93ee3e5f34a63882452cc7',\n '7e9f85c7b7ca6e9a4f3a026d1048adbeef69ea9d876c6f647c257b879a81bdd',\n ],\n [\n '4d2caa1323012e4c83b0ad387308b8aef5637bc35ddd882e7f5e41cf2ca410f',\n '47150e808c81a540b6f8864e9d6636589cacaa516f82caaa96506edfbd6f0e',\n ],\n [\n '3c10a6083c38351deb3e6d1b386827d0acf48979b66b95249eb8700ec26b069',\n '47e34bfe561d903cffdd1d849b85aa3cbd31cb4a9bbd8cc2e5fd2f95016cabc',\n ],\n [\n '758bd54868eec045d0b4d3d2bc415d24bce13fee47cefdfda46425c109b657',\n '3392a7c66ea3bd7b044680bbe9f78ae86752097404c067e9d2572f55330df83',\n ],\n [\n '19e718e0ca1d2d6fadbc6006ee7dda7a385430e29f5e239cdd4bb7c3fdcb2f8',\n '5c68249b7fe03ea2e13481a63b6cd4bf74ce42009a89fee0b3f8f968b3ec709',\n ],\n [\n '28077f57ea62401806367e6d54fe45d02de5b072db787ffdcc3854e12a3e855',\n '14f3762689072f5fb41d03e94b01808c739f6d42b7b785b0e464100b150efd2',\n ],\n [\n '3b8a8cefd017363ce867265af3293cec081fa589fe561830f0078778cbd338f',\n '69ccf2383cb7b4f9c806d72535812483e7c5e9a1a5928529d64ca7e085e758d',\n ],\n [\n '77878f388d22161a2953e5aca6bac1ea480e102f329574b4b201640d44a296b',\n '7eb35706a90a03aff7c2fecca72659136547cee98038746db5aba16fd7178df',\n ],\n [\n '97332e6da70961f2ef31b7b628f1018d21db8db015922a301fca7d6fc6a8e6',\n '2e37b06f639fc7a82601b744570a2619e543cbfaf60e474107fcaf4686d3223',\n ],\n [\n 'a81518d452d3aac48bf0386c3ff170ef4e684a4def242c964e129c64f4d647',\n '37506e44c85908ec7b7adda9547fbdcc2e3605151fefa77fbf127ce3bc938f2',\n ],\n [\n 'e80336b2220b1d666074f6b0dac85353d0e4c2e8bd0f37055a2236a6a9fadc',\n '1cae76d73eda7a5964c5d9d3ad6748aff51f5543c56441d2fdb7b444a39846a',\n ],\n [\n '2c01fd8430ecb44e066f352c4f697fc9fda177dbe162f82862d7b9ea8c918de',\n '6e1dfa99640fdf5b30603d34c7c97c1aa6e6b7f3a2c52a21fc64b0fcac7d591',\n ],\n [\n '744e37b511cd0ddcfe15f3581947014c159de81ed055d15a13c7a2d1fa39f0f',\n '685caa8ff6979a6c63640ac638a3f9c75737f2031bd55322a47384357af164d',\n ],\n [\n '40e627ff84e1a7a9068b4368770f5956128a4d9e9e33e9cf5e24d9a242149fd',\n '2465bd6cb20bbdf810e2bc5c3c458cecf4f3aa163a7ac99c2579e5f33417f2e',\n ],\n [\n '5f635af7f554a17bceb6ccb6e637abf89ab6dadd399189b0a0390e87b1896bc',\n '2aa6238a69f89665646c0e3ca2ba5f709cc6e14351cf71e1b00ec45201417a2',\n ],\n [\n '5edad3063c9fa8305978d7e6a4e037c9fa519b8023c7608dfc3b66e5c1e8985',\n '49f405d07d7d01919da51159ecdad1031a5ac208c026fdfc14d38f633d92183',\n ],\n [\n '2fdf2e8a45858c12926a1f25a62255fb2d02d0149a15ef669f859806683e649',\n '61cfb686bb31e2524470d4ad2ae09e3cc91b16305a21d748098feb1d8ce3b3d',\n ],\n [\n 'ecdbd7c37f1dffa3943977278da3bb429afdf948b4ea6cdebace3d3be82381',\n '190b67fb34f7f3ad6afd3d6b6427aa327547d8ac0fb4deeb0feeba1f63d6c60',\n ],\n [\n '233021b483f578dfa5222f8cccba5766ceee0ac65f6d4a3b1673b302a21fb3c',\n '7d4b6d44d175d4b593f06f5a6dcba2cdbc4eaa2097abaf613123546866cf4ef',\n ],\n [\n '42db4e953c2a7a743de9fe20c5798f2247f51db4eabc6f40e86c13909a310ce',\n '12c1a0764a0b9f3666e431923ce15e7fcd0ded5ab153f0b48d362cca1604e65',\n ],\n [\n '30d539e2b545fb957e40e2255f6463b52d227c9808472cee6a3d521aa283a44',\n '5f9eccf747fe6313570f99e845db32b40070acee9ce9e34da7f3c29ca53a07a',\n ],\n [\n '4bd64e5ade3e2733580a6116b4af328751198e7128f9acfe3a3496b545efb5a',\n '4d584768900dabfc0dbaa086632b8051bb3905ef79b84d96c01514441d0cc93',\n ],\n [\n '62d6e771f02e591557197d13c3e77dfa2d1794ac1808407bd8227c4be31b466',\n '5c6f5607c1808e899ba36a425911fa8566b7ea9cc80de8a80538c0fceb837c0',\n ],\n [\n '5ce406218cb2852b1d2fe1836b19462f664631785216e87ffbce26030e2101f',\n '5225f107743c255ab50e7be4a090fe39478d1ef4ff558468559d8cfa87bb94',\n ],\n [\n '670286486e8dda3dc66b0ed3149be7697d3e06c8279844079daa7e42d5af728',\n '26becabe7430380c56e320f5ae3329569cae7b0af06fd5327ee23979d200eb0',\n ],\n [\n '3ef448df33a4394c43e93e5850cd0c5a6dcb18ae1cd865d00fe8ede9336a9f5',\n '56711f6ab7e0e4f7365ac34e284ac2879f40208c46f6febcc1dcf7146ecf015',\n ],\n [\n '4b63fc130288e92f2d6ba238caa7a6364804e29829ac037c57df32fbf762bc3',\n '1eb8c80af55278b4113286c038fff2bfad2da62763bb03426506b869139da0e',\n ],\n [\n '4e7e998557b29a95f805a6e2e26efc1e970108272d4755738c04f28572295c0',\n '97cfcc2f447bde61bde71049d8200a74a3028b21703bc139143d81a3623f09',\n ],\n [\n '574b67898f02964c408f68e9470e7b615be037e40b824e6617f89cb56c21219',\n '49392d5f8e6740a1b0b7444f56d7a17363f8656c6e4c628678c86223f2e46c8',\n ],\n [\n '7e8cb50ea5d5c1b09e219e7305bcb601d99b6d7185b1c388aa8e36fe1e56554',\n '47fefa308645455c12ccb5817da338f0c4f423b341aff4a9d158891a4fd69ba',\n ],\n [\n '67266dea9e71b4ed2bf24a597a823dd048cf31e725db511edceac72998c9ef6',\n '39babd65850befde1f7c28e41dbdbb4caf82bbcf3bcb5b33161f1c2960b2d8',\n ],\n [\n '63e99c2cb9c74eb9227d48065e27abb8f606df8fc83b2c44e4ea38b046bad2b',\n '60494a53dd13ecf34e08079d343c88fb655d6d810785af81f08d5aa9bcdcf9',\n ],\n [\n '3cf0600b0f5a2a4eb78c487cd385350e8c7848e3f6983231881d7f1bbe28543',\n '56dee4288528de609976ef6b903b652127c37b0590e91a2fdbebc3f11df2628',\n ],\n [\n '758f09245fa4b8b23d290ee2b3bfcede199b4fdb11f3cf2502a8ceedd61b129',\n '622d9baadfde781e985d9722e0a04715666769a4cc7a9bea0b96d6386be1746',\n ],\n [\n '38e1a45b81492aa95d7abea2b08b8c14dc0b8a41108b036871fb737910ae18c',\n '145c611262656385e5ed6243568cd3f9f59dbfed7a01ba11e22bb8bb272e08e',\n ],\n [\n '206e54ca53a2f155bd4fc45bf2edb77798ae6623defd4cf22f2dd4a7d119dad',\n '6c94e7f0825ad81680e4cdbcaaaf4df806d57a0d1fb2331926c3fe2b79d22e8',\n ],\n [\n '56e98d2862893caebf66180e84badf19ffc8b53041eaaa313ae7286a8fac3d',\n '526306f9c01afd6e0c1198ea5de17630f5a39c4ecd02d8e6f0d613c355995c6',\n ],\n [\n '4fa56f376c83db33f9dab2656558f3399099ec1de5e3018b7a6932dba8aa378',\n '3fa0984c931c9e38113e0c0e47e4401562761f92a7a23b45168f4e80ff5b54d',\n ],\n [\n '450cfaadfecdb8a2fbd4b95c44cb1db723ee5ac9677c9c188b3d7c8eff4ca58',\n '1a552bdfc0c81be734f1f6ca9a6dd3ab4daa61c11fb53ebb7046eee25d617c7',\n ],\n [\n '6fe20e5c8a8004e33eafc84d16ef770f2f0b7bace19adaaa150f987d295a34d',\n '28a35040a2ebe9a14a162d3208d5eabc6e2f3a8310f926bd80be65aa71775e2',\n ],\n [\n '1bd65f45a35bf62ae8f9ffcbd7de2976b90518b6820c219f039c50043bb1edf',\n 'fb5f0f8659f9b6ed7cb0ddd7999506d0c20b26bbe69d1915a31842cfac41eb',\n ],\n [\n '4ba4cc166be8dec764910f75b45f74b40c690c74709e90f3aa372f0bd2d6997',\n '40301cf5c1751f4b971e46c4ede85fcac5c59a5ce5ae7c48151f27b24b219c',\n ],\n [\n '21cfbc678f5a279ebb6ed124273c8df37eaf12a2d04180403ae6b5ec0b1e1ef',\n '4478ed6a346d899ad7b0b10350270aad39ddd5b68529297e4c91a54357f0a7f',\n ],\n [\n '350bfefbe3d864eaadac9cc1195c14159bb736be743aed7380d2384cadd2046',\n '5e2a4b3ad0e1d7b9b8ef72b10d68a80e5ee691d7db591fcfbaad6240d41da8b',\n ],\n [\n '529acd569127f73c8d34345f87e96cebfb48ee12a00a3861cda209337ed94e6',\n '3120671a89b705e5bfd99b0e7fd2118b4914a3ac309b3d74527cacb5ad7491',\n ],\n [\n '55d3d7956a97d10e65a4d8ffeba40deaf0db0b57f8e022cdb3df6df613f5c6d',\n '159e59a6f92f48fcf85aa96c1a03749a4c4e2cf9e2bc94dd36796daebd9b8b9',\n ],\n [\n '405f019ee8f2e972a005c549b0884b5051f63d1e78480b73208dc07d8c65a1f',\n '4301a3d0c285ad309ff24a12c100ead7f48ba1368143712f32ac141ab4d9e8d',\n ],\n [\n '376d59b298d982f02dccad0edd5bbd4e5e8fad7898750675ed0856850a7babe',\n '5233b12bbc50564eb61cc098a17d3d97f06ec7a230380e4c5d3b725cc318eba',\n ],\n [\n '2f55624af6109ef04b2ed035a44a904ace8627f55889f011f768aabf4de9a38',\n '7f64209ce7dfb63337ccf3d8c14f4093295f86996cabfee23b1655549aca089',\n ],\n [\n '3b8965e942bed2714bc2e685fb103496e1e3595ac6a343d6df45fb5ef6979ed',\n '5b7cac7a165cb69ae103dd9052fb39c00ed0aad47989005aee53972d82d45b5',\n ],\n [\n '7abfe3accdec1eae1a50049efdd9a8eb7c2921a08e8bf1fe606e9d5a4039ec4',\n '3af178e7e831f8148244d2d2b284a32991852db6212ad0a9d77540ef648a5fe',\n ],\n [\n '4983196df6ad7d6f0a8d76f86af3863ad8611374a03fc0fd00793181dbde9d',\n '204c1f91b70f975a21d24a8face664e496f00f602daaafa69a3b56098a4cf89',\n ],\n [\n '79e2b91c1531a3b16dbd53e72d94e16bf265cbec261658151acfaea3718ea72',\n '3d9bdb47e8b148c1c5e9e694ffbc2cf71aac74ae1a85e8d8c3f77e580f962eb',\n ],\n [\n '297efceec61b3be17565843cae465c52524b4ecd9331a4170f54f7de8c4556c',\n '6ccef1733624cc8b973ac63dd54e7a53604929affe81c3439525ae5ed6af993',\n ],\n [\n '44f04b1966264a23ccdc870c8563ad2efcd4c8087b5469b90e792287a5581c7',\n '1c417f0e9829fa3d3cbb7c3cf4dc7aac04c5bf66ff3f86b833a42c533aed1fc',\n ],\n [\n '6ff83f5d8b51db3be0bda80eed2e2adb7037f2f58f705e88f0f98197431ac26',\n '64f59b8428894c2b7afd740866065ded42e716c7d48accd3f117f22768ed9fd',\n ],\n [\n '14aa8187c9559f77cd1cf96b2dfc949182529936f2b0b4050ea56e134073b24',\n '5f36508c68b1dc586f3fd3f4e2bd29c6d8258491b8a6aa19ede811ce0d3d0a1',\n ],\n [\n '95e8882a68c5000d1c2be7c0b43e7f2a6f8de906485241f0285a5c73a27a83',\n '1e4cb67207ab73bc1e5d19fa2146fde6d03021393b77a55df4ddda1fd28f5b1',\n ],\n [\n '2ae0704dacb3da47d564514b4c3543505b403ba09a248c6e74593cba1867ff5',\n '5a4b5818088dc9ef4066b90a8893ae80fc89584f987ec1928ef9d72cea2bd67',\n ],\n [\n '61a10898a76fb99989e51c0e823cb60b95ec7ccccb917c42b2b28014f5fd94d',\n '23d8ec1de45366d3b86c64c2da05a2ce3d171adf52ca5522e652ffd0eeee795',\n ],\n [\n '79884133c879cf07734976fd64de220c5a972e04c2a3afb74c362d6c3beecbf',\n '2aaa0e6d4891b792b5643fdf09873343cd0e3fbba3cbd0601b481a4083f32b6',\n ],\n [\n '45f73d2fa82be6c5ccd0f62d2237efe8727c479967d27cce28e42b9a44bad5b',\n '2fa4932215f72d56d8be5205c5851c9b3e5f2a14468e4a7acace5437c6b27dd',\n ],\n [\n '37f53f771850f52f9c8f87b53c6bf0c93c2bed76f5fd1d5697356d0b2325007',\n '50f1a052b79b446fbc7b93ffa1a4515f6c3be3a76a2b0bc5eb8ff327549960c',\n ],\n [\n '71bd6d23e0d2f312d47582efa609101f15b9ccc571fca8ac4fe3457c67fbc9b',\n '3b3fdf86bd4c7fc26d60540a6439b4d179dcbf7b91efb0ddc60dfbff9a148c6',\n ],\n [\n '78219ba049438385b829c13a4993874a4a326c4143de0dd581c7b9956f99b06',\n '5505f1268dcdd4ee01b77abac3bfdcbf3f0513ab097c69ff777b4a631aaf256',\n ],\n [\n 'b81e924a86536dcf68bc5a2ca2065a61103ba6c9eb0ae4cf8cce9dbe286f15',\n '653a6dfb51acfe8a844fb8362795e5549d424aed88d3a090366a44f840b5b83',\n ],\n [\n '441c0d7b7aa705046dc0e07ba5f33a7d9df23f694a05192ff8c2d7be2aa3fdc',\n '4c06568c0902bb99d428bfa0a946ed0f0ca0a51fbf07cad88e06e9c78e38a59',\n ],\n [\n '2569c8c78b6d6b92533f29f767c95720d377fa63ad5a3b9827ee0a74b0488aa',\n '4b59c81d3cfe08834f946d9d57614f5366e0bcd9349475aaaebe01341196fe0',\n ],\n [\n '3f2fa285a0471647b214eac652bbad9d58a9f2dd2e812aff0210d0d8a6eb32f',\n '4cdb18e1c2848c2b52c1a6557165bd1a8f55c2f7562f5cc0b326f73c25b696c',\n ],\n [\n '5bb5141ab4fcc5290ae9151b8045a2cd8391547ce7b3b33cbbb10f8fb538092',\n '5a36bfd52acc6a83a9913b937ec086cc27fed030b5fa70dbc5d3c12c9515f56',\n ],\n [\n '3f3fed272edf91aa7f8ca5d70005d390fbc67830ffc69c5fa3ae17582d2771',\n '459057e0883c44d8776fa217405f443e5954f08c4a5db68e437becaa664a999',\n ],\n [\n '5237ca6656237a717a739a4509f70db1b9dedbb6cd232f60c9bd8c4563a6b1f',\n '56c7799dd02896dbe7d69dd8bb9718270549592099569d107b7b49c34bf5a49',\n ],\n [\n '1cf6b8499ac881e0b2fc7def9bc1a28937033b2fc52de99e75909a620c7a281',\n '5769cf4f735366fa386b6858043dc99a100f86fbc77b16d57d77766197ba27a',\n ],\n [\n '1b74b8a6b86dbf9638cdb0601e1a332b8d880753423d38c3394902c57f15e40',\n '6bb2dc10d2ecbb913219d0ebdc8d3337d644ed8b6c4e70637ef4c7e50887488',\n ],\n [\n '61e4da415661bba52a4737e2bcde1a837787c4796b2e1854778534f1582c29b',\n '27c43e632cb7652e8508c9c38e3b4ad0d3dd6ba748d42dc84ec2685e64b9aad',\n ],\n [\n '7c460a204d23f20ce86596dae6ac9b36734e4a9f7c5b43262c97a36c6a41c6e',\n '481a11f9300ab4c4bf6924c5ca884728cc361247377065920966785d043fbbf',\n ],\n [\n '124ff5e55e4effa40daa5b9618d75c49c8b6fad95cbe8c0bfdd83cb9bed8316',\n '33a2ea15d0f71f58a00de71acd7f22ccf9002115e49dd1f7631faa0d32f9987',\n ],\n [\n '61c9f8fc86715e95ff43583a865c5a6515f93381839d557ef884a68637eaf4c',\n '5877daaa42bbab9083b571e12648a9d62ced4470d71653092b6546f4a5acceb',\n ],\n [\n '70a6b9a9e5d1fcc07dd9ebef6d8f5fcf04c6cb34932d0fe2335330ac6dc8d3d',\n '3f0cbd332ac56922e886656bee74f6e9bb4bb88f7af7bba9098678af1f38fc',\n ],\n [\n '41db8a0f1ea78443a39e08a54323743c8897eed1ddc28f41aec6f2655040d9f',\n '7d4bf32f8f4719c2e4af8b7889f3b65cfdd033dc2f971798a12170f2b26efce',\n ],\n [\n '62f035e01acdfe841104942d6c8c07f0fbd618cb85998ea24bcc24cfac1f8',\n '1caa886104b7d753fda93645a746989794cd825c62473b526ea34b3d51b5771',\n ],\n [\n '441c6f016d270e86c19843727b83b864cec060cafc813b23d7e41e5abb1a60a',\n '29fece4e40400f3acae0586f4fc8ed535e805e472123ec38d662d8a0b01c086',\n ],\n [\n '2c791ba0fb0b66177815c98191fa6188dba9c795e34a7c3c8a19086215e3cee',\n '11123151389d4b330db6a665a560407e7cd8c3807c749e2b0cffd9c3074ba77',\n ],\n [\n '5292da4ca71ae75ed0554c267747e39c7a129b3b863e1af3ebb3e368439c4ea',\n '63af6a5016deea8cc674c44f16c63c1db31f09af4fb4d2ea7917c28116661fc',\n ],\n [\n '3367388d5d1b7758dc3d92e244f227bb8a54e3d9909e7b7dd62ab5965e3efc7',\n '7ffb4833071e4b03ea755ccb9938487a478248fe9b1158a08f1ac298801c092',\n ],\n [\n '95c863314b7f18090f8eee602403be823a367a1b416d54c32e5f914e67d922',\n '159c2824f899171deee23e0ed520d4825bd667983df0a8d45d3a1f7156d91f9',\n ],\n [\n '621c6e08b3c57404644ad49ac7629832c141273fa1f323781b3395393fe985c',\n '65d1eb0140652958c4371ebec791e03317d6b2e689d90e304666f1b610783dd',\n ],\n [\n '54313129bf13993952cd2b31ed06013aba85e74c1b8a00e062031f32188a84e',\n '680129efc9eb8ec07fc180e8f6877e5f0f9f44e3000a2c586ed4ce49d12a313',\n ],\n [\n '21ea57a1c8286bb45872e78617853c47b89091670ba51c124afa3362e7260d',\n '7087e5c1536df233ec9bfe2f983e8d7622892b9bf64c450c9823898e2cc2fc8',\n ],\n [\n '3793b05b99e7a57d88db4ed0dbc3b771285abcd9052da50f88595354409f3f3',\n '12164105041c056f127e737c7cd63981e05f246bd2b6b65d1f427019c7c3801',\n ],\n [\n 'befd345cef5fcae22ac37dacd6b9128cc58cbba3e3fd774e11b421c2ba392',\n '6209d25f24f88f7876ca604db23d05f78e6b3b67fb033f2f1bee221f352b8c8',\n ],\n [\n '15fa536045fda4c65ff74f10b4e669ce88b9996c6772288289d3ad725987fa6',\n '30e0c2124a35e265e931ccc66ce5ac3697d982814beb407144ff6762cb691df',\n ],\n [\n '38b795bd77ac573576dc204857a488cac2cce19809882631ca2069598c577c8',\n '786ba555d55ebef688b068bb9186a34a08cb00bdfef51619bbf911890ae9a13',\n ],\n [\n '6c66853592196c3eb8d9526dc155205e2c64097adf8684bb0e15eb460ce1c72',\n '1bb4ebf654f4250c8dd1061a4e1b464b31a8a9999ac9960446ef8108a66871a',\n ],\n [\n '5b08dfbc87ad9c00b88e78816973ad2f9c10c70f2156908892cc7b7a2a1fd30',\n '1151f407a77e2556073173d8f5c9ff561d8a23742121ca15f7d0ac391af50ea',\n ],\n [\n '309190eba106aa6ead54b5ca5817969aa68b4b4c627700799a49fc6bdd32ba1',\n '505b6a2bc7b0d78ca6ce2abe7dfb7312369918a4599cccf8a615f6701cfd851',\n ],\n [\n '89cc205966af08acc8910d563af7443d5dfbb5d88dae79c013c678c65dcecc',\n '1f8cf955694b246a423ac725791231257b88936e00347ecaa1e17045c0ab540',\n ],\n [\n '480086b61a80c36cf1e1a350baf554e58ee8d9333186b70c9c512fb9e9d5a84',\n '511edfe58f8d36a6170df743731da1ff525cfd5108be20e30ac4183d1281570',\n ],\n [\n '3caf14fb1d2e90a13ad4eb091250fe37133aabf6029633e905e5a93ead41dbb',\n '49122aff6059dfda19e4b973aba5ebe3804c91728936c6381c1ed1ea9380920',\n ],\n [\n '66d1b8fb2cabc46cd79741ce1cb7326077ad8ea3227a6427244bdd3806bdadd',\n '4a52eb74f4d5371ba3265dffd61c844f9e68d4ff0b44dc4936182f9280bb66b',\n ],\n [\n '373330c5afd53c31257fcc9050fef873e15ea9f81d9810f30744309b04e02b3',\n '5889806607b3dc97a9c5b0c8a2f16d1792099a22866b879ca480cb89a11ef5c',\n ],\n [\n '26840d0ec69a22c6818ff64b8b14633b531508c866e21d1dc9239778ae9e8c7',\n '157971f9a6e3a24d3b307be0e7c8cd352e2eb5cad33cf276270c0f309ee63fc',\n ],\n [\n 'ebb84848f1c38c19a754d1b5d9460e39624dadbb30800987c9419c0f933b9f',\n '517b297cf32f4064e6d6c8e761ba8db89809604a701c7b3aa1a9c6beb370ea7',\n ],\n [\n '25780380bc0795ed0dca727c55240f1d63593e552d224adb40df2d3721c0f66',\n '10215fb5a893e0275e9f1f66b217dde35addee91ed0e8f7d79531a2ff57b8c8',\n ],\n [\n '243e1581cd1abfbf18c31c19a4c3d1cedfe69a40bb57b607c9af2717eefc742',\n '1296c27929f14535718c3a4ebe045f00afdc60afc74c7d398d8ce1b6609dc0f',\n ],\n [\n '48babb8649e054bc8e0b902c89e6940c265f48464520649502ef1064eb94562',\n '3235be7852b0526d1a16f6969ec0e5b0e09cedaadc65863dea4e47f4f398264',\n ],\n [\n '592db7c27e63489ef4bcef2eafce89f40067cd9a1ba48bc3dc76b5fc62ad9ca',\n '48b7711b570cd9ac65910e75e752f4b751fdbfb4091a28f59b8c046d3d9f8bc',\n ],\n [\n '31d133456222586ae42a9ec7ce8539ee04afbe0b2ed00a2564dab0798d9b55d',\n 'a77c52fa1fd718db5c83e7fda6d7d4d9aafef9ad95cad621470f2b753729e5',\n ],\n [\n '4651668379883521e7983aafcb93811b4a72ef2975b3277773746708ef3e3fc',\n '512507f3f544d80ba5d47f73b571881e8d70d7b1d305b9704bdad036b7abc47',\n ],\n [\n '26069e359b2e847affaef604f772f36224608b7642245d0e643889ed231bddc',\n '75ae1ec379f074ebc91270077c74b4d34347ce183b676b4dbe100bfff143b9e',\n ],\n [\n '3196d01d1fa11dc3803b4813c4bbc6326869f61410f2bd14bc0f570d875aebe',\n '20313217cac79875bd2a503db1e86d1e5559911667a02524759344468d9561d',\n ],\n [\n '483256607f75f06fb126addc60cadddd602154cc4782bcc08351a48745d0b97',\n '2950a7e500ebbe9775f08be37cc2e62ccf9030de18948d1bab07a4a9173f75d',\n ],\n [\n '65f07b6050a2fc6eebe2c29ffa62f764060f7f9d3c82d2cb5e4e368aaa442c9',\n '562c9654b646cb84a213b41de203c871b3eae0a05c9c105a66a53c319c06373',\n ],\n [\n '284870f6181c43f3b01d94baa9c5b6ada0deb861145523ad9169580eb7bed35',\n '5e03e6c40c1cfa3cafb01fd0622349871832a9d35499d06408a83edc1b76d02',\n ],\n [\n '32229810a52137f0e6c3d37595c46f6132822d4b05f42674b48d7a7ac3ad85',\n '7babde959a0cf2c53ee59fc52c77c3adf899453f077f441965629f9aead30cd',\n ],\n [\n '1ea8b98a6b85e74e0a2fbc18b206e290f3ed94ce99ca665e8e2351dfade990a',\n '478e93c4724115fb1648c8d5347422adbc1a0bbf962b2312e14aec80e1be742',\n ],\n [\n '270cbaa08c79140c85b864475a0bf569cc03ac785e57f543dc444f37ce746cf',\n '3a9b8d894016680ae9d1bf3deb931d8987d4d8d8bfed45b81ccc595ec79046b',\n ],\n [\n '6943922708b8ae5b40dd7031ef2e487abc4ac39a3591368285e83d6c9c51f4d',\n '5f157c37d09634e8cbfbef90ea50af59815d011e419a691c67ca3402b5efc33',\n ],\n [\n '48ac6a80979fab4912cf0cb557d917a0bd68825d8658ec100496eaae6ff62e1',\n '2b6931350ab183402e39476340eb1177b7006f7a552915581e29a79bd7203a0',\n ],\n [\n 'e3adf9517d92ef22d1e2a787740a292ba32d5ca69faa9e8675f63ed816dce5',\n '36bccf69bb12dadd610145a3399213248d193660d8dc90a2e206f23bf2c7997',\n ],\n [\n '5e6c8ae5afb2fa470f767581f3d578cf6a49547e4b78665edfd45776948bef8',\n '6cbfc11953dd7e195d2ce74e52a60df524767b44c4608bdd755be4bc85eb74c',\n ],\n [\n '15a576a1242d39300f0db3ad770983825988da0457718ecd596c63a0a0eb4a6',\n '69a42e5f6f5a63349b57683a4609bba90f556a1680fa1ec3b02ee7d3211f903',\n ],\n [\n '274cd14e4fbf2ed07402e8ad8075b320c5f76b7ea45ea36af523e95ed63ab50',\n '6ca640f9557c5f2d8b27f6ce95b108880ff4e4816b26b70b6506114389ce656',\n ],\n [\n '4d8284e132e2fe81c5f71be1e3c79ab51b229e2c56c323e207cda179999d123',\n '116cfc00e9fbee1cf16af6282123cdf20eed13021c2037ef4c86f94eb6e6cba',\n ],\n [\n '4056194fb5643e97991942ef5b63cadd89080bf57a01489c4398aca03f0980a',\n '2e2cddb434fa6f6da7859c3d518f0ced8795eea043a6c9613fb3e020103339f',\n ],\n [\n '5d119d5c5ce532afc0875e0ee9b026d878c8773d34237f90a0d0670da6f01b3',\n '4a79fc025ce076b6a4742fbcc8cad313d0a8220c58024a41a5a674c0947e64b',\n ],\n [\n '11800ce4061d99b9d53fd4138802335258f7798c5a935c9979f5a949ce1d483',\n '36745a4741a5c7290eaa8f2a3f9ec955ccb7ca323272e5d35d35c2a724ffac8',\n ],\n [\n '4302525bceb97fa642fd5560a4a39fba3d2c06f68e6aff3332ff1854439ebb3',\n 'e31edfd081ce82f8177b2d7d96e69851d09e908c2517114ffb37ee12c0ac64',\n ],\n [\n '2f5fcbb96f0a66fd3bdfbcc78bda361cb812570f50e7c476533d56eee01c0e3',\n '527428a34855b5695c479d8fb7e831a299f7897f36682a74169cc60d160df2d',\n ],\n [\n '52167df045ad0dc999b98de3d035aced9da4434211149b8cf4bf20e774580cf',\n '19051d2a1ad3fab190c5dfaf45188b49b4e90cca22aae54f0a785562d3d3f41',\n ],\n [\n '541b5332491dbdb2b6f6bccceb7634970c046963891fae936dd950f4432b961',\n '78fa54da996a51e3a9c06091d58c2405a806649da2bb1f323807c4eec50eda2',\n ],\n [\n '5f11e973da659b7738f87ca5bd4f3bd02207dd3c8d978f0d3e83fe81030febd',\n '137aba7027069f62d25caed416e13537687bb1428e71e5f0a0c52d52f2e65bc',\n ],\n [\n '15ec941ee6c2110b819b5541be52981c09d83484c9dc735c43f39f5778718b4',\n '4561826142dc5b56acfcf605a78a4090472bb61235bcd605a765e05d0a7e549',\n ],\n [\n '68ba398736d659522f484406110b43c68158bf4992094acf797a38979c587a4',\n '7c1d9e1702e28afddf22fed7a7a79df4315c174d0c6c4f4c75bc77d9b56777f',\n ],\n [\n '67889cea31c81a429fbae643a4fce0ecd690a5c32b99397e39ed6d7a08702df',\n '7ea277c80b671146c9e455b98f42f45b941ac95ca2d15c8fa9ea82ee9b45e01',\n ],\n [\n '596f2c68390ac26505d3c2eca5c77d46f8f3acbed192a2649d8c525a58d2334',\n '49f3bd8c62c610d5c19c52d970bde24b270c4ff7ae900453b909e72483974a0',\n ],\n [\n '567779fb8b0afe592cea284629e3621ccfae3c4d7d3dc559c9fed750591a395',\n '6010bdc33f1cdb374facefff537e7910b72a1120502f312a7ce41df0d552ddd',\n ],\n [\n 'cebed0233e810aa6a29a8b0829d28f1c92f303d14dd73d6b12da98117dfc7',\n '4bdd51e1192a00df23aa8d0673e4915877ca41ddb8c9eaf21d39dd167fde7b7',\n ],\n [\n '4c7085f066adeb6781596771972b188177e63f2e2b3788d03e033cdd5af1f06',\n '2929ee89f525862b0cedb3ab9b5166e1680cb77fb4668f10a6a3d76b5434566',\n ],\n [\n '760e341bd836899c226176f47685f69438270c150c6fe7744cd723cd1e72359',\n '1bf09f2f1aac1a10ce8bdf20d5d178db747f01a4aa0aa8a5e4bfeef562cd94e',\n ],\n [\n '6016b94c00b54920027ef64902c61478244b1936337d2ad41d9a8d43dd6a4b2',\n '3bf3dd9bce7f6d6f120de87fcbce6219340b59c2c1d75ee0d45105d33aab1cd',\n ],\n [\n '4929e44ff692eb944d1045bee96e750219cda3bda0500029f0df49a1db30b5b',\n '2e138dcbd092242699004b4ce98764ffe4e892841f56830af298581cd1e523f',\n ],\n [\n '5972d0e526311bacb70a04e88969b6c63c7399b578f0dc28bbd00d65ef01da7',\n '76b22bca9ac12d26530e7b0757e646beb3bbc5680d0f3f82fb8ee57ed4b5e39',\n ],\n [\n '2ca0a42a26e26934ca2d48db960b4719113d87c5e57fb437d557c5eb4e03ac7',\n '62778c02561d4ec5d83a132afd7763a8349207c6b5d01fba70b56ba660cba2e',\n ],\n [\n '5137ee53f076e21a2c23da09f63c0d275408c31e4634a6b6373be5cf13e6c00',\n '14fb446c077beb78e04de3282a63bfde12f9af85caaca4ddfab506cee31c0c1',\n ],\n [\n '7d944853d1627b63f560aeda33acf640d35a4ee4d23a744957a2dae9d5b7c6c',\n 'bcb411a210710acbcb9ea12680d89e3e4e652228b6786d3886e95f4d9e6970',\n ],\n [\n '37d412c2ffb173a728477446b60b2b702d07a5243cb5fc8963e623a5ee75843',\n '672c79968908f92cd0cb0b4c65ba86e8f359b015623a89441e1bf859bba84cb',\n ],\n [\n '5b37f472aa80398bff12cc74c8ee784c4fc89757292580d3a498bff17e9f114',\n '7d79da1aab9cfef58a5f3d1c9ec466956a45f8d2af0c1da6dd4c93f720fae6e',\n ],\n [\n '25c09b3f1188c562571536202eb0f5fc4b9a7590417b8ea58b4343685d88a63',\n '3d5b817c73b37e9a1d24ca923351359b42ced2f3cafbcac8c2d6322dc767bb',\n ],\n [\n '32e60904e73f9756f71e0a918d302aeca17cad4acacc81bab15702ab5ff78f0',\n 'bcf4c0204f8275072f98a65b09ac58b87cdc9c70c4edfe99fe18870a3a5459',\n ],\n [\n '49c35575996c1517d2daed90d2fe4a58e674d6b4aaa7288d0642c8bf59e562f',\n '57eeee00adea4ca80eeabab57852cbf03f1a57e21872cd44221e0550b9193b8',\n ],\n [\n '10e1776b4c2a867bf1b028c6edec224cc6616c747e272f49e69b67b02a893dd',\n '8d45d62ec8e627b56950f2f7622a0438647f9e9f28e723e4a37cebc039a1b0',\n ],\n [\n '79a93a75ecbe943acc964fd39ecfc971dc6555b2bc335e7b53f52f4eb16cd36',\n '146132a68ce2ca8b48363612226771ac547eb3cf52b6eb7981718faac08aa3c',\n ],\n [\n '6b22d32e0590e169504e7f19864fd646d0994e7ed3e578a5b88f6e095913439',\n '68c3b22d859fb85e5c8fa0a8aea932285945b230957e603394333e9ad5acd82',\n ],\n [\n '71ce5ec8286eb8c93b8481c6d19cf0a288ef4da4397e9c80f65023e516bc097',\n '54470babc742780cd8a05499026e738ccbf81d4170d1731734de68a8e5b402c',\n ],\n [\n '27beb13a43bc6a1f6ce046da438b0beac5899ff4d57962dcfb6476b563f74b',\n '14074e9e93ee45394dfbe833998b9d1691961f8ba3166224b36404448c61bb3',\n ],\n [\n '6b1de6c8f161aa6509a1dcacf2c0aa1bcf6ee9d9b40e032a9d72f77a6fa298c',\n '5e9312eb5b59d6cbadd7d3dcbc39f1b5bd9a8346fdcfdf1107bada6f9cc048',\n ],\n [\n '32670fc3fa43bf39974ba72ea51f0d045d92d084a81fe5282dfc8309aa900b9',\n '518fee521bf1af62356aac3b7e53fdbf57121e030c6e9572b3de69912ca4eb4',\n ],\n [\n '4b9ca363eabed9c66091a347375f7065cd28f49f914447de7cc1461f1375f1e',\n '3a1a3a2e5e7e72476befe2571ece708052d740d02cbe6fed58740968ae609c4',\n ],\n [\n '4cc6da42863a3deca62fa218b7a3b50e034eb4bafd393eccba3f4cbe192ef10',\n '20bfa683c884f203713953b26d2821287ecd305fa2cb70570474533fc07f918',\n ],\n [\n '87705353c44a5ccec8de65cf5433be6b3d9bd21eea49b60e6c907cf1a67a6a',\n '112804b13eee56e3b01aff75fa08fa8374c44fc461aed8a30ad54acd09c24eb',\n ],\n [\n '6cf6eeeb9d339c0a05f72fd5af73fc7588e6d957100ee8999109437bc126cae',\n '54fa257cea22032eac272fcd034dadf2e00d602ef9e519cf7072023c130aad1',\n ],\n [\n '19b32925048c5519d929650c833661b452ef7be7963fab0b6b328ab7dd7a28a',\n '1bd0c14a10bf9b88ea61011c0b2e64d07da151c6203800d5a5d12063838a510',\n ],\n [\n '12a5fc5559428bc3b4eff97b21b63668b866e0722807f1db1f19696bacd9b0d',\n '4c2eb07f0c24047a3d73b560144f3fd32c99d6dbd9fc7cd2fd2a72a6e4b24c7',\n ],\n [\n '13662b7a7d390aa76eb86a7c3bff6d9913eb28db6bd1a7c42de5cdad2e35ce2',\n '40626aded7f56f82cc431ae30527b096f57fbfbc04d3e12a5abae3edf301cf1',\n ],\n [\n '255825bd49b8a2cce114360bd9c8fe8c641af64c8e7710107213cfcb006f43d',\n '3619cce4482335232f9e76a1460be9d296f2d468d26e4f95a78c71524fe59cc',\n ],\n [\n '7f83009eeed4f12f54d341bbf06066480cfcdf51dda103ac54d4bcecf6b3b31',\n '4269519d28faafd7fd68bebfd8404d71ba05d62c4bb6d65d24aa6802fb84ab6',\n ],\n [\n '2f325650eb316646b4eec903fe44828fcb11054f1bd42ca3a77f7e734110b35',\n '44f976082271016f9048e22c507d97d628722bb431f8d5cc1890524e6c386bf',\n ],\n [\n '750b166bb6edc0ee80fae39c7c106879036738df2d79fb2294e1c21e9a24d6b',\n '54f8aa297a1afafe2a17a3254f45861167414327e918d17003c6aad01d0b24c',\n ],\n [\n '3aedb10db9cf3285cdeee375879396fac1fb50dd259e1716f8c01e66f67ca72',\n '7feb9400f621f58c21601f23b7ec7c94a9b6b193c1cd74a8a60846aedadd359',\n ],\n [\n '4ab7151702de76faa493e7a0b1ac20ee4d10c33b83fec9477547cb1236973eb',\n '63f1f122e3ef3acc46b0915ac69c3f5772879799cad889a817f55f5853d1235',\n ],\n [\n '1675ead0d20e5bc3a7a7331999a87ac4c916ae29669e54197bb02aa6364520f',\n '4d1122da90d49e491922d9b533a6a668e2f65a2737ebb391ebb29fb7c1f8a9d',\n ],\n [\n '2f7148111ef53c613157aeec12e16a20f13481da4390b6ce18a85d1d8547087',\n '2eeda779ab395597651d2a0b833ccf53b10280750139916ae2baf4ec57c633d',\n ],\n [\n '4439c7810e7b2ba772b701ec3acdca0b80c9df23047710b87f7dc3f13b337d3',\n '5029cfe704c602a8a4662af0a5860ec03fb88f046d0e3400f2ce7638014c621',\n ],\n [\n '2248eec40b5732a6a488b681f093643af7937071bc73118acae295a32b51b05',\n '1577e4aec30a97b648de4d0b19cf8891151b4eb11f8de9c6d7312f091552e19',\n ],\n [\n '4738424e558d4e0d87a3124ca02ea24f0adc6b7a9768b0d3945ed2a6104857c',\n '33576f92aca3f0c8ae689c3c274c2de6b918940d86a6852e02fc99e35d1614',\n ],\n [\n '7829edd8b866ebf7baaf604ed13d19a9797578f44bbc51b1cd67ca53803e96b',\n '5559040a6083f2af1f9133ccaf5bc2ce06e56ddfc7dd410e9635c0116b62722',\n ],\n [\n '7f927b881f2cdc05e1a69e40bb714af47b630d1425f08ab5d574ee698f33d51',\n '26a465288e96572de303203bd38f4a03031e8158da0591cb037c0a5111d1056',\n ],\n [\n '36a65598552f8753580d1655417d645a140966e10a1e1663015f9fdfae44881',\n '33d5bbfaebf59eae72b89b1aea12ab2ba3c9617f8c3baed1ec16bdf668381b5',\n ],\n [\n '403becfa545c826782026ff409cc16c9d4fe428f1b5b6e630c92439d2fa5fd',\n '47bd6f2bf5d74f710ecb479c79b01fb774fbdad590e683a415cdedf33f71dc5',\n ],\n [\n '3a747826d241b877d3d56b16e0b810cf088eda4fd6048da174c9991a942a5eb',\n '2c7ba19b0a3486a2cdb84d4a388d34beb077a0e467ba44590166f93f6a09d2e',\n ],\n [\n '3d60cd375842714b37bda89dd1f13a7e0f3ff133b522209617d031bce05a537',\n 'f77f216451ab01ad5226844d2162a7f32744688bcb4325445539e2ce5cec4',\n ],\n [\n '235bf66f67c9100e7f0e22bb299cdfaa603644b240e0770aec7e7fd163e2a65',\n '37110b3fa83ece3990afca2bea8d5ebb3c7aace60a0147f8e6ab733e2f2b4d5',\n ],\n [\n '3b796d4eb69a55471fa86108f787b3604874e92b6887a7667a6c2bfbbd9a42b',\n '4912d6dc0419732ef82cb3278415851d4e2d7ca89e0f4d7128cc9de51b810fe',\n ],\n [\n '48d53516dd51e49faa7ab46c8c10db1befd10f23c6a9d9bc3640a2f0da44518',\n '73a2fb3d064adadf21aa1362c04affc660598f38a9e069b3afb74d0a99ae9ee',\n ],\n [\n '48c32cff161ed145da0d5b73084897647abb777adf65738559ceab6939cf3e0',\n '3d99308978e828f857c382df32b472bda81e8ec8e30c8844077ba6d6d2ba903',\n ],\n [\n '2947ff091a8ec9684affbc9a62e09e598841c4a6dc638088492aa47dea57097',\n '19a2cc97975e547f97a4d02e42f89e6ced6f5a953cfccdec347867d26926541',\n ],\n [\n '1960d85f30475615f82484eba0bdafb7ea7cac3809f0518a757d66f02b01676',\n '36c8f77baabf0cc8805d993bbe62041fcf4e3239cf9d53278a4fbd91e75eeb7',\n ],\n [\n '2765f28074d21d5a055340b6d40092d2bbef807e02009fabfa08ec0b9bdf38b',\n '7fb189e0553d5df52b6843661814824b3f3cbebbd54988f042fb256c6bf30b',\n ],\n [\n '348836cb2aaa00212f4b1a4e2d7fc5417f246bf2fe5c9a16ebabda449e2e08a',\n '3f7276fd7d69e0d55ce5ee1d2d830534a27227fe0b6d8a36c93f9a78b872969',\n ],\n [\n '7afb9d34b6a42ea8c6d870e4b8191c274201dc1f93a1a2219a2392b7e345a31',\n '42bbc20dc7115e0758b364a110227b16b64ec58fc535ce5ff1a9ad8b8a09fdd',\n ],\n [\n '2cae0c2afee1767fd4c66f52e1f176d217e92e89cc19eb36d5a6c1715f641a',\n '5335efe2d9bc3667d25ea88bf76438a4d6ab9ba5c512f9da7d0529b79b62d83',\n ],\n [\n '1cc5fde334707723c3a06f00c106db88664284a2df47bb6b144d9f960aea3e2',\n 'dbbf610d100316938bcd8bcd078513512ecb50d4579690dbefaa419c05980d',\n ],\n [\n '54e90cb8f3a2998d2675c5780679e06c0556b1e618f8fdf07f9a4b2466fbf1e',\n '16248676b6f06ec5e34994bc3115f85c8147b54f34d8500928f2fdc051e2089',\n ],\n [\n '525c70a2ba0dbdd68d75640f47f13d0d415ea595f7030f533f4625c2a46523b',\n '58292c8675e5e1a438f49e0c05648d9a7aa997f2f1fd77d5de1944afe5d7eea',\n ],\n [\n '54726d78d099007393348787a03107ab492e59690a46c87fb02ec554f2353bd',\n '53b54b77184ba75a3391e0ebfa6d6974db028f3f8e34bbd5460759a5848dd76',\n ],\n [\n '4ac81a66903537769d3aac6c483ccc08535cb767b6b5e1ec8017a7393ab70ae',\n '2cb22b77a8a05d26f11a4dec80eff292633aa05553a889c5ab16b6ac6e2ab17',\n ],\n [\n '21d0175349e21114988a2930b9a607d43245783cb4a0c984ce27f4c4206708',\n '59f1f49342cc5496213d3329bf4ca7fb0044337449c579bf53147a1dac9e67c',\n ],\n [\n '167f821b381f4c8adcc39789475fb55ba639e5124fe75f26dd61be396dd5e66',\n '22002c87d4cafb47ac9d27286d5cf5ff7a6715d69814118269b0729be9e4b3a',\n ],\n [\n '31010666c6db83a9f9e4db4c48173afd405783ac53852a6e38a8ff925528843',\n '1f466dc9b5d9094107c741dbf380f9fd98d8549cd50f67169901516f8cce74c',\n ],\n [\n '1ad3875769a5053388a86edc85dd80fdffbbda6a456aea497ff81a0f1f6707b',\n '2de7cdec5e2bad56a71bd2f33a4ae4c874e1ad4210a6ac32b443cfa34e85b1b',\n ],\n [\n 'c489650fb7f459ce09cd05a456fc5a46b849b38a671298ed645bcdaab168b0',\n '45610d092b8af1c43ceed474cd17f7bbee65120aa6fa4d37f949e7e41f25327',\n ],\n [\n '394256a5ef4d7af5459587a0bd2edb8acaf5ecfef2563c9a04daf34a4abe4c6',\n '1ebee390dae1403c0c53994e1d064fa64e20fcb45392e209b2b99486a559ffd',\n ],\n [\n '410a1511fead6151e9bedb089b9832d0fe01fab76d3f8459929f767525aeb27',\n '361f0a5ffe09fcc3ad4eff3f5e89508ac247af80267100b69de3c59df561cfa',\n ],\n [\n '38cd437c9f659e110a869605c182ee9fdc26de36baf559d9229e258267bb734',\n '624b1128ea7739bf1cbd0e423af92a4884323c868d2ba0ee9d362946edee2d1',\n ],\n [\n '78b126e50b7042d2a019f95cb87a3213c664ca1bafe345999b1e9e2dac1e608',\n '19e398196b22f4488cbe854c614ad8c353839abc5ab3a4f3f5c03c16ba8a198',\n ],\n [\n '6d3a5ce91132f385a91823c5c8046c4b638f5fe63357424410d901457cdb867',\n '7b80bae16d2d487e122495174f7a70992bc5dafbed72bf84127ead7c57302bb',\n ],\n [\n '32d053a904dc4d88fbe7d0b96e0cbeca22a00aa5c79c753d52b0b60abf31602',\n '3af6a02e5cae6d6490354ae51185149e3fdb6d0d9caab90e95ff58aa0c40377',\n ],\n [\n '49b1fbff5bdb0aa6938b066dde0ed772c0d81f9eff52e7fe038b0ccbd78adb5',\n '1c6e57834eb14d507eed8b36c81ddf92fa91c242467061927a742fafa82b43d',\n ],\n [\n '2f28b8994ca6f234d9293d26196b43b9d1d5306844348c4a638102c05de85f5',\n '759cfb172eab065d477248b3569f4ff5791055f01e95fe71b94b8e615d73c96',\n ],\n [\n '3c2ee954ff534f856f59188fa0f29ed8a022aee0cac52d634f6dc58cd514d70',\n '22bd162e74925f0a876bd8a206b8767dfdd7c898576a73a490f138d9a7f99c6',\n ],\n [\n '5763a7cab001e1aaeabf9ab5b9b2fffe6cc2b299ab04ec4933da74d960e1ab',\n '715ee4f8ee93ab5a1dba00f0a6abc4eec47d49b61254cc27fc36a031e32f0f8',\n ],\n [\n '19976ad8d7b7f47c785408243a227401996b36e47c7a78a7bc7d4256233ba9a',\n '896b713c5d7777b0703821a73c1d9a4c3755501042120534ff13990975e1f5',\n ],\n [\n '61674b992c29827186cab5ff454758dbbed8e89bc23d0bd33193afccc3a04bc',\n '38e1020744c13903809ea30a0662fdb5226ae760cdcf10800faabec452e00f8',\n ],\n [\n '2ea2d48bcb83c0c9cda4efe11f07165cfcbc9ccd26526e5fb12556316d4b1df',\n '1d2d68b74ad384c5c4a9c85453104216357bfcdf635680b40215f0f800974cb',\n ],\n [\n '7881212050264c40c336ed3a15dd2cd868ec9a558f5b728869eab66e8b8ed54',\n '21aaefcc8ad8a161b8971d6880321781dbd939570c540da4c330922b8c81e9b',\n ],\n [\n 'b6be88ce0461d20f59c5199573cda0170b61decf6e8e69a6d32f1695adc4ed',\n '5536e4808370716f2bb3423a9a49a38ddbfe91faf3b7a35eb53d3519238b6cf',\n ],\n [\n 'e5972af1655eb6dde2e8c77cc58044299922441b5ee41ceaf5cafedc765bcc',\n '550282f37a4783dd60801c237045992d6fbe82a5902e7d837ea25f6f98c7b3a',\n ],\n [\n '7efc1aad1f580d8f50274f1c114c40056be19a8c96fa8c4cb5bf85e1e7f3e4',\n '2689f1c3898b114d668be6413643ee9f879913d40c262541fd0316264c60a4f',\n ],\n [\n '7939db98037f59b0113e9d60051f75ac9c3cfd1a3eb535c73e2d945068c6c5c',\n '410914ca8bbf3c65cdf3e9772ca790c19131c50068d34b7346c10260a578a8e',\n ],\n [\n '225b77ad00a2b83d26690190b74867326eca4f55bfbc3a13be036225ca3b1b5',\n '411faafef89042ce6beb64309fdaff70fa53e9d32d79a21e7f82f80e79ff05e',\n ],\n [\n '1501e64c99c8b6658b0479f2c05c9142d246eaabfccf2fcec8dc4399539d8e1',\n '3bab1e3339e42c9ee66c65b0b20236fdd9362d3ce786ad3a9779ab578af50a8',\n ],\n [\n '59b907b941f24fb8ea2458153e55f07534b388e835af7b69f3c9f54392a335',\n '1d5438c4f2f68a417f3d56f916d899a6ffe910f5f2989ca31687f1b10f60db8',\n ],\n [\n '2887d08a26f484546f360e33abbf7a998b7170a5b30070938b84f072c676bf3',\n '62a78e8d00e5d3a59e2fc424ffa08961567ba1ef24c8531cd7bceee6074a535',\n ],\n [\n '6e3cc8076b3d45377929033af35aab0c6d19ae4fd47c0daf844079ca04c46eb',\n '7b90f338e4d848aa8f19d0b5c3bca916a2a9024acbf14bddb278bca2aa39e5f',\n ],\n [\n '34844dacdd3ec54a3af328bb9d67715ab33425e194ac9977ca02ef22e8f7a88',\n '3c1affc6372f32a1634748124f9e1a03c4f0c993971da0dc28888b0801279d',\n ],\n [\n '436b192e03a49796cf9bc5e93c88268b71c9c24f9c3a85322bba634ebea309d',\n '67a8091ef69d62abcb28ce5df4dc7d53f8dc2b9690344f75ecd03a6d9386044',\n ],\n [\n '592d25b68baff87a6d7fd41ff0dadbddc1bd1316683de3b2d677501c0eb14e4',\n '27ad1e1099683f54589010faeefb19e38569ace43653be8787a42b0591e7bc5',\n ],\n [\n '89a5111ae911512ba62e87b97f643c0219702f235c70f62c6678a129302009',\n '557fa3d98e9ce7b83b47545013a4498f3de43787fb66b1a54521222242f7c1b',\n ],\n [\n '1c9b5e53377e72da5066cb08566bbf9ec31ec1877f455d932cd9b1aa375d34e',\n '72f79555a8bc207863f32d482fca54692825449fd8963fcea3de3a8183a739a',\n ],\n [\n '574a6e05eb14591729515be239ea8c1fa9e12d4049d42876f76c8ff37bca03',\n '5f99b3af43ca68c1c73e8190d5f73c8de162ba643d7d5f0cd73cfa8135db6d3',\n ],\n [\n '513fc5c2e16505b2b25a2f284e167d5401194bcac0dc3ecf8b7c9acb560daa1',\n '687ee7a1a8954d08d3856e1a16ded808e419e789736d3f55f79f7693bad69f5',\n ],\n [\n '53d48bd1205274b1c2b0a0ceb3d21c5fcd7c8892a784931603240b288a598b9',\n '35387abd7ea59c9b956de44d36533cad1f6668c438d666651695ff3862159be',\n ],\n [\n '213eb1ea99e08825110dd61094eb6e8145119dc1c507636f068730b1e086d44',\n '744f6853f4f02f4f042468d0739e0c9f64df720b87ed77d1979547084ef7a89',\n ],\n [\n '735ef017d091ca23264ad0aa7bb9b2be3309b4539605e79ed4a652ccb2fbe3c',\n '7f0ccc7a5747c4e921fff97d431169f690763427e2cfd1ad74d7a0308d7faa9',\n ],\n [\n '3f36babc5a30070b610ed97db44997e6d9115c9c0579ad8f75d295a17130001',\n '79047908a2474e32d5c712a07bf5c4ad522590bb5d6cefda410d30528e12ca8',\n ],\n [\n '51c04907ae88a5926b242fb2862cb1f2c651a94e6caad5bff8601c079fded74',\n '10a585a269f460aed43f54c7de13cdf623fc8de5957526997278be939ef32ad',\n ],\n [\n 'c1e1bd626a735aa2c065831317217ecce68e377eb1f67e54ce2e97bc2ef2dc',\n '53c5af23a9b482f420be6dfd37b6886154cfd130794098e1f51c1885ac2556a',\n ],\n [\n '5aff3b30775ae4758e604a4a6262803a545f5ef4e7855fa245ac6a6431a9ece',\n '39a4799e5519047f29333bee9c86c99bfa8056d4aa381c396c4a44331fe795f',\n ],\n [\n '3d753e9723701a8e9d99b91bb93dee2eda7ffa5072fb2cd5c5fd99aebcdb299',\n '15798bf5c17d6d5880fed1553af32dd8d8baf2888c715a886575448a24c7975',\n ],\n [\n '6593e5078466b07a4222d2e544da826d2c583c9cc5f2eaea148b129b00d4aa0',\n '11b352b08a0a61d3cd67d1dc08069dec3bde907b3da0f56de5011b956bf8744',\n ],\n [\n '7a6eb353c5be9ff03fe4a06c01fb71aad2b38144179a291ebcbb2c2417cca65',\n '3de3ecb12f2fa699b46a9d399abf77ca17bebc3e491bfb2542dd0fba991e2bb',\n ],\n [\n '2c7ead583d6c32162091034a9eddfa775b4e84b8bdbea939edb2a80dcf64f6',\n '461790ce40d9c276d962b2a1e9a74d66e9d7335962e234e8a2fc6963d31722d',\n ],\n [\n '34285af023d9b4c2c2b88e8704bf2c05a9b553b00b2e70ff05f8c2970cb134f',\n '33fe678e7671760a83836107428dbade68c3593fbe568f3f8f1b2c568099c44',\n ],\n [\n '6222f720a24466263db6a11842f117fc4bb78da6705f140e48869db3e087441',\n '6eff5b9bf3aeedc962bc5a24b66e7bdad2153450ed53a058bf2c8dbf2907693',\n ],\n [\n '17c6ec5ea206eb97cbf53851e37ce391080e0d2bf1e5395610f79ab0503f7ce',\n '3adb71ca3523d88ceb1e365f12dfb24895453c14daf0046b2626cddadfdf5f7',\n ],\n [\n '70859f9771a713e54974ce11cdaf44b0dcc3e9befa0c0834908d877eeaafd27',\n 'd18f794bf0cc0623b711e7450030424e52326c45ba9b03341883ae4828a5f8',\n ],\n [\n '2a820cfd0fd4ab0871e7b303cd545a3086caf8fa818c087a4017197da74efbf',\n '5f992683ff37f6c041b84bfc01503d333ac9763505cc8f69473da01812969d1',\n ],\n [\n '5b0526de2c07fe7cd73e3884f642d57a0ac5e13c68590ed03a14e530616e8c1',\n 'eec69d0cbd92c9fca31ec967dba848bec368e792d6678797946a5e34fe3487',\n ],\n [\n '6cf6b3efee707210cb3a72f1e885c3d0953aefb43e5e148c740aa1641725c61',\n '911cb630b898e2c1a9115f9e45bafe3b819edfb1eab6e15612d14289939984',\n ],\n [\n '74e913de55f1e46143cb2ecfc580f8d3d3908f200281322b84e21c989cda293',\n '761d2736c9ac7670ba905bc2629c6c0dbe988820a4454ff415ba68710f7df92',\n ],\n [\n '44084305e0c911a40b7cbefe5f13cffe9a99375d1a584c4a2200958050af7a9',\n '249c83877371564708ea525b64b1e7e12785460d83364446531c9adcacba5f0',\n ],\n [\n '2bf71ad4d1bee1a67fb300477029f54bdb0e09f78bf2ac2e8afc7465a7adbcc',\n '6244dd6cad282539049be57487bfd9900bb0d5da805d02b535096368fcb4cd5',\n ],\n [\n '3a62d8f763b62def36e4089458046a49c5ecb91b861549530773e0548ff2bb',\n '6a10a03ba61e6ac657270465c09aa9526cf1ebe96bdecdf0e7000476a47b9eb',\n ],\n [\n '284eed3a17c51e0677d4fe897f056abe9def8af07a4630e6ca5723e2aa6677',\n '516a06ac1d5626ed03d2eee9de6f60f0311eca703a99b0fb31b9c66b01c27c7',\n ],\n [\n '2a2c63b16cccd685f731d06fe93ce2cffb358d34d03dda9a7368185c1eb0c32',\n '7180baca0ba81284809f92eca1654cd76b925a9242e5d5e0f18d0a55d13c6ec',\n ],\n [\n '5f9466017ec09769611389ea5370ad68dda936d3f5816c9e928ff9574abf9a7',\n '6619b5b145bb5f4f29deb7a4cd68ef4da3995312fa6537f0d01684da4267ece',\n ],\n [\n '74f229babe01b4962b3307589c1a13019134b1db6822698388bebb55d21c30f',\n '156ae857ab3279f754facba0db36398dffec8c31e5e160473198f2f891b7531',\n ],\n [\n '334b9fe3a5fd99bc966ddd1309698fd32afd1f235062f2c275b6616a185de45',\n '221a60053583cc0607f6f2e6966b62fc9dac00538bb7eb1148e007a92116d2',\n ],\n [\n '7ad710ba002a67c731efbaba2149d16fec5d2f7aa3d126fd9886172e9f4ea30',\n '3a10f8e902a7a13aec94d66415347e1314f9bac83a7db176096b809b25ffb86',\n ],\n [\n '4306dd0a184a3283c3097ff8f7434cec80912e9dc04b7df21ba73fda9f8e6d8',\n '6d42bd3d1a8dbddafd09e872e2aa3891ae79ec939dc1b382196bc21c4ab749',\n ],\n [\n '1c3f2124e1135c32a426d1d14e471edd9e0f2c7bd703ee123cbbd608e8c4be7',\n '3cc607a3c3f1ab68dd5fa56c65996002721b8ad8ad4b0dd9e5b1467d316583',\n ],\n [\n '294af33272ffcee0b56a436de1b73759cbddebef4c07888b42c2f92b0b68e1',\n 'd837164311d5dca8d37b99ef9eb22708643c83d1cbdfe852f63ea07b06fbad',\n ],\n [\n '753bdb5439a19bbffdfa02b1dc24e8368f22d0a8276b109c11e6feb26f56f39',\n '6ed396231af93647633eab467f1a034f38e76823eb85baf97cae56e2dcd9f75',\n ],\n [\n '5674f0cb892b733fc0b50e121d8679afed0a925c32594cc65ffe83bebe7748e',\n '7fbf0325dd38dd94905adab2c52758552292a6a103d9edfcb11938828e828c8',\n ],\n [\n '4a8f053573a0a74251059d0229d89b6660407ba0b491779fd10f87a5117c81f',\n '21b70112485398bf67ec9d733df24a1df30dea718a93b786f41ed04e3ae3c5e',\n ],\n [\n '726c01ec4a08df8fc8de173311f50d4f3b97c5a9cf68c1536146f827db95ae8',\n '15013cafadefa7f1c4e4dfdd70bd4d3979dd18bd7f0332572ce2a3fd8773d12',\n ],\n [\n '38ac0fbfa98937257460db7e6645d7e5112b6fce7234813fc8a704e8ade8da2',\n '73c0109f86048aad08c443f781ae60ad13b99f7b9cfdf3128fe6d6eeb799a7b',\n ],\n [\n '6f6d3a38621582ace092eb50ecfe9eff265df141ebdcab8653299116fcea291',\n '4a1bf3f39bc919c8f1b720a0b1ce952cad17f2ba98308ee6b76dd9b6f3d7b75',\n ],\n [\n '6a307fc28e1df8d9ad01766419e097797d65cb674436fa1c8f012d3de2c2a1f',\n '26911a635ba824db004875d79dd84834a97ac12643e42829015bf88c1fd6f05',\n ],\n [\n '2a74860e3336d6db916555894cc8028f41508812925db1925457afe40257155',\n '5f8da573f4c39816ce2dba8a20224223a7cfec53117ec78973930c0e9b60244',\n ],\n [\n '4d2b49e1ed0799f719b8269f092cb489a466a645bc0ccabafdc678864c176d7',\n '5410083df7d256f18cbf5697ae5e52c31e075d8a3b27e21d6f5177ca882f6c1',\n ],\n [\n '110ecb9fbf6c333d168cee473cc5ad98809b6cb9eb5d1f6cd28ab5fab504fd3',\n '7e3c54d7533d9f8c3310f219dab0cc3ea4d39b418a748eeffd6bae2b8637a43',\n ],\n [\n '5be4d711b80da70e6d3ac493250bbfd16f20b25f31919b3a91cf14ffbac1096',\n '7f55a0919f082e8885f1515e83c5b39b6022404503507498e1b4422d79c43e2',\n ],\n [\n '2605125b95ca4ba93a21cbbba5762898a7cf9e988f07ab9e64cb3868e3b139d',\n '62f0ccf55b9fc0eaf9736fc8ee484e2acdbe259813af9803cf815829a5e9d3b',\n ],\n [\n '1092bbbf206f2a3068167c3dd99a72de31e206f6c504c071c8214d105ff814d',\n '309f489f68a62089f53b96df5d4fbc3ecc5a1a42eb7ece0e49bad17ad490ff4',\n ],\n [\n '2abdee9409d9c92559ca3f4e6bddd649c31aa09b90bfcb4a612af491241e18d',\n '3ffa8eac180a29de3f8a69efca84bac046f921f5725e96a6ff0530be1436aaf',\n ],\n [\n '376313f27d00bb1aae7ec991745efe6ee28c6b50de0c6cd9845cc4bb4f83543',\n '6a8e0a9389ba528b156fa94ac090a895d7b795818d4941c29415d9e2984c547',\n ],\n [\n 'a80380c71bd466a696b3f0fbf02817c9459d9798f4f3899cf32edf647fe066',\n '6a09805e814e7cdfc76eba4b79f1df5ae559e0f0aba9f728d3cba4ea5c57471',\n ],\n [\n '223694b921d247d989a79b9b2b2f07496036c40cb043eab074a9d6a2cd2ffed',\n 'c247217f1b1df35e30d9e15fdaadf42d6fb0edd3a5a7e265d4cdc426c120aa',\n ],\n [\n '102333620df278c6714bbc880fc087db58c1b9b4d77ed4d61b32a74bfc7c3e2',\n '6a77d37727ccf71c2caeb151faf4404d4b94e9047f9f0a7c3966367f3b53c65',\n ],\n [\n '891626f466536929ee7eadcd18b41925706dedab7528ed5f0f7abf039eb9d2',\n '5f73d11c141c933a35b2d0d06e5cbae614a20d17dc3b439f8bcdc3413c5ea37',\n ],\n [\n '215c23fd3f073f870e5e80303967391bf173f8adcdbeec72d131c557babc203',\n '10634332e9d9439a321597dc5b0fac9ff478834c3d6e281735f21a4a5e13266',\n ],\n [\n '21ea0bdc1332bc36e6aeb43be9071651c27e4ea2eadec636c8d818d4af72a36',\n '3a523d9643dccc6bb9c7c58413312caa3e60ba9c7c7f0177e0f3f469a3241e3',\n ],\n [\n '60deaed1bffb6190beed40caaf2bfab5e43d3707aff7ad3f278d571aa247eae',\n 'e41f71ff254c1418e6a66992af307789fe04d6606fb2670900bb1a089fd879',\n ],\n [\n '1e1fac4a1646253fb1332fadc21fbdd3e3a24a840d129400f520ae4116a4cf5',\n '69c406f9f46576afad68808de0ab7e8922b6226af748e721d9097e21f1800f3',\n ],\n [\n '5db0ddcdf79ffe74d6454c12d2bc60b06776db03c75dc413f5be42ea9a91b5e',\n '134c3d6c699841f17306835bb193785228ffe7ab212a01a861c56b086a18cec',\n ],\n [\n '626814e320fb5bea505b248fd1c1389ad586c1cfe04923fe2f83173e915f4f8',\n '7ae407a926e887206a8b85cf485f1f327c9bb8ccbb6897024e2d122877d8ee0',\n ],\n [\n '23186237dc7d3b570cea645282ad4c359731bbfa54e7f036426bf6493812cd',\n '7d1fbab7e61a22d3b00993290d9f4cd5d820061573e787f66c2cff9a18e1eaf',\n ],\n [\n '54302dcb0e6cc1c6e44cca8f61a63bb2ca65048d53fb325d36ff12c49a58202',\n '1b77b3e37d13504b348046268d8ae25ce98ad783c25561a879dcc77e99c2426',\n ],\n [\n '13961b56b9fc0e412e468c385c22bd0680a25624ec211ffbb6bc877b2a6926c',\n '62f7f7792c77cd981fad13cb6863fe099c4d971c1374109185eae99943f16e9',\n ],\n [\n '47abd7308c70659af3f00fafe6837298af3cb530b6c2ba710ffd07a6bc1ae98',\n '75d0c8a7377aa9f0663d0c124a5659750847afabc29e39893fd27534a4a03cb',\n ],\n [\n '2c6276b764fb398fa555857dbe0ce0ec18fab7a233bf23851295739801f0585',\n '5d8f4897ce44007ec5bfcb9aeb78b8f6e1d40a514f72d213c9300d2770d2b8c',\n ],\n];\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { addHexPrefix, removeHexPrefix } from './encode';\n\nexport type BigNumberish = string | number | BN;\n\nexport function isHex(hex: string): boolean {\n return /^0x[0-9a-f]*$/i.test(hex);\n}\n\nexport function toBN(number: BigNumberish, base?: number | 'hex') {\n if (typeof number === 'string') {\n // eslint-disable-next-line no-param-reassign\n number = number.toLowerCase();\n }\n if (typeof number === 'string' && isHex(number) && !base)\n return new BN(removeHexPrefix(number), 'hex');\n return new BN(number, base);\n}\n\nexport function toHex(number: BN): string {\n return addHexPrefix(number.toString('hex'));\n}\n\nexport function hexToDecimalString(hex: string): string {\n return toBN(`0x${hex.replace(/^0x/, '')}`).toString();\n}\n\nexport function toFelt(num: BigNumberish): string {\n if (BN.isBN(num)) {\n return num.toString();\n }\n return toBN(num).toString();\n}\n\n/*\n Asserts input is equal to or greater then lowerBound and lower then upperBound.\n Assert message specifies inputName.\n input, lowerBound, and upperBound should be of type BN.\n inputName should be a string.\n*/\nexport function assertInRange(\n input: BigNumberish,\n lowerBound: BigNumberish,\n upperBound: BigNumberish,\n inputName = ''\n) {\n const messageSuffix = inputName === '' ? 'invalid length' : `invalid ${inputName} length`;\n const inputBn = toBN(input);\n assert(\n inputBn.gte(toBN(lowerBound)) && inputBn.lt(toBN(upperBound)),\n `Message not signable, ${messageSuffix}.`\n );\n}\n\nexport function bigNumberishArrayToDecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toBN(x).toString(10));\n}\n\nexport function bigNumberishArrayToHexadecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toHex(toBN(x)));\n}\n\nexport const isStringWholeNumber = (value: string) => /^\\d+$/.test(value);\nexport const toHexString = (value: string) => toHex(toBN(value));\n\nexport function getDecimalString(value: string) {\n if (isHex(value)) {\n return hexToDecimalString(value);\n }\n if (isStringWholeNumber(value)) {\n return value;\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\nexport function getHexString(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\nexport function getHexStringArray(value: Array<string>) {\n return value.map((el) => getHexString(el));\n}\n\nexport const toCairoBool = (value: boolean): string => (+value).toString();\n","/* eslint-disable no-param-reassign */\nexport const IS_BROWSER = typeof window !== 'undefined';\n\nconst STRING_ZERO = '0';\n\nexport function arrayBufferToString(array: ArrayBuffer): string {\n return new Uint8Array(array).reduce((data, byte) => data + String.fromCharCode(byte), '');\n}\n\nexport function btoaUniversal(b: ArrayBuffer): string {\n return IS_BROWSER ? btoa(arrayBufferToString(b)) : Buffer.from(b).toString('base64');\n}\n\nexport function buf2hex(buffer: Uint8Array) {\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Some function imported from https://github.com/pedrouid/enc-utils/blob/master/src/index.ts\n * enc-utils is no dependency to avoid using `Buffer` which just works in node and no browsers\n */\n\nexport function removeHexPrefix(hex: string): string {\n return hex.replace(/^0x/, '');\n}\n\nexport function addHexPrefix(hex: string): string {\n return `0x${removeHexPrefix(hex)}`;\n}\n\nfunction padString(str: string, length: number, left: boolean, padding = STRING_ZERO): string {\n const diff = length - str.length;\n let result = str;\n if (diff > 0) {\n const pad = padding.repeat(diff);\n result = left ? pad + str : str + pad;\n }\n return result;\n}\n\nexport function padLeft(str: string, length: number, padding = STRING_ZERO): string {\n return padString(str, length, true, padding);\n}\n\nexport function calcByteLength(length: number, byteSize = 8): number {\n const remainder = length % byteSize;\n return remainder ? ((length - remainder) / byteSize) * byteSize + byteSize : length;\n}\n\nexport function sanitizeBytes(str: string, byteSize = 8, padding = STRING_ZERO): string {\n return padLeft(str, calcByteLength(str.length, byteSize), padding);\n}\n\nexport function sanitizeHex(hex: string): string {\n hex = removeHexPrefix(hex);\n hex = sanitizeBytes(hex, 2);\n if (hex) {\n hex = addHexPrefix(hex);\n }\n return hex;\n}\n\n// implemented using TextEncoder to make it isomorphic\nexport function utf8ToArray(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n","import elliptic from 'elliptic';\nimport hashJS from 'hash.js';\nimport assert from 'minimalistic-assert';\n\nimport { CONSTANT_POINTS, EC_ORDER, FIELD_PRIME, MAX_ECDSA_VAL, ONE, ZERO } from '../constants';\nimport { KeyPair, Signature } from '../types';\nimport { addHexPrefix, removeHexPrefix, sanitizeBytes } from './encode';\nimport { BigNumberish, assertInRange, toBN, toHex } from './number';\n\nconst { ec: EC, curves } = elliptic;\n\nexport const ec = new EC(\n new curves.PresetCurve({\n type: 'short',\n prime: null,\n p: FIELD_PRIME,\n a: '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001',\n b: '06f21413 efbe40de 150e596d 72f7a8c5 609ad26c 15c915c1 f4cdfcb9 9cee9e89',\n n: EC_ORDER,\n hash: hashJS.sha256,\n gRed: false,\n g: CONSTANT_POINTS[1],\n })\n);\n\n/**\n * The function _truncateToN in lib/elliptic/ec/index.js does a shift-right of 4 bits\n * in some cases. This function does the opposite operation so that\n * _truncateToN(fixMessage(msg)) == msg.\n *\n * @param msg\n */\nfunction fixMessage(msg: string) {\n const pureHex = msg.replace(/^0x0*/, '');\n\n if (pureHex.length <= 62) {\n // In this case, pureHex should not be transformed, as the byteLength() is at most 31,\n // so delta < 0 (see _truncateToN).\n return pureHex;\n }\n assert(pureHex.length === 63);\n // In this case delta will be 4 so we perform a shift-left of 4 bits by adding a ZERO_BN.\n return `${pureHex}0`;\n}\n\nexport const genKeyPair = ec.genKeyPair.bind(ec);\n\nexport function getKeyPair(pk: BigNumberish): KeyPair {\n const pkBn = toBN(pk);\n return ec.keyFromPrivate(removeHexPrefix(toHex(pkBn)), 'hex');\n}\n\nexport function getStarkKey(keyPair: KeyPair): string {\n // this method needs to be run to generate the .pub property used below\n // the result can be dumped\n keyPair.getPublic(true, 'hex');\n return addHexPrefix(sanitizeBytes((keyPair as any).pub.getX().toString(16), 2));\n}\n\n/**\n * Takes a public key and casts it into `elliptic` KeyPair format.\n *\n * @param publicKey - public key which should get casted to a KeyPair\n * @returns keyPair with public key only, which can be used to verify signatures, but cant sign anything\n */\nexport function getKeyPairFromPublicKey(publicKey: BigNumberish): KeyPair {\n const publicKeyBn = toBN(publicKey);\n return ec.keyFromPublic(removeHexPrefix(toHex(publicKeyBn)), 'hex');\n}\n\n/**\n * Signs a message using the provided key.\n *\n * @param keyPair should be an KeyPair with a valid private key.\n * @returns an Signature.\n */\nexport function sign(keyPair: KeyPair, msgHash: string): Signature {\n const msgHashBN = toBN(addHexPrefix(msgHash));\n // Verify message hash has valid length.\n assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'msgHash');\n const msgSignature = keyPair.sign(fixMessage(msgHash));\n const { r, s } = msgSignature;\n const w = s.invm((ec as any).n);\n // Verify signature has valid length.\n assertInRange(r, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'r');\n assertInRange(s, ONE, toBN(addHexPrefix(EC_ORDER)), 's');\n assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'w');\n return [r.toString(), s.toString()];\n}\n\nfunction chunkArray(arr: any[], n: number): any[][] {\n return Array(Math.ceil(arr.length / n))\n .fill('')\n .map((_, i) => arr.slice(i * n, i * n + n));\n}\n\n/**\n * Verifies a message using the provided key.\n *\n * @param keyPair should be an KeyPair with a valid public key.\n * @param sig should be an Signature.\n * @returns true if the verification succeeds.\n */\nexport function verify(keyPair: KeyPair | KeyPair[], msgHash: string, sig: Signature): boolean {\n const keyPairArray = Array.isArray(keyPair) ? keyPair : [keyPair];\n const msgHashBN = toBN(addHexPrefix(msgHash));\n assert(sig.length % 2 === 0, 'Signature must be an array of length dividable by 2');\n assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'msgHash');\n assert(keyPairArray.length === sig.length / 2, 'Signature and keyPair length must be equal');\n\n return chunkArray(sig, 2).every(([r, s], i) => {\n const rBN = toBN(r);\n const sBN = toBN(s);\n const w = sBN.invm((ec as any).n);\n assertInRange(rBN, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'r');\n assertInRange(sBN, ONE, toBN(addHexPrefix(EC_ORDER)), 's');\n assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'w');\n return ec.verify(fixMessage(msgHash), { r: rBN, s: sBN }, keyPairArray[i]) ?? false;\n });\n}\n","import Json from 'json-bigint';\n\nconst json = (alwaysParseAsBig: boolean) => {\n return Json({\n alwaysParseAsBig,\n useNativeBigInt: true,\n protoAction: 'preserve',\n constructorAction: 'preserve',\n });\n};\n\nexport const { parse, stringify } = json(false);\nexport const { parse: parseAlwaysAsBig, stringify: stringifyAlwaysAsBig } = json(true);\n\nexport default { parse, stringify };\n","import BN from 'bn.js';\nimport { gzip } from 'pako';\n\nimport { Calldata, CompressedProgram, Program, RawArgs, Signature } from '../types';\nimport { genKeyPair, getStarkKey } from './ellipticCurve';\nimport { addHexPrefix, btoaUniversal } from './encode';\nimport { stringify } from './json';\nimport { BigNumberish, toBN } from './number';\n\n/**\n * Function to compress compiled cairo program\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/services/api/gateway/transaction.py#L54-L58)\n * @param jsonProgram - json file representing the compiled cairo program\n * @returns Compressed cairo program\n */\nexport function compressProgram(jsonProgram: Program | string): CompressedProgram {\n const stringified = typeof jsonProgram === 'string' ? jsonProgram : stringify(jsonProgram);\n const compressedProgram = gzip(stringified);\n return btoaUniversal(compressedProgram);\n}\n\nexport function randomAddress(): string {\n const randomKeyPair = genKeyPair();\n return getStarkKey(randomKeyPair);\n}\n\nexport function makeAddress(input: string): string {\n return addHexPrefix(input).toLowerCase();\n}\n\nexport function formatSignature(sig?: Signature): string[] {\n if (!sig) return [];\n try {\n return sig.map((x) => toBN(x)).map((x) => x.toString());\n } catch (e) {\n return [];\n }\n}\n\nexport function compileCalldata(args: RawArgs): Calldata {\n return Object.values(args).flatMap((value) => {\n if (Array.isArray(value))\n return [toBN(value.length).toString(), ...value.map((x) => toBN(x).toString())];\n if (typeof value === 'object' && 'type' in value)\n return Object.entries(value)\n .filter(([k]) => k !== 'type')\n .map(([, v]) => toBN(v).toString());\n return toBN(value).toString();\n });\n}\n\nexport function estimatedFeeToMaxFee(estimatedFee: BigNumberish, overhead: number = 0.5): BN {\n // BN can only handle Integers, so we need to do all calulations with integers\n const overHeadPercent = Math.round((1 + overhead) * 100);\n return toBN(estimatedFee).mul(toBN(overHeadPercent)).div(toBN(100));\n}\n","import { CompiledContract, ContractClass, RawCalldata } from '../types';\nimport { parse } from './json';\nimport { isHex, toBN, toHex } from './number';\nimport { compressProgram } from './stark';\n\nexport function wait(delay: number) {\n return new Promise((res) => {\n setTimeout(res, delay);\n });\n}\n\nexport function parseCalldata(calldata: RawCalldata = []) {\n return calldata.map((data) => {\n if (typeof data === 'string' && isHex(data as string)) {\n return data;\n }\n return toHex(toBN(data));\n });\n}\n\nexport function parseContract(contract: CompiledContract | string) {\n const parsedContract =\n typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;\n return {\n ...parsedContract,\n program: compressProgram(parsedContract.program),\n } as ContractClass;\n}\n","/**\n * Map RPC Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n CallContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionResponse,\n RPC,\n} from '../../types';\nimport { toBN } from '../number';\nimport { ResponseParser } from '.';\n\ntype RpcGetBlockResponse = RPC.GetBlockWithTxHashesResponse & {\n [key: string]: any;\n};\n\ntype GetTransactionByHashResponse = RPC.GetTransactionByHashResponse & {\n [key: string]: any;\n};\n\nexport class RPCResponseParser\n implements\n Omit<\n ResponseParser,\n | 'parseDeclareContractResponse'\n | 'parseDeployContractResponse'\n | 'parseInvokeFunctionResponse'\n | 'parseGetTransactionReceiptResponse'\n >\n{\n public parseGetBlockResponse(res: RpcGetBlockResponse): GetBlockResponse {\n return {\n timestamp: res.timestamp,\n block_hash: res.block_hash,\n block_number: res.block_number,\n new_root: res.new_root,\n parent_hash: res.parent_hash,\n status: res.status,\n transactions: res.transactions,\n };\n }\n\n public parseGetTransactionResponse(res: GetTransactionByHashResponse): GetTransactionResponse {\n return {\n calldata: res.calldata || [],\n contract_address: res.contract_address,\n max_fee: res.max_fee,\n nonce: res.nonce,\n signature: res.signature || [],\n transaction_hash: res.transaction_hash,\n version: res.version,\n };\n }\n\n public parseFeeEstimateResponse(res: RPC.EstimateFeeResponse): EstimateFeeResponse {\n return {\n overall_fee: toBN(res.overall_fee),\n gas_consumed: toBN(res.gas_consumed),\n gas_price: toBN(res.gas_price),\n };\n }\n\n public parseCallContractResponse(res: Array<string>): CallContractResponse {\n return {\n result: res,\n };\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport type { BlockNumber } from '../types';\nimport { BigNumberish, isHex, toBN, toHex } from '../utils/number';\n\n/**\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L148-L153)\n *\n * @param hashValue\n * @param hashField\n */\nexport function formatHash(hashValue: BigNumberish): string {\n if (typeof hashValue === 'string') return hashValue;\n return toHex(toBN(hashValue));\n}\n\n/**\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L156-L161)\n * @param txHash\n * @param txId\n */\nexport function txIdentifier(txHash?: BigNumberish, txId?: BigNumberish): string {\n if (!txHash) {\n return `transactionId=${JSON.stringify(txId)}`;\n }\n const hashString = formatHash(txHash);\n\n return `transactionHash=${hashString}`;\n}\n\n// hex string and BN are detected as block hashes\n// decimal string and number are detected as block numbers\n// null appends nothing to the request url\n\nexport type BlockIdentifier = BlockNumber | BigNumberish;\n\nexport class Block {\n hash: BlockIdentifier = null;\n\n number: BlockIdentifier = null;\n\n tag: BlockIdentifier = null;\n\n private setIdentifier: (_identifier: BlockIdentifier) => void;\n\n constructor(_identifier: BlockIdentifier) {\n this.setIdentifier = function (__identifier: BlockIdentifier) {\n if (typeof __identifier === 'string' && isHex(__identifier)) {\n this.hash = __identifier;\n } else if (typeof __identifier === 'number') {\n this.number = __identifier;\n } else {\n this.tag = __identifier;\n }\n };\n\n this.setIdentifier(_identifier);\n }\n\n get queryIdentifier(): any {\n if (this.number !== null) {\n return `blockNumber=${this.number}`;\n }\n\n if (this.hash !== null) {\n return `blockHash=${this.hash}`;\n }\n\n return `blockNumber=${this.tag}`;\n }\n\n get identifier(): any {\n if (this.number !== null) {\n return { block_number: this.number };\n }\n\n if (this.hash !== null) {\n return { block_hash: this.hash };\n }\n\n return this.tag;\n }\n\n set identifier(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n valueOf = () => this.number;\n\n toString = () => this.hash;\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetails,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n RPC,\n} from '../types';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelectorFromName } from '../utils/hash';\nimport { stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToHexadecimalStringArray,\n toBN,\n toHex,\n} from '../utils/number';\nimport { parseCalldata, parseContract, wait } from '../utils/provider';\nimport { RPCResponseParser } from '../utils/responseParser/rpc';\nimport { randomAddress } from '../utils/stark';\nimport { ProviderInterface } from './interface';\nimport { Block, BlockIdentifier } from './utils';\n\nexport type RpcProviderOptions = {\n nodeUrl: string;\n retries?: number;\n headers?: object;\n};\n\nexport class RpcProvider implements ProviderInterface {\n public nodeUrl: string;\n\n // from interface\n public chainId!: StarknetChainId;\n\n public headers: object;\n\n private responseParser = new RPCResponseParser();\n\n private retries: number;\n\n constructor(optionsOrProvider: RpcProviderOptions) {\n const { nodeUrl, retries, headers } = optionsOrProvider;\n this.nodeUrl = nodeUrl;\n this.retries = retries || 200;\n this.headers = { 'Content-Type': 'application/json', ...headers };\n\n this.getChainId().then((chainId) => {\n this.chainId = chainId;\n });\n }\n\n public fetch(method: any, params: any): Promise<any> {\n return fetch(this.nodeUrl, {\n method: 'POST',\n body: stringify({ method, jsonrpc: '2.0', params, id: 0 }),\n headers: this.headers as Record<string, string>,\n });\n }\n\n protected errorHandler(error: any) {\n if (error) {\n const { code, message } = error;\n throw new Error(`${code}: ${message}`);\n }\n }\n\n protected async fetchEndpoint<T extends keyof RPC.Methods>(\n method: T,\n params?: RPC.Methods[T]['params']\n ): Promise<RPC.Methods[T]['result']> {\n try {\n const rawResult = await this.fetch(method, params);\n const { error, result } = await rawResult.json();\n this.errorHandler(error);\n return result as RPC.Methods[T]['result'];\n } catch (error: any) {\n this.errorHandler(error?.response?.data);\n throw error;\n }\n }\n\n // Methods from Interface\n public async getChainId(): Promise<any> {\n return this.fetchEndpoint('starknet_chainId');\n }\n\n // Methods from Interface\n public async getBlock(blockIdentifier: BlockIdentifier = 'pending'): Promise<GetBlockResponse> {\n return this.getBlockWithTxHashes(blockIdentifier).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getBlockHashAndNumber(): Promise<RPC.BlockHashAndNumber> {\n return this.fetchEndpoint('starknet_blockHashAndNumber');\n }\n\n public async getBlockWithTxHashes(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.GetBlockWithTxHashesResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxHashes', { block_id });\n }\n\n public async getBlockWithTxs(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.GetBlockWithTxs> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxs', { block_id });\n }\n\n public async getClassHashAt(\n contractAddress: RPC.ContractAddress,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.Felt> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassHashAt', {\n block_id,\n contract_address: contractAddress,\n });\n }\n\n public async getNonce(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.Nonce> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getNonce', {\n contract_address: contractAddress,\n block_id,\n });\n }\n\n public async getPendingTransactions(): Promise<RPC.PendingTransactions> {\n return this.fetchEndpoint('starknet_pendingTransactions');\n }\n\n public async getProtocolVersion(): Promise<Error> {\n throw new Error('Pathfinder does not implement this rpc 0.1.0 method');\n }\n\n public async getStateUpdate(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.StateUpdate> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStateUpdate', { block_id });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n const parsedKey = toHex(toBN(key));\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStorageAt', {\n contract_address: contractAddress,\n key: parsedKey,\n block_id,\n });\n }\n\n // Methods from Interface\n public async getTransaction(txHash: string): Promise<GetTransactionResponse> {\n return this.getTransactionByHash(txHash).then(this.responseParser.parseGetTransactionResponse);\n }\n\n public async getTransactionByHash(txHash: string): Promise<RPC.GetTransactionByHashResponse> {\n return this.fetchEndpoint('starknet_getTransactionByHash', { transaction_hash: txHash });\n }\n\n public async getTransactionByBlockIdAndIndex(\n blockIdentifier: BlockIdentifier,\n index: number\n ): Promise<RPC.GetTransactionByBlockIdAndIndex> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getTransactionByBlockIdAndIndex', { block_id, index });\n }\n\n public async getTransactionReceipt(txHash: string): Promise<RPC.TransactionReceipt> {\n return this.fetchEndpoint('starknet_getTransactionReceipt', { transaction_hash: txHash });\n }\n\n public async getClassByHash(classHash: RPC.Felt): Promise<RPC.ContractClass> {\n return this.getClass(classHash);\n }\n\n public async getClass(\n classHash: RPC.Felt,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.ContractClass> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClass', { class_hash: classHash, block_id });\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.ContractClass> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassAt', {\n block_id,\n contract_address: contractAddress,\n });\n }\n\n public async getCode(\n _contractAddress: string,\n _blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n throw new Error('RPC does not implement getCode function');\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'INVOKE',\n sender_address: invocation.contractAddress,\n calldata: parseCalldata(invocation.calldata),\n signature: bigNumberishArrayToHexadecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 0)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n max_fee: toHex(toBN(invocationDetails?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n // TODO: Revisit after Pathfinder release with JSON-RPC v0.2.1 RPC Spec\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'DECLARE',\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi, // rpc 2.0\n },\n sender_address: senderAddress,\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'DEPLOY_ACCOUNT',\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(toBN(classHash)),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n // TODO: Revisit after Pathfinder release with JSON-RPC v0.2.1 RPC Spec\n public async declareContract(\n { contractDefinition, signature, senderAddress }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.fetchEndpoint('starknet_addDeclareTransaction', {\n declare_transaction: {\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi, // rpc 2.0\n },\n type: 'DECLARE',\n version: toHex(toBN(details.version || 0)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n sender_address: senderAddress,\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n /**\n * @deprecated This method won't be supported, use Account.deploy instead\n */\n public async deployContract(\n { contract, constructorCalldata, addressSalt }: DeployContractPayload,\n details?: InvocationsDetails\n ): Promise<DeployContractResponse> {\n const contractDefinition = parseContract(contract);\n return this.fetchEndpoint('starknet_addDeployTransaction', {\n deploy_transaction: {\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata ?? []),\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi,\n },\n type: 'DEPLOY',\n version: toHex(toBN(details?.version || 0)),\n },\n });\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('starknet_addDeployAccountTransaction', {\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(toBN(classHash)),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n type: 'DEPLOY',\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n nonce: toHex(toBN(details.nonce)),\n });\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('starknet_addInvokeTransaction', {\n invoke_transaction: {\n sender_address: functionInvocation.contractAddress,\n calldata: parseCalldata(functionInvocation.calldata),\n type: 'INVOKE',\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(functionInvocation.signature || []),\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n // Methods from Interface\n public async callContract(\n call: Call,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<CallContractResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n const result = await this.fetchEndpoint('starknet_call', {\n request: {\n contract_address: call.contractAddress,\n entry_point_selector: getSelectorFromName(call.entrypoint),\n calldata: parseCalldata(call.calldata),\n },\n block_id,\n });\n\n return this.responseParser.parseCallContractResponse(result);\n }\n\n public async traceTransaction(transactionHash: RPC.TransactionHash): Promise<RPC.Trace> {\n return this.fetchEndpoint('starknet_traceTransaction', { transaction_hash: transactionHash });\n }\n\n public async traceBlockTransactions(blockHash: RPC.BlockHash): Promise<RPC.Traces> {\n return this.fetchEndpoint('starknet_traceBlockTransactions', { block_hash: blockHash });\n }\n\n public async waitForTransaction(txHash: string, retryInterval: number = 8000) {\n let { retries } = this;\n let onchain = false;\n\n while (!onchain) {\n const successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING'];\n const errorStates = ['REJECTED', 'NOT_RECEIVED'];\n\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n try {\n // eslint-disable-next-line no-await-in-loop\n const res = await this.getTransactionReceipt(txHash);\n\n if (!('status' in res)) {\n const error = new Error('pending transaction');\n throw error;\n }\n\n if (res.status && successStates.includes(res.status)) {\n onchain = true;\n } else if (res.status && errorStates.includes(res.status)) {\n const message = res.status;\n const error = new Error(message) as Error & { response: any };\n error.response = res;\n throw error;\n }\n } catch (error: unknown) {\n if (error instanceof Error && errorStates.includes(error.message)) {\n throw error;\n }\n\n if (retries === 0) {\n throw new Error('waitForTransaction timedout with retries');\n }\n }\n\n retries -= 1;\n }\n\n await wait(retryInterval);\n }\n\n /**\n * Gets the transaction count from a block.\n *\n *\n * @param blockIdentifier\n * @returns Number of transactions\n */\n public async getTransactionCount(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.GetTransactionCountResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockTransactionCount', { block_id });\n }\n\n /**\n * Gets the latest block number\n *\n *\n * @returns Number of the latest block\n */\n public async getBlockNumber(): Promise<RPC.GetBlockNumberResponse> {\n return this.fetchEndpoint('starknet_blockNumber');\n }\n\n /**\n * Gets syncing status of the node\n *\n *\n * @returns Object with the stats data\n */\n public async getSyncingStats(): Promise<RPC.GetSyncingStatsResponse> {\n return this.fetchEndpoint('starknet_syncing');\n }\n\n /**\n * Gets all the events filtered\n *\n *\n * @returns events and the pagination of the events\n */\n public async getEvents(eventFilter: RPC.EventFilter): Promise<RPC.GetEventsResponse> {\n return this.fetchEndpoint('starknet_getEvents', { filter: eventFilter });\n }\n}\n","import urljoin from 'url-join';\n\nimport { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n CallL1Handler,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetContractAddressesResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n GetTransactionStatusResponse,\n GetTransactionTraceResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Sequencer,\n} from '../types';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelector, getSelectorFromName } from '../utils/hash';\nimport { parse, parseAlwaysAsBig, stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToDecimalStringArray,\n getDecimalString,\n getHexString,\n getHexStringArray,\n toBN,\n toHex,\n} from '../utils/number';\nimport { parseContract, wait } from '../utils/provider';\nimport { SequencerAPIResponseParser } from '../utils/responseParser/sequencer';\nimport { randomAddress } from '../utils/stark';\nimport { buildUrl } from '../utils/url';\nimport { GatewayError, HttpError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { Block, BlockIdentifier } from './utils';\n\ntype NetworkName = 'mainnet-alpha' | 'goerli-alpha' | 'goerli-alpha-2';\n\nfunction isEmptyQueryObject(obj?: Record<any, any>): obj is undefined {\n return (\n obj === undefined ||\n Object.keys(obj).length === 0 ||\n (Object.keys(obj).length === 1 &&\n Object.entries(obj).every(([k, v]) => k === 'blockIdentifier' && v === null))\n );\n}\n\nexport type SequencerProviderOptions =\n | { network: NetworkName }\n | {\n baseUrl: string;\n feederGatewayUrl?: string;\n gatewayUrl?: string;\n chainId?: StarknetChainId;\n headers?: object;\n };\n\nexport class SequencerProvider implements ProviderInterface {\n public baseUrl: string;\n\n public feederGatewayUrl: string;\n\n public gatewayUrl: string;\n\n public chainId: StarknetChainId;\n\n public headers: object | undefined;\n\n private responseParser = new SequencerAPIResponseParser();\n\n constructor(optionsOrProvider: SequencerProviderOptions = { network: 'goerli-alpha-2' }) {\n if ('network' in optionsOrProvider) {\n this.baseUrl = SequencerProvider.getNetworkFromName(optionsOrProvider.network);\n this.chainId = SequencerProvider.getChainIdFromBaseUrl(this.baseUrl);\n this.feederGatewayUrl = urljoin(this.baseUrl, 'feeder_gateway');\n this.gatewayUrl = urljoin(this.baseUrl, 'gateway');\n } else {\n this.baseUrl = optionsOrProvider.baseUrl;\n this.feederGatewayUrl = buildUrl(\n this.baseUrl,\n 'feeder_gateway',\n optionsOrProvider.feederGatewayUrl\n );\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway', optionsOrProvider.gatewayUrl);\n\n this.chainId =\n optionsOrProvider.chainId ??\n SequencerProvider.getChainIdFromBaseUrl(optionsOrProvider.baseUrl);\n\n this.headers = optionsOrProvider?.headers;\n }\n }\n\n protected static getNetworkFromName(name: NetworkName) {\n switch (name) {\n case 'mainnet-alpha':\n return 'https://alpha-mainnet.starknet.io';\n case 'goerli-alpha':\n return 'https://alpha4.starknet.io';\n case 'goerli-alpha-2':\n return 'https://alpha4-2.starknet.io';\n default:\n return 'https://alpha4.starknet.io';\n }\n }\n\n protected static getChainIdFromBaseUrl(baseUrl: string): StarknetChainId {\n try {\n const url = new URL(baseUrl);\n if (url.host.includes('mainnet.starknet.io')) {\n return StarknetChainId.MAINNET;\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Could not parse baseUrl: ${baseUrl}`);\n }\n return StarknetChainId.TESTNET;\n }\n\n private getFetchUrl(endpoint: keyof Sequencer.Endpoints) {\n const gatewayUrlEndpoints = ['add_transaction'];\n\n return gatewayUrlEndpoints.includes(endpoint) ? this.gatewayUrl : this.feederGatewayUrl;\n }\n\n private getFetchMethod(endpoint: keyof Sequencer.Endpoints) {\n const postMethodEndpoints = [\n 'add_transaction',\n 'call_contract',\n 'estimate_fee',\n 'estimate_message_fee',\n ];\n\n return postMethodEndpoints.includes(endpoint) ? 'POST' : 'GET';\n }\n\n private getQueryString(query?: Record<string, any>): string {\n if (isEmptyQueryObject(query)) {\n return '';\n }\n const queryString = Object.entries(query)\n .map(([key, value]) => {\n if (key === 'blockIdentifier') {\n const block = new Block(value);\n return `${block.queryIdentifier}`;\n }\n return `${key}=${value}`;\n })\n .join('&');\n\n return `?${queryString}`;\n }\n\n private getHeaders(method: 'POST' | 'GET'): object | undefined {\n if (method === 'POST') {\n return {\n 'Content-Type': 'application/json',\n ...this.headers,\n };\n }\n return this.headers;\n }\n\n // typesafe fetch\n protected async fetchEndpoint<T extends keyof Sequencer.Endpoints>(\n endpoint: T,\n // typescript type magic to create a nice fitting function interface\n ...[query, request]: Sequencer.Endpoints[T]['QUERY'] extends never\n ? Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [] // when no query and no request is needed, we can omit the query and request parameters\n : [undefined, Sequencer.Endpoints[T]['REQUEST']]\n : Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [Sequencer.Endpoints[T]['QUERY']] // when no request is needed, we can omit the request parameter\n : [Sequencer.Endpoints[T]['QUERY'], Sequencer.Endpoints[T]['REQUEST']] // when both query and request are needed, we cant omit anything\n ): Promise<Sequencer.Endpoints[T]['RESPONSE']> {\n const baseUrl = this.getFetchUrl(endpoint);\n const method = this.getFetchMethod(endpoint);\n const queryString = this.getQueryString(query);\n const headers = this.getHeaders(method);\n const url = urljoin(baseUrl, endpoint, queryString);\n\n try {\n const res = await fetch(url, {\n method,\n body: stringify(request),\n headers: headers as Record<string, string>,\n });\n const textResponse = await res.text();\n if (!res.ok) {\n // This will allow user to handle contract errors\n let responseBody: any;\n try {\n responseBody = parse(textResponse);\n } catch {\n // if error parsing fails, return an http error\n throw new HttpError(res.statusText, res.status);\n }\n\n const errorCode = responseBody.code || ((responseBody as any)?.status_code as string); // starknet-devnet uses status_code instead of code; They need to fix that\n throw new GatewayError(responseBody.message, errorCode); // Caught locally, and re-thrown for the user\n }\n\n if (endpoint === 'estimate_fee') {\n return parseAlwaysAsBig(textResponse, (_, v) => {\n if (v && typeof v === 'bigint') {\n return toBN(v.toString());\n }\n return v;\n });\n }\n return parse(textResponse) as Sequencer.Endpoints[T]['RESPONSE'];\n } catch (err) {\n // rethrow custom errors\n if (err instanceof GatewayError || err instanceof HttpError) {\n throw err;\n }\n if (err instanceof Error) {\n throw Error(`Could not ${method} from endpoint \\`${url}\\`: ${err.message}`);\n }\n throw err;\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return Promise.resolve(this.chainId);\n }\n\n public async callContract(\n { contractAddress, entrypoint: entryPointSelector, calldata = [] }: Call,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<CallContractResponse> {\n return this.fetchEndpoint(\n 'call_contract',\n { blockIdentifier },\n {\n signature: [],\n contract_address: contractAddress,\n entry_point_selector: getSelectorFromName(entryPointSelector),\n calldata,\n }\n ).then(this.responseParser.parseCallContractResponse);\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier = 'pending'): Promise<GetBlockResponse> {\n return this.fetchEndpoint('get_block', { blockIdentifier }).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getNonce(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n return this.fetchEndpoint('get_nonce', { contractAddress, blockIdentifier });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n const parsedKey = toBN(key).toString(10);\n return this.fetchEndpoint('get_storage_at', {\n blockIdentifier,\n contractAddress,\n key: parsedKey,\n });\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction', { transactionHash: txHashHex }).then((value) =>\n this.responseParser.parseGetTransactionResponse(value)\n );\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_receipt', { transactionHash: txHashHex }).then(\n this.responseParser.parseGetTransactionReceiptResponse\n );\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<ContractClass> {\n return this.fetchEndpoint('get_full_contract', { blockIdentifier, contractAddress }).then(\n parseContract\n );\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<string> {\n return this.fetchEndpoint('get_class_hash_at', { blockIdentifier, contractAddress });\n }\n\n public async getClassByHash(classHash: string): Promise<ContractClass> {\n return this.fetchEndpoint('get_class_by_hash', { classHash }).then(parseContract);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'INVOKE_FUNCTION',\n contract_address: functionInvocation.contractAddress,\n calldata: bigNumberishArrayToDecimalStringArray(functionInvocation.calldata ?? []),\n signature: bigNumberishArrayToDecimalStringArray(functionInvocation.signature ?? []),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n }).then(this.responseParser.parseInvokeFunctionResponse);\n }\n\n /**\n * @deprecated This method won't be supported, use Account.deploy instead\n */\n public async deployContract({\n contract,\n constructorCalldata,\n addressSalt,\n }: DeployContractPayload): Promise<DeployContractResponse> {\n const contractDefinition = parseContract(contract);\n\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DEPLOY',\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),\n contract_definition: contractDefinition,\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DEPLOY_ACCOUNT',\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),\n class_hash: toHex(toBN(classHash)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async declareContract(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DECLARE',\n contract_class: contractDefinition,\n nonce: toHex(toBN(details.nonce)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n sender_address: senderAddress,\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'INVOKE_FUNCTION',\n contract_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: bigNumberishArrayToDecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 1)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'DECLARE',\n sender_address: senderAddress,\n contract_class: contractDefinition,\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 1)),\n nonce: toHex(toBN(details.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, addressSalt, constructorCalldata, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'DEPLOY_ACCOUNT',\n class_hash: toHex(toBN(classHash)),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata || []),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<Sequencer.GetCodeResponse> {\n return this.fetchEndpoint('get_code', { contractAddress, blockIdentifier });\n }\n\n public async waitForTransaction(txHash: BigNumberish, retryInterval: number = 8000) {\n let onchain = false;\n\n while (!onchain) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n // eslint-disable-next-line no-await-in-loop\n const res = await this.getTransactionStatus(txHash);\n\n const successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING'];\n const errorStates = ['REJECTED', 'NOT_RECEIVED'];\n\n if (successStates.includes(res.tx_status)) {\n onchain = true;\n } else if (errorStates.includes(res.tx_status)) {\n const message = res.tx_failure_reason\n ? `${res.tx_status}: ${res.tx_failure_reason.code}\\n${res.tx_failure_reason.error_message}`\n : res.tx_status;\n const error = new Error(message) as Error & { response: GetTransactionStatusResponse };\n error.response = res;\n throw error;\n }\n }\n }\n\n /**\n * Gets the status of a transaction.\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L48-L52)\n *\n * @param txHash\n * @returns the transaction status object { block_number, tx_status: NOT_RECEIVED | RECEIVED | PENDING | REJECTED | ACCEPTED_ONCHAIN }\n */\n public async getTransactionStatus(txHash: BigNumberish): Promise<GetTransactionStatusResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_status', { transactionHash: txHashHex });\n }\n\n /**\n * Gets the smart contract address on the goerli testnet.\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L13-L15)\n * @returns starknet smart contract addresses\n */\n public async getContractAddresses(): Promise<GetContractAddressesResponse> {\n return this.fetchEndpoint('get_contract_addresses');\n }\n\n /**\n * Gets the transaction trace from a tx id.\n *\n *\n * @param txHash\n * @returns the transaction trace\n */\n public async getTransactionTrace(txHash: BigNumberish): Promise<GetTransactionTraceResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_trace', { transactionHash: txHashHex });\n }\n\n public async estimateMessageFee(\n { from_address, to_address, entry_point_selector, payload }: CallL1Handler,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<Sequencer.EstimateFeeResponse> {\n const validCallL1Handler = {\n from_address: getDecimalString(from_address),\n to_address: getHexString(to_address),\n entry_point_selector: getSelector(entry_point_selector),\n payload: getHexStringArray(payload),\n };\n\n return this.fetchEndpoint('estimate_message_fee', { blockIdentifier }, validCallL1Handler);\n }\n}\n","import {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n} from '../../types';\n\nexport abstract class ResponseParser {\n abstract parseGetBlockResponse(res: any): GetBlockResponse;\n\n abstract parseGetTransactionResponse(res: any): GetTransactionResponse;\n\n abstract parseGetTransactionReceiptResponse(res: any): GetTransactionReceiptResponse;\n\n abstract parseFeeEstimateResponse(res: any): EstimateFeeResponse;\n\n abstract parseCallContractResponse(res: any): CallContractResponse;\n\n abstract parseInvokeFunctionResponse(res: any): InvokeFunctionResponse;\n\n abstract parseDeployContractResponse(res: any): DeployContractResponse;\n\n abstract parseDeclareContractResponse(res: any): DeclareContractResponse;\n}\n","/**\n * Map Sequencer Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n Sequencer,\n} from '../../types';\nimport { toBN } from '../number';\nimport { ResponseParser } from '.';\n\nexport class SequencerAPIResponseParser extends ResponseParser {\n public parseGetBlockResponse(res: Sequencer.GetBlockResponse): GetBlockResponse {\n return {\n ...res,\n new_root: res.state_root,\n parent_hash: res.parent_block_hash,\n transactions: Object.values(res.transactions)\n .map((value) => 'transaction_hash' in value && value.transaction_hash)\n .filter(Boolean) as Array<string>,\n };\n }\n\n public parseGetTransactionResponse(\n res: Sequencer.GetTransactionResponse\n ): GetTransactionResponse {\n return {\n ...res,\n calldata: 'calldata' in res.transaction ? (res.transaction.calldata as Array<string>) : [],\n contract_address:\n 'contract_address' in res.transaction ? res.transaction.contract_address : undefined,\n contract_class:\n 'contract_class' in res.transaction ? (res.transaction.contract_class as any) : undefined,\n entry_point_selector:\n 'entry_point_selector' in res.transaction\n ? res.transaction.entry_point_selector\n : undefined,\n max_fee: 'max_fee' in res.transaction ? (res.transaction.max_fee as string) : undefined,\n nonce: res.transaction.nonce as string,\n sender_address:\n 'sender_address' in res.transaction\n ? (res.transaction.sender_address as string)\n : undefined,\n signature: 'signature' in res.transaction ? res.transaction.signature : undefined,\n transaction_hash:\n 'transaction_hash' in res.transaction ? res.transaction.transaction_hash : undefined,\n version: 'version' in res.transaction ? (res.transaction.version as string) : undefined,\n };\n }\n\n public parseGetTransactionReceiptResponse(\n res: Sequencer.TransactionReceiptResponse\n ): GetTransactionReceiptResponse {\n return {\n transaction_hash: res.transaction_hash,\n status: res.status,\n messages_sent: res.l2_to_l1_messages as any, // TODO: parse\n events: res.events as any,\n ...('block_hash' in res && { block_hash: res.block_hash }),\n ...('block_number' in res && { block_number: res.block_number }),\n ...('actual_fee' in res && { actual_fee: res.actual_fee }),\n ...('transaction_index' in res && { transaction_index: res.transaction_index }),\n ...('execution_resources' in res && { execution_resources: res.execution_resources }),\n ...('l1_to_l2_consumed_message' in res && {\n // eslint-disable-next-line @typescript-eslint/dot-notation\n l1_to_l2_consumed_message: res['l1_to_l2_consumed_message'],\n }),\n ...('transaction_failure_reason' in res && {\n transaction_failure_reason: res.transaction_failure_reason,\n }),\n };\n }\n\n public parseFeeEstimateResponse(res: Sequencer.EstimateFeeResponse): EstimateFeeResponse {\n if ('overall_fee' in res) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBN(res.gas_usage),\n gas_price: toBN(res.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBN(res.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBN(res.amount),\n };\n }\n\n public parseCallContractResponse(res: Sequencer.CallContractResponse): CallContractResponse {\n return {\n result: res.result,\n };\n }\n\n public parseInvokeFunctionResponse(\n res: Sequencer.AddTransactionResponse\n ): InvokeFunctionResponse {\n return {\n transaction_hash: res.transaction_hash,\n };\n }\n\n public parseDeployContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeployContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n contract_address: res.address as string,\n };\n }\n\n public parseDeclareContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeclareContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n class_hash: res.class_hash as string,\n };\n }\n}\n","import urljoin from 'url-join';\n\n/**\n * Inspired from https://github.com/segmentio/is-url\n */\n\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\nconst protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nconst localhostDomainRE = /^localhost[:?\\d]*(?:[^:?\\d]\\S*)?$/;\nconst nonLocalhostDomainRE = /^[^\\s.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n * @param {String} s\n * @return {Boolean}\n */\nexport function isUrl(s?: string): boolean {\n if (!s) {\n return false;\n }\n\n if (typeof s !== 'string') {\n return false;\n }\n\n const match = s.match(protocolAndDomainRE);\n if (!match) {\n return false;\n }\n\n const everythingAfterProtocol = match[1];\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (\n localhostDomainRE.test(everythingAfterProtocol) ||\n nonLocalhostDomainRE.test(everythingAfterProtocol)\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function buildUrl(baseUrl: string, defaultPath: string, urlOrPath?: string) {\n return isUrl(urlOrPath) ? urlOrPath! : urljoin(baseUrl, urlOrPath ?? defaultPath);\n}\n","/* eslint-disable max-classes-per-file */\nimport { CustomError } from 'ts-custom-error';\n\nexport class GatewayError extends CustomError {\n constructor(message: string, public errorCode: string) {\n super(message);\n }\n}\n\nexport class HttpError extends CustomError {\n constructor(message: string, public errorCode: number) {\n super(message);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetails,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n} from '../types';\nimport { BigNumberish } from '../utils/number';\nimport { ProviderInterface } from './interface';\nimport { RpcProvider, RpcProviderOptions } from './rpc';\nimport { SequencerProvider, SequencerProviderOptions } from './sequencer';\nimport { BlockIdentifier } from './utils';\n\nexport interface ProviderOptions {\n sequencer?: SequencerProviderOptions;\n rpc?: RpcProviderOptions;\n}\n\nexport class Provider implements ProviderInterface {\n private provider!: ProviderInterface;\n\n constructor(providerOrOptions?: ProviderOptions | ProviderInterface) {\n if (providerOrOptions && 'chainId' in providerOrOptions) {\n this.provider = providerOrOptions;\n } else if (providerOrOptions?.rpc) {\n this.provider = new RpcProvider(providerOrOptions.rpc);\n } else if (providerOrOptions?.sequencer) {\n this.provider = new SequencerProvider(providerOrOptions.sequencer);\n } else {\n this.provider = new SequencerProvider();\n }\n }\n\n public get chainId(): StarknetChainId {\n return this.provider.chainId;\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return this.provider.getChainId();\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier = 'pending'): Promise<GetBlockResponse> {\n return this.provider.getBlock(blockIdentifier);\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<ContractClass> {\n return this.provider.getClassAt(contractAddress, blockIdentifier);\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<string> {\n return this.provider.getClassHashAt(contractAddress, blockIdentifier);\n }\n\n public getClassByHash(classHash: string): Promise<ContractClass> {\n return this.provider.getClassByHash(classHash);\n }\n\n public async getEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getEstimateFee(invocationWithTxType, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getInvokeEstimateFee(\n invocationWithTxType,\n invocationDetails,\n blockIdentifier\n );\n }\n\n public async getNonce(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish> {\n return this.provider.getNonce(contractAddress, blockIdentifier);\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n return this.provider.getStorageAt(contractAddress, key, blockIdentifier);\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n return this.provider.getTransaction(txHash);\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n return this.provider.getTransactionReceipt(txHash);\n }\n\n public async callContract(\n request: Call,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<CallContractResponse> {\n return this.provider.callContract(request, blockIdentifier);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.provider.invokeFunction(functionInvocation, details);\n }\n\n /**\n * @deprecated This method won't be supported, use Account.deploy instead\n */\n public async deployContract(\n payload: DeployContractPayload,\n details: InvocationsDetails\n ): Promise<DeployContractResponse> {\n return this.provider.deployContract(payload, details);\n }\n\n public async deployAccountContract(\n payload: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.provider.deployAccountContract(payload, details);\n }\n\n public async declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.provider.declareContract(transaction, details);\n }\n\n public async getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier);\n }\n\n public getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeployAccountEstimateFee(transaction, details, blockIdentifier);\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n return this.provider.getCode(contractAddress, blockIdentifier);\n }\n\n public async waitForTransaction(txHash: BigNumberish, retryInterval?: number): Promise<void> {\n return this.provider.waitForTransaction(txHash, retryInterval);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport type {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetails,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n} from '../types';\nimport type { BigNumberish } from '../utils/number';\nimport { BlockIdentifier } from './utils';\n\nexport abstract class ProviderInterface {\n public abstract chainId: StarknetChainId;\n\n /**\n * Gets the Starknet chain Id\n *\n * @returns the chain Id\n */\n public abstract getChainId(): Promise<StarknetChainId>;\n\n /**\n * Calls a function on the StarkNet contract.\n *\n * @param call transaction to be called\n * @param blockIdentifier block identifier\n * @returns the result of the function on the smart contract.\n */\n public abstract callContract(\n call: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse>;\n\n /**\n * Gets the block information\n *\n * @param blockIdentifier block identifier\n * @returns the block object\n */\n public abstract getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse>;\n\n /**\n * @deprecated The method should not be used\n */\n public abstract getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse>;\n\n /**\n * Gets the contract class of the deployed contract.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Contract class of compiled contract\n */\n public abstract getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClass>;\n\n /**\n * Returns the class hash deployed under the given address.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Class hash\n */\n public abstract getClassHashAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<string>;\n\n /**\n * Returns the contract class deployed under the given class hash.\n *\n * @param classHash - class hash\n * @returns Contract class of compiled contract\n */\n public abstract getClassByHash(classHash: string): Promise<ContractClass>;\n\n /**\n * Gets the nonce of a contract with respect to a specific block\n *\n * @param contractAddress - contract address\n * @returns the hex nonce\n */\n public abstract getNonce(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish>;\n\n /**\n * Gets the contract's storage variable at a specific key.\n *\n * @param contractAddress\n * @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)\n * @param blockIdentifier - block identifier\n * @returns the value of the storage variable\n */\n public abstract getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish>;\n\n /**\n * Gets the transaction information from a tx id.\n *\n * @param txHash\n * @returns the transacton object { transaction_id, status, transaction, block_number?, block_number?, transaction_index?, transaction_failure_reason? }\n */\n public abstract getTransaction(transactionHash: BigNumberish): Promise<GetTransactionResponse>;\n\n /**\n * Gets the transaction receipt from a tx hash.\n *\n * @param txHash\n * @returns the transaction receipt object\n */\n public abstract getTransactionReceipt(\n transactionHash: BigNumberish\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Deploys a given compiled contract (json) to starknet\n *\n * @deprecated This method won't be supported, use Account.deploy instead\n *\n * @param payload payload to be deployed containing:\n * - compiled contract code\n * - constructor calldata\n * - address salt\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployContract(\n payload: DeployContractPayload,\n details?: InvocationsDetails\n ): Promise<DeployContractResponse>;\n\n /**\n * Deploys a given compiled Account contract (json) to starknet\n *\n * @param payload payload to be deployed containing:\n * - compiled contract code\n * - constructor calldata\n * - address salt\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccountContract(\n payload: DeployAccountContractPayload,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse>;\n\n /**\n * Invokes a function on starknet\n * @deprecated This method wont be supported as soon as fees are mandatory\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * - maxFee - optional maxFee\n * @returns response from addTransaction\n */\n public abstract invokeFunction(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * @param transaction transaction payload to be deployed containing:\n * - compiled contract code\n * - sender address\n * - signature\n * @param details Invocation Details containing:\n * - nonce\n * - optional version\n * - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n * @deprecated Please use getInvokeEstimateFee or getDeclareEstimateFee instead\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param blockIdentifier - block identifier\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @returns the estimated fee\n */\n public abstract getEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param blockIdentifier - block identifier\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @returns the estimated fee\n */\n public abstract getInvokeEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DECLARE transaction\n *\n * @param transaction transaction payload to be declared containing:\n * - compiled contract code\n * - sender address\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DEPLOY_ACCOUNT transaction\n *\n * @param transaction transaction payload to be deployed containing:\n * - classHash\n * - constructorCalldata\n * - addressSalt\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Wait for the transaction to be accepted\n * @param txHash - transaction hash\n * @param retryInterval - retry interval\n */\n public abstract waitForTransaction(txHash: BigNumberish, retryInterval?: number): Promise<void>;\n}\n","import { Provider } from './default';\n\nexport * from './default';\nexport * from './errors';\nexport * from './sequencer';\nexport * from './interface';\nexport * from './rpc';\n\nexport const defaultProvider = new Provider();\n","import { AccountInterface } from '../account';\nimport { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport {\n Abi,\n AsyncContractFunction,\n ContractFunction,\n Invocation,\n InvokeFunctionResponse,\n Overrides,\n Result,\n} from '../types';\n\nexport abstract class ContractInterface {\n public abstract abi: Abi;\n\n public abstract address: string;\n\n public abstract providerOrAccount: ProviderInterface | AccountInterface;\n\n public abstract deployTransactionHash?: string;\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n /**\n * Saves the address of the contract deployed on network that will be used for interaction\n *\n * @param address - address of the contract\n */\n public abstract attach(address: string): void;\n\n /**\n * Attaches to new Provider or Account\n *\n * @param providerOrAccount - new Provider or Account to attach to\n */\n public abstract connect(providerOrAccount: ProviderInterface | AccountInterface): void;\n\n /**\n * Resolves when contract is deployed on the network or when no deployment transaction is found\n *\n * @returns Promise that resolves when contract is deployed on the network or when no deployment transaction is found\n * @throws When deployment fails\n */\n public abstract deployed(): Promise<ContractInterface>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n * @returns Result of the call as an array with key value pars\n */\n public abstract call(\n method: string,\n args?: Array<any>,\n options?: {\n blockIdentifier?: BlockIdentifier;\n }\n ): Promise<Result>;\n\n /**\n * Invokes a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the invoke\n * @param options\n * @returns Add Transaction Response\n */\n public abstract invoke(\n method: string,\n args?: Array<any>,\n options?: Overrides\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Estimates a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n */\n public abstract estimate(\n method: string,\n args?: Array<any>,\n options?: {\n blockIdentifier?: BlockIdentifier;\n }\n ): Promise<any>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @returns Invocation object\n */\n public abstract populate(method: string, args?: Array<any>): Invocation;\n}\n","import assert from 'minimalistic-assert';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport { Abi, CompiledContract, RawCalldata } from '../types';\nimport { Contract } from './default';\n\nexport class ContractFactory {\n abi: Abi;\n\n compiledContract: CompiledContract;\n\n providerOrAccount: ProviderInterface | AccountInterface;\n\n constructor(\n compiledContract: CompiledContract,\n providerOrAccount: ProviderInterface | AccountInterface = defaultProvider,\n abi: Abi = compiledContract.abi // abi can be different from the deployed contract ie for proxy contracts\n ) {\n this.abi = abi;\n this.compiledContract = compiledContract;\n this.providerOrAccount = providerOrAccount;\n }\n\n /**\n * Deploys contract and returns new instance of the Contract\n *\n * @param constructorCalldata - Constructor Calldata\n * @param addressSalt (optional) - Address Salt for deployment\n * @returns deployed Contract\n */\n public async deploy(\n constructorCalldata?: RawCalldata,\n addressSalt?: string | undefined\n ): Promise<Contract> {\n const { contract_address, transaction_hash } = await this.providerOrAccount.deployContract({\n contract: this.compiledContract,\n constructorCalldata,\n addressSalt,\n });\n assert(Boolean(contract_address), 'Deployment of the contract failed');\n\n const contractInstance = new Contract(\n this.compiledContract.abi,\n contract_address!,\n this.providerOrAccount\n );\n contractInstance.deployTransactionHash = transaction_hash;\n\n return contractInstance;\n }\n\n /**\n * Attaches to new Provider or Account\n *\n * @param providerOrAccount - new Provider or Account to attach to\n */\n connect(providerOrAccount: ProviderInterface | AccountInterface): ContractFactory {\n this.providerOrAccount = providerOrAccount;\n return this;\n }\n\n /**\n * Attaches current abi and provider or account to the new address\n *\n * @param address - Contract address\n * @returns Contract\n */\n attach(address: string): Contract {\n return new Contract(this.abi, address, this.providerOrAccount);\n }\n\n // ethers.js' getDeployTransaction cant be supported as it requires the account or signer to return a signed transaction which is not possible with the current implementation\n}\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n InvocationsSignerDetails,\n Signature,\n} from '../types';\nimport { TypedData } from '../utils/typedData';\n\nexport abstract class SignerInterface {\n /**\n * Method to get the public key of the signer\n *\n * @returns public key of signer as hex string with 0x prefix\n */\n public abstract getPubKey(): Promise<string>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param typedData - JSON object to be signed\n * @param accountAddress - account\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData, accountAddress: string): Promise<Signature>;\n\n /**\n * Signs a transaction with the starknet private key and returns the signature\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns signature\n */\n public abstract signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature>;\n\n /**\n * Signs a DEPLOY_ACCOUNT transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - contractAddress - the computed address of the contract\n * - constructorCalldata - calldata to be passed in deploy constructor\n * - addressSalt - contract address salt\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeployAccountTransaction(\n transaction: DeployAccountSignerDetails\n ): Promise<Signature>;\n\n /**\n * Signs a DECLARE transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - classHash - computed class hash. Will be replaced by ContractClass in future once class hash is present in CompiledContract\n * - senderAddress - the address of the sender\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeclareTransaction(transaction: DeclareSignerDetails): Promise<Signature>;\n}\n","import { Call, ParsedStruct } from '../types';\nimport { getSelectorFromName } from './hash';\nimport { BigNumberish, bigNumberishArrayToDecimalStringArray, toBN } from './number';\n\n/**\n * Transforms a list of Calls, each with their own calldata, into\n * two arrays: one with the entrypoints, and one with the concatenated calldata.\n * @param calls\n * @returns\n */\nexport const transformCallsToMulticallArrays = (calls: Call[]) => {\n const callArray: ParsedStruct[] = [];\n const calldata: BigNumberish[] = [];\n calls.forEach((call) => {\n const data = call.calldata || [];\n callArray.push({\n to: toBN(call.contractAddress).toString(10),\n selector: toBN(getSelectorFromName(call.entrypoint)).toString(10),\n data_offset: calldata.length.toString(),\n data_len: data.length.toString(),\n });\n calldata.push(...data);\n });\n return {\n callArray,\n calldata: bigNumberishArrayToDecimalStringArray(calldata),\n };\n};\n\n/**\n * Transforms a list of calls in the full flattened calldata expected\n * by the __execute__ protocol.\n * @param calls\n * @returns\n */\nexport const fromCallsToExecuteCalldata = (calls: Call[]): string[] => {\n const { callArray, calldata } = transformCallsToMulticallArrays(calls);\n return [\n callArray.length.toString(),\n ...callArray\n .map(\n ({ to, selector, data_offset, data_len }) =>\n [to, selector, data_offset, data_len] as string[]\n )\n .flat(),\n calldata.length.toString(),\n ...calldata,\n ];\n};\n\nexport const fromCallsToExecuteCalldataWithNonce = (\n calls: Call[],\n nonce: BigNumberish\n): string[] => {\n return [...fromCallsToExecuteCalldata(calls), toBN(nonce).toString()];\n};\n","import { computeHashOnElements, getSelectorFromName } from '../hash';\nimport { MerkleTree } from '../merkle';\nimport { BigNumberish, isHex, toBN, toHex } from '../number';\nimport { encodeShortString } from '../shortString';\nimport { StarkNetMerkleType, StarkNetType, TypedData } from './types';\nimport { validateTypedData } from './utils';\n\nexport * from './types';\n\nfunction getHex(value: BigNumberish): string {\n try {\n return toHex(toBN(value));\n } catch (e) {\n if (typeof value === 'string') {\n return toHex(toBN(encodeShortString(value)));\n }\n throw new Error(`Invalid BigNumberish: ${value}`);\n }\n}\n\nexport function prepareSelector(selector: string): string {\n return isHex(selector) ? selector : getSelectorFromName(selector);\n}\n\nexport function isMerkleTreeType(type: StarkNetType): type is StarkNetMerkleType {\n return type.type === 'merkletree';\n}\n\ninterface Context {\n parent?: string;\n key?: string;\n}\n\n/**\n * Get the dependencies of a struct type. If a struct has the same dependency multiple times, it's only included once\n * in the resulting array.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {string[]} [dependencies]\n * @return {string[]}\n */\nexport const getDependencies = (\n types: TypedData['types'],\n type: string,\n dependencies: string[] = []\n): string[] => {\n // Include pointers (struct arrays)\n if (type[type.length - 1] === '*') {\n // eslint-disable-next-line no-param-reassign\n type = type.slice(0, -1);\n }\n\n if (dependencies.includes(type)) {\n return dependencies;\n }\n\n if (!types[type]) {\n return dependencies;\n }\n\n return [\n type,\n ...types[type].reduce<string[]>(\n (previous, t) => [\n ...previous,\n ...getDependencies(types, t.type, previous).filter(\n (dependency) => !previous.includes(dependency)\n ),\n ],\n []\n ),\n ];\n};\n\nfunction getMerkleTreeType(types: TypedData['types'], ctx: Context) {\n if (ctx.parent && ctx.key) {\n const parentType = types[ctx.parent];\n const merkleType = parentType.find((t) => t.name === ctx.key)!;\n const isMerkleTree = isMerkleTreeType(merkleType);\n if (!isMerkleTree) {\n throw new Error(`${ctx.key} is not a merkle tree`);\n }\n if (merkleType.contains.endsWith('*')) {\n throw new Error(`Merkle tree contain property must not be an array but was given ${ctx.key}`);\n }\n return merkleType.contains;\n }\n return 'raw';\n}\n\n/**\n * Encode a type to a string. All dependant types are alphabetically sorted.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @return {string}\n */\nexport const encodeType = (types: TypedData['types'], type: string): string => {\n const [primary, ...dependencies] = getDependencies(types, type);\n const newTypes = !primary ? [] : [primary, ...dependencies.sort()];\n\n return newTypes\n .map((dependency) => {\n return `${dependency}(${types[dependency].map((t) => `${t.name}:${t.type}`)})`;\n })\n .join('');\n};\n\n/**\n * Get a type string as hash.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @return {string}\n */\nexport const getTypeHash = (types: TypedData['types'], type: string): string => {\n return getSelectorFromName(encodeType(types, type));\n};\n\n/**\n * Encodes a single value to an ABI serialisable string, number or Buffer. Returns the data as tuple, which consists of\n * an array of ABI compatible types, and an array of corresponding values.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {any} data\n * @returns {[string, string]}\n */\nexport const encodeValue = (\n types: TypedData['types'],\n type: string,\n data: unknown,\n ctx: Context = {}\n): [string, string] => {\n if (types[type]) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return [type, getStructHash(types, type, data as Record<string, unknown>)];\n }\n\n if (\n Object.keys(types)\n .map((x) => `${x}*`)\n .includes(type)\n ) {\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return getStructHash(types, type.slice(0, -1), struct as Record<string, unknown>);\n });\n return [type, computeHashOnElements(structHashes)];\n }\n\n if (type === 'merkletree') {\n const merkleTreeType = getMerkleTreeType(types, ctx);\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return encodeValue(types, merkleTreeType, struct as Record<string, unknown>)[1];\n });\n const { root } = new MerkleTree(structHashes as string[]);\n return ['felt', root];\n }\n\n if (type === 'felt*') {\n return ['felt*', computeHashOnElements(data as string[])];\n }\n\n if (type === 'selector') {\n return ['felt', prepareSelector(data as string)];\n }\n\n return [type, getHex(data as string)];\n};\n\n/**\n * Encode the data to an ABI encoded Buffer. The data should be a key -> value object with all the required values. All\n * dependant types are automatically encoded.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {Record<string, any>} data\n */\nexport const encodeData = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n const [returnTypes, values] = types[type].reduce<[string[], string[]]>(\n ([ts, vs], field) => {\n if (data[field.name] === undefined || data[field.name] === null) {\n throw new Error(`Cannot encode data: missing data for '${field.name}'`);\n }\n\n const value = data[field.name];\n const [t, encodedValue] = encodeValue(types, field.type, value, {\n parent: type,\n key: field.name,\n });\n\n return [\n [...ts, t],\n [...vs, encodedValue],\n ];\n },\n [['felt'], [getTypeHash(types, type)]]\n );\n\n return [returnTypes, values];\n};\n\n/**\n * Get encoded data as a hash. The data should be a key -> value object with all the required values. All dependant\n * types are automatically encoded.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {Record<string, any>} data\n * @return {Buffer}\n */\nexport const getStructHash = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n return computeHashOnElements(encodeData(types, type, data)[1]);\n};\n\n/**\n * Get the EIP-191 encoded message to sign, from the typedData object.\n *\n * @param {TypedData} typedData\n * @param {BigNumberish} account\n * @return {string}\n */\nexport const getMessageHash = (typedData: TypedData, account: BigNumberish): string => {\n if (!validateTypedData(typedData)) {\n throw new Error('Typed data does not match JSON schema');\n }\n\n const message = [\n encodeShortString('StarkNet Message'),\n getStructHash(typedData.types, 'StarkNetDomain', typedData.domain),\n account,\n getStructHash(typedData.types, typedData.primaryType, typedData.message),\n ];\n\n return computeHashOnElements(message);\n};\n","import { pedersen } from './hash';\nimport { toBN } from './number';\n\nexport class MerkleTree {\n public leaves: string[];\n\n public branches: string[][] = [];\n\n public root: string;\n\n constructor(leafHashes: string[]) {\n this.leaves = leafHashes;\n this.root = this.build(leafHashes);\n }\n\n private build(leaves: string[]): string {\n if (leaves.length === 1) {\n return leaves[0];\n }\n if (leaves.length !== this.leaves.length) {\n this.branches.push(leaves);\n }\n const newLeaves = [];\n for (let i = 0; i < leaves.length; i += 2) {\n if (i + 1 === leaves.length) {\n newLeaves.push(MerkleTree.hash(leaves[i], '0x0'));\n } else {\n newLeaves.push(MerkleTree.hash(leaves[i], leaves[i + 1]));\n }\n }\n return this.build(newLeaves);\n }\n\n static hash(a: string, b: string) {\n const [aSorted, bSorted] = [toBN(a), toBN(b)].sort((x: any, y: any) => (x.gte(y) ? 1 : -1));\n return pedersen([aSorted, bSorted]);\n }\n\n public getProof(leaf: string, branch = this.leaves, hashPath: string[] = []): string[] {\n const index = branch.indexOf(leaf);\n if (index === -1) {\n throw new Error('leaf not found');\n }\n if (branch.length === 1) {\n return hashPath;\n }\n const isLeft = index % 2 === 0;\n const neededBranch = (isLeft ? branch[index + 1] : branch[index - 1]) ?? '0x0';\n const newHashPath = [...hashPath, neededBranch];\n const currentBranchLevelIndex =\n this.leaves.length === branch.length\n ? -1\n : this.branches.findIndex((b) => b.length === branch.length);\n const nextBranch = this.branches[currentBranchLevelIndex + 1] ?? [this.root];\n return this.getProof(\n MerkleTree.hash(isLeft ? leaf : neededBranch, isLeft ? neededBranch : leaf),\n nextBranch,\n newHashPath\n );\n }\n}\n\nexport function proofMerklePath(root: string, leaf: string, path: string[]): boolean {\n if (path.length === 0) {\n return root === leaf;\n }\n const [next, ...rest] = path;\n return proofMerklePath(root, MerkleTree.hash(leaf, next), rest);\n}\n","import { addHexPrefix, removeHexPrefix } from './encode';\n\nexport function isASCII(str: string) {\n // eslint-disable-next-line no-control-regex\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\n// function to check if string has less or equal 31 characters\nexport function isShortString(str: string) {\n return str.length <= 31;\n}\n\nexport function encodeShortString(str: string) {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (!isShortString(str)) throw new Error(`${str} is too long`);\n return addHexPrefix(str.replace(/./g, (char) => char.charCodeAt(0).toString(16)));\n}\n\nexport function decodeShortString(str: string) {\n return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));\n}\n","import { TypedData } from './types';\n\n/**\n * Validates that `data` matches the EIP-712 JSON schema.\n *\n * @param {any} data\n * @return {boolean}\n */\nexport const validateTypedData = (data: unknown): data is TypedData => {\n const typedData = data as TypedData;\n\n // Validate that the data matches the EIP-712 JSON schema\n const valid = Boolean(typedData.types && typedData.primaryType && typedData.message);\n\n return valid;\n};\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n InvocationsSignerDetails,\n KeyPair,\n Signature,\n} from '../types';\nimport { genKeyPair, getStarkKey, sign } from '../utils/ellipticCurve';\nimport {\n calculateDeclareTransactionHash,\n calculateDeployAccountTransactionHash,\n calculateTransactionHash,\n} from '../utils/hash';\nimport { fromCallsToExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { SignerInterface } from './interface';\n\nexport class Signer implements SignerInterface {\n protected keyPair: KeyPair;\n\n constructor(keyPair: KeyPair = genKeyPair()) {\n this.keyPair = keyPair;\n }\n\n public async getPubKey(): Promise<string> {\n return getStarkKey(this.keyPair);\n }\n\n public async signMessage(typedData: TypedData, accountAddress: string): Promise<Signature> {\n const msgHash = getMessageHash(typedData, accountAddress);\n return sign(this.keyPair, msgHash);\n }\n\n public async signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature> {\n if (abis && abis.length !== transactions.length) {\n throw new Error('ABI must be provided for each transaction or no transaction');\n }\n // now use abi to display decoded data somewhere, but as this signer is headless, we can't do that\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n\n const msgHash = calculateTransactionHash(\n transactionsDetail.walletAddress,\n transactionsDetail.version,\n calldata,\n transactionsDetail.maxFee,\n transactionsDetail.chainId,\n transactionsDetail.nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n\n public async signDeployAccountTransaction({\n classHash,\n contractAddress,\n constructorCalldata,\n addressSalt,\n maxFee,\n version,\n chainId,\n nonce,\n }: DeployAccountSignerDetails) {\n const msgHash = calculateDeployAccountTransactionHash(\n contractAddress,\n classHash,\n constructorCalldata,\n addressSalt,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n\n public async signDeclareTransaction(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n { classHash, senderAddress, chainId, maxFee, version, nonce }: DeclareSignerDetails\n ) {\n const msgHash = calculateDeclareTransactionHash(\n classHash,\n senderAddress,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n}\n","import { UDC, ZERO } from '../constants';\nimport { ProviderInterface, ProviderOptions } from '../provider';\nimport { Provider } from '../provider/default';\nimport { BlockIdentifier } from '../provider/utils';\nimport { Signer, SignerInterface } from '../signer';\nimport {\n Abi,\n AllowArray,\n Call,\n DeclareContractPayload,\n DeclareContractResponse,\n DeployAccountContractPayload,\n DeployContractResponse,\n EstimateFee,\n EstimateFeeAction,\n EstimateFeeDetails,\n InvocationsDetails,\n InvocationsSignerDetails,\n InvokeFunctionResponse,\n KeyPair,\n Signature,\n UniversalDeployerContractPayload,\n} from '../types';\nimport {\n calculateContractAddressFromHash,\n feeTransactionVersion,\n transactionVersion,\n} from '../utils/hash';\nimport { BigNumberish, toBN, toCairoBool } from '../utils/number';\nimport { parseContract } from '../utils/provider';\nimport { compileCalldata, estimatedFeeToMaxFee } from '../utils/stark';\nimport { fromCallsToExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { AccountInterface } from './interface';\n\nexport class Account extends Provider implements AccountInterface {\n public signer: SignerInterface;\n\n public address: string;\n\n constructor(\n providerOrOptions: ProviderOptions | ProviderInterface,\n address: string,\n keyPairOrSigner: KeyPair | SignerInterface\n ) {\n super(providerOrOptions);\n this.address = address.toLowerCase();\n this.signer =\n 'getPubKey' in keyPairOrSigner ? keyPairOrSigner : new Signer(keyPairOrSigner as KeyPair);\n }\n\n public async getNonce(blockIdentifier?: BlockIdentifier): Promise<BigNumberish> {\n return super.getNonce(this.address, blockIdentifier);\n }\n\n public async estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails | undefined\n ): Promise<EstimateFee> {\n return this.estimateInvokeFee(calls, estimateFeeDetails);\n }\n\n public async estimateInvokeFee(\n calls: AllowArray<Call>,\n { nonce: providedNonce, blockIdentifier }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee: ZERO,\n version,\n chainId,\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails);\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n const response = await super.getInvokeEstimateFee(\n { contractAddress: this.address, calldata, signature },\n { version, nonce },\n blockIdentifier\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeclareFee(\n { classHash, contract }: DeclareContractPayload,\n { blockIdentifier, nonce: providedNonce }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n const contractDefinition = parseContract(contract);\n\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n senderAddress: this.address,\n chainId,\n maxFee: ZERO,\n version,\n nonce,\n });\n\n const response = await super.getDeclareEstimateFee(\n { senderAddress: this.address, signature, contractDefinition },\n { version, nonce },\n blockIdentifier\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateAccountDeployFee(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { blockIdentifier, nonce: providedNonce }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n contractAddress,\n chainId,\n maxFee: ZERO,\n version,\n nonce,\n addressSalt,\n constructorCalldata,\n });\n\n const response = await super.getDeployAccountEstimateFee(\n { classHash, addressSalt, constructorCalldata, signature },\n { version, nonce },\n blockIdentifier\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeployFee(\n {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n additionalCalls = [],\n }: UniversalDeployerContractPayload,\n transactionsDetail?: InvocationsDetails | undefined\n ): Promise<EstimateFee> {\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n\n const callsArray = Array.isArray(additionalCalls) ? additionalCalls : [additionalCalls];\n return this.estimateInvokeFee(\n [\n {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n salt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n ...callsArray,\n ],\n transactionsDetail\n );\n }\n\n public async execute(\n calls: AllowArray<Call>,\n abis: Abi[] | undefined = undefined,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<InvokeFunctionResponse> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee({ type: 'INVOKE', payload: calls }, transactionsDetail));\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee,\n version,\n chainId,\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails, abis);\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n\n return this.invokeFunction(\n { contractAddress: this.address, calldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async declare(\n { classHash, contract }: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n { type: 'DECLARE', payload: { classHash, contract } },\n transactionsDetail\n ));\n\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n senderAddress: this.address,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n const contractDefinition = parseContract(contract);\n\n return this.declareContract(\n { contractDefinition, senderAddress: this.address, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async deploy(\n {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n additionalCalls = [],\n }: UniversalDeployerContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<InvokeFunctionResponse> {\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n\n const callsArray = Array.isArray(additionalCalls) ? additionalCalls : [additionalCalls];\n\n return this.execute(\n [\n {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n salt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n ...callsArray,\n ],\n undefined,\n transactionsDetail\n );\n }\n\n public async deployAccount(\n {\n classHash,\n constructorCalldata = [],\n addressSalt = 0,\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeployContractResponse> {\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);\n\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: 'DEPLOY_ACCOUNT',\n payload: { classHash, constructorCalldata, addressSalt, contractAddress },\n },\n transactionsDetail\n ));\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n constructorCalldata,\n contractAddress,\n addressSalt,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return this.deployAccountContract(\n { classHash, addressSalt, constructorCalldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async signMessage(typedData: TypedData): Promise<Signature> {\n return this.signer.signMessage(typedData, this.address);\n }\n\n public async hashMessage(typedData: TypedData): Promise<string> {\n return getMessageHash(typedData, this.address);\n }\n\n public async verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean> {\n try {\n await this.callContract({\n contractAddress: this.address,\n entrypoint: 'isValidSignature',\n calldata: compileCalldata({\n hash: toBN(hash).toString(),\n signature: signature.map((x) => toBN(x).toString()),\n }),\n });\n return true;\n } catch {\n return false;\n }\n }\n\n public async verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean> {\n const hash = await this.hashMessage(typedData);\n return this.verifyMessageHash(hash, signature);\n }\n\n public async getSuggestedMaxFee(\n { type, payload }: EstimateFeeAction,\n details: EstimateFeeDetails\n ) {\n let feeEstimate: EstimateFee;\n\n switch (type) {\n case 'INVOKE':\n feeEstimate = await this.estimateInvokeFee(payload, details);\n break;\n\n case 'DECLARE':\n feeEstimate = await this.estimateDeclareFee(payload, details);\n break;\n\n case 'DEPLOY_ACCOUNT':\n feeEstimate = await this.estimateAccountDeployFee(payload, details);\n break;\n\n case 'DEPLOY':\n feeEstimate = await this.estimateDeployFee(payload, details);\n break;\n\n default:\n feeEstimate = { suggestedMaxFee: ZERO, overall_fee: ZERO };\n break;\n }\n\n return feeEstimate.suggestedMaxFee.toString();\n }\n}\n","import { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport { SignerInterface } from '../signer';\nimport {\n Abi,\n AllowArray,\n Call,\n DeclareContractPayload,\n DeclareContractResponse,\n DeployAccountContractPayload,\n DeployContractResponse,\n EstimateFeeAction,\n EstimateFeeDetails,\n EstimateFeeResponse,\n InvocationsDetails,\n InvokeFunctionResponse,\n Signature,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { BigNumberish } from '../utils/number';\nimport { TypedData } from '../utils/typedData/types';\n\nexport abstract class AccountInterface extends ProviderInterface {\n public abstract address: string;\n\n public abstract signer: SignerInterface;\n\n /**\n * @deprecated Use estimateInvokeFee or estimateDeclareFee instead\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateInvokeFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DECLARE transaction on starknet\n *\n * @param contractPayload the payload object containing:\n * - contract - the compiled contract to be declared\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n *\n * @returns response from estimate_fee\n */\n public abstract estimateDeclareFee(\n contractPayload: DeclareContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DEPLOY_ACCOUNT transaction on starknet\n *\n * @param contractPayload the payload object containing:\n * - contract - the compiled contract to be deployed\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n *\n * @returns response from estimate_fee\n */\n public abstract estimateAccountDeployFee(\n contractPayload: DeployAccountContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a UDC DEPLOY transaction on starknet\n * This is different from the normal DEPLOY transaction as it goes through the Universal Deployer Contract (UDC)\n \n * @param deployContractPayload containing\n * - classHash: computed class hash of compiled contract\n * - salt: address salt\n * - unique: bool if true ensure unique salt\n * - calldata: constructor calldata\n * - additionalCalls - optional additional calls array to support multicall\n * \n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract estimateDeployFee(\n deployContractPayload: UniversalDeployerContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Invoke execute function in account contract\n *\n * @param transactions the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n public abstract execute(\n transactions: AllowArray<Call>,\n abis?: Abi[],\n transactionsDetail?: InvocationsDetails\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - contract: compiled contract code\n - classHash: computed class hash of compiled contract\n - signature\n * @param transactionsDetail Invocation Details containing:\n - optional nonce\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declare(\n contractPayload: DeclareContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeclareContractResponse>;\n\n /**\n * Deploys a given compiled contract (json) to starknet using Universal Deployer Contract (UDC)\n * This is different from the normal DEPLOY transaction as it goes through the Universal Deployer Contract (UDC)\n *\n * @param deployContractPayload containing\n * - classHash: computed class hash of compiled contract\n * - salt: address salt\n * - unique: bool if true ensure unique salt\n * - calldata: constructor calldata\n * - additionalCalls - optional additional calls array to support multicall\n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract deploy(\n deployContractPayload: UniversalDeployerContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Deploy the account on Starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - classHash: computed class hash of compiled contract\n - optional constructor calldata\n - optional address salt \n - optional contractAddress\n * @param transactionsDetail Invocation Details containing:\n - optional nonce\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccount(\n contractPayload: DeployAccountContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeployContractResponse>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData): Promise<Signature>;\n\n /**\n * Hash a JSON object with pederson hash and return the hash\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be hashed\n * @returns the hash of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract hashMessage(typedData: TypedData): Promise<string>;\n\n /**\n * Verify a signature of a JSON object\n *\n * @param typedData - JSON object to be verified\n * @param signature - signature of the JSON object\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the JSON object is not a valid JSON or the signature is not a valid signature\n */\n public abstract verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean>;\n\n /**\n * Verify a signature of a given hash\n * @warning This method is not recommended, use verifyMessage instead\n *\n * @param hash - hash to be verified\n * @param signature - signature of the hash\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the signature is not a valid signature\n */\n public abstract verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean>;\n\n /**\n * Gets the nonce of the account with respect to a specific block\n *\n * @param {BlockIdentifier} blockIdentifier - optional blockIdentifier. Defaults to 'pending'\n * @returns nonce of the account\n */\n public abstract getNonce(blockIdentifier?: BlockIdentifier): Promise<BigNumberish>;\n\n /**\n * Gets Suggested Max Fee based on the transaction type\n *\n * @param {EstimateFeeAction} estimateFeeAction\n * @param {EstimateFeeDetails} details\n * @returns suggestedMaxFee\n */\n public abstract getSuggestedMaxFee(\n estimateFeeAction: EstimateFeeAction,\n details: EstimateFeeDetails\n ): Promise<BigNumberish>;\n}\n","import { addHexPrefix } from './encode';\nimport { BigNumberish, toBN } from './number';\n\n// Represents an integer in the range [0, 2^256).\nexport interface Uint256 {\n // The low 128 bits of the value.\n low: BigNumberish;\n // The high 128 bits of the value.\n high: BigNumberish;\n}\n\n// function to convert Uint256 to BN\nexport function uint256ToBN(uint256: Uint256) {\n return toBN(uint256.high).shln(128).add(toBN(uint256.low));\n}\n\nexport const UINT_128_MAX = toBN(1).shln(128).sub(toBN(1));\nexport const UINT_256_MAX = toBN(1).shln(256).sub(toBN(1));\n// function to check if BN is smaller or equal 2**256-1\nexport function isUint256(bn: BigNumberish): boolean {\n return toBN(bn).lte(UINT_256_MAX);\n}\n\n// function to convert BN to Uint256\nexport function bnToUint256(bignumber: BigNumberish): Uint256 {\n const bn = toBN(bignumber);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n low: addHexPrefix(bn.maskn(128).toString(16)),\n high: addHexPrefix(bn.shrn(128).toString(16)),\n };\n}\n","/* eslint-disable no-bitwise */\nimport { arrayify } from '@ethersproject/bytes';\n\nimport { MASK_251, ZERO } from '../constants';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { keccakBn } from './hash';\nimport { BigNumberish, assertInRange, toBN, toHex } from './number';\n\nexport function addAddressPadding(address: BigNumberish): string {\n return addHexPrefix(removeHexPrefix(toHex(toBN(address))).padStart(64, '0'));\n}\n\nexport function validateAndParseAddress(address: BigNumberish): string {\n assertInRange(address, ZERO, MASK_251, 'Starknet Address');\n\n const result = addAddressPadding(address);\n\n if (!result.match(/^(0x)?[0-9a-fA-F]{64}$/)) {\n throw new Error('Invalid Address Format');\n }\n\n return result;\n}\n\n// from https://github.com/ethers-io/ethers.js/blob/fc1e006575d59792fa97b4efb9ea2f8cca1944cf/packages/address/src.ts/index.ts#L12\nexport function getChecksumAddress(address: BigNumberish): string {\n const chars = removeHexPrefix(validateAndParseAddress(address)).toLowerCase().split('');\n const hashed = arrayify(keccakBn(address), { hexPad: 'left' }); // in case the hash is 251 bits (63 chars) we need to pad it to 64 chars without changing the number value (\"left\")\n\n for (let i = 0; i < chars.length; i += 2) {\n if (hashed[i >> 1] >> 4 >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n\n return addHexPrefix(chars.join(''));\n}\n\nexport function validateChecksumAddress(address: string): boolean {\n return getChecksumAddress(address) === address;\n}\n"],"mappings":"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;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA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","names":["import_bn","import_minimalistic_assert","isomorphicFetch","import_minimalistic_assert","BN","assert","StarknetChainId","TransactionHashPrefix","import_minimalistic_assert","elliptic","hashJS","assert","assert","Json","import_url_join","urljoin","urljoin","assert","BN","import_minimalistic_assert","assert"]}
|