starknet 5.4.1 → 5.4.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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/types/lib/contract/index.ts","../src/types/lib/index.ts","../src/types/api/rpc.ts","../src/utils/fetchPonyfill.ts","../src/utils/hash.ts","../src/constants.ts","../src/utils/encode.ts","../src/utils/num.ts","../src/utils/assert.ts","../src/utils/shortString.ts","../src/utils/uint256.ts","../src/utils/calldata/cairo.ts","../src/utils/ec.ts","../src/utils/json.ts","../src/utils/contract.ts","../src/utils/stark.ts","../src/utils/provider.ts","../src/utils/responseParser/rpc.ts","../src/provider/errors.ts","../src/utils/starknetId.ts","../src/provider/starknetId.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/default.ts","../src/provider/interface.ts","../src/provider/index.ts","../src/utils/calldata/formatter.ts","../src/utils/calldata/tuple.ts","../src/utils/calldata/requestParser.ts","../src/utils/calldata/responseParser.ts","../src/utils/calldata/validate.ts","../src/utils/calldata/index.ts","../src/contract/default.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/typedData/utils.ts","../src/signer/default.ts","../src/utils/events.ts","../src/account/default.ts","../src/account/interface.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 num from './utils/num';\nexport * as transaction from './utils/transaction';\nexport * as stark from './utils/stark';\nexport * as merkle from './utils/merkle';\nexport * as uint256 from './utils/uint256';\nexport * as shortString from './utils/shortString';\nexport * as typedData from './utils/typedData';\nexport * as ec from './utils/ec';\nexport * from './utils/address';\nexport * from './utils/url';\nexport * from './utils/calldata';\n\n/**\n * Deprecated\n */\n/* eslint-disable import/first */\nimport * as num from './utils/num';\n\n/** @deprecated prefer the 'num' naming */\nexport const number = num;\n","import { LegacyCompiledContract, LegacyContractClass } from './legacy';\nimport { CompiledSierra, SierraContractClass } from './sierra';\n\n// Final types\nexport type ContractClass = LegacyContractClass | SierraContractClass;\nexport type CompiledContract = LegacyCompiledContract | CompiledSierra;\nexport type CairoContract = ContractClass | CompiledContract;\n\n// Basic elements\nexport enum EntryPointType {\n EXTERNAL = 'EXTERNAL',\n L1_HANDLER = 'L1_HANDLER',\n CONSTRUCTOR = 'CONSTRUCTOR',\n}\n\nexport * from './abi';\nexport * from './legacy';\nexport * from './sierra';\n","import { StarknetChainId } from '../../constants';\nimport { weierstrass } from '../../utils/ec';\nimport type { BigNumberish } from '../../utils/num';\nimport { CompiledContract, CompiledSierraCasm, ContractClass } from './contract';\n\nexport type WeierstrassSignatureType = weierstrass.SignatureType;\nexport type ArraySignatureType = string[];\nexport type Signature = ArraySignatureType | WeierstrassSignatureType;\n\nexport type RawCalldata = BigNumberish[];\nexport type AllowArray<T> = T | T[];\nexport type RawArgs =\n | {\n [inputName: string]:\n | BigNumberish\n | BigNumberish[]\n | { type: 'struct'; [k: string]: BigNumberish };\n }\n | BigNumberish[];\n\nexport type UniversalDeployerContractPayload = {\n classHash: BigNumberish;\n salt?: string;\n unique?: boolean;\n constructorCalldata?: RawArgs;\n};\n\nexport type DeployContractPayload = {\n contract: CompiledContract | string;\n constructorCalldata?: RawCalldata;\n addressSalt?: string;\n};\n\nexport type DeployAccountContractPayload = {\n classHash: string;\n constructorCalldata?: RawCalldata;\n addressSalt?: BigNumberish;\n contractAddress?: string;\n};\n\nexport type DeployAccountContractTransaction = Omit<\n DeployAccountContractPayload,\n 'contractAddress'\n> & {\n signature?: Signature;\n};\n\nexport type DeclareContractPayload = {\n contract: CompiledContract | string;\n classHash?: string;\n casm?: CompiledSierraCasm;\n compiledClassHash?: string;\n};\n\nexport type CompleteDeclareContractPayload = {\n contract: CompiledContract | string;\n classHash: string;\n casm?: CompiledSierraCasm;\n compiledClassHash?: string;\n};\n\nexport type DeclareAndDeployContractPayload = Omit<UniversalDeployerContractPayload, 'classHash'> &\n DeclareContractPayload;\n\nexport type DeclareContractTransaction = {\n contractDefinition: ContractClass;\n senderAddress: string;\n signature?: Signature;\n compiledClassHash?: string;\n};\n\nexport type CallDetails = {\n contractAddress: string;\n calldata?: RawCalldata;\n};\n\nexport type Invocation = CallDetails & { signature?: Signature };\n\nexport type Call = CallDetails & { entrypoint: string };\n\nexport type CairoVersion = '0' | '1';\n\nexport type InvocationsDetails = {\n nonce?: BigNumberish;\n maxFee?: BigNumberish;\n version?: BigNumberish;\n cairoVersion?: CairoVersion;\n};\n\n/**\n * Contain all additional details params\n */\nexport type Details = {\n nonce: BigNumberish;\n maxFee: BigNumberish;\n version: BigNumberish;\n chainId: StarknetChainId;\n};\n\nexport type InvocationsDetailsWithNonce = InvocationsDetails & {\n nonce: BigNumberish;\n};\n\nexport enum TransactionStatus {\n NOT_RECEIVED = 'NOT_RECEIVED',\n RECEIVED = 'RECEIVED',\n PENDING = 'PENDING',\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n REJECTED = 'REJECTED',\n}\nexport type TransactionBulk = Array<\n | ({ type: 'DECLARE' } & { payload: DeclareContractPayload })\n | ({ type: 'DEPLOY' } & {\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[];\n })\n | ({ type: 'DEPLOY_ACCOUNT' } & { payload: DeployAccountContractPayload })\n | ({ type: 'INVOKE_FUNCTION' } & { payload: AllowArray<Call> })\n>;\n\nexport type InvocationBulk = Array<\n (\n | ({ type: 'DECLARE' } & DeclareContractTransaction)\n | ({ type: 'DEPLOY_ACCOUNT' } & DeployAccountContractTransaction)\n | ({ type: 'INVOKE_FUNCTION' } & Invocation)\n ) &\n InvocationsDetailsWithNonce & { blockIdentifier: BlockNumber | BigNumberish }\n>;\n\nexport type Status =\n | 'NOT_RECEIVED'\n | 'RECEIVED'\n | 'PENDING'\n | 'ACCEPTED_ON_L2'\n | 'ACCEPTED_ON_L1'\n | 'REJECTED';\n\nexport enum TransactionType {\n INVOKE = 'INVOKE_FUNCTION',\n DECLARE = 'DECLARE',\n DEPLOY = 'DEPLOY',\n DEPLOY_ACCOUNT = 'DEPLOY_ACCOUNT',\n}\n\nexport type Tupled = { element: any; type: string };\nexport type BlockTag = 'pending' | 'latest';\nexport type BlockNumber = BlockTag | null | number;\n\nexport type Struct = {\n type: 'struct';\n [k: string]: BigNumberish;\n};\nexport type Args = {\n [inputName: string]: BigNumberish | BigNumberish[] | ParsedStruct | ParsedStruct[];\n};\nexport type ParsedStruct = {\n [key: string]: BigNumberish | ParsedStruct;\n};\n\nexport type waitForTransactionOptions = {\n retryInterval?: number;\n successStates?: Array<TransactionStatus>;\n};\n\nexport interface CallStruct {\n to: string;\n selector: string;\n calldata: string[];\n}\n\nexport * from './contract';\n","import { ADDRESS, CONTRACT_STORAGE_DIFF_ITEM, FELT, OPENRPC } from './openrpc';\n\nexport namespace RPC {\n export type Response = {\n id: number;\n jsonrpc: string;\n result?: any;\n error?: {\n code: string;\n message: string;\n };\n };\n\n export type ChainId = OPENRPC.CHAIN_ID;\n export type CallResponse = OPENRPC.CallResponse;\n export type ContractAddress = ADDRESS;\n export type Felt = FELT;\n export type Nonce = OPENRPC.Nonce;\n export type ContractClass = OPENRPC.ContractClass;\n export type StateUpdate = OPENRPC.StateUpdate;\n export type Transaction = OPENRPC.Transaction;\n export type PendingTransactions = OPENRPC.PendingTransactions;\n export type TransactionHash = OPENRPC.TransactionHash;\n export type Trace = OPENRPC.Trace;\n export type Traces = OPENRPC.Traces;\n export type BlockHash = OPENRPC.BlockHash;\n export type BlockHashAndNumber = OPENRPC.BlockHashAndNumber;\n export type GetClassResponse = OPENRPC.ContractClass;\n export type EstimateFeeResponse = OPENRPC.EstimatedFee;\n export type GetBlockWithTxHashesResponse = OPENRPC.BlockWithTxHashes;\n export type GetBlockWithTxs = OPENRPC.BlockWithTxs;\n export type GetStorageAtResponse = OPENRPC.Storage;\n export type TransactionReceipt = OPENRPC.TransactionReceipt;\n export type GetTransactionByHashResponse = OPENRPC.Transaction;\n export type GetTransactionByBlockIdAndIndex = OPENRPC.Transaction;\n export type GetTransactionCountResponse = number;\n export type GetBlockNumberResponse = OPENRPC.BlockNumber;\n export type GetSyncingStatsResponse = OPENRPC.SyncingStatus;\n export type EventFilter = OPENRPC.EventFilter;\n export type GetEventsResponse = OPENRPC.Events;\n export type InvokedTransaction = OPENRPC.InvokedTransaction;\n export type DeclaredTransaction = OPENRPC.DeclaredTransaction;\n export type DeployedTransaction = OPENRPC.DeployedTransaction;\n export type Methods = OPENRPC.Methods;\n export type Storage = OPENRPC.Storage;\n\n export enum TransactionType {\n DECLARE = 'DECLARE',\n DEPLOY = 'DEPLOY',\n DEPLOY_ACCOUNT = 'DEPLOY_ACCOUNT',\n INVOKE = 'INVOKE',\n L1_HANDLER = 'L1_HANDLER',\n }\n\n // Exported Diff on Sequencer (can be removed when diff resolved by new RPC v)\n export type StorageDiffs = Array<CONTRACT_STORAGE_DIFF_ITEM>;\n export type DeclaredContractHashes = Array<FELT>;\n export type Nonces = Array<{\n contract_address: ADDRESS;\n nonce: FELT;\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 no-param-reassign */\n/* eslint-disable import/extensions */\nimport { keccak, poseidonHashMany } from 'micro-starknet';\n\nimport { API_VERSION, MASK_250, StarknetChainId, TransactionHashPrefix } from '../constants';\nimport {\n Builtins,\n CompiledContract,\n CompiledSierra,\n CompiledSierraCasm,\n ContractEntryPointFields,\n LegacyCompiledContract,\n RawCalldata,\n SierraContractEntryPointFields,\n} from '../types/lib';\nimport { felt } from './calldata/cairo';\nimport { starkCurve } from './ec';\nimport { addHexPrefix, removeHexPrefix, utf8ToArray } from './encode';\nimport { parse, stringify } from './json';\nimport {\n BigNumberish,\n hexToBytes,\n isHex,\n isStringWholeNumber,\n toBigInt,\n toHex,\n toHexString,\n} from './num';\nimport { encodeShortString } from './shortString';\n\nexport * as poseidon from '@noble/curves/abstract/poseidon';\n\nexport const transactionVersion = 1n;\nexport const transactionVersion_2 = 2n;\nexport const feeTransactionVersion = 2n ** 128n + transactionVersion;\n\nexport function keccakBn(value: BigNumberish): string {\n const hexWithoutPrefix = removeHexPrefix(toHex(BigInt(value)));\n const evenHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;\n return addHexPrefix(keccak(hexToBytes(addHexPrefix(evenHex))).toString(16));\n}\n\nfunction keccakHex(value: string): string {\n return addHexPrefix(keccak(utf8ToArray(value)).toString(16));\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): bigint {\n const hash = BigInt(keccakHex(value));\n // eslint-disable-next-line no-bitwise\n return hash & 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\nexport function computeHashOnElements(data: BigNumberish[]): string {\n return [...data, data.length]\n .reduce((x: BigNumberish, y: BigNumberish) => starkCurve.pedersen(toBigInt(x), toBigInt(y)), 0)\n .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 0,\n chainId\n );\n}\n\nexport function calculateDeclareTransactionHash(\n classHash: string,\n senderAddress: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish,\n compiledClassHash?: string\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DECLARE,\n version,\n senderAddress,\n 0,\n [classHash],\n maxFee,\n chainId,\n [nonce, ...(compiledClassHash ? [compiledClassHash] : [])]\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 = felt('0x535441524b4e45545f434f4e54524143545f41444452455353'); // Equivalent to 'STARKNET_CONTRACT_ADDRESS'\n\n return computeHashOnElements([\n CONTRACT_ADDRESS_PREFIX,\n deployerAddress,\n salt,\n classHash,\n constructorCalldataHash,\n ]);\n}\n\nfunction nullSkipReplacer(key: string, value: any) {\n if (key === 'attributes' || key === 'accessible_scopes') {\n return Array.isArray(value) && value.length === 0 ? undefined : value;\n }\n\n if (key === 'debug_info') {\n return null;\n }\n\n return value === null ? undefined : value;\n}\n\nexport function formatSpaces(json: string) {\n let insideQuotes = false;\n let newString = '';\n // eslint-disable-next-line no-restricted-syntax\n for (const char of json) {\n if (char === '\"' && newString.endsWith('\\\\') === false) {\n insideQuotes = !insideQuotes;\n }\n if (insideQuotes) {\n newString += char;\n } else {\n // eslint-disable-next-line no-nested-ternary\n newString += char === ':' ? ': ' : char === ',' ? ', ' : char;\n }\n }\n return newString;\n}\n\nexport default function computeHintedClassHash(compiledContract: LegacyCompiledContract) {\n const { abi, program } = compiledContract;\n const contractClass = { abi, program };\n const serializedJson = formatSpaces(stringify(contractClass, nullSkipReplacer));\n\n return addHexPrefix(starkCurve.keccak(utf8ToArray(serializedJson)).toString(16));\n}\n\n// Computes the class hash of a given contract class\nexport function computeLegacyContractClassHash(contract: LegacyCompiledContract | string) {\n const compiledContract =\n typeof contract === 'string' ? (parse(contract) as LegacyCompiledContract) : contract;\n\n const apiVersion = toHex(API_VERSION);\n\n const externalEntryPointsHash = computeHashOnElements(\n compiledContract.entry_points_by_type.EXTERNAL.flatMap((e) => [e.selector, e.offset])\n );\n\n const l1HandlerEntryPointsHash = computeHashOnElements(\n compiledContract.entry_points_by_type.L1_HANDLER.flatMap((e) => [e.selector, e.offset])\n );\n\n const constructorEntryPointHash = computeHashOnElements(\n compiledContract.entry_points_by_type.CONSTRUCTOR.flatMap((e) => [e.selector, e.offset])\n );\n\n const builtinsHash = computeHashOnElements(\n compiledContract.program.builtins.map((s) => encodeShortString(s))\n );\n\n const hintedClassHash = computeHintedClassHash(compiledContract);\n\n const dataHash = computeHashOnElements(compiledContract.program.data);\n\n return computeHashOnElements([\n apiVersion,\n externalEntryPointsHash,\n l1HandlerEntryPointsHash,\n constructorEntryPointHash,\n builtinsHash,\n hintedClassHash,\n dataHash,\n ]);\n}\n\n// Cairo1 below\nfunction hashBuiltins(builtins: Builtins) {\n return poseidonHashMany(\n builtins.flatMap((it: any) => {\n return BigInt(encodeShortString(it));\n })\n );\n}\n\nfunction hashEntryPoint(data: ContractEntryPointFields[]) {\n const base = data.flatMap((it: any) => {\n return [BigInt(it.selector), BigInt(it.offset), hashBuiltins(it.builtins)];\n });\n return poseidonHashMany(base);\n}\n\nexport function computeCompiledClassHash(casm: CompiledSierraCasm) {\n const COMPILED_CLASS_VERSION = 'COMPILED_CLASS_V1';\n\n // Hash compiled class version\n const compiledClassVersion = BigInt(encodeShortString(COMPILED_CLASS_VERSION));\n\n // Hash external entry points.\n const externalEntryPointsHash = hashEntryPoint(casm.entry_points_by_type.EXTERNAL);\n\n // Hash L1 handler entry points.\n const l1Handlers = hashEntryPoint(casm.entry_points_by_type.L1_HANDLER);\n\n // Hash constructor entry points.\n const constructor = hashEntryPoint(casm.entry_points_by_type.CONSTRUCTOR);\n\n // Hash bytecode.\n const bytecode = poseidonHashMany(casm.bytecode.map((it: string) => BigInt(it)));\n\n return toHex(\n poseidonHashMany([\n compiledClassVersion,\n externalEntryPointsHash,\n l1Handlers,\n constructor,\n bytecode,\n ])\n );\n}\n\nfunction hashEntryPointSierra(data: SierraContractEntryPointFields[]) {\n const base = data.flatMap((it: any) => {\n return [BigInt(it.selector), BigInt(it.function_idx)];\n });\n return poseidonHashMany(base);\n}\n\nfunction hashAbi(sierra: CompiledSierra) {\n const indentString = formatSpaces(stringify(sierra.abi, null));\n return BigInt(addHexPrefix(starkCurve.keccak(utf8ToArray(indentString)).toString(16)));\n}\n\nexport function computeSierraContractClassHash(sierra: CompiledSierra) {\n const CONTRACT_CLASS_VERSION = 'CONTRACT_CLASS_V0.1.0';\n\n // Hash class version\n const compiledClassVersion = BigInt(encodeShortString(CONTRACT_CLASS_VERSION));\n\n // Hash external entry points.\n const externalEntryPointsHash = hashEntryPointSierra(sierra.entry_points_by_type.EXTERNAL);\n\n // Hash L1 handler entry points.\n const l1Handlers = hashEntryPointSierra(sierra.entry_points_by_type.L1_HANDLER);\n\n // Hash constructor entry points.\n const constructor = hashEntryPointSierra(sierra.entry_points_by_type.CONSTRUCTOR);\n\n // Hash abi_hash.\n const abiHash = hashAbi(sierra);\n\n // Hash Sierra program.\n const sierraProgram = poseidonHashMany(sierra.sierra_program.map((it: string) => BigInt(it)));\n\n return toHex(\n poseidonHashMany([\n compiledClassVersion,\n externalEntryPointsHash,\n l1Handlers,\n constructor,\n abiHash,\n sierraProgram,\n ])\n );\n}\n\n/**\n * Compute ClassHash (sierra or legacy) based on provided contract\n * @param contract CompiledContract | CompiledSierra | string\n * @returns HexString ClassHash\n */\nexport function computeContractClassHash(contract: CompiledContract | string) {\n const compiledContract = typeof contract === 'string' ? parse(contract) : contract;\n\n if ('sierra_program' in compiledContract) {\n return computeSierraContractClassHash(compiledContract as CompiledSierra);\n }\n\n return computeLegacyContractClassHash(compiledContract as LegacyCompiledContract);\n}\n","export { IS_BROWSER } from './utils/encode';\n\nexport const ZERO = 0n;\nexport const MASK_250 = 2n ** 250n - 1n; // 2 ** 250 - 1\nexport const MASK_251 = 2n ** 251n;\nexport const API_VERSION = ZERO;\n\nexport enum BaseUrl {\n SN_MAIN = 'https://alpha-mainnet.starknet.io',\n SN_GOERLI = 'https://alpha4.starknet.io',\n SN_GOERLI2 = 'https://alpha4-2.starknet.io',\n}\n\nexport enum NetworkName {\n SN_MAIN = 'SN_MAIN',\n SN_GOERLI = 'SN_GOERLI',\n SN_GOERLI2 = 'SN_GOERLI2',\n}\n\nexport enum StarknetChainId {\n SN_MAIN = '0x534e5f4d41494e', // encodeShortString('SN_MAIN'),\n SN_GOERLI = '0x534e5f474f45524c49', // encodeShortString('SN_GOERLI'),\n SN_GOERLI2 = '0x534e5f474f45524c4932', // encodeShortString('SN_GOERLI2'),\n}\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","/* 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/i, '');\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 { hexToBytes as hexToBytesNoble } from '@noble/curves/abstract/utils';\n\nimport assert from './assert';\nimport { addHexPrefix, removeHexPrefix } from './encode';\n\nexport type BigNumberish = string | number | bigint;\n\nexport function isHex(hex: string): boolean {\n return /^0x[0-9a-f]*$/i.test(hex);\n}\n\nexport function toBigInt(value: BigNumberish): bigint {\n return BigInt(value);\n}\n\nexport function isBigInt(value: any): value is bigint {\n return typeof value === 'bigint';\n}\n\nexport function toHex(number: BigNumberish): string {\n return addHexPrefix(toBigInt(number).toString(16));\n}\n\nexport function hexToDecimalString(hex: string): string {\n return BigInt(addHexPrefix(hex)).toString(10);\n}\n\n/**\n * Remove hex string leading zero and lower case '0x01A'.. -> '0x1a..'\n * @param hex string\n */\nexport const cleanHex = (hex: string) => hex.toLowerCase().replace(/^(0x)0+/, '$1');\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 inputBigInt = BigInt(input);\n const lowerBoundBigInt = BigInt(lowerBound);\n const upperBoundBigInt = BigInt(upperBound);\n\n assert(\n inputBigInt >= lowerBoundBigInt && inputBigInt <= upperBoundBigInt,\n `Message not signable, ${messageSuffix}.`\n );\n}\n\nexport function bigNumberishArrayToDecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toBigInt(x).toString(10));\n}\n\nexport function bigNumberishArrayToHexadecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toHex(x));\n}\n\nexport const isStringWholeNumber = (value: string) => /^\\d+$/.test(value);\nexport const toHexString = (value: string) => toHex(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\n/**\n * Convert a hex string to an array of Bytes (Uint8Array)\n * @param value hex string\n * @returns an array of Bytes\n */\nexport function hexToBytes(value: string): Uint8Array {\n if (!isHex(value)) throw new Error(`${value} need to be a hex-string`);\n\n let adaptedValue: string = removeHexPrefix(value);\n if (adaptedValue.length % 2 !== 0) {\n adaptedValue = `0${adaptedValue}`;\n }\n return hexToBytesNoble(adaptedValue);\n}\n","export default function assert(condition: any, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message || 'Assertion failure');\n }\n}\n","import { addHexPrefix, removeHexPrefix } from './encode';\nimport { isHex, isStringWholeNumber } from './num';\n\nconst TEXT_TO_FELT_MAX_LEN = 31;\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 <= TEXT_TO_FELT_MAX_LEN;\n}\n\n// function to check if string is a decimal\nexport function isDecimalString(decim: string): boolean {\n return /^[0-9]*$/i.test(decim);\n}\n\n/**\n * check if value is string text, and not string-hex, string-number\n * @param val any\n * @returns boolean\n */\nexport function isText(val: any) {\n return typeof val === 'string' && !isHex(val) && !isStringWholeNumber(val);\n}\n\nexport const isShortText = (val: any) => isText(val) && isShortString(val);\nexport const isLongText = (val: any) => isText(val) && !isShortString(val);\n\nexport function splitLongString(longStr: string): string[] {\n const regex = RegExp(`[^]{1,${TEXT_TO_FELT_MAX_LEN}}`, 'g');\n return longStr.match(regex) || [];\n}\n\n/**\n * Convert an ASCII string to an hexadecimal string.\n * @param str - ASCII string -\n * 31 characters maxi. Ex : \"uri/item23.jpg\"\n * @returns a string representing an Hex number 248 bits max.\n * @Example\n * ```typescript\n * const myEncodedString: string = encodeShortString(\"uri/pict/t38.jpg\");\n * ```\n * returns : string : \"0x7572692f706963742f7433382e6a7067\"\n */\nexport function encodeShortString(str: string): 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\n/**\n * Convert an hexadecimal or decimal string to an ASCII string.\n * @param str - string - representing a 248 bits max number.\n *\n * Ex : hex : \"0x1A4F64EA56\" or decimal : \"236942575435676423\"\n * @returns a string with 31 characters max.\n * @Example\n * ```typescript\n * const myDecodedString: string = decodeShortString(\"0x7572692f706963742f7433382e6a7067\");\n * ```\n * return : string : \"uri/pict/t38.jpg\"\n */\nexport function decodeShortString(str: string): string {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (isHex(str)) {\n return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));\n }\n if (isDecimalString(str)) {\n return decodeShortString('0X'.concat(BigInt(str).toString(16)));\n }\n throw new Error(`${str} is not Hex or decimal`);\n}\n","/* eslint-disable no-bitwise */\nimport { addHexPrefix } from './encode';\nimport { BigNumberish, toBigInt } from './num';\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 (toBigInt(uint256.high) << 128n) + toBigInt(uint256.low);\n}\n\nexport const UINT_128_MAX = (1n << 128n) - 1n;\nexport const UINT_256_MAX = (1n << 256n) - 1n;\n// function to check if BN is smaller or equal 2**256-1\nexport function isUint256(bn: BigNumberish): boolean {\n return toBigInt(bn) <= UINT_256_MAX;\n}\n\n// function to convert BN to Uint256 hex\nexport function bnToUint256(bignumber: BigNumberish): Uint256 {\n const bn = toBigInt(bignumber);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n low: addHexPrefix((bn & UINT_128_MAX).toString(16)),\n high: addHexPrefix((bn >> 128n).toString(16)),\n };\n}\n","import { AbiStructs } from '../../types';\nimport { BigNumberish, isBigInt, isHex, isStringWholeNumber } from '../num';\nimport { encodeShortString, isShortString, isText } from '../shortString';\nimport { UINT_128_MAX, Uint256, isUint256 } from '../uint256';\n\nexport const isLen = (name: string) => /_len$/.test(name);\nexport const isTypeFelt = (type: string) => type === 'felt';\nexport const isTypeFeltArray = (type: string) => type === 'felt*';\nexport const isTypeArray = (type: string) => /\\*/.test(type);\nexport const isTypeTuple = (type: string) => /^\\(.*\\)$/i.test(type);\nexport const isTypeNamedTuple = (type: string) => /\\(.*\\)/i.test(type) && type.includes(':');\nexport const isTypeStruct = (type: string, structs: AbiStructs) => type in structs;\n\n/**\n * named tuple are described as js object {}\n * struct types are described as js object {}\n * array types are described as js array []\n */\n\n/**\n * Uint256 cairo type (helper for common struct type)\n */\nexport const uint256 = (it: BigNumberish): Uint256 => {\n const bn = BigInt(it);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n // eslint-disable-next-line no-bitwise\n low: (bn & UINT_128_MAX).toString(10),\n // eslint-disable-next-line no-bitwise\n high: (bn >> 128n).toString(10),\n };\n};\n\n/**\n * unnamed tuple cairo type (helper same as common struct type)\n */\nexport const tuple = (...args: (BigNumberish | object)[]) => ({ ...args });\n\n/**\n * felt cairo type\n */\nexport function felt(it: BigNumberish): string {\n // BN or number\n if (isBigInt(it) || (typeof it === 'number' && Number.isInteger(it))) {\n return it.toString();\n }\n // string text\n if (isText(it)) {\n if (!isShortString(it as string))\n throw new Error(\n `${it} is a long string > 31 chars, felt can store short strings, split it to array of short strings`\n );\n const encoded = encodeShortString(it as string);\n return BigInt(encoded).toString();\n }\n // hex string\n if (typeof it === 'string' && isHex(it)) {\n // toBN().toString\n return BigInt(it).toString();\n }\n // string number (already converted), or unhandled type\n if (typeof it === 'string' && isStringWholeNumber(it)) {\n return it;\n }\n\n throw new Error(`${it} can't be computed by felt()`);\n}\n","// TODO rename\nexport * as starkCurve from 'micro-starknet';\nexport * as weierstrass from '@noble/curves/abstract/weierstrass';\n","// the ts-ignore suppresses an esm to cjs import error that is resolved with bundling\n// @ts-ignore\nimport * as json from 'lossless-json';\n\nconst parseIntAsNumberOrBigInt = (x: string) => {\n if (!json.isInteger(x)) return parseFloat(x);\n const v = parseInt(x, 10);\n return Number.isSafeInteger(v) ? v : BigInt(x);\n};\n// NOTE: the String() wrapping is used so the behaviour conforms to JSON.parse()\n// which can accept simple data types but is not represented in the default typing\nexport const parse = (x: string): any => json.parse(String(x), null, parseIntAsNumberOrBigInt);\nexport const parseAlwaysAsBig = (x: string): any =>\n json.parse(String(x), null, json.parseNumberAndBigInt);\n\n// NOTE: the not-null assertion is used so the return type conforms to JSON.stringify()\n// which can also return undefined but is not represented in the default typing\nexport const stringify = (...p: Parameters<typeof json.stringify>): string => json.stringify(...p)!;\n/** @deprecated */\nexport const stringifyAlwaysAsBig = stringify;\n","import { CairoContract } from '../types/lib/contract/index';\nimport { CompleteDeclareContractPayload, DeclareContractPayload } from '../types/lib/index';\nimport { computeCompiledClassHash, computeContractClassHash } from './hash';\nimport { parse } from './json';\n\nexport function isSierra(contract: CairoContract | string) {\n const compiledContract = typeof contract === 'string' ? parse(contract) : contract;\n return 'sierra_program' in compiledContract;\n}\n\nexport function extractContractHashes(\n payload: DeclareContractPayload\n): CompleteDeclareContractPayload {\n const response = { ...payload } as CompleteDeclareContractPayload;\n\n if (isSierra(payload.contract)) {\n if (!payload.compiledClassHash && payload.casm) {\n response.compiledClassHash = computeCompiledClassHash(payload.casm);\n }\n if (!response.compiledClassHash)\n throw new Error(\n 'Extract compiledClassHash failed, provide (CairoAssembly).casm file or compiledClassHash'\n );\n }\n\n response.classHash = payload.classHash ?? computeContractClassHash(payload.contract);\n if (!response.classHash)\n throw new Error('Extract classHash failed, provide (CompiledContract).json file or classHash');\n\n return response;\n}\n","import { getStarkKey, utils } from 'micro-starknet';\nimport { gzip } from 'pako';\n\nimport {\n ArraySignatureType,\n Calldata,\n CompressedProgram,\n Program,\n RawArgs,\n Signature,\n} from '../types';\nimport { addHexPrefix, btoaUniversal } from './encode';\nimport { stringify } from './json';\nimport {\n BigNumberish,\n bigNumberishArrayToDecimalStringArray,\n bigNumberishArrayToHexadecimalStringArray,\n toBigInt,\n toHex,\n} from './num';\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 = utils.randomPrivateKey();\n return getStarkKey(randomKeyPair);\n}\n\nexport function makeAddress(input: string): string {\n return addHexPrefix(input).toLowerCase();\n}\n\nexport function formatSignature(sig?: Signature): ArraySignatureType {\n if (!sig) throw Error('formatSignature: provided signature is undefined');\n if (Array.isArray(sig)) {\n return sig.map((it) => toHex(it));\n }\n try {\n const { r, s } = sig;\n return [toHex(r), toHex(s)];\n } catch (e) {\n throw new Error('Signature need to be weierstrass.SignatureType or an array for custom');\n }\n}\n\nexport function signatureToDecimalArray(sig?: Signature): ArraySignatureType {\n return bigNumberishArrayToDecimalStringArray(formatSignature(sig));\n}\n\nexport function signatureToHexArray(sig?: Signature): ArraySignatureType {\n return bigNumberishArrayToHexadecimalStringArray(formatSignature(sig));\n}\n\n/**\n * @deprecated this function is deprecated use callData instead from calldata.ts\n */\nexport function compileCalldata(args: RawArgs): Calldata {\n const compiledData = Object.values(args).flatMap((value) => {\n if (Array.isArray(value))\n return [toBigInt(value.length).toString(), ...value.map((x) => toBigInt(x).toString())];\n if (typeof value === 'object' && 'type' in value)\n return Object.entries<BigNumberish>(value)\n .filter(([k]) => k !== 'type')\n .map(([, v]) => toBigInt(v).toString());\n return toBigInt(value).toString();\n });\n Object.defineProperty(compiledData, 'compiled', {\n enumerable: false,\n writable: false,\n value: true,\n });\n return compiledData;\n}\n\nexport function estimatedFeeToMaxFee(estimatedFee: BigNumberish, overhead: number = 0.5): bigint {\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 (toBigInt(estimatedFee) * toBigInt(overHeadPercent)) / 100n;\n}\n","import { CompiledContract, ContractClass, RawCalldata, SierraContractClass } from '../types';\nimport { isSierra } from './contract';\nimport { formatSpaces } from './hash';\nimport { parse, stringify } from './json';\nimport { isHex, toHex } from './num';\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(data);\n });\n}\n\nexport function createSierraContractClass(contract: SierraContractClass): any {\n const result = { ...contract } as any;\n delete result.sierra_program_debug_info;\n result.abi = formatSpaces(stringify(contract.abi));\n result.sierra_program = formatSpaces(stringify(contract.sierra_program));\n result.sierra_program = compressProgram(result.sierra_program);\n return result;\n}\n\n// TODO: How can we receive string here ?\nexport function parseContract(contract: CompiledContract | string) {\n const parsedContract =\n typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;\n\n if (!isSierra(contract)) {\n return {\n ...parsedContract,\n // TODO: Why do we gzip program object?\n ...('program' in parsedContract && { program: compressProgram(parsedContract.program) }),\n } as ContractClass;\n }\n\n return createSierraContractClass(parsedContract as SierraContractClass);\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 { toBigInt } from '../num';\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 sender_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: toBigInt(res.overall_fee),\n gas_consumed: toBigInt(res.gas_consumed),\n gas_price: toBigInt(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 { CustomError } from 'ts-custom-error/dist/custom-error';\n\nexport class LibraryError extends CustomError {}\n\nexport class GatewayError extends LibraryError {\n constructor(message: string, public errorCode: string) {\n super(message);\n }\n}\n\nexport class HttpError extends LibraryError {\n constructor(message: string, public errorCode: number) {\n super(message);\n }\n}\n","/* eslint-disable no-param-reassign */\nimport { StarknetChainId, ZERO } from '../constants';\n\nconst basicAlphabet = 'abcdefghijklmnopqrstuvwxyz0123456789-';\nconst basicSizePlusOne = BigInt(basicAlphabet.length + 1);\nconst bigAlphabet = '这来';\nconst basicAlphabetSize = BigInt(basicAlphabet.length);\nconst bigAlphabetSize = BigInt(bigAlphabet.length);\nconst bigAlphabetSizePlusOne = BigInt(bigAlphabet.length + 1);\n\nfunction extractStars(str: string): [string, number] {\n let k = 0;\n while (str.endsWith(bigAlphabet[bigAlphabet.length - 1])) {\n str = str.substring(0, str.length - 1);\n k += 1;\n }\n return [str, k];\n}\n\nexport function useDecoded(encoded: bigint[]): string {\n let decoded = '';\n\n encoded.forEach((subdomain) => {\n while (subdomain !== ZERO) {\n const code = subdomain % basicSizePlusOne;\n subdomain /= basicSizePlusOne;\n if (code === BigInt(basicAlphabet.length)) {\n const nextSubdomain = subdomain / bigAlphabetSizePlusOne;\n if (nextSubdomain === ZERO) {\n const code2 = subdomain % bigAlphabetSizePlusOne;\n subdomain = nextSubdomain;\n if (code2 === ZERO) decoded += basicAlphabet[0];\n else decoded += bigAlphabet[Number(code2) - 1];\n } else {\n const code2 = subdomain % bigAlphabetSize;\n decoded += bigAlphabet[Number(code2)];\n subdomain /= bigAlphabetSize;\n }\n } else decoded += basicAlphabet[Number(code)];\n }\n\n const [str, k] = extractStars(decoded);\n if (k)\n decoded =\n str +\n (k % 2 === 0\n ? bigAlphabet[bigAlphabet.length - 1].repeat(k / 2 - 1) +\n bigAlphabet[0] +\n basicAlphabet[1]\n : bigAlphabet[bigAlphabet.length - 1].repeat((k - 1) / 2 + 1));\n decoded += '.';\n });\n\n if (!decoded) {\n return decoded;\n }\n\n return decoded.concat('stark');\n}\n\nexport function useEncoded(decoded: string): bigint {\n let encoded = BigInt(0);\n let multiplier = BigInt(1);\n\n if (decoded.endsWith(bigAlphabet[0] + basicAlphabet[1])) {\n const [str, k] = extractStars(decoded.substring(0, decoded.length - 2));\n decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(2 * (k + 1));\n } else {\n const [str, k] = extractStars(decoded);\n if (k) decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(1 + 2 * (k - 1));\n }\n\n for (let i = 0; i < decoded.length; i += 1) {\n const char = decoded[i];\n const index = basicAlphabet.indexOf(char);\n const bnIndex = BigInt(basicAlphabet.indexOf(char));\n\n if (index !== -1) {\n // add encoded + multiplier * index\n if (i === decoded.length - 1 && decoded[i] === basicAlphabet[0]) {\n encoded += multiplier * basicAlphabetSize;\n multiplier *= basicSizePlusOne;\n // add 0\n multiplier *= basicSizePlusOne;\n } else {\n encoded += multiplier * bnIndex;\n multiplier *= basicSizePlusOne;\n }\n } else if (bigAlphabet.indexOf(char) !== -1) {\n // add encoded + multiplier * (basicAlphabetSize)\n encoded += multiplier * basicAlphabetSize;\n multiplier *= basicSizePlusOne;\n // add encoded + multiplier * index\n const newid = (i === decoded.length - 1 ? 1 : 0) + bigAlphabet.indexOf(char);\n encoded += multiplier * BigInt(newid);\n multiplier *= bigAlphabetSize;\n }\n }\n\n return encoded;\n}\n\nexport function getStarknetIdContract(chainId: StarknetChainId): string {\n const starknetIdMainnetContract =\n '0x6ac597f8116f886fa1c97a23fa4e08299975ecaf6b598873ca6792b9bbfb678';\n const starknetIdTestnetContract =\n '0x3bab268e932d2cecd1946f100ae67ce3dff9fd234119ea2f6da57d16d29fce';\n\n switch (chainId) {\n case StarknetChainId.SN_MAIN:\n return starknetIdMainnetContract;\n\n case StarknetChainId.SN_GOERLI:\n return starknetIdTestnetContract;\n\n default:\n throw new Error('Starknet.id is not yet deployed on this network');\n }\n}\n","import { BigNumberish } from '../utils/num';\nimport { compileCalldata } from '../utils/stark';\nimport { getStarknetIdContract, useDecoded, useEncoded } from '../utils/starknetId';\nimport { ProviderInterface } from './interface';\n\nexport async function getStarkName(\n provider: ProviderInterface,\n address: BigNumberish,\n StarknetIdContract?: string\n): Promise<string> {\n const chainId = await provider.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const hexDomain = await provider.callContract({\n contractAddress: contract,\n entrypoint: 'address_to_domain',\n calldata: compileCalldata({\n address,\n }),\n });\n const decimalDomain = hexDomain.result.map((element) => BigInt(element)).slice(1);\n\n const stringDomain = useDecoded(decimalDomain);\n\n if (!stringDomain) {\n throw Error('Starkname not found');\n }\n\n return stringDomain;\n } catch (e) {\n if (e instanceof Error && e.message === 'Starkname not found') {\n throw e;\n }\n throw Error('Could not get stark name');\n }\n}\n\nexport async function getAddressFromStarkName(\n provider: ProviderInterface,\n name: string,\n StarknetIdContract?: string\n): Promise<string> {\n const chainId = await provider.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const addressData = await provider.callContract({\n contractAddress: contract,\n entrypoint: 'domain_to_address',\n calldata: compileCalldata({\n domain: [useEncoded(name.replace('.stark', '')).toString(10)],\n }),\n });\n\n return addressData.result[0];\n } catch {\n throw Error('Could not get address from stark name');\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport type { BlockNumber, SequencerIdentifier } from '../types';\nimport { BigNumberish, isHex, toHex } from '../utils/num';\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(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;\nexport const validBlockTags = ['latest', 'pending'];\n\nexport class Block {\n hash: BlockIdentifier = null;\n\n number: BlockIdentifier = null;\n\n tag: BlockIdentifier = null;\n\n private setIdentifier(__identifier: BlockIdentifier) {\n if (typeof __identifier === 'string' && isHex(__identifier)) {\n this.hash = __identifier;\n } else if (typeof __identifier === 'bigint') {\n this.hash = toHex(__identifier);\n } else if (typeof __identifier === 'number') {\n this.number = __identifier;\n } else if (typeof __identifier === 'string' && validBlockTags.includes(__identifier)) {\n this.tag = __identifier;\n } else {\n // default\n this.tag = 'pending';\n }\n }\n\n constructor(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n // TODO: fix any\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 // TODO: fix any\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 get sequencerIdentifier(): SequencerIdentifier {\n return this.hash !== null\n ? { blockHash: this.hash as string }\n : { blockNumber: (this.number ?? this.tag) as BlockNumber };\n }\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n RPC,\n TransactionSimulationResponse,\n TransactionStatus,\n waitForTransactionOptions,\n} from '../types';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelectorFromName } from '../utils/hash';\nimport { stringify } from '../utils/json';\nimport { BigNumberish, bigNumberishArrayToHexadecimalStringArray, toHex } from '../utils/num';\nimport { parseCalldata, wait } from '../utils/provider';\nimport { RPCResponseParser } from '../utils/responseParser/rpc';\nimport { signatureToHexArray } from '../utils/stark';\nimport { LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\nimport { Block, BlockIdentifier } from './utils';\n\nexport type RpcProviderOptions = {\n nodeUrl: string;\n retries?: number;\n headers?: object;\n blockIdentifier?: BlockIdentifier;\n};\n\n// Default Pathfinder disabled pending block https://github.com/eqlabs/pathfinder/blob/main/README.md\n// Note that pending support is disabled by default and must be enabled by setting poll-pending=true in the configuration options.\nconst defaultOptions = {\n headers: { 'Content-Type': 'application/json' },\n blockIdentifier: 'latest',\n retries: 200,\n};\n\nexport class RpcProvider implements ProviderInterface {\n public nodeUrl: string;\n\n public headers: object;\n\n private chainId!: StarknetChainId;\n\n private responseParser = new RPCResponseParser();\n\n private retries: number;\n\n private blockIdentifier: BlockIdentifier;\n\n constructor(optionsOrProvider: RpcProviderOptions) {\n const { nodeUrl, retries, headers, blockIdentifier } = optionsOrProvider;\n this.nodeUrl = nodeUrl;\n this.retries = retries || defaultOptions.retries;\n this.headers = { ...defaultOptions.headers, ...headers };\n this.blockIdentifier = blockIdentifier || defaultOptions.blockIdentifier;\n\n this.getChainId();\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 LibraryError(`${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<StarknetChainId> {\n this.chainId ??= (await this.fetchEndpoint('starknet_chainId')) as StarknetChainId;\n return this.chainId;\n }\n\n public async getBlock(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): 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 = this.blockIdentifier\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 = this.blockIdentifier\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 = this.blockIdentifier\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 getNonceForAddress(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\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 = this.blockIdentifier\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 = this.blockIdentifier\n ): Promise<RPC.Storage> {\n const parsedKey = toHex(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 = this.blockIdentifier\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 = this.blockIdentifier\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 = this.blockIdentifier\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 = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: RPC.TransactionType.INVOKE,\n sender_address: invocation.contractAddress,\n calldata: parseCalldata(invocation.calldata),\n signature: signatureToHexArray(invocation.signature),\n version: toHex(invocationDetails?.version || 0),\n nonce: toHex(invocationDetails.nonce),\n max_fee: toHex(invocationDetails?.maxFee || 0),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n if ('program' in contractDefinition) {\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: RPC.TransactionType.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: signatureToHexArray(signature),\n version: toHex(details?.version || 0),\n nonce: toHex(details.nonce),\n max_fee: toHex(details?.maxFee || 0),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n // TODO: When RPC Update implement Sierra\n throw new Error('RPC do not support Sierra Contracts yet');\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: RPC.TransactionType.DEPLOY_ACCOUNT,\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(classHash),\n contract_address_salt: toHex(addressSalt || 0),\n signature: signatureToHexArray(signature),\n version: toHex(details?.version || 0),\n nonce: toHex(details.nonce),\n max_fee: toHex(details?.maxFee || 0),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getEstimateFeeBulk(\n _invocations: InvocationBulk,\n _blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n throw new Error('RPC does not implement getInvokeEstimateFeeBulk function');\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 if ('program' in contractDefinition) {\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: RPC.TransactionType.DECLARE,\n version: '0x1',\n max_fee: toHex(details.maxFee || 0),\n signature: signatureToHexArray(signature),\n sender_address: senderAddress,\n nonce: toHex(details.nonce),\n },\n });\n }\n // TODO: When RPC Update implement Sierra\n throw new Error('RPC do not support Sierra Contracts yet');\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 deploy_account_transaction: {\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(classHash),\n contract_address_salt: toHex(addressSalt || 0),\n type: RPC.TransactionType.DEPLOY_ACCOUNT,\n max_fee: toHex(details.maxFee || 0),\n version: toHex(details.version || 0),\n signature: signatureToHexArray(signature),\n nonce: toHex(details.nonce),\n },\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: RPC.TransactionType.INVOKE,\n max_fee: toHex(details.maxFee || 0),\n version: '0x1',\n signature: signatureToHexArray(functionInvocation.signature),\n nonce: toHex(details.nonce),\n },\n });\n }\n\n // Methods from Interface\n public async callContract(\n call: Call,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\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, options?: waitForTransactionOptions) {\n const errorStates = [TransactionStatus.REJECTED, TransactionStatus.NOT_RECEIVED];\n let { retries } = this;\n let onchain = false;\n let txReceipt: any = {};\n\n const retryInterval = options?.retryInterval ?? 8000;\n const successStates = options?.successStates ?? [\n TransactionStatus.ACCEPTED_ON_L1,\n TransactionStatus.ACCEPTED_ON_L2,\n TransactionStatus.PENDING,\n ];\n\n while (!onchain) {\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 txReceipt = await this.getTransactionReceipt(txHash);\n\n if (!('status' in txReceipt)) {\n const error = new Error('pending transaction');\n throw error;\n }\n\n if (txReceipt.status && successStates.includes(txReceipt.status)) {\n onchain = true;\n } else if (txReceipt.status && errorStates.includes(txReceipt.status)) {\n const message = txReceipt.status;\n const error = new Error(message) as Error & { response: any };\n error.response = txReceipt;\n throw error;\n }\n } catch (error: unknown) {\n if (error instanceof Error && errorStates.includes(error.message as TransactionStatus)) {\n throw error;\n }\n\n if (retries === 0) {\n throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);\n }\n }\n\n retries -= 1;\n }\n\n await wait(retryInterval);\n return txReceipt;\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 = this.blockIdentifier\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 public async getSimulateTransaction(\n _invocation: Invocation,\n _invocationDetails: InvocationsDetailsWithNonce,\n _blockIdentifier?: BlockIdentifier\n ): Promise<TransactionSimulationResponse> {\n throw new Error('RPC does not implement simulateTransaction function');\n }\n\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string): Promise<string> {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string): Promise<string> {\n return getAddressFromStarkName(this, name, StarknetIdContract);\n }\n}\n","import urljoin from 'url-join';\n\nimport { BaseUrl, NetworkName, StarknetChainId } from '../constants';\nimport {\n CairoAssembly,\n Call,\n CallContractResponse,\n CallL1Handler,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetContractAddressesResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n GetTransactionStatusResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Sequencer,\n StateUpdateResponse,\n TransactionSimulationResponse,\n TransactionStatus,\n TransactionTraceResponse,\n TransactionType,\n waitForTransactionOptions,\n} from '../types';\nimport { isSierra } from '../utils/contract';\nimport fetch from '../utils/fetchPonyfill';\nimport { feeTransactionVersion, getSelector, getSelectorFromName } from '../utils/hash';\nimport { parse, parseAlwaysAsBig, stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToDecimalStringArray,\n getDecimalString,\n getHexString,\n getHexStringArray,\n toBigInt,\n toHex,\n} from '../utils/num';\nimport { parseContract, wait } from '../utils/provider';\nimport { SequencerAPIResponseParser } from '../utils/responseParser/sequencer';\nimport { formatSignature, randomAddress, signatureToDecimalArray } from '../utils/stark';\nimport { buildUrl } from '../utils/url';\nimport { GatewayError, HttpError, LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\nimport { Block, BlockIdentifier } from './utils';\n\nexport type SequencerHttpMethod = 'POST' | 'GET';\n\nexport type SequencerProviderOptions = {\n headers?: Record<string, string>;\n blockIdentifier?: BlockIdentifier;\n} & (\n | {\n network: NetworkName | StarknetChainId;\n chainId?: StarknetChainId;\n }\n | {\n baseUrl: string;\n feederGatewayUrl?: string;\n gatewayUrl?: string;\n chainId?: StarknetChainId;\n }\n);\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\nconst defaultOptions = {\n network: NetworkName.SN_GOERLI2,\n blockIdentifier: 'pending',\n};\n\nexport class SequencerProvider implements ProviderInterface {\n public baseUrl: string;\n\n public feederGatewayUrl: string;\n\n public gatewayUrl: string;\n\n public headers?: Record<string, string>;\n\n private blockIdentifier: BlockIdentifier;\n\n private chainId: StarknetChainId;\n\n private responseParser = new SequencerAPIResponseParser();\n\n constructor(optionsOrProvider: SequencerProviderOptions = defaultOptions) {\n if ('network' in optionsOrProvider) {\n this.baseUrl = SequencerProvider.getNetworkFromName(optionsOrProvider.network);\n this.feederGatewayUrl = buildUrl(this.baseUrl, 'feeder_gateway');\n this.gatewayUrl = buildUrl(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 ?? SequencerProvider.getChainIdFromBaseUrl(this.baseUrl);\n this.headers = optionsOrProvider.headers;\n this.blockIdentifier = optionsOrProvider?.blockIdentifier || defaultOptions.blockIdentifier;\n }\n\n protected static getNetworkFromName(name: NetworkName | StarknetChainId) {\n switch (name) {\n case NetworkName.SN_MAIN || StarknetChainId.SN_MAIN:\n return BaseUrl.SN_MAIN;\n case NetworkName.SN_GOERLI || StarknetChainId.SN_GOERLI:\n return BaseUrl.SN_GOERLI;\n case NetworkName.SN_GOERLI2 || StarknetChainId.SN_GOERLI2:\n return BaseUrl.SN_GOERLI2;\n default:\n throw new Error('Could not detect base url from NetworkName');\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.SN_MAIN;\n }\n if (url.host.includes('alpha4-2.starknet.io')) {\n return StarknetChainId.SN_GOERLI2;\n }\n return StarknetChainId.SN_GOERLI;\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Could not parse baseUrl: ${baseUrl}`);\n return StarknetChainId.SN_GOERLI;\n }\n }\n\n private getFetchUrl(endpoint: keyof Sequencer.Endpoints) {\n const gatewayUrlEndpoints = ['add_transaction'];\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 'estimate_fee_bulk',\n 'simulate_transaction',\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: SequencerHttpMethod): Record<string, string> | 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 url = urljoin(baseUrl, endpoint, queryString);\n\n return this.fetch(url, {\n method,\n body: request,\n });\n }\n\n public async fetch(\n endpoint: string,\n options?: {\n method?: SequencerHttpMethod;\n body?: any;\n parseAlwaysAsBigInt?: boolean;\n }\n ): Promise<any> {\n const url = buildUrl(this.baseUrl, '', endpoint);\n const method = options?.method ?? 'GET';\n const headers = this.getHeaders(method);\n\n try {\n const response = await fetch(url, {\n method,\n body: stringify(options?.body),\n headers,\n });\n const textResponse = await response.text();\n\n if (!response.ok) {\n // This will allow the user to handle contract errors\n let responseBody: any;\n try {\n responseBody = parse(textResponse);\n } catch {\n throw new HttpError(response.statusText, response.status);\n }\n throw new GatewayError(responseBody.message, responseBody.code);\n }\n\n const parseChoice = options?.parseAlwaysAsBigInt ? parseAlwaysAsBig : parse;\n return parseChoice(textResponse);\n } catch (error) {\n if (error instanceof Error && !(error instanceof LibraryError))\n throw Error(`Could not ${method} from endpoint \\`${url}\\`: ${error.message}`);\n\n throw error;\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 = this.blockIdentifier\n ): Promise<CallContractResponse> {\n return this.fetchEndpoint(\n 'call_contract',\n { blockIdentifier },\n {\n // TODO - determine best choice once both are fully supported in devnet\n // signature: [],\n // sender_address: contractAddress,\n contract_address: contractAddress,\n entry_point_selector: getSelectorFromName(entryPointSelector),\n calldata,\n }\n ).then(this.responseParser.parseCallContractResponse);\n }\n\n public async getBlock(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<GetBlockResponse> {\n return this.fetchEndpoint('get_block', { blockIdentifier }).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.Nonce> {\n return this.fetchEndpoint('get_nonce', { contractAddress, blockIdentifier });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.Storage> {\n const parsedKey = toBigInt(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(txHash);\n return this.fetchEndpoint('get_transaction', { transactionHash: txHashHex }).then((result) => {\n // throw for no matching transaction to unify behavior with RPC and avoid parsing errors\n if (Object.values(result).length === 1) throw new LibraryError(result.status);\n return this.responseParser.parseGetTransactionResponse(result);\n });\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n const txHashHex = toHex(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 = this.blockIdentifier\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 = this.blockIdentifier\n ): Promise<string> {\n return this.fetchEndpoint('get_class_hash_at', { blockIdentifier, contractAddress });\n }\n\n public async getClassByHash(\n classHash: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<ContractClass> {\n return this.fetchEndpoint('get_class_by_hash', { classHash, blockIdentifier }).then(\n parseContract\n );\n }\n\n public async getCompiledClassByClassHash(\n classHash: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<CairoAssembly> {\n return this.fetchEndpoint('get_compiled_class_by_class_hash', { classHash, blockIdentifier });\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.INVOKE,\n sender_address: functionInvocation.contractAddress,\n calldata: bigNumberishArrayToDecimalStringArray(functionInvocation.calldata ?? []),\n signature: signatureToDecimalArray(functionInvocation.signature),\n nonce: toHex(details.nonce),\n max_fee: toHex(details.maxFee || 0),\n version: '0x1',\n }).then(this.responseParser.parseInvokeFunctionResponse);\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: TransactionType.DEPLOY_ACCOUNT,\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),\n class_hash: toHex(classHash),\n max_fee: toHex(details.maxFee || 0),\n version: toHex(details.version || 0),\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async declareContract(\n { senderAddress, contractDefinition, signature, compiledClassHash }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n if (!isSierra(contractDefinition)) {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.DECLARE,\n contract_class: contractDefinition,\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n sender_address: senderAddress,\n max_fee: toHex(details.maxFee || 0),\n version: '0x1',\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n // Cairo 1\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.DECLARE,\n sender_address: senderAddress,\n compiled_class_hash: compiledClassHash,\n contract_class: contractDefinition,\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n max_fee: toHex(details.maxFee || 0),\n version: '0x2',\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier, skipValidate);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier, skipValidate },\n {\n type: TransactionType.INVOKE,\n sender_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: signatureToDecimalArray(invocation.signature),\n version: toHex(invocationDetails?.version || 1),\n nonce: toHex(invocationDetails.nonce),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature, compiledClassHash }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n if (!isSierra(contractDefinition)) {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier, skipValidate },\n {\n type: TransactionType.DECLARE,\n sender_address: senderAddress,\n contract_class: contractDefinition,\n signature: signatureToDecimalArray(signature),\n version: toHex(details?.version || toBigInt(feeTransactionVersion)),\n nonce: toHex(details.nonce),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier, skipValidate },\n {\n type: TransactionType.DECLARE,\n sender_address: senderAddress,\n compiled_class_hash: compiledClassHash,\n contract_class: contractDefinition,\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n version: '0x2',\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, addressSalt, constructorCalldata, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier, skipValidate },\n {\n type: TransactionType.DEPLOY_ACCOUNT,\n class_hash: toHex(classHash),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata || []),\n contract_address_salt: toHex(addressSalt || 0),\n signature: signatureToDecimalArray(signature),\n version: toHex(details?.version || 0),\n nonce: toHex(details.nonce),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n const params: Sequencer.EstimateFeeRequestBulk = invocations.map((invocation) => {\n let res;\n if (invocation.type === 'INVOKE_FUNCTION') {\n res = {\n type: invocation.type,\n sender_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n };\n } else if (invocation.type === 'DECLARE') {\n res = {\n type: invocation.type,\n sender_address: invocation.senderAddress,\n contract_class: invocation.contractDefinition,\n };\n } else {\n res = {\n type: invocation.type,\n class_hash: toHex(toBigInt(invocation.classHash)),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(\n invocation.constructorCalldata || []\n ),\n contract_address_salt: toHex(toBigInt(invocation.addressSalt || 0)),\n };\n }\n return {\n ...res,\n signature: bigNumberishArrayToDecimalStringArray(formatSignature(invocation.signature)),\n version: toHex(toBigInt(invocation?.version || 1)),\n nonce: toHex(toBigInt(invocation.nonce)),\n };\n });\n\n return this.fetchEndpoint('estimate_fee_bulk', { blockIdentifier }, params).then(\n this.responseParser.parseFeeEstimateBulkResponse\n );\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.GetCodeResponse> {\n return this.fetchEndpoint('get_code', { contractAddress, blockIdentifier });\n }\n\n public async waitForTransaction(txHash: BigNumberish, options?: waitForTransactionOptions) {\n const errorStates = [TransactionStatus.REJECTED, TransactionStatus.NOT_RECEIVED];\n let onchain = false;\n let res;\n const retryInterval = options?.retryInterval ?? 8000;\n const successStates = options?.successStates ?? [\n TransactionStatus.ACCEPTED_ON_L1,\n TransactionStatus.ACCEPTED_ON_L2,\n TransactionStatus.PENDING,\n ];\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 res = await this.getTransactionStatus(txHash);\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 const txReceipt = await this.getTransactionReceipt(txHash);\n return txReceipt;\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(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 * @param txHash\n * @returns the transaction trace\n */\n public async getTransactionTrace(txHash: BigNumberish): Promise<TransactionTraceResponse> {\n const txHashHex = toHex(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 = this.blockIdentifier\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 public async getSimulateTransaction(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<TransactionSimulationResponse> {\n return this.fetchEndpoint(\n 'simulate_transaction',\n { blockIdentifier, skipValidate },\n {\n type: 'INVOKE_FUNCTION',\n sender_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: signatureToDecimalArray(invocation.signature),\n version: toHex(invocationDetails?.version || 1),\n nonce: toHex(invocationDetails.nonce),\n max_fee: toHex(invocationDetails?.maxFee || 0),\n }\n ).then(this.responseParser.parseFeeSimulateTransactionResponse);\n }\n\n public async getStateUpdate(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<StateUpdateResponse> {\n const args = new Block(blockIdentifier).sequencerIdentifier;\n return this.fetchEndpoint('get_state_update', { ...args }).then(\n this.responseParser.parseGetStateUpdateResponse\n );\n }\n\n // consider adding an optional trace retrieval parameter to the getBlock method\n public async getBlockTraces(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.BlockTransactionTracesResponse> {\n const args = new Block(blockIdentifier).sequencerIdentifier;\n return this.fetchEndpoint('get_block_traces', { ...args });\n }\n\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string): Promise<string> {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string): Promise<string> {\n return getAddressFromStarkName(this, name, StarknetIdContract);\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 EstimateFeeResponseBulk,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n Sequencer,\n StateUpdateResponse,\n TransactionSimulationResponse,\n} from '../../types';\nimport { toBigInt } from '../num';\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_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: toBigInt(res.gas_usage),\n gas_price: toBigInt(res.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBigInt(res.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBigInt(res.amount),\n };\n }\n\n public parseFeeEstimateBulkResponse(\n res: Sequencer.EstimateFeeResponseBulk\n ): EstimateFeeResponseBulk {\n return [].concat(res as []).map((item: Sequencer.EstimateFeeResponse) => {\n if ('overall_fee' in item) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBigInt(item.gas_usage),\n gas_price: toBigInt(item.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBigInt(item.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBigInt(item.amount),\n };\n });\n }\n\n public parseFeeSimulateTransactionResponse(\n res: Sequencer.TransactionSimulationResponse\n ): TransactionSimulationResponse {\n if ('overall_fee' in res.fee_estimation) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBigInt(res.fee_estimation.gas_usage),\n gas_price: toBigInt(res.fee_estimation.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n trace: res.trace,\n fee_estimation: {\n ...gasInfo,\n overall_fee: toBigInt(res.fee_estimation.overall_fee),\n },\n };\n }\n\n return {\n trace: res.trace,\n fee_estimation: {\n overall_fee: toBigInt(res.fee_estimation.amount),\n },\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 public parseGetStateUpdateResponse(res: Sequencer.StateUpdateResponse): StateUpdateResponse {\n const nonces = Object.entries(res.state_diff.nonces).map(([contract_address, nonce]) => ({\n contract_address,\n nonce,\n }));\n const storage_diffs = Object.entries(res.state_diff.storage_diffs).map(\n ([address, storage_entries]) => ({ address, storage_entries })\n );\n\n return {\n ...res,\n state_diff: {\n ...res.state_diff,\n storage_diffs,\n nonces,\n },\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","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Nonce,\n RPC,\n StateUpdateResponse,\n Storage,\n TransactionSimulationResponse,\n waitForTransactionOptions,\n} from '../types';\nimport { BigNumberish } from '../utils/num';\nimport { ProviderInterface } from './interface';\nimport { RpcProvider, RpcProviderOptions } from './rpc';\nimport { SequencerProvider, SequencerProviderOptions } from './sequencer';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\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 instanceof Provider) {\n // providerOrOptions is Provider\n this.provider = providerOrOptions.provider;\n } else if (\n providerOrOptions instanceof RpcProvider ||\n providerOrOptions instanceof SequencerProvider\n ) {\n // providerOrOptions is SequencerProvider or RpcProvider\n this.provider = <ProviderInterface>providerOrOptions;\n } else if (providerOrOptions && 'rpc' in providerOrOptions) {\n // providerOrOptions is rpc option\n this.provider = new RpcProvider(<RpcProviderOptions>providerOrOptions.rpc);\n } else if (providerOrOptions && 'sequencer' in providerOrOptions) {\n // providerOrOptions is sequencer option\n this.provider = new SequencerProvider(<SequencerProviderOptions>providerOrOptions.sequencer);\n } else {\n // providerOrOptions is none, create SequencerProvider as default\n this.provider = new SequencerProvider();\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return this.provider.getChainId();\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse> {\n return this.provider.getBlock(blockIdentifier);\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClass | RPC.ContractClass> {\n return this.provider.getClassAt(contractAddress, blockIdentifier);\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier\n ): Promise<string> {\n return this.provider.getClassHashAt(contractAddress, blockIdentifier);\n }\n\n public getClassByHash(classHash: string): Promise<ContractClass | RPC.ContractClass> {\n return this.provider.getClassByHash(classHash);\n }\n\n public async getEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\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,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getInvokeEstimateFee(\n invocationWithTxType,\n invocationDetails,\n blockIdentifier,\n skipValidate\n );\n }\n\n public async getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n return this.provider.getEstimateFeeBulk(invocations, blockIdentifier);\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<Nonce> {\n return this.provider.getNonceForAddress(contractAddress, blockIdentifier);\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<Storage> {\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\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 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,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier, skipValidate);\n }\n\n public getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeployAccountEstimateFee(\n transaction,\n details,\n blockIdentifier,\n skipValidate\n );\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(\n txHash: BigNumberish,\n options?: waitForTransactionOptions\n ): Promise<GetTransactionReceiptResponse> {\n return this.provider.waitForTransaction(txHash, options);\n }\n\n public async getSimulateTransaction(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<TransactionSimulationResponse> {\n return this.provider.getSimulateTransaction(\n invocation,\n invocationDetails,\n blockIdentifier,\n skipValidate\n );\n }\n\n public async getStateUpdate(blockIdentifier?: BlockIdentifier): Promise<StateUpdateResponse> {\n return this.provider.getStateUpdate(blockIdentifier);\n }\n\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string): Promise<string> {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string): Promise<string> {\n return getAddressFromStarkName(this, name, StarknetIdContract);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport type {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Nonce,\n RPC,\n StateUpdateResponse,\n Storage,\n TransactionSimulationResponse,\n waitForTransactionOptions,\n} from '../types';\nimport type { BigNumberish } from '../utils/num';\nimport { BlockIdentifier } from './utils';\n\nexport abstract class ProviderInterface {\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 | RPC.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 | RPC.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 getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<Nonce>;\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<Storage>;\n\n /**\n * Gets the transaction information from a tx id.\n *\n * @param txHash\n * @returns the transaction 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 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. Should not be used outside of Account class\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. Should not be used outside of Account class\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 * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier,\n skipValidate?: boolean\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 details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getInvokeEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\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 - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\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 - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a list of INVOKE transaction\n *\n * @param invocations the array of invocation and invocation details object containing:\n * - contractAddress - the address of the account\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponseBulk>;\n\n /**\n * Wait for the transaction to be accepted\n * @param txHash - transaction hash\n * @param retryInterval - retry interval\n * @return GetTransactionReceiptResponse\n */\n public abstract waitForTransaction(\n txHash: BigNumberish,\n options?: waitForTransactionOptions\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Simulates the transaction and returns the transaction trace and estimated fee.\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 * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the transaction trace and estimated fee\n */\n public abstract getSimulateTransaction(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<TransactionSimulationResponse>;\n\n /**\n * Gets the state changes in a specific block\n *\n * @param blockIdentifier - block identifier\n * @returns StateUpdateResponse\n */\n public abstract getStateUpdate(blockIdentifier?: BlockIdentifier): Promise<StateUpdateResponse>;\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 { isBigInt } from '../num';\nimport { decodeShortString } from '../shortString';\n\nconst guard = {\n isBN: (data: any, type: any, key: any) => {\n if (!isBigInt(data[key]))\n throw new Error(\n `Data and formatter mismatch on ${key}:${type[key]}, expected response data ${key}:${\n data[key]\n } to be BN instead it is ${typeof data[key]}`\n );\n },\n unknown: (data: any, type: any, key: any) => {\n throw new Error(`Unhandled formatter type on ${key}:${type[key]} for data ${key}:${data[key]}`);\n },\n};\n\nexport default function formatter(data: any, type: any, sameType?: any) {\n // match data element with type element\n return Object.entries(data).reduce((acc, [key, value]: [any, any]) => {\n const elType = sameType ?? type[key];\n\n if (!(key in type) && !sameType) {\n // no type definition for element return original element\n acc[key] = value;\n return acc;\n }\n\n if (elType === 'string') {\n if (Array.isArray(data[key])) {\n // long string (felt*)\n const arrayStr = formatter(\n data[key],\n data[key].map((_: any) => elType)\n );\n acc[key] = Object.values(arrayStr).join('');\n return acc;\n }\n guard.isBN(data, type, key);\n acc[key] = decodeShortString(value);\n return acc;\n }\n if (elType === 'number') {\n guard.isBN(data, type, key);\n acc[key] = Number(value);\n return acc;\n }\n if (typeof elType === 'function') {\n acc[key] = elType(value);\n return acc;\n }\n if (Array.isArray(elType)) {\n const arrayObj = formatter(data[key], elType, elType[0]);\n acc[key] = Object.values(arrayObj);\n return acc;\n }\n if (typeof elType === 'object') {\n acc[key] = formatter(data[key], elType);\n return acc;\n }\n\n guard.unknown(data, type, key);\n return acc;\n }, {} as any);\n}\n","/* eslint-disable no-plusplus */\nimport { isTypeNamedTuple } from './cairo';\n\nfunction parseNamedTuple(namedTuple: string): any {\n const name = namedTuple.substring(0, namedTuple.indexOf(':'));\n const type = namedTuple.substring(name.length + ':'.length);\n return { name, type };\n}\n\nfunction parseSubTuple(s: string) {\n if (!s.includes('(')) return { subTuple: [], result: s };\n const subTuple: string[] = [];\n let result = '';\n let i = 0;\n while (i < s.length) {\n if (s[i] === '(') {\n let counter = 1;\n const lBracket = i;\n i++;\n while (counter) {\n if (s[i] === ')') counter--;\n if (s[i] === '(') counter++;\n i++;\n }\n subTuple.push(s.substring(lBracket, i));\n result += ' ';\n i--;\n } else {\n result += s[i];\n }\n i++;\n }\n\n return {\n subTuple,\n result,\n };\n}\n\n/**\n * Convert tuple string definition into object like definition\n * @param type tuple string definition\n * @returns object like tuple\n */\nexport default function extractTupleMemberTypes(type: string): (string | object)[] {\n const cleanType = type.replace(/\\s/g, '').slice(1, -1); // remove first lvl () and spaces\n\n // Decompose subTuple\n const { subTuple, result } = parseSubTuple(cleanType);\n\n // Recompose subTuple\n let recomposed = result.split(',').map((it) => {\n return subTuple.length ? it.replace(' ', subTuple.shift() as string) : it;\n });\n\n // Parse named tuple\n if (isTypeNamedTuple(type)) {\n recomposed = recomposed.reduce((acc, it) => {\n return acc.concat(parseNamedTuple(it));\n }, []);\n }\n\n return recomposed;\n}\n","import { AbiEntry, AbiStructs, ParsedStruct, Tupled } from '../../types';\nimport { BigNumberish } from '../num';\nimport { isText, splitLongString } from '../shortString';\nimport { felt, isTypeArray, isTypeFeltArray, isTypeStruct, isTypeTuple } from './cairo';\nimport extractTupleMemberTypes from './tuple';\n\n/**\n * Parse tuple type string to array of known objects\n * @param element request element\n * @param typeStr tuple type string\n * @returns Tupled[]\n */\nfunction parseTuple(element: object, typeStr: string): Tupled[] {\n const memberTypes = extractTupleMemberTypes(typeStr);\n const elements = Object.values(element);\n\n if (elements.length !== memberTypes.length) {\n throw Error(\n `ParseTuple: provided and expected abi tuple size do not match.\n provided: ${elements} \n expected: ${memberTypes}`\n );\n }\n\n return memberTypes.map((it: any, dx: number) => {\n return {\n element: elements[dx],\n type: it.type ?? it,\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 * @param structs - structs from abi\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\nfunction parseCalldataValue(\n element: ParsedStruct | BigNumberish | BigNumberish[],\n type: string,\n structs: AbiStructs\n): string | string[] {\n if (element === undefined) {\n throw Error(`Missing parameter for type ${type}`);\n }\n if (Array.isArray(element)) {\n throw Error(`Array inside array (nD) are not supported by cairo. Element: ${element} ${type}`);\n }\n // checking if the passed element is struct\n if (structs[type] && structs[type].members.length) {\n const { members } = structs[type];\n const subElement = element as any;\n\n return members.reduce((acc, it: AbiEntry) => {\n return acc.concat(parseCalldataValue(subElement[it.name], it.type, structs));\n }, [] as string[]);\n }\n // check if abi element is tuple\n if (isTypeTuple(type)) {\n const tupled = parseTuple(element as object, type);\n\n return tupled.reduce((acc, it: Tupled) => {\n const parsedData = parseCalldataValue(it.element, it.type, structs);\n return acc.concat(parsedData);\n }, [] as string[]);\n }\n if (typeof element === 'object') {\n throw Error(`Parameter ${element} do not align with abi parameter ${type}`);\n }\n return felt(element as BigNumberish);\n}\n\n/**\n * Parse one field of the calldata by using input field from the abi for that method\n *\n * @param argsIterator - Iterator<any> for value of the field\n * @param input - input(field) information from the abi that will be used to parse the data\n * @param structs - structs from abi\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\nexport function parseCalldataField(\n argsIterator: Iterator<any>,\n input: AbiEntry,\n structs: AbiStructs\n): string | string[] {\n const { name, type } = input;\n let { value } = argsIterator.next();\n\n switch (true) {\n // Array\n case isTypeArray(type):\n if (!Array.isArray(value) && !isText(value)) {\n throw Error(`ABI expected parameter ${name} to be array or long string, got ${value}`);\n }\n if (typeof value === 'string') {\n // long string match cairo felt*\n value = splitLongString(value);\n }\n // eslint-disable-next-line no-case-declarations\n const result: string[] = [];\n result.push(felt(value.length)); // Add length to array\n\n return (value as (BigNumberish | ParsedStruct)[]).reduce((acc, el) => {\n if (isTypeFeltArray(type)) {\n acc.push(felt(el as BigNumberish));\n } else {\n // structure or tuple\n acc.push(...parseCalldataValue(el, type.replace('*', ''), structs));\n }\n return acc;\n }, result);\n // Struct or Tuple\n case isTypeStruct(type, structs) || isTypeTuple(type):\n return parseCalldataValue(value as ParsedStruct | BigNumberish[], type, structs);\n // Felt or unhandled\n default:\n return felt(value as BigNumberish);\n }\n}\n","import { AbiEntry, AbiStructs, Args, ParsedStruct } from '../../types';\nimport { BigNumberish } from '../num';\nimport { isLen, isTypeArray, isTypeTuple } from './cairo';\nimport extractTupleMemberTypes from './tuple';\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 * @param structs - structs from abi\n * @return {BigNumberish | ParsedStruct} - parsed arguments in format that contract is expecting\n */\nfunction parseResponseStruct(\n responseIterator: Iterator<string>,\n type: string,\n structs: AbiStructs\n): BigNumberish | ParsedStruct {\n // type struct\n if (type in structs && structs[type]) {\n return structs[type].members.reduce((acc, el) => {\n acc[el.name] = parseResponseStruct(responseIterator, el.type, structs);\n return acc;\n }, {} as any);\n }\n // type tuple\n if (isTypeTuple(type)) {\n const memberTypes = extractTupleMemberTypes(type);\n return memberTypes.reduce((acc, it: any, idx) => {\n const tName = it?.name ? it.name : idx;\n const tType = it?.type ? it.type : it;\n acc[tName] = parseResponseStruct(responseIterator, tType, structs);\n return acc;\n }, {} as any);\n }\n const temp = responseIterator.next().value;\n return BigInt(temp);\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 * @param structs - structs from abi\n * @param parsedResult\n * @return - parsed response corresponding to the abi structure of the field\n */\nexport default function responseParser(\n responseIterator: Iterator<string>,\n output: AbiEntry,\n structs: AbiStructs,\n parsedResult?: Args\n): any {\n const { name, type } = output;\n let temp;\n\n switch (true) {\n case isLen(name):\n temp = responseIterator.next().value;\n return BigInt(temp);\n case isTypeArray(type):\n // eslint-disable-next-line no-case-declarations\n const parsedDataArr: (BigNumberish | ParsedStruct)[] = [];\n\n if (parsedResult && parsedResult[`${name}_len`]) {\n const arrLen = parsedResult[`${name}_len`] as number;\n while (parsedDataArr.length < arrLen) {\n parsedDataArr.push(\n parseResponseStruct(responseIterator, output.type.replace('*', ''), structs)\n );\n }\n }\n return parsedDataArr;\n case type in structs || isTypeTuple(type):\n return parseResponseStruct(responseIterator, type, structs);\n default:\n temp = responseIterator.next().value;\n return BigInt(temp);\n }\n}\n","import { AbiEntry, AbiStructs, FunctionAbi } from '../../types';\n/**\n * Validate cairo contract method arguments\n * Flow: Determine type from abi and than validate against parameter\n */\nimport assert from '../assert';\nimport { BigNumberish } from '../num';\nimport { isLongText } from '../shortString';\nimport { isLen, isTypeArray, isTypeFelt, isTypeStruct, isTypeTuple } from './cairo';\n\nconst validateFelt = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'string' || typeof parameter === 'number' || typeof parameter === 'bigint',\n `Validate: arg ${input.name} should be a felt (string, number, BigNumber)`\n );\n};\n\nconst validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => {\n assert(\n typeof parameter === 'object' && !Array.isArray(parameter),\n `Validate: arg ${input.name} is cairo type struct (${input.type}), and should be defined as js object (not array)`\n );\n\n // shallow struct validation, only first depth level\n structs[input.type].members.forEach(({ name }) => {\n assert(\n Object.keys(parameter).includes(name),\n `Validate: arg ${input.name} should have a property ${name}`\n );\n });\n};\n\nconst validateTuple = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'object' && !Array.isArray(parameter),\n `Validate: arg ${input.name} should be a tuple (defined as object)`\n );\n // todo: skip tuple structural validation for now\n};\n\nconst validateArray = (parameter: any, input: AbiEntry, structs: AbiStructs) => {\n const baseType = input.type.replace('*', '');\n\n // Long text (special case when parameter is not an array but long text)\n if (isTypeFelt(baseType) && isLongText(parameter)) return;\n\n assert(Array.isArray(parameter), `Validate: arg ${input.name} should be an Array`);\n\n switch (true) {\n case isTypeFelt(baseType):\n parameter.forEach((param: BigNumberish) => validateFelt(param, input));\n break;\n case isTypeTuple(baseType):\n parameter.forEach((it: any) => validateTuple(it, { name: input.name, type: baseType }));\n break;\n case isTypeStruct(baseType, structs):\n parameter.forEach((it: any) =>\n validateStruct(it, { name: input.name, type: baseType }, structs)\n );\n break;\n default:\n throw new Error(\n `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`\n );\n }\n};\n\nexport default function validateFields(\n abiMethod: FunctionAbi,\n args: Array<any>,\n structs: AbiStructs\n) {\n abiMethod.inputs.reduce((acc, input) => {\n const parameter = args[acc];\n\n switch (true) {\n case isLen(input.name):\n return acc;\n case isTypeFelt(input.type):\n validateFelt(parameter, input);\n break;\n case isTypeStruct(input.type, structs):\n validateStruct(parameter, input, structs);\n break;\n case isTypeTuple(input.type):\n validateTuple(parameter, input);\n break;\n case isTypeArray(input.type):\n validateArray(parameter, input, structs);\n break;\n default:\n throw new Error(\n `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`\n );\n }\n\n return acc + 1;\n }, 0);\n}\n","import { Abi, AbiEntry, AbiStructs, Args, Calldata, FunctionAbi } from '../../types';\nimport assert from '../assert';\nimport { isBigInt } from '../num';\nimport { isLongText, splitLongString } from '../shortString';\nimport { felt, isLen } from './cairo';\nimport formatter from './formatter';\nimport { parseCalldataField } from './requestParser';\nimport responseParser from './responseParser';\nimport validateFields from './validate';\n\n// Helpers\n\nexport class CallData {\n abi: Abi;\n\n protected readonly structs: AbiStructs;\n\n constructor(abi: Abi) {\n this.abi = abi;\n this.structs = CallData.getAbiStruct(abi);\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 public validate(type: 'INVOKE' | 'CALL' | 'DEPLOY', method: string, args: Array<any> = []) {\n // ensure provided method of type exists\n if (type !== 'DEPLOY') {\n const invocableFunctionNames = 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 invocableFunctionNames.includes(method),\n `${type === 'INVOKE' ? 'invocable' : 'viewable'} method not found in abi`\n );\n }\n\n // get requested method from abi\n const abiMethod = this.abi.find((abi) =>\n type === 'DEPLOY'\n ? abi.name === method && abi.type === method\n : abi.name === method && abi.type === 'function'\n ) as FunctionAbi;\n\n // validate arguments length\n const inputsLength = CallData.abiInputsLength(abiMethod.inputs);\n if (args.length !== inputsLength) {\n throw Error(\n `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`\n );\n }\n\n // validate parameters\n validateFields(abiMethod, args, this.structs);\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 public compile(args: Array<any>, inputs: AbiEntry[]): Calldata {\n const argsIterator = args[Symbol.iterator]();\n return inputs.reduce(\n (acc, input) =>\n isLen(input.name) ? acc : acc.concat(parseCalldataField(argsIterator, input, this.structs)),\n [] as Calldata\n );\n }\n\n /**\n * Compile contract callData without abi\n * @param data Object representing cairo method arguments or string array of compiled data\n * @returns string[]\n */\n static compile(data: object | string[]): Calldata {\n const createTree = (obj: object) => {\n const getEntries = (o: object, prefix = ''): any => {\n const oe = Array.isArray(o) ? [o.length.toString(), ...o] : o;\n return Object.entries(oe).flatMap(([k, v]) => {\n let value = v;\n if (isLongText(value)) value = splitLongString(value);\n const kk = Array.isArray(oe) && k === '0' ? '$$len' : k;\n if (isBigInt(value)) return [[`${prefix}${kk}`, felt(value)]];\n return Object(value) === value\n ? getEntries(value, `${prefix}${kk}.`)\n : [[`${prefix}${kk}`, felt(value)]];\n });\n };\n return Object.fromEntries(getEntries(obj));\n };\n\n let callTreeArray;\n if (!Array.isArray(data)) {\n // flatten structs, tuples, add array length. Process leafs as Felt\n const callTree = createTree(data);\n // convert to array\n callTreeArray = Object.values(callTree);\n } else {\n // data are already compiled or some missuses\n callTreeArray = data;\n }\n\n // add compiled property to array object\n Object.defineProperty(callTreeArray, 'compiled', {\n enumerable: false,\n writable: false,\n value: true,\n });\n return callTreeArray;\n }\n\n /**\n * Parse elements of the response array and structuring them into response object\n * @param method - method name\n * @param response - response from the method\n * @return - parsed response corresponding to the abi\n */\n public parse(method: string, response: string[]): object {\n const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const responseIterator = response.flat()[Symbol.iterator]();\n\n return outputs.flat().reduce((acc, output) => {\n acc[output.name] = responseParser(responseIterator, output, this.structs, acc);\n if (acc[output.name] && acc[`${output.name}_len`]) {\n delete acc[`${output.name}_len`];\n }\n return acc;\n }, {} as Args);\n }\n\n /**\n * Format cairo method response data to native js values based on provided format schema\n * @param method - cairo method name\n * @param response - cairo method response\n * @param format - formatter object schema\n * @returns parsed and formatted response object\n */\n public format(method: string, response: string[], format: object): object {\n const parsed = this.parse(method, response);\n return formatter(parsed, format);\n }\n\n // Helper to calculate inputs\n static abiInputsLength(inputs: AbiEntry[]) {\n return inputs.reduce((acc, input) => (!isLen(input.name) ? acc + 1 : acc), 0);\n }\n\n // Helper to extract structs\n static getAbiStruct(abi: Abi) {\n return abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n }\n}\n","import { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport {\n Abi,\n AsyncContractFunction,\n Call,\n ContractFunction,\n FunctionAbi,\n InvokeFunctionResponse,\n Overrides,\n Result,\n StructAbi,\n} from '../types';\nimport assert from '../utils/assert';\nimport { CallData } from '../utils/calldata';\nimport { CallOptions, ContractInterface } from './interface';\n\nconst splitArgsAndOptions = (args: any) => {\n const options = [\n 'blockIdentifier',\n 'parseRequest',\n 'parseResponse',\n 'formatResponse',\n 'maxFee',\n 'nonce',\n 'signature',\n ];\n const lastArg = args[args.length - 1];\n if (typeof lastArg === 'object' && options.some((x) => x in lastArg)) {\n return { args, options: args.pop() };\n }\n return { args, options: {} };\n};\n\n/**\n * Adds call methods to the contract\n */\nfunction buildCall(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const params = splitArgsAndOptions(args);\n return contract.call(functionAbi.name, params.args, {\n parseRequest: true,\n parseResponse: true,\n ...params.options,\n });\n };\n}\n\n/**\n * Adds invoke methods to the contract\n */\nfunction buildInvoke(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const params = splitArgsAndOptions(args);\n return contract.invoke(functionAbi.name, params.args, {\n parseRequest: true,\n ...params.options,\n });\n };\n}\n\n/**\n * Adds call/invoke methods to the contract\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 */\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 */\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 private callData: CallData;\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.callData = new CallData(abi);\n this.structs = CallData.getAbiStruct(abi);\n this.abi = abi;\n\n const options = { enumerable: true, value: {}, writable: false };\n Object.defineProperties(this, {\n functions: { enumerable: true, value: {}, writable: false },\n callStatic: { enumerable: true, value: {}, writable: false },\n populateTransaction: { enumerable: true, value: {}, writable: false },\n estimateFee: { enumerable: true, value: {}, writable: false },\n });\n this.abi.forEach((abiElement) => {\n if (abiElement.type !== 'function') return;\n const signature = abiElement.name;\n if (!this[signature]) {\n Object.defineProperty(this, signature, {\n ...options,\n value: buildDefault(this, abiElement),\n });\n }\n if (!this.functions[signature]) {\n Object.defineProperty(this.functions, signature, {\n ...options,\n value: buildDefault(this, abiElement),\n });\n }\n if (!this.callStatic[signature]) {\n Object.defineProperty(this.callStatic, signature, {\n ...options,\n value: buildCall(this, abiElement),\n });\n }\n if (!this.populateTransaction[signature]) {\n Object.defineProperty(this.populateTransaction, signature, {\n ...options,\n value: buildPopulate(this, abiElement),\n });\n }\n if (!this.estimateFee[signature]) {\n Object.defineProperty(this.estimateFee, signature, {\n ...options,\n value: buildEstimate(this, abiElement),\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 options: CallOptions = { parseRequest: true, parseResponse: true, formatResponse: undefined }\n ): Promise<Result> {\n assert(this.address !== null, 'contract is not connected to an address');\n const blockIdentifier = options?.blockIdentifier || undefined;\n let calldata = args[0];\n\n if (options.parseRequest && !args[0]?.compiled) {\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n\n this.callData.validate('CALL', method, args);\n calldata = this.callData.compile(args, inputs);\n }\n\n return this.providerOrAccount\n .callContract(\n {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n },\n blockIdentifier\n )\n .then((x) => {\n if (!options.parseResponse) {\n return x.result;\n }\n if (options.formatResponse) {\n return this.callData.format(method, x.result, options.formatResponse);\n }\n return this.callData.parse(method, x.result);\n });\n }\n\n public invoke(\n method: string,\n args: Array<any> = [],\n options: Overrides = {\n parseRequest: true,\n }\n ): Promise<InvokeFunctionResponse> {\n assert(this.address !== null, 'contract is not connected to an address');\n\n let calldata = args?.[0];\n if (options.parseRequest && !calldata?.compiled) {\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n\n this.callData.validate('INVOKE', method, args);\n calldata = this.callData.compile(args, inputs);\n }\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 assert(this.address !== null, 'contract is not connected to an address');\n\n if (!args[0]?.compiled) {\n this.callData.validate('INVOKE', method, args);\n }\n\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 const calldata = args?.[0]?.compiled ? args?.[0] : this.callData.compile(args, inputs);\n\n return {\n contractAddress: this.address,\n entrypoint: method,\n calldata,\n };\n }\n}\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} from '../types';\n\nexport type CallOptions = {\n blockIdentifier?: BlockIdentifier;\n parseRequest: Boolean;\n parseResponse: Boolean;\n formatResponse?: object | null;\n};\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(method: string, args?: Array<any>, options?: CallOptions): Promise<Object>;\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 { AccountInterface } from '../account';\nimport { Abi, CompiledContract, FunctionAbi } from '../types';\nimport assert from '../utils/assert';\nimport { CallData } from '../utils/calldata';\nimport { Contract } from './default';\n\nexport class ContractFactory {\n abi: Abi;\n\n compiledContract: CompiledContract;\n\n classHash: string;\n\n account: AccountInterface;\n\n private callData: CallData;\n\n constructor(\n compiledContract: CompiledContract,\n classHash: string,\n account: AccountInterface,\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.account = account;\n this.classHash = classHash;\n this.callData = new CallData(abi);\n }\n\n /**\n * Deploys contract and returns new instance of the Contract\n *\n * @param args - Array of the constructor arguments for deployment\n * @param options (optional) Object - parseRequest, parseResponse, addressSalt\n * @returns deployed Contract\n */\n public async deploy(...args: Array<any>): Promise<Contract> {\n let constructorCalldata;\n let parseRequest: Boolean = true;\n let addressSalt: string | undefined;\n\n // extract options\n args.forEach((arg) => {\n if (typeof arg !== 'object') return;\n if ('addressSalt' in arg) {\n addressSalt = arg.addressSalt;\n }\n if ('parseRequest' in arg) {\n parseRequest = arg.parseRequest;\n }\n });\n\n if (!parseRequest || args[0]?.compiled) {\n // eslint-disable-next-line prefer-destructuring\n constructorCalldata = args[0];\n } else {\n this.callData.validate('DEPLOY', 'constructor', args);\n const { inputs } = this.abi.find((abi) => abi.type === 'constructor') as FunctionAbi;\n constructorCalldata = this.callData.compile(args, inputs);\n }\n\n const {\n deploy: { contract_address, transaction_hash },\n } = await this.account.declareAndDeploy({\n contract: this.compiledContract,\n constructorCalldata,\n salt: 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.account\n );\n contractInstance.deployTransactionHash = transaction_hash;\n\n return contractInstance;\n }\n\n /**\n * Attaches to new Provider or Account\n *\n * @param account - new Provider or Account to attach to\n * @returns ContractFactory\n */\n connect(account: AccountInterface): ContractFactory {\n this.account = account;\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.account);\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 { 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 { CairoVersion, Call, CallStruct, ParsedStruct } from '../types';\nimport { getSelectorFromName } from './hash';\nimport { BigNumberish, bigNumberishArrayToDecimalStringArray, toBigInt } from './num';\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: toBigInt(call.contractAddress).toString(10),\n selector: toBigInt(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), toBigInt(nonce).toString()];\n};\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_cairo1 = (calls: Call[]) => {\n const callArray = calls.map<CallStruct>((call) => ({\n to: toBigInt(call.contractAddress).toString(10),\n selector: toBigInt(getSelectorFromName(call.entrypoint)).toString(10),\n calldata: bigNumberishArrayToDecimalStringArray(call.calldata || []),\n }));\n return callArray;\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_cairo1 = (calls: Call[]): string[] => {\n const callArray = transformCallsToMulticallArrays_cairo1(calls);\n return [\n callArray.length.toString(), // Call size\n ...callArray\n .map(({ to, selector, calldata }) => [to, selector, calldata.length.toString(), ...calldata])\n .flat(),\n ];\n};\n\n/**\n *\n * @param calls Call array\n * @param cairoVersion Defaults to 0\n * @returns string[] of calldata\n */\nexport const getExecuteCalldata = (calls: Call[], cairoVersion: CairoVersion = '0'): string[] => {\n if (cairoVersion === '1') {\n return fromCallsToExecuteCalldata_cairo1(calls);\n }\n return fromCallsToExecuteCalldata(calls);\n};\n","import { computeHashOnElements, getSelectorFromName } from '../hash';\nimport { MerkleTree } from '../merkle';\nimport { BigNumberish, isHex, toHex } from '../num';\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(value);\n } catch (e) {\n if (typeof value === 'string') {\n return toHex(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 { starkCurve } from './ec';\nimport { toBigInt } from './num';\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: string[] = [];\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] = [toBigInt(a), toBigInt(b)].sort((x, y) => (x >= y ? 1 : -1));\n return starkCurve.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 { 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 { Abi, Call, DeclareSignerDetails, InvocationsSignerDetails, Signature } from '../types';\nimport { DeployAccountSignerDetails } from '../types/signer';\nimport { starkCurve } from '../utils/ec';\nimport { buf2hex } from '../utils/encode';\nimport {\n calculateDeclareTransactionHash,\n calculateDeployAccountTransactionHash,\n calculateTransactionHash,\n} from '../utils/hash';\nimport { toHex } from '../utils/num';\nimport { getExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { SignerInterface } from './interface';\n\nexport class Signer implements SignerInterface {\n protected pk: Uint8Array | string;\n\n constructor(pk: Uint8Array | string = starkCurve.utils.randomPrivateKey()) {\n this.pk = pk instanceof Uint8Array ? buf2hex(pk) : toHex(pk);\n }\n\n public async getPubKey(): Promise<string> {\n return starkCurve.getStarkKey(this.pk);\n }\n\n public async signMessage(typedData: TypedData, accountAddress: string): Promise<Signature> {\n const msgHash = getMessageHash(typedData, accountAddress);\n return starkCurve.sign(msgHash, this.pk);\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 = getExecuteCalldata(transactions, transactionsDetail.cairoVersion);\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 starkCurve.sign(msgHash, this.pk);\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 starkCurve.sign(msgHash, this.pk);\n }\n\n public async signDeclareTransaction(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n {\n classHash,\n senderAddress,\n chainId,\n maxFee,\n version,\n nonce,\n compiledClassHash,\n }: DeclareSignerDetails\n ) {\n const msgHash = calculateDeclareTransactionHash(\n classHash,\n senderAddress,\n version,\n maxFee,\n chainId,\n nonce,\n compiledClassHash\n );\n\n return starkCurve.sign(msgHash, this.pk);\n }\n}\n","import { UDC } from '../constants';\nimport { InvokeTransactionReceiptResponse } from '../types/provider';\nimport { cleanHex } from './num';\n\n/**\n * Parse Transaction Receipt Event from UDC invoke transaction and\n * create DeployContractResponse compatibile response with adition of UDC Event data\n *\n * @param txReceipt\n * @returns DeployContractResponse | UDC Event Response data\n */\nexport function parseUDCEvent(txReceipt: InvokeTransactionReceiptResponse) {\n if (!txReceipt.events) {\n throw new Error('UDC emited event is empty');\n }\n const event = txReceipt.events.find(\n (it) => cleanHex(it.from_address) === cleanHex(UDC.ADDRESS)\n ) || {\n data: [],\n };\n return {\n transaction_hash: txReceipt.transaction_hash,\n contract_address: event.data[0],\n address: event.data[0],\n deployer: event.data[1],\n unique: event.data[2],\n classHash: event.data[3],\n calldata_len: event.data[4],\n calldata: event.data.slice(5, 5 + parseInt(event.data[4], 16)),\n salt: event.data[event.data.length - 1],\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 DeclareAndDeployContractPayload,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n DeployContractUDCResponse,\n Details,\n EstimateFee,\n EstimateFeeAction,\n EstimateFeeDetails,\n Invocation,\n InvocationsDetails,\n InvocationsSignerDetails,\n InvokeFunctionResponse,\n MultiDeployContractResponse,\n Nonce,\n Signature,\n TransactionBulk,\n TransactionStatus,\n TransactionType,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { EstimateFeeBulk, TransactionSimulation } from '../types/account';\nimport { extractContractHashes, isSierra } from '../utils/contract';\nimport { starkCurve } from '../utils/ec';\nimport { parseUDCEvent } from '../utils/events';\nimport {\n calculateContractAddressFromHash,\n feeTransactionVersion,\n transactionVersion,\n transactionVersion_2,\n} from '../utils/hash';\nimport { BigNumberish, toBigInt, toCairoBool } from '../utils/num';\nimport { parseContract } from '../utils/provider';\nimport {\n compileCalldata,\n estimatedFeeToMaxFee,\n formatSignature,\n randomAddress,\n} from '../utils/stark';\nimport { getExecuteCalldata } 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 pkOrSigner: Uint8Array | string | SignerInterface\n ) {\n super(providerOrOptions);\n this.address = address.toLowerCase();\n this.signer =\n typeof pkOrSigner === 'string' || pkOrSigner instanceof Uint8Array\n ? new Signer(pkOrSigner)\n : pkOrSigner;\n }\n\n public async getNonce(blockIdentifier?: BlockIdentifier): Promise<Nonce> {\n return super.getNonceForAddress(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, skipValidate, cairoVersion }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = toBigInt(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 cairoVersion: cairoVersion ?? '0',\n };\n\n const invocation = await this.buildInvocation(transactions, signerDetails);\n const response = await super.getInvokeEstimateFee(\n { ...invocation },\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeclareFee(\n { contract, classHash: providedClassHash, casm, compiledClassHash }: DeclareContractPayload,\n { blockIdentifier, nonce: providedNonce, skipValidate, cairoVersion }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = !isSierra(contract) ? toBigInt(feeTransactionVersion) : transactionVersion_2;\n const chainId = await this.getChainId();\n\n const declareContractTransaction = await this.buildDeclarePayload(\n { classHash: providedClassHash, contract, casm, compiledClassHash },\n {\n nonce,\n chainId,\n version,\n walletAddress: this.address,\n maxFee: ZERO,\n cairoVersion: cairoVersion ?? '0',\n }\n );\n\n const response = await super.getDeclareEstimateFee(\n declareContractTransaction,\n { version, nonce },\n blockIdentifier,\n skipValidate\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, skipValidate, cairoVersion }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const version = toBigInt(feeTransactionVersion);\n const nonce = ZERO; // DEPLOY_ACCOUNT transaction will have a nonce zero as it is the first transaction in the account\n const chainId = await this.getChainId();\n\n const payload = await this.buildAccountDeployPayload(\n { classHash, addressSalt, constructorCalldata, contractAddress: providedContractAddress },\n {\n nonce,\n chainId,\n version,\n walletAddress: this.address,\n maxFee: ZERO,\n cairoVersion: cairoVersion ?? '0',\n }\n );\n\n const response = await super.getDeployAccountEstimateFee(\n { ...payload },\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeployFee(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails | undefined\n ): Promise<EstimateFee> {\n const calls = this.buildUDCContractPayload(payload);\n return this.estimateInvokeFee(calls, transactionsDetail);\n }\n\n public async estimateFeeBulk(\n transactions: TransactionBulk,\n { nonce: providedNonce, blockIdentifier, cairoVersion }: EstimateFeeDetails = {}\n ): Promise<EstimateFeeBulk> {\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = toBigInt(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const params: any = await Promise.all(\n [].concat(transactions as []).map(async (transaction: any, index: number) => {\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce: toBigInt(Number(nonce) + index),\n maxFee: ZERO,\n version,\n chainId,\n cairoVersion: cairoVersion ?? '0',\n };\n\n const txPayload = transaction.payload;\n\n let res;\n if (typeof transaction === 'object' && transaction.type === 'INVOKE_FUNCTION') {\n const invocation = await this.buildInvocation(\n Array.isArray(txPayload) ? txPayload : [txPayload],\n signerDetails\n );\n res = {\n type: 'INVOKE_FUNCTION',\n ...invocation,\n version,\n nonce: toBigInt(Number(nonce) + index),\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DECLARE') {\n const declareContractPayload = await this.buildDeclarePayload(txPayload, signerDetails);\n res = {\n type: 'DECLARE',\n ...declareContractPayload,\n version,\n nonce: toBigInt(Number(nonce) + index),\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DEPLOY_ACCOUNT') {\n const payload = await this.buildAccountDeployPayload(txPayload, signerDetails);\n res = {\n type: 'DEPLOY_ACCOUNT',\n ...payload,\n version,\n nonce,\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DEPLOY') {\n const calls = this.buildUDCContractPayload(txPayload);\n const invocation = await this.buildInvocation(calls, signerDetails);\n res = {\n type: 'INVOKE_FUNCTION',\n ...invocation,\n version,\n nonce: toBigInt(Number(nonce) + index),\n blockIdentifier,\n };\n }\n return res;\n })\n );\n\n const response = await super.getEstimateFeeBulk(params, blockIdentifier);\n\n return [].concat(response as []).map((elem: any) => {\n const suggestedMaxFee = estimatedFeeToMaxFee(elem.overall_fee);\n return {\n ...elem,\n suggestedMaxFee,\n };\n });\n }\n\n public async buildInvocation(\n call: Array<Call>,\n signerDetails: InvocationsSignerDetails\n ): Promise<Invocation> {\n const calldata = getExecuteCalldata(call, signerDetails.cairoVersion);\n const signature = await this.signer.signTransaction(call, signerDetails);\n\n return {\n contractAddress: this.address,\n calldata,\n signature,\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 = toBigInt(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n { type: TransactionType.INVOKE, payload: calls },\n transactionsDetail\n ));\n const version = toBigInt(transactionVersion);\n const chainId = await this.getChainId();\n\n const cairoVersion = transactionsDetail.cairoVersion ?? '0';\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee,\n version,\n chainId,\n cairoVersion,\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails, abis);\n\n const calldata = getExecuteCalldata(transactions, cairoVersion);\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 payload: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const declareContractPayload = extractContractHashes(payload);\n const details = {} as Details;\n\n details.nonce = toBigInt(transactionsDetail.nonce ?? (await this.getNonce()));\n details.maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: TransactionType.DECLARE,\n payload: declareContractPayload,\n },\n transactionsDetail\n ));\n details.version = !isSierra(payload.contract) ? transactionVersion : transactionVersion_2;\n details.chainId = await this.getChainId();\n\n const declareContractTransaction = await this.buildDeclarePayload(declareContractPayload, {\n ...details,\n walletAddress: this.address,\n cairoVersion: transactionsDetail.cairoVersion ?? '0', // This can be removed as declare doesn't depend on cairo version. Kept here because of the type mismatch\n });\n\n return this.declareContract(declareContractTransaction, details);\n }\n\n public async deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse> {\n const params = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n const deploySalt = salt ?? randomAddress();\n\n return {\n call: {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n deploySalt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n address: calculateContractAddressFromHash(\n unique ? starkCurve.pedersen(this.address, deploySalt) : deploySalt,\n classHash,\n compiledConstructorCallData,\n unique ? UDC.ADDRESS : 0\n ),\n };\n });\n\n const calls = params.map((it) => it.call);\n const addresses = params.map((it) => it.address);\n const invokeResponse = await this.execute(calls, undefined, details);\n\n return {\n ...invokeResponse,\n contract_address: addresses,\n };\n }\n\n public async deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse> {\n const deployTx = await this.deploy(payload, details);\n const txReceipt = await this.waitForTransaction(deployTx.transaction_hash, {\n successStates: [TransactionStatus.ACCEPTED_ON_L2],\n });\n return parseUDCEvent(txReceipt);\n }\n\n public async declareAndDeploy(\n payload: DeclareAndDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse> {\n const { contract, constructorCalldata, salt, unique } = payload;\n const { transaction_hash, class_hash } = await this.declare({ contract }, details);\n const declare = await this.waitForTransaction(transaction_hash, {\n successStates: [TransactionStatus.ACCEPTED_ON_L2],\n });\n const deploy = await this.deployContract(\n { classHash: class_hash, salt, unique, constructorCalldata },\n details\n );\n return { declare: { ...declare, class_hash }, deploy };\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 version = toBigInt(transactionVersion);\n const nonce = ZERO; // DEPLOY_ACCOUNT transaction will have a nonce zero as it is the first transaction in the account\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: TransactionType.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: toBigInt(hash).toString(),\n signature: formatSignature(signature),\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 TransactionType.INVOKE:\n feeEstimate = await this.estimateInvokeFee(payload, details);\n break;\n\n case TransactionType.DECLARE:\n feeEstimate = await this.estimateDeclareFee(payload, details);\n break;\n\n case TransactionType.DEPLOY_ACCOUNT:\n feeEstimate = await this.estimateAccountDeployFee(payload, details);\n break;\n\n case TransactionType.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;\n }\n\n /**\n * @deprecated will be renamed to buildDeclareContractTransaction\n */\n public async buildDeclarePayload(\n payload: DeclareContractPayload,\n { nonce, chainId, version, walletAddress, maxFee }: InvocationsSignerDetails\n ): Promise<DeclareContractTransaction> {\n const { classHash, contract, compiledClassHash } = extractContractHashes(payload);\n const contractDefinition = parseContract(contract);\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n compiledClassHash,\n senderAddress: walletAddress,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return {\n senderAddress: walletAddress,\n signature,\n contractDefinition,\n compiledClassHash,\n };\n }\n\n public async buildAccountDeployPayload(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { nonce, chainId, version, maxFee }: InvocationsSignerDetails\n ): Promise<DeployAccountContractTransaction> {\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,\n version,\n nonce,\n addressSalt,\n constructorCalldata,\n });\n\n return {\n classHash,\n addressSalt,\n constructorCalldata,\n signature,\n };\n }\n\n public buildUDCContractPayload(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[]\n ): Call[] {\n const calls = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt = '0',\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n\n return {\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 });\n return calls;\n }\n\n public async simulateTransaction(\n calls: AllowArray<Call>,\n { nonce: providedNonce, blockIdentifier, skipValidate, cairoVersion }: EstimateFeeDetails = {}\n ): Promise<TransactionSimulation> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = toBigInt(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 cairoVersion: cairoVersion ?? '0',\n };\n\n const invocation = await this.buildInvocation(transactions, signerDetails);\n const response = await super.getSimulateTransaction(\n invocation,\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.fee_estimation.overall_fee);\n\n return {\n ...response,\n fee_estimation: {\n ...response.fee_estimation,\n suggestedMaxFee,\n },\n };\n }\n\n public override async getStarkName(\n address: BigNumberish = this.address, // default to the wallet address\n StarknetIdContract?: string\n ): Promise<string> {\n return super.getStarkName(address, StarknetIdContract);\n }\n}\n","import { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport { SignerInterface } from '../signer';\nimport {\n Abi,\n AllowArray,\n Call,\n DeclareAndDeployContractPayload,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployContractResponse,\n DeployContractUDCResponse,\n EstimateFeeAction,\n EstimateFeeDetails,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n InvocationsDetails,\n InvokeFunctionResponse,\n MultiDeployContractResponse,\n Nonce,\n Signature,\n TransactionBulk,\n TransactionSimulation,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { BigNumberish } from '../utils/num';\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 * 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 -\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 * @param estimateFeeDetails -\n * - optional blockIdentifier\n * - constant nonce = 0\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 * \n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract estimateDeployFee(\n deployContractPayload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a list of transactions on starknet\n * Contract must be deployed for fee estimation to be possible\n *\n * @param transactions array of transaction object containing :\n * - type - the type of transaction : 'DECLARE' | 'DEPLOY' | 'INVOKE_FUNCTION' | 'DEPLOY_ACCOUNT'\n * - payload - the payload of the transaction\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFeeBulk(\n transactions: TransactionBulk,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponseBulk>;\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 - (optional) classHash: computed class hash of compiled contract. Pre-compute it for faster execution.\n - (required for Cairo1 without compiledClassHash) casm: CompiledContract | string;\n - (optional for Cairo1 with casm) compiledClassHash: compiled class hash from casm. Pre-compute it for faster execution.\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 declared contract to starknet - using Universal Deployer Contract (UDC)\n * support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address[]\n * - transaction_hash\n */\n public abstract deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse>;\n\n /**\n * Simplify deploy simulating old DeployContract with same response + UDC specific response\n * Internal wait for L2 transaction, support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse>;\n\n /**\n * Declares and Deploy a given compiled contract (json) to starknet using UDC\n * Internal wait for L2 transaction, do not support multicall\n *\n * @param containing\n * - contract: compiled contract code\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - declare\n * - transaction_hash\n * - deploy\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract declareAndDeploy(\n payload: DeclareAndDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse>;\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 - constant nonce = 0\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<Nonce>;\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<bigint>;\n\n /**\n * Simulates the transaction and returns the transaction trace and estimated fee.\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 simulateTransaction(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<TransactionSimulation>;\n}\n","/* eslint-disable no-bitwise */\nimport { hexToBytes } from '@noble/curves/abstract/utils';\n\nimport { MASK_251, ZERO } from '../constants';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { keccakBn } from './hash';\nimport { BigNumberish, assertInRange, toHex } from './num';\n\nexport function addAddressPadding(address: BigNumberish): string {\n return addHexPrefix(removeHexPrefix(toHex(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 hex = removeHexPrefix(keccakBn(address));\n const hashed = hexToBytes(hex.padStart(64, '0'));\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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,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA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","names":["EntryPointType","TransactionStatus","TransactionType","RPC","TransactionType","isomorphicFetch","BaseUrl","NetworkName","StarknetChainId","TransactionHashPrefix","number","hexToBytesNoble","parse","stringify","json","stringify","parse","parse","import_micro_starknet","stringify","stringify","parse","stringify","import_url_join","urljoin","defaultOptions","urljoin","stringify","parse","import_utils"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types/lib/contract/index.ts","../src/types/lib/index.ts","../src/types/api/rpc.ts","../src/utils/fetchPonyfill.ts","../src/utils/hash.ts","../src/constants.ts","../src/utils/encode.ts","../src/utils/num.ts","../src/utils/assert.ts","../src/utils/shortString.ts","../src/utils/uint256.ts","../src/utils/calldata/cairo.ts","../src/utils/ec.ts","../src/utils/json.ts","../src/utils/contract.ts","../src/utils/stark.ts","../src/utils/provider.ts","../src/utils/responseParser/rpc.ts","../src/provider/errors.ts","../src/utils/starknetId.ts","../src/provider/starknetId.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/default.ts","../src/provider/interface.ts","../src/provider/index.ts","../src/utils/calldata/formatter.ts","../src/utils/calldata/tuple.ts","../src/utils/calldata/requestParser.ts","../src/utils/calldata/responseParser.ts","../src/utils/calldata/validate.ts","../src/utils/calldata/index.ts","../src/contract/default.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/typedData/utils.ts","../src/signer/default.ts","../src/utils/events.ts","../src/account/default.ts","../src/account/interface.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 num from './utils/num';\nexport * as transaction from './utils/transaction';\nexport * as stark from './utils/stark';\nexport * as merkle from './utils/merkle';\nexport * as uint256 from './utils/uint256';\nexport * as shortString from './utils/shortString';\nexport * as typedData from './utils/typedData';\nexport * as ec from './utils/ec';\nexport * from './utils/address';\nexport * from './utils/url';\nexport * from './utils/calldata';\n\n/**\n * Deprecated\n */\n/* eslint-disable import/first */\nimport * as num from './utils/num';\n\n/** @deprecated prefer the 'num' naming */\nexport const number = num;\n","import { LegacyCompiledContract, LegacyContractClass } from './legacy';\nimport { CompiledSierra, SierraContractClass } from './sierra';\n\n// Final types\nexport type ContractClass = LegacyContractClass | SierraContractClass;\nexport type CompiledContract = LegacyCompiledContract | CompiledSierra;\nexport type CairoContract = ContractClass | CompiledContract;\n\n// Basic elements\nexport enum EntryPointType {\n EXTERNAL = 'EXTERNAL',\n L1_HANDLER = 'L1_HANDLER',\n CONSTRUCTOR = 'CONSTRUCTOR',\n}\n\nexport * from './abi';\nexport * from './legacy';\nexport * from './sierra';\n","import { StarknetChainId } from '../../constants';\nimport { weierstrass } from '../../utils/ec';\nimport type { BigNumberish } from '../../utils/num';\nimport { CompiledContract, CompiledSierraCasm, ContractClass } from './contract';\n\nexport type WeierstrassSignatureType = weierstrass.SignatureType;\nexport type ArraySignatureType = string[];\nexport type Signature = ArraySignatureType | WeierstrassSignatureType;\n\nexport type RawCalldata = BigNumberish[];\nexport type AllowArray<T> = T | T[];\nexport type RawArgs =\n | {\n [inputName: string]:\n | BigNumberish\n | BigNumberish[]\n | { type: 'struct'; [k: string]: BigNumberish };\n }\n | BigNumberish[];\n\nexport type UniversalDeployerContractPayload = {\n classHash: BigNumberish;\n salt?: string;\n unique?: boolean;\n constructorCalldata?: RawArgs;\n};\n\nexport type DeployContractPayload = {\n contract: CompiledContract | string;\n constructorCalldata?: RawCalldata;\n addressSalt?: string;\n};\n\nexport type DeployAccountContractPayload = {\n classHash: string;\n constructorCalldata?: RawCalldata;\n addressSalt?: BigNumberish;\n contractAddress?: string;\n};\n\nexport type DeployAccountContractTransaction = Omit<\n DeployAccountContractPayload,\n 'contractAddress'\n> & {\n signature?: Signature;\n};\n\nexport type DeclareContractPayload = {\n contract: CompiledContract | string;\n classHash?: string;\n casm?: CompiledSierraCasm;\n compiledClassHash?: string;\n};\n\nexport type CompleteDeclareContractPayload = {\n contract: CompiledContract | string;\n classHash: string;\n casm?: CompiledSierraCasm;\n compiledClassHash?: string;\n};\n\nexport type DeclareAndDeployContractPayload = Omit<UniversalDeployerContractPayload, 'classHash'> &\n DeclareContractPayload;\n\nexport type DeclareContractTransaction = {\n contractDefinition: ContractClass;\n senderAddress: string;\n signature?: Signature;\n compiledClassHash?: string;\n};\n\nexport type CallDetails = {\n contractAddress: string;\n calldata?: RawCalldata;\n};\n\nexport type Invocation = CallDetails & { signature?: Signature };\n\nexport type Call = CallDetails & { entrypoint: string };\n\nexport type CairoVersion = '0' | '1';\n\nexport type InvocationsDetails = {\n nonce?: BigNumberish;\n maxFee?: BigNumberish;\n version?: BigNumberish;\n cairoVersion?: CairoVersion;\n};\n\n/**\n * Contain all additional details params\n */\nexport type Details = {\n nonce: BigNumberish;\n maxFee: BigNumberish;\n version: BigNumberish;\n chainId: StarknetChainId;\n};\n\nexport type InvocationsDetailsWithNonce = InvocationsDetails & {\n nonce: BigNumberish;\n};\n\nexport enum TransactionStatus {\n NOT_RECEIVED = 'NOT_RECEIVED',\n RECEIVED = 'RECEIVED',\n PENDING = 'PENDING',\n ACCEPTED_ON_L2 = 'ACCEPTED_ON_L2',\n ACCEPTED_ON_L1 = 'ACCEPTED_ON_L1',\n REJECTED = 'REJECTED',\n}\nexport type TransactionBulk = Array<\n | ({ type: 'DECLARE' } & { payload: DeclareContractPayload })\n | ({ type: 'DEPLOY' } & {\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[];\n })\n | ({ type: 'DEPLOY_ACCOUNT' } & { payload: DeployAccountContractPayload })\n | ({ type: 'INVOKE_FUNCTION' } & { payload: AllowArray<Call> })\n>;\n\nexport type InvocationBulk = Array<\n (\n | ({ type: 'DECLARE' } & DeclareContractTransaction)\n | ({ type: 'DEPLOY_ACCOUNT' } & DeployAccountContractTransaction)\n | ({ type: 'INVOKE_FUNCTION' } & Invocation)\n ) &\n InvocationsDetailsWithNonce & { blockIdentifier: BlockNumber | BigNumberish }\n>;\n\nexport type Status =\n | 'NOT_RECEIVED'\n | 'RECEIVED'\n | 'PENDING'\n | 'ACCEPTED_ON_L2'\n | 'ACCEPTED_ON_L1'\n | 'REJECTED';\n\nexport enum TransactionType {\n INVOKE = 'INVOKE_FUNCTION',\n DECLARE = 'DECLARE',\n DEPLOY = 'DEPLOY',\n DEPLOY_ACCOUNT = 'DEPLOY_ACCOUNT',\n}\n\nexport type Tupled = { element: any; type: string };\nexport type BlockTag = 'pending' | 'latest';\nexport type BlockNumber = BlockTag | null | number;\n\nexport type Struct = {\n type: 'struct';\n [k: string]: BigNumberish;\n};\nexport type Args = {\n [inputName: string]: BigNumberish | BigNumberish[] | ParsedStruct | ParsedStruct[];\n};\nexport type ParsedStruct = {\n [key: string]: BigNumberish | ParsedStruct;\n};\n\nexport type waitForTransactionOptions = {\n retryInterval?: number;\n successStates?: Array<TransactionStatus>;\n};\n\nexport interface CallStruct {\n to: string;\n selector: string;\n calldata: string[];\n}\n\nexport * from './contract';\n","import { ADDRESS, CONTRACT_STORAGE_DIFF_ITEM, FELT, OPENRPC } from './openrpc';\n\nexport namespace RPC {\n export type Response = {\n id: number;\n jsonrpc: string;\n result?: any;\n error?: {\n code: string;\n message: string;\n };\n };\n\n export type ChainId = OPENRPC.CHAIN_ID;\n export type CallResponse = OPENRPC.CallResponse;\n export type ContractAddress = ADDRESS;\n export type Felt = FELT;\n export type Nonce = OPENRPC.Nonce;\n export type ContractClass = OPENRPC.ContractClass;\n export type StateUpdate = OPENRPC.StateUpdate;\n export type Transaction = OPENRPC.Transaction;\n export type PendingTransactions = OPENRPC.PendingTransactions;\n export type TransactionHash = OPENRPC.TransactionHash;\n export type Trace = OPENRPC.Trace;\n export type Traces = OPENRPC.Traces;\n export type BlockHash = OPENRPC.BlockHash;\n export type BlockHashAndNumber = OPENRPC.BlockHashAndNumber;\n export type GetClassResponse = OPENRPC.ContractClass;\n export type EstimateFeeResponse = OPENRPC.EstimatedFee;\n export type GetBlockWithTxHashesResponse = OPENRPC.BlockWithTxHashes;\n export type GetBlockWithTxs = OPENRPC.BlockWithTxs;\n export type GetStorageAtResponse = OPENRPC.Storage;\n export type TransactionReceipt = OPENRPC.TransactionReceipt;\n export type GetTransactionByHashResponse = OPENRPC.Transaction;\n export type GetTransactionByBlockIdAndIndex = OPENRPC.Transaction;\n export type GetTransactionCountResponse = number;\n export type GetBlockNumberResponse = OPENRPC.BlockNumber;\n export type GetSyncingStatsResponse = OPENRPC.SyncingStatus;\n export type EventFilter = OPENRPC.EventFilter;\n export type GetEventsResponse = OPENRPC.Events;\n export type InvokedTransaction = OPENRPC.InvokedTransaction;\n export type DeclaredTransaction = OPENRPC.DeclaredTransaction;\n export type DeployedTransaction = OPENRPC.DeployedTransaction;\n export type Methods = OPENRPC.Methods;\n export type Storage = OPENRPC.Storage;\n\n export enum TransactionType {\n DECLARE = 'DECLARE',\n DEPLOY = 'DEPLOY',\n DEPLOY_ACCOUNT = 'DEPLOY_ACCOUNT',\n INVOKE = 'INVOKE',\n L1_HANDLER = 'L1_HANDLER',\n }\n\n // Exported Diff on Sequencer (can be removed when diff resolved by new RPC v)\n export type StorageDiffs = Array<CONTRACT_STORAGE_DIFF_ITEM>;\n export type DeclaredContractHashes = Array<FELT>;\n export type Nonces = Array<{\n contract_address: ADDRESS;\n nonce: FELT;\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 no-param-reassign */\n/* eslint-disable import/extensions */\nimport { keccak, poseidonHashMany } from 'micro-starknet';\n\nimport { API_VERSION, MASK_250, StarknetChainId, TransactionHashPrefix } from '../constants';\nimport {\n Builtins,\n CompiledContract,\n CompiledSierra,\n CompiledSierraCasm,\n ContractEntryPointFields,\n LegacyCompiledContract,\n RawCalldata,\n SierraContractEntryPointFields,\n} from '../types/lib';\nimport { felt } from './calldata/cairo';\nimport { starkCurve } from './ec';\nimport { addHexPrefix, removeHexPrefix, utf8ToArray } from './encode';\nimport { parse, stringify } from './json';\nimport {\n BigNumberish,\n hexToBytes,\n isHex,\n isStringWholeNumber,\n toBigInt,\n toHex,\n toHexString,\n} from './num';\nimport { encodeShortString } from './shortString';\n\nexport * as poseidon from '@noble/curves/abstract/poseidon';\n\nexport const transactionVersion = 1n;\nexport const transactionVersion_2 = 2n;\nexport const feeTransactionVersion = 2n ** 128n + transactionVersion;\n\nexport function keccakBn(value: BigNumberish): string {\n const hexWithoutPrefix = removeHexPrefix(toHex(BigInt(value)));\n const evenHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;\n return addHexPrefix(keccak(hexToBytes(addHexPrefix(evenHex))).toString(16));\n}\n\nfunction keccakHex(value: string): string {\n return addHexPrefix(keccak(utf8ToArray(value)).toString(16));\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): bigint {\n const hash = BigInt(keccakHex(value));\n // eslint-disable-next-line no-bitwise\n return hash & 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\nexport function computeHashOnElements(data: BigNumberish[]): string {\n return [...data, data.length]\n .reduce((x: BigNumberish, y: BigNumberish) => starkCurve.pedersen(toBigInt(x), toBigInt(y)), 0)\n .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 0,\n chainId\n );\n}\n\nexport function calculateDeclareTransactionHash(\n classHash: string,\n senderAddress: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish,\n compiledClassHash?: string\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DECLARE,\n version,\n senderAddress,\n 0,\n [classHash],\n maxFee,\n chainId,\n [nonce, ...(compiledClassHash ? [compiledClassHash] : [])]\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 = felt('0x535441524b4e45545f434f4e54524143545f41444452455353'); // Equivalent to 'STARKNET_CONTRACT_ADDRESS'\n\n return computeHashOnElements([\n CONTRACT_ADDRESS_PREFIX,\n deployerAddress,\n salt,\n classHash,\n constructorCalldataHash,\n ]);\n}\n\nfunction nullSkipReplacer(key: string, value: any) {\n if (key === 'attributes' || key === 'accessible_scopes') {\n return Array.isArray(value) && value.length === 0 ? undefined : value;\n }\n\n if (key === 'debug_info') {\n return null;\n }\n\n return value === null ? undefined : value;\n}\n\nexport function formatSpaces(json: string) {\n let insideQuotes = false;\n let newString = '';\n // eslint-disable-next-line no-restricted-syntax\n for (const char of json) {\n if (char === '\"' && newString.endsWith('\\\\') === false) {\n insideQuotes = !insideQuotes;\n }\n if (insideQuotes) {\n newString += char;\n } else {\n // eslint-disable-next-line no-nested-ternary\n newString += char === ':' ? ': ' : char === ',' ? ', ' : char;\n }\n }\n return newString;\n}\n\nexport default function computeHintedClassHash(compiledContract: LegacyCompiledContract) {\n const { abi, program } = compiledContract;\n const contractClass = { abi, program };\n const serializedJson = formatSpaces(stringify(contractClass, nullSkipReplacer));\n\n return addHexPrefix(starkCurve.keccak(utf8ToArray(serializedJson)).toString(16));\n}\n\n// Computes the class hash of a given contract class\nexport function computeLegacyContractClassHash(contract: LegacyCompiledContract | string) {\n const compiledContract =\n typeof contract === 'string' ? (parse(contract) as LegacyCompiledContract) : contract;\n\n const apiVersion = toHex(API_VERSION);\n\n const externalEntryPointsHash = computeHashOnElements(\n compiledContract.entry_points_by_type.EXTERNAL.flatMap((e) => [e.selector, e.offset])\n );\n\n const l1HandlerEntryPointsHash = computeHashOnElements(\n compiledContract.entry_points_by_type.L1_HANDLER.flatMap((e) => [e.selector, e.offset])\n );\n\n const constructorEntryPointHash = computeHashOnElements(\n compiledContract.entry_points_by_type.CONSTRUCTOR.flatMap((e) => [e.selector, e.offset])\n );\n\n const builtinsHash = computeHashOnElements(\n compiledContract.program.builtins.map((s) => encodeShortString(s))\n );\n\n const hintedClassHash = computeHintedClassHash(compiledContract);\n\n const dataHash = computeHashOnElements(compiledContract.program.data);\n\n return computeHashOnElements([\n apiVersion,\n externalEntryPointsHash,\n l1HandlerEntryPointsHash,\n constructorEntryPointHash,\n builtinsHash,\n hintedClassHash,\n dataHash,\n ]);\n}\n\n// Cairo1 below\nfunction hashBuiltins(builtins: Builtins) {\n return poseidonHashMany(\n builtins.flatMap((it: any) => {\n return BigInt(encodeShortString(it));\n })\n );\n}\n\nfunction hashEntryPoint(data: ContractEntryPointFields[]) {\n const base = data.flatMap((it: any) => {\n return [BigInt(it.selector), BigInt(it.offset), hashBuiltins(it.builtins)];\n });\n return poseidonHashMany(base);\n}\n\nexport function computeCompiledClassHash(casm: CompiledSierraCasm) {\n const COMPILED_CLASS_VERSION = 'COMPILED_CLASS_V1';\n\n // Hash compiled class version\n const compiledClassVersion = BigInt(encodeShortString(COMPILED_CLASS_VERSION));\n\n // Hash external entry points.\n const externalEntryPointsHash = hashEntryPoint(casm.entry_points_by_type.EXTERNAL);\n\n // Hash L1 handler entry points.\n const l1Handlers = hashEntryPoint(casm.entry_points_by_type.L1_HANDLER);\n\n // Hash constructor entry points.\n const constructor = hashEntryPoint(casm.entry_points_by_type.CONSTRUCTOR);\n\n // Hash bytecode.\n const bytecode = poseidonHashMany(casm.bytecode.map((it: string) => BigInt(it)));\n\n return toHex(\n poseidonHashMany([\n compiledClassVersion,\n externalEntryPointsHash,\n l1Handlers,\n constructor,\n bytecode,\n ])\n );\n}\n\nfunction hashEntryPointSierra(data: SierraContractEntryPointFields[]) {\n const base = data.flatMap((it: any) => {\n return [BigInt(it.selector), BigInt(it.function_idx)];\n });\n return poseidonHashMany(base);\n}\n\nfunction hashAbi(sierra: CompiledSierra) {\n const indentString = formatSpaces(stringify(sierra.abi, null));\n return BigInt(addHexPrefix(starkCurve.keccak(utf8ToArray(indentString)).toString(16)));\n}\n\nexport function computeSierraContractClassHash(sierra: CompiledSierra) {\n const CONTRACT_CLASS_VERSION = 'CONTRACT_CLASS_V0.1.0';\n\n // Hash class version\n const compiledClassVersion = BigInt(encodeShortString(CONTRACT_CLASS_VERSION));\n\n // Hash external entry points.\n const externalEntryPointsHash = hashEntryPointSierra(sierra.entry_points_by_type.EXTERNAL);\n\n // Hash L1 handler entry points.\n const l1Handlers = hashEntryPointSierra(sierra.entry_points_by_type.L1_HANDLER);\n\n // Hash constructor entry points.\n const constructor = hashEntryPointSierra(sierra.entry_points_by_type.CONSTRUCTOR);\n\n // Hash abi_hash.\n const abiHash = hashAbi(sierra);\n\n // Hash Sierra program.\n const sierraProgram = poseidonHashMany(sierra.sierra_program.map((it: string) => BigInt(it)));\n\n return toHex(\n poseidonHashMany([\n compiledClassVersion,\n externalEntryPointsHash,\n l1Handlers,\n constructor,\n abiHash,\n sierraProgram,\n ])\n );\n}\n\n/**\n * Compute ClassHash (sierra or legacy) based on provided contract\n * @param contract CompiledContract | CompiledSierra | string\n * @returns HexString ClassHash\n */\nexport function computeContractClassHash(contract: CompiledContract | string) {\n const compiledContract = typeof contract === 'string' ? parse(contract) : contract;\n\n if ('sierra_program' in compiledContract) {\n return computeSierraContractClassHash(compiledContract as CompiledSierra);\n }\n\n return computeLegacyContractClassHash(compiledContract as LegacyCompiledContract);\n}\n","export { IS_BROWSER } from './utils/encode';\n\nexport const ZERO = 0n;\nexport const MASK_250 = 2n ** 250n - 1n; // 2 ** 250 - 1\nexport const MASK_251 = 2n ** 251n;\nexport const API_VERSION = ZERO;\n\nexport enum BaseUrl {\n SN_MAIN = 'https://alpha-mainnet.starknet.io',\n SN_GOERLI = 'https://alpha4.starknet.io',\n SN_GOERLI2 = 'https://alpha4-2.starknet.io',\n}\n\nexport enum NetworkName {\n SN_MAIN = 'SN_MAIN',\n SN_GOERLI = 'SN_GOERLI',\n SN_GOERLI2 = 'SN_GOERLI2',\n}\n\nexport enum StarknetChainId {\n SN_MAIN = '0x534e5f4d41494e', // encodeShortString('SN_MAIN'),\n SN_GOERLI = '0x534e5f474f45524c49', // encodeShortString('SN_GOERLI'),\n SN_GOERLI2 = '0x534e5f474f45524c4932', // encodeShortString('SN_GOERLI2'),\n}\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","/* 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/i, '');\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 { hexToBytes as hexToBytesNoble } from '@noble/curves/abstract/utils';\n\nimport assert from './assert';\nimport { addHexPrefix, removeHexPrefix } from './encode';\n\nexport type BigNumberish = string | number | bigint;\n\nexport function isHex(hex: string): boolean {\n return /^0x[0-9a-f]*$/i.test(hex);\n}\n\nexport function toBigInt(value: BigNumberish): bigint {\n return BigInt(value);\n}\n\nexport function isBigInt(value: any): value is bigint {\n return typeof value === 'bigint';\n}\n\nexport function toHex(number: BigNumberish): string {\n return addHexPrefix(toBigInt(number).toString(16));\n}\n\nexport function hexToDecimalString(hex: string): string {\n return BigInt(addHexPrefix(hex)).toString(10);\n}\n\n/**\n * Remove hex string leading zero and lower case '0x01A'.. -> '0x1a..'\n * @param hex string\n */\nexport const cleanHex = (hex: string) => hex.toLowerCase().replace(/^(0x)0+/, '$1');\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 inputBigInt = BigInt(input);\n const lowerBoundBigInt = BigInt(lowerBound);\n const upperBoundBigInt = BigInt(upperBound);\n\n assert(\n inputBigInt >= lowerBoundBigInt && inputBigInt <= upperBoundBigInt,\n `Message not signable, ${messageSuffix}.`\n );\n}\n\nexport function bigNumberishArrayToDecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toBigInt(x).toString(10));\n}\n\nexport function bigNumberishArrayToHexadecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toHex(x));\n}\n\nexport const isStringWholeNumber = (value: string) => /^\\d+$/.test(value);\nexport const toHexString = (value: string) => toHex(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\n/**\n * Convert a hex string to an array of Bytes (Uint8Array)\n * @param value hex string\n * @returns an array of Bytes\n */\nexport function hexToBytes(value: string): Uint8Array {\n if (!isHex(value)) throw new Error(`${value} need to be a hex-string`);\n\n let adaptedValue: string = removeHexPrefix(value);\n if (adaptedValue.length % 2 !== 0) {\n adaptedValue = `0${adaptedValue}`;\n }\n return hexToBytesNoble(adaptedValue);\n}\n","export default function assert(condition: any, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message || 'Assertion failure');\n }\n}\n","import { addHexPrefix, removeHexPrefix } from './encode';\nimport { isHex, isStringWholeNumber } from './num';\n\nconst TEXT_TO_FELT_MAX_LEN = 31;\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 <= TEXT_TO_FELT_MAX_LEN;\n}\n\n// function to check if string is a decimal\nexport function isDecimalString(decim: string): boolean {\n return /^[0-9]*$/i.test(decim);\n}\n\n/**\n * check if value is string text, and not string-hex, string-number\n * @param val any\n * @returns boolean\n */\nexport function isText(val: any) {\n return typeof val === 'string' && !isHex(val) && !isStringWholeNumber(val);\n}\n\nexport const isShortText = (val: any) => isText(val) && isShortString(val);\nexport const isLongText = (val: any) => isText(val) && !isShortString(val);\n\nexport function splitLongString(longStr: string): string[] {\n const regex = RegExp(`[^]{1,${TEXT_TO_FELT_MAX_LEN}}`, 'g');\n return longStr.match(regex) || [];\n}\n\n/**\n * Convert an ASCII string to an hexadecimal string.\n * @param str - ASCII string -\n * 31 characters maxi. Ex : \"uri/item23.jpg\"\n * @returns a string representing an Hex number 248 bits max.\n * @Example\n * ```typescript\n * const myEncodedString: string = encodeShortString(\"uri/pict/t38.jpg\");\n * ```\n * returns : string : \"0x7572692f706963742f7433382e6a7067\"\n */\nexport function encodeShortString(str: string): 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\n/**\n * Convert an hexadecimal or decimal string to an ASCII string.\n * @param str - string - representing a 248 bits max number.\n *\n * Ex : hex : \"0x1A4F64EA56\" or decimal : \"236942575435676423\"\n * @returns a string with 31 characters max.\n * @Example\n * ```typescript\n * const myDecodedString: string = decodeShortString(\"0x7572692f706963742f7433382e6a7067\");\n * ```\n * return : string : \"uri/pict/t38.jpg\"\n */\nexport function decodeShortString(str: string): string {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (isHex(str)) {\n return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));\n }\n if (isDecimalString(str)) {\n return decodeShortString('0X'.concat(BigInt(str).toString(16)));\n }\n throw new Error(`${str} is not Hex or decimal`);\n}\n","/* eslint-disable no-bitwise */\nimport { addHexPrefix } from './encode';\nimport { BigNumberish, toBigInt } from './num';\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 (toBigInt(uint256.high) << 128n) + toBigInt(uint256.low);\n}\n\nexport const UINT_128_MAX = (1n << 128n) - 1n;\nexport const UINT_256_MAX = (1n << 256n) - 1n;\n// function to check if BN is smaller or equal 2**256-1\nexport function isUint256(bn: BigNumberish): boolean {\n return toBigInt(bn) <= UINT_256_MAX;\n}\n\n// function to convert BN to Uint256 hex\nexport function bnToUint256(bignumber: BigNumberish): Uint256 {\n const bn = toBigInt(bignumber);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n low: addHexPrefix((bn & UINT_128_MAX).toString(16)),\n high: addHexPrefix((bn >> 128n).toString(16)),\n };\n}\n","import { AbiStructs } from '../../types';\nimport { BigNumberish, isBigInt, isHex, isStringWholeNumber } from '../num';\nimport { encodeShortString, isShortString, isText } from '../shortString';\nimport { UINT_128_MAX, Uint256, isUint256 } from '../uint256';\n\nexport const isLen = (name: string) => /_len$/.test(name);\nexport const isTypeFelt = (type: string) => type === 'felt';\nexport const isTypeFeltArray = (type: string) => type === 'felt*';\nexport const isTypeArray = (type: string) => /\\*/.test(type);\nexport const isTypeTuple = (type: string) => /^\\(.*\\)$/i.test(type);\nexport const isTypeNamedTuple = (type: string) => /\\(.*\\)/i.test(type) && type.includes(':');\nexport const isTypeStruct = (type: string, structs: AbiStructs) => type in structs;\n\n/**\n * named tuple are described as js object {}\n * struct types are described as js object {}\n * array types are described as js array []\n */\n\n/**\n * Uint256 cairo type (helper for common struct type)\n */\nexport const uint256 = (it: BigNumberish): Uint256 => {\n const bn = BigInt(it);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n // eslint-disable-next-line no-bitwise\n low: (bn & UINT_128_MAX).toString(10),\n // eslint-disable-next-line no-bitwise\n high: (bn >> 128n).toString(10),\n };\n};\n\n/**\n * unnamed tuple cairo type (helper same as common struct type)\n */\nexport const tuple = (...args: (BigNumberish | object)[]) => ({ ...args });\n\n/**\n * felt cairo type\n */\nexport function felt(it: BigNumberish): string {\n // BN or number\n if (isBigInt(it) || (typeof it === 'number' && Number.isInteger(it))) {\n return it.toString();\n }\n // string text\n if (isText(it)) {\n if (!isShortString(it as string))\n throw new Error(\n `${it} is a long string > 31 chars, felt can store short strings, split it to array of short strings`\n );\n const encoded = encodeShortString(it as string);\n return BigInt(encoded).toString();\n }\n // hex string\n if (typeof it === 'string' && isHex(it)) {\n // toBN().toString\n return BigInt(it).toString();\n }\n // string number (already converted), or unhandled type\n if (typeof it === 'string' && isStringWholeNumber(it)) {\n return it;\n }\n\n throw new Error(`${it} can't be computed by felt()`);\n}\n","// TODO rename\nexport * as starkCurve from 'micro-starknet';\nexport * as weierstrass from '@noble/curves/abstract/weierstrass';\n","// the ts-ignore suppresses an esm to cjs import error that is resolved with bundling\n// @ts-ignore\nimport * as json from 'lossless-json';\n\nconst parseIntAsNumberOrBigInt = (x: string) => {\n if (!json.isInteger(x)) return parseFloat(x);\n const v = parseInt(x, 10);\n return Number.isSafeInteger(v) ? v : BigInt(x);\n};\n// NOTE: the String() wrapping is used so the behaviour conforms to JSON.parse()\n// which can accept simple data types but is not represented in the default typing\nexport const parse = (x: string): any => json.parse(String(x), null, parseIntAsNumberOrBigInt);\nexport const parseAlwaysAsBig = (x: string): any =>\n json.parse(String(x), null, json.parseNumberAndBigInt);\n\n// NOTE: the not-null assertion is used so the return type conforms to JSON.stringify()\n// which can also return undefined but is not represented in the default typing\nexport const stringify = (...p: Parameters<typeof json.stringify>): string => json.stringify(...p)!;\n/** @deprecated */\nexport const stringifyAlwaysAsBig = stringify;\n","import { CairoContract } from '../types/lib/contract/index';\nimport { CompleteDeclareContractPayload, DeclareContractPayload } from '../types/lib/index';\nimport { computeCompiledClassHash, computeContractClassHash } from './hash';\nimport { parse } from './json';\n\nexport function isSierra(contract: CairoContract | string) {\n const compiledContract = typeof contract === 'string' ? parse(contract) : contract;\n return 'sierra_program' in compiledContract;\n}\n\nexport function extractContractHashes(\n payload: DeclareContractPayload\n): CompleteDeclareContractPayload {\n const response = { ...payload } as CompleteDeclareContractPayload;\n\n if (isSierra(payload.contract)) {\n if (!payload.compiledClassHash && payload.casm) {\n response.compiledClassHash = computeCompiledClassHash(payload.casm);\n }\n if (!response.compiledClassHash)\n throw new Error(\n 'Extract compiledClassHash failed, provide (CairoAssembly).casm file or compiledClassHash'\n );\n }\n\n response.classHash = payload.classHash ?? computeContractClassHash(payload.contract);\n if (!response.classHash)\n throw new Error('Extract classHash failed, provide (CompiledContract).json file or classHash');\n\n return response;\n}\n","import { getStarkKey, utils } from 'micro-starknet';\nimport { gzip } from 'pako';\n\nimport {\n ArraySignatureType,\n Calldata,\n CompressedProgram,\n Program,\n RawArgs,\n Signature,\n} from '../types';\nimport { addHexPrefix, btoaUniversal } from './encode';\nimport { stringify } from './json';\nimport {\n BigNumberish,\n bigNumberishArrayToDecimalStringArray,\n bigNumberishArrayToHexadecimalStringArray,\n toBigInt,\n toHex,\n} from './num';\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 = utils.randomPrivateKey();\n return getStarkKey(randomKeyPair);\n}\n\nexport function makeAddress(input: string): string {\n return addHexPrefix(input).toLowerCase();\n}\n\nexport function formatSignature(sig?: Signature): ArraySignatureType {\n if (!sig) throw Error('formatSignature: provided signature is undefined');\n if (Array.isArray(sig)) {\n return sig.map((it) => toHex(it));\n }\n try {\n const { r, s } = sig;\n return [toHex(r), toHex(s)];\n } catch (e) {\n throw new Error('Signature need to be weierstrass.SignatureType or an array for custom');\n }\n}\n\nexport function signatureToDecimalArray(sig?: Signature): ArraySignatureType {\n return bigNumberishArrayToDecimalStringArray(formatSignature(sig));\n}\n\nexport function signatureToHexArray(sig?: Signature): ArraySignatureType {\n return bigNumberishArrayToHexadecimalStringArray(formatSignature(sig));\n}\n\n/**\n * @deprecated this function is deprecated use callData instead from calldata.ts\n */\nexport function compileCalldata(args: RawArgs): Calldata {\n const compiledData = Object.values(args).flatMap((value) => {\n if (Array.isArray(value))\n return [toBigInt(value.length).toString(), ...value.map((x) => toBigInt(x).toString())];\n if (typeof value === 'object' && 'type' in value)\n return Object.entries<BigNumberish>(value)\n .filter(([k]) => k !== 'type')\n .map(([, v]) => toBigInt(v).toString());\n return toBigInt(value).toString();\n });\n Object.defineProperty(compiledData, 'compiled', {\n enumerable: false,\n writable: false,\n value: true,\n });\n return compiledData;\n}\n\nexport function estimatedFeeToMaxFee(estimatedFee: BigNumberish, overhead: number = 0.5): bigint {\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 (toBigInt(estimatedFee) * toBigInt(overHeadPercent)) / 100n;\n}\n","import { CompiledContract, ContractClass, RawCalldata, SierraContractClass } from '../types';\nimport { isSierra } from './contract';\nimport { formatSpaces } from './hash';\nimport { parse, stringify } from './json';\nimport { isHex, toHex } from './num';\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(data);\n });\n}\n\nexport function createSierraContractClass(contract: SierraContractClass): any {\n const result = { ...contract } as any;\n delete result.sierra_program_debug_info;\n result.abi = formatSpaces(stringify(contract.abi));\n result.sierra_program = formatSpaces(stringify(contract.sierra_program));\n result.sierra_program = compressProgram(result.sierra_program);\n return result;\n}\n\n// TODO: How can we receive string here ?\nexport function parseContract(contract: CompiledContract | string) {\n const parsedContract =\n typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;\n\n if (!isSierra(contract)) {\n return {\n ...parsedContract,\n // TODO: Why do we gzip program object?\n ...('program' in parsedContract && { program: compressProgram(parsedContract.program) }),\n } as ContractClass;\n }\n\n return createSierraContractClass(parsedContract as SierraContractClass);\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 { toBigInt } from '../num';\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 sender_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: toBigInt(res.overall_fee),\n gas_consumed: toBigInt(res.gas_consumed),\n gas_price: toBigInt(res.gas_price),\n };\n }\n\n public parseCallContractResponse(res: Array<string>): CallContractResponse {\n return {\n result: res,\n };\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nexport function fixStack(target: Error, fn: Function = target.constructor) {\n const { captureStackTrace } = Error as any;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n captureStackTrace && captureStackTrace(target, fn);\n}\n\nexport function fixProto(target: Error, prototype: {}) {\n const { setPrototypeOf } = Object as any;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions, no-proto, no-param-reassign\n setPrototypeOf ? setPrototypeOf(target, prototype) : ((target as any).__proto__ = prototype);\n}\n\n/* eslint-disable max-classes-per-file */\nexport class CustomError extends Error {\n name!: string;\n\n constructor(message?: string) {\n super(message);\n // set error name as constructor name, make it not enumerable to keep native Error behavior\n // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target#new.target_in_constructors\n // see https://github.com/adriengibrat/ts-custom-error/issues/30\n Object.defineProperty(this, 'name', {\n value: new.target.name,\n enumerable: false,\n configurable: true,\n });\n // fix the extended error prototype chain\n // because typescript __extends implementation can't\n // see https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n fixProto(this, new.target.prototype);\n // try to remove contructor from stack trace\n fixStack(this);\n }\n}\n\nexport class LibraryError extends CustomError {}\n\nexport class GatewayError extends LibraryError {\n constructor(message: string, public errorCode: string) {\n super(message);\n }\n}\n\nexport class HttpError extends LibraryError {\n constructor(message: string, public errorCode: number) {\n super(message);\n }\n}\n","/* eslint-disable no-param-reassign */\nimport { StarknetChainId, ZERO } from '../constants';\n\nconst basicAlphabet = 'abcdefghijklmnopqrstuvwxyz0123456789-';\nconst basicSizePlusOne = BigInt(basicAlphabet.length + 1);\nconst bigAlphabet = '这来';\nconst basicAlphabetSize = BigInt(basicAlphabet.length);\nconst bigAlphabetSize = BigInt(bigAlphabet.length);\nconst bigAlphabetSizePlusOne = BigInt(bigAlphabet.length + 1);\n\nfunction extractStars(str: string): [string, number] {\n let k = 0;\n while (str.endsWith(bigAlphabet[bigAlphabet.length - 1])) {\n str = str.substring(0, str.length - 1);\n k += 1;\n }\n return [str, k];\n}\n\nexport function useDecoded(encoded: bigint[]): string {\n let decoded = '';\n\n encoded.forEach((subdomain) => {\n while (subdomain !== ZERO) {\n const code = subdomain % basicSizePlusOne;\n subdomain /= basicSizePlusOne;\n if (code === BigInt(basicAlphabet.length)) {\n const nextSubdomain = subdomain / bigAlphabetSizePlusOne;\n if (nextSubdomain === ZERO) {\n const code2 = subdomain % bigAlphabetSizePlusOne;\n subdomain = nextSubdomain;\n if (code2 === ZERO) decoded += basicAlphabet[0];\n else decoded += bigAlphabet[Number(code2) - 1];\n } else {\n const code2 = subdomain % bigAlphabetSize;\n decoded += bigAlphabet[Number(code2)];\n subdomain /= bigAlphabetSize;\n }\n } else decoded += basicAlphabet[Number(code)];\n }\n\n const [str, k] = extractStars(decoded);\n if (k)\n decoded =\n str +\n (k % 2 === 0\n ? bigAlphabet[bigAlphabet.length - 1].repeat(k / 2 - 1) +\n bigAlphabet[0] +\n basicAlphabet[1]\n : bigAlphabet[bigAlphabet.length - 1].repeat((k - 1) / 2 + 1));\n decoded += '.';\n });\n\n if (!decoded) {\n return decoded;\n }\n\n return decoded.concat('stark');\n}\n\nexport function useEncoded(decoded: string): bigint {\n let encoded = BigInt(0);\n let multiplier = BigInt(1);\n\n if (decoded.endsWith(bigAlphabet[0] + basicAlphabet[1])) {\n const [str, k] = extractStars(decoded.substring(0, decoded.length - 2));\n decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(2 * (k + 1));\n } else {\n const [str, k] = extractStars(decoded);\n if (k) decoded = str + bigAlphabet[bigAlphabet.length - 1].repeat(1 + 2 * (k - 1));\n }\n\n for (let i = 0; i < decoded.length; i += 1) {\n const char = decoded[i];\n const index = basicAlphabet.indexOf(char);\n const bnIndex = BigInt(basicAlphabet.indexOf(char));\n\n if (index !== -1) {\n // add encoded + multiplier * index\n if (i === decoded.length - 1 && decoded[i] === basicAlphabet[0]) {\n encoded += multiplier * basicAlphabetSize;\n multiplier *= basicSizePlusOne;\n // add 0\n multiplier *= basicSizePlusOne;\n } else {\n encoded += multiplier * bnIndex;\n multiplier *= basicSizePlusOne;\n }\n } else if (bigAlphabet.indexOf(char) !== -1) {\n // add encoded + multiplier * (basicAlphabetSize)\n encoded += multiplier * basicAlphabetSize;\n multiplier *= basicSizePlusOne;\n // add encoded + multiplier * index\n const newid = (i === decoded.length - 1 ? 1 : 0) + bigAlphabet.indexOf(char);\n encoded += multiplier * BigInt(newid);\n multiplier *= bigAlphabetSize;\n }\n }\n\n return encoded;\n}\n\nexport function getStarknetIdContract(chainId: StarknetChainId): string {\n const starknetIdMainnetContract =\n '0x6ac597f8116f886fa1c97a23fa4e08299975ecaf6b598873ca6792b9bbfb678';\n const starknetIdTestnetContract =\n '0x3bab268e932d2cecd1946f100ae67ce3dff9fd234119ea2f6da57d16d29fce';\n\n switch (chainId) {\n case StarknetChainId.SN_MAIN:\n return starknetIdMainnetContract;\n\n case StarknetChainId.SN_GOERLI:\n return starknetIdTestnetContract;\n\n default:\n throw new Error('Starknet.id is not yet deployed on this network');\n }\n}\n","import { BigNumberish } from '../utils/num';\nimport { compileCalldata } from '../utils/stark';\nimport { getStarknetIdContract, useDecoded, useEncoded } from '../utils/starknetId';\nimport { ProviderInterface } from './interface';\n\nexport async function getStarkName(\n provider: ProviderInterface,\n address: BigNumberish,\n StarknetIdContract?: string\n): Promise<string> {\n const chainId = await provider.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const hexDomain = await provider.callContract({\n contractAddress: contract,\n entrypoint: 'address_to_domain',\n calldata: compileCalldata({\n address,\n }),\n });\n const decimalDomain = hexDomain.result.map((element) => BigInt(element)).slice(1);\n\n const stringDomain = useDecoded(decimalDomain);\n\n if (!stringDomain) {\n throw Error('Starkname not found');\n }\n\n return stringDomain;\n } catch (e) {\n if (e instanceof Error && e.message === 'Starkname not found') {\n throw e;\n }\n throw Error('Could not get stark name');\n }\n}\n\nexport async function getAddressFromStarkName(\n provider: ProviderInterface,\n name: string,\n StarknetIdContract?: string\n): Promise<string> {\n const chainId = await provider.getChainId();\n const contract = StarknetIdContract ?? getStarknetIdContract(chainId);\n\n try {\n const addressData = await provider.callContract({\n contractAddress: contract,\n entrypoint: 'domain_to_address',\n calldata: compileCalldata({\n domain: [useEncoded(name.replace('.stark', '')).toString(10)],\n }),\n });\n\n return addressData.result[0];\n } catch {\n throw Error('Could not get address from stark name');\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport type { BlockNumber, SequencerIdentifier } from '../types';\nimport { BigNumberish, isHex, toHex } from '../utils/num';\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(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;\nexport const validBlockTags = ['latest', 'pending'];\n\nexport class Block {\n hash: BlockIdentifier = null;\n\n number: BlockIdentifier = null;\n\n tag: BlockIdentifier = null;\n\n private setIdentifier(__identifier: BlockIdentifier) {\n if (typeof __identifier === 'string' && isHex(__identifier)) {\n this.hash = __identifier;\n } else if (typeof __identifier === 'bigint') {\n this.hash = toHex(__identifier);\n } else if (typeof __identifier === 'number') {\n this.number = __identifier;\n } else if (typeof __identifier === 'string' && validBlockTags.includes(__identifier)) {\n this.tag = __identifier;\n } else {\n // default\n this.tag = 'pending';\n }\n }\n\n constructor(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n // TODO: fix any\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 // TODO: fix any\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 get sequencerIdentifier(): SequencerIdentifier {\n return this.hash !== null\n ? { blockHash: this.hash as string }\n : { blockNumber: (this.number ?? this.tag) as BlockNumber };\n }\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n RPC,\n TransactionSimulationResponse,\n TransactionStatus,\n waitForTransactionOptions,\n} from '../types';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelectorFromName } from '../utils/hash';\nimport { stringify } from '../utils/json';\nimport { BigNumberish, bigNumberishArrayToHexadecimalStringArray, toHex } from '../utils/num';\nimport { parseCalldata, wait } from '../utils/provider';\nimport { RPCResponseParser } from '../utils/responseParser/rpc';\nimport { signatureToHexArray } from '../utils/stark';\nimport { LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\nimport { Block, BlockIdentifier } from './utils';\n\nexport type RpcProviderOptions = {\n nodeUrl: string;\n retries?: number;\n headers?: object;\n blockIdentifier?: BlockIdentifier;\n};\n\n// Default Pathfinder disabled pending block https://github.com/eqlabs/pathfinder/blob/main/README.md\n// Note that pending support is disabled by default and must be enabled by setting poll-pending=true in the configuration options.\nconst defaultOptions = {\n headers: { 'Content-Type': 'application/json' },\n blockIdentifier: 'latest',\n retries: 200,\n};\n\nexport class RpcProvider implements ProviderInterface {\n public nodeUrl: string;\n\n public headers: object;\n\n private chainId!: StarknetChainId;\n\n private responseParser = new RPCResponseParser();\n\n private retries: number;\n\n private blockIdentifier: BlockIdentifier;\n\n constructor(optionsOrProvider: RpcProviderOptions) {\n const { nodeUrl, retries, headers, blockIdentifier } = optionsOrProvider;\n this.nodeUrl = nodeUrl;\n this.retries = retries || defaultOptions.retries;\n this.headers = { ...defaultOptions.headers, ...headers };\n this.blockIdentifier = blockIdentifier || defaultOptions.blockIdentifier;\n\n this.getChainId();\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 LibraryError(`${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<StarknetChainId> {\n this.chainId ??= (await this.fetchEndpoint('starknet_chainId')) as StarknetChainId;\n return this.chainId;\n }\n\n public async getBlock(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): 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 = this.blockIdentifier\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 = this.blockIdentifier\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 = this.blockIdentifier\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 getNonceForAddress(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\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 = this.blockIdentifier\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 = this.blockIdentifier\n ): Promise<RPC.Storage> {\n const parsedKey = toHex(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 = this.blockIdentifier\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 = this.blockIdentifier\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 = this.blockIdentifier\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 = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: RPC.TransactionType.INVOKE,\n sender_address: invocation.contractAddress,\n calldata: parseCalldata(invocation.calldata),\n signature: signatureToHexArray(invocation.signature),\n version: toHex(invocationDetails?.version || 0),\n nonce: toHex(invocationDetails.nonce),\n max_fee: toHex(invocationDetails?.maxFee || 0),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n if ('program' in contractDefinition) {\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: RPC.TransactionType.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: signatureToHexArray(signature),\n version: toHex(details?.version || 0),\n nonce: toHex(details.nonce),\n max_fee: toHex(details?.maxFee || 0),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n // TODO: When RPC Update implement Sierra\n throw new Error('RPC do not support Sierra Contracts yet');\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: RPC.TransactionType.DEPLOY_ACCOUNT,\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(classHash),\n contract_address_salt: toHex(addressSalt || 0),\n signature: signatureToHexArray(signature),\n version: toHex(details?.version || 0),\n nonce: toHex(details.nonce),\n max_fee: toHex(details?.maxFee || 0),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getEstimateFeeBulk(\n _invocations: InvocationBulk,\n _blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n throw new Error('RPC does not implement getInvokeEstimateFeeBulk function');\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 if ('program' in contractDefinition) {\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: RPC.TransactionType.DECLARE,\n version: '0x1',\n max_fee: toHex(details.maxFee || 0),\n signature: signatureToHexArray(signature),\n sender_address: senderAddress,\n nonce: toHex(details.nonce),\n },\n });\n }\n // TODO: When RPC Update implement Sierra\n throw new Error('RPC do not support Sierra Contracts yet');\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 deploy_account_transaction: {\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(classHash),\n contract_address_salt: toHex(addressSalt || 0),\n type: RPC.TransactionType.DEPLOY_ACCOUNT,\n max_fee: toHex(details.maxFee || 0),\n version: toHex(details.version || 0),\n signature: signatureToHexArray(signature),\n nonce: toHex(details.nonce),\n },\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: RPC.TransactionType.INVOKE,\n max_fee: toHex(details.maxFee || 0),\n version: '0x1',\n signature: signatureToHexArray(functionInvocation.signature),\n nonce: toHex(details.nonce),\n },\n });\n }\n\n // Methods from Interface\n public async callContract(\n call: Call,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\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, options?: waitForTransactionOptions) {\n const errorStates = [TransactionStatus.REJECTED, TransactionStatus.NOT_RECEIVED];\n let { retries } = this;\n let onchain = false;\n let txReceipt: any = {};\n\n const retryInterval = options?.retryInterval ?? 8000;\n const successStates = options?.successStates ?? [\n TransactionStatus.ACCEPTED_ON_L1,\n TransactionStatus.ACCEPTED_ON_L2,\n TransactionStatus.PENDING,\n ];\n\n while (!onchain) {\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 txReceipt = await this.getTransactionReceipt(txHash);\n\n if (!('status' in txReceipt)) {\n const error = new Error('pending transaction');\n throw error;\n }\n\n if (txReceipt.status && successStates.includes(txReceipt.status)) {\n onchain = true;\n } else if (txReceipt.status && errorStates.includes(txReceipt.status)) {\n const message = txReceipt.status;\n const error = new Error(message) as Error & { response: any };\n error.response = txReceipt;\n throw error;\n }\n } catch (error: unknown) {\n if (error instanceof Error && errorStates.includes(error.message as TransactionStatus)) {\n throw error;\n }\n\n if (retries === 0) {\n throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);\n }\n }\n\n retries -= 1;\n }\n\n await wait(retryInterval);\n return txReceipt;\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 = this.blockIdentifier\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 public async getSimulateTransaction(\n _invocation: Invocation,\n _invocationDetails: InvocationsDetailsWithNonce,\n _blockIdentifier?: BlockIdentifier\n ): Promise<TransactionSimulationResponse> {\n throw new Error('RPC does not implement simulateTransaction function');\n }\n\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string): Promise<string> {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string): Promise<string> {\n return getAddressFromStarkName(this, name, StarknetIdContract);\n }\n}\n","import urljoin from 'url-join';\n\nimport { BaseUrl, NetworkName, StarknetChainId } from '../constants';\nimport {\n CairoAssembly,\n Call,\n CallContractResponse,\n CallL1Handler,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetContractAddressesResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n GetTransactionStatusResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Sequencer,\n StateUpdateResponse,\n TransactionSimulationResponse,\n TransactionStatus,\n TransactionTraceResponse,\n TransactionType,\n waitForTransactionOptions,\n} from '../types';\nimport { isSierra } from '../utils/contract';\nimport fetch from '../utils/fetchPonyfill';\nimport { feeTransactionVersion, getSelector, getSelectorFromName } from '../utils/hash';\nimport { parse, parseAlwaysAsBig, stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToDecimalStringArray,\n getDecimalString,\n getHexString,\n getHexStringArray,\n toBigInt,\n toHex,\n} from '../utils/num';\nimport { parseContract, wait } from '../utils/provider';\nimport { SequencerAPIResponseParser } from '../utils/responseParser/sequencer';\nimport { formatSignature, randomAddress, signatureToDecimalArray } from '../utils/stark';\nimport { buildUrl } from '../utils/url';\nimport { GatewayError, HttpError, LibraryError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\nimport { Block, BlockIdentifier } from './utils';\n\nexport type SequencerHttpMethod = 'POST' | 'GET';\n\nexport type SequencerProviderOptions = {\n headers?: Record<string, string>;\n blockIdentifier?: BlockIdentifier;\n} & (\n | {\n network: NetworkName | StarknetChainId;\n chainId?: StarknetChainId;\n }\n | {\n baseUrl: string;\n feederGatewayUrl?: string;\n gatewayUrl?: string;\n chainId?: StarknetChainId;\n }\n);\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\nconst defaultOptions = {\n network: NetworkName.SN_GOERLI2,\n blockIdentifier: 'pending',\n};\n\nexport class SequencerProvider implements ProviderInterface {\n public baseUrl: string;\n\n public feederGatewayUrl: string;\n\n public gatewayUrl: string;\n\n public headers?: Record<string, string>;\n\n private blockIdentifier: BlockIdentifier;\n\n private chainId: StarknetChainId;\n\n private responseParser = new SequencerAPIResponseParser();\n\n constructor(optionsOrProvider: SequencerProviderOptions = defaultOptions) {\n if ('network' in optionsOrProvider) {\n this.baseUrl = SequencerProvider.getNetworkFromName(optionsOrProvider.network);\n this.feederGatewayUrl = buildUrl(this.baseUrl, 'feeder_gateway');\n this.gatewayUrl = buildUrl(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 ?? SequencerProvider.getChainIdFromBaseUrl(this.baseUrl);\n this.headers = optionsOrProvider.headers;\n this.blockIdentifier = optionsOrProvider?.blockIdentifier || defaultOptions.blockIdentifier;\n }\n\n protected static getNetworkFromName(name: NetworkName | StarknetChainId) {\n switch (name) {\n case NetworkName.SN_MAIN || StarknetChainId.SN_MAIN:\n return BaseUrl.SN_MAIN;\n case NetworkName.SN_GOERLI || StarknetChainId.SN_GOERLI:\n return BaseUrl.SN_GOERLI;\n case NetworkName.SN_GOERLI2 || StarknetChainId.SN_GOERLI2:\n return BaseUrl.SN_GOERLI2;\n default:\n throw new Error('Could not detect base url from NetworkName');\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.SN_MAIN;\n }\n if (url.host.includes('alpha4-2.starknet.io')) {\n return StarknetChainId.SN_GOERLI2;\n }\n return StarknetChainId.SN_GOERLI;\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Could not parse baseUrl: ${baseUrl}`);\n return StarknetChainId.SN_GOERLI;\n }\n }\n\n private getFetchUrl(endpoint: keyof Sequencer.Endpoints) {\n const gatewayUrlEndpoints = ['add_transaction'];\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 'estimate_fee_bulk',\n 'simulate_transaction',\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: SequencerHttpMethod): Record<string, string> | 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 url = urljoin(baseUrl, endpoint, queryString);\n\n return this.fetch(url, {\n method,\n body: request,\n });\n }\n\n public async fetch(\n endpoint: string,\n options?: {\n method?: SequencerHttpMethod;\n body?: any;\n parseAlwaysAsBigInt?: boolean;\n }\n ): Promise<any> {\n const url = buildUrl(this.baseUrl, '', endpoint);\n const method = options?.method ?? 'GET';\n const headers = this.getHeaders(method);\n\n try {\n const response = await fetch(url, {\n method,\n body: stringify(options?.body),\n headers,\n });\n const textResponse = await response.text();\n\n if (!response.ok) {\n // This will allow the user to handle contract errors\n let responseBody: any;\n try {\n responseBody = parse(textResponse);\n } catch {\n throw new HttpError(response.statusText, response.status);\n }\n throw new GatewayError(responseBody.message, responseBody.code);\n }\n\n const parseChoice = options?.parseAlwaysAsBigInt ? parseAlwaysAsBig : parse;\n return parseChoice(textResponse);\n } catch (error) {\n if (error instanceof Error && !(error instanceof LibraryError))\n throw Error(`Could not ${method} from endpoint \\`${url}\\`: ${error.message}`);\n\n throw error;\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 = this.blockIdentifier\n ): Promise<CallContractResponse> {\n return this.fetchEndpoint(\n 'call_contract',\n { blockIdentifier },\n {\n // TODO - determine best choice once both are fully supported in devnet\n // signature: [],\n // sender_address: contractAddress,\n contract_address: contractAddress,\n entry_point_selector: getSelectorFromName(entryPointSelector),\n calldata,\n }\n ).then(this.responseParser.parseCallContractResponse);\n }\n\n public async getBlock(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<GetBlockResponse> {\n return this.fetchEndpoint('get_block', { blockIdentifier }).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.Nonce> {\n return this.fetchEndpoint('get_nonce', { contractAddress, blockIdentifier });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.Storage> {\n const parsedKey = toBigInt(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(txHash);\n return this.fetchEndpoint('get_transaction', { transactionHash: txHashHex }).then((result) => {\n // throw for no matching transaction to unify behavior with RPC and avoid parsing errors\n if (Object.values(result).length === 1) throw new LibraryError(result.status);\n return this.responseParser.parseGetTransactionResponse(result);\n });\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n const txHashHex = toHex(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 = this.blockIdentifier\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 = this.blockIdentifier\n ): Promise<string> {\n return this.fetchEndpoint('get_class_hash_at', { blockIdentifier, contractAddress });\n }\n\n public async getClassByHash(\n classHash: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<ContractClass> {\n return this.fetchEndpoint('get_class_by_hash', { classHash, blockIdentifier }).then(\n parseContract\n );\n }\n\n public async getCompiledClassByClassHash(\n classHash: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<CairoAssembly> {\n return this.fetchEndpoint('get_compiled_class_by_class_hash', { classHash, blockIdentifier });\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.INVOKE,\n sender_address: functionInvocation.contractAddress,\n calldata: bigNumberishArrayToDecimalStringArray(functionInvocation.calldata ?? []),\n signature: signatureToDecimalArray(functionInvocation.signature),\n nonce: toHex(details.nonce),\n max_fee: toHex(details.maxFee || 0),\n version: '0x1',\n }).then(this.responseParser.parseInvokeFunctionResponse);\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: TransactionType.DEPLOY_ACCOUNT,\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),\n class_hash: toHex(classHash),\n max_fee: toHex(details.maxFee || 0),\n version: toHex(details.version || 0),\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async declareContract(\n { senderAddress, contractDefinition, signature, compiledClassHash }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n if (!isSierra(contractDefinition)) {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.DECLARE,\n contract_class: contractDefinition,\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n sender_address: senderAddress,\n max_fee: toHex(details.maxFee || 0),\n version: '0x1',\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n // Cairo 1\n return this.fetchEndpoint('add_transaction', undefined, {\n type: TransactionType.DECLARE,\n sender_address: senderAddress,\n compiled_class_hash: compiledClassHash,\n contract_class: contractDefinition,\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n max_fee: toHex(details.maxFee || 0),\n version: '0x2',\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier, skipValidate);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier, skipValidate },\n {\n type: TransactionType.INVOKE,\n sender_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: signatureToDecimalArray(invocation.signature),\n version: toHex(invocationDetails?.version || 1),\n nonce: toHex(invocationDetails.nonce),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature, compiledClassHash }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n if (!isSierra(contractDefinition)) {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier, skipValidate },\n {\n type: TransactionType.DECLARE,\n sender_address: senderAddress,\n contract_class: contractDefinition,\n signature: signatureToDecimalArray(signature),\n version: toHex(details?.version || toBigInt(feeTransactionVersion)),\n nonce: toHex(details.nonce),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier, skipValidate },\n {\n type: TransactionType.DECLARE,\n sender_address: senderAddress,\n compiled_class_hash: compiledClassHash,\n contract_class: contractDefinition,\n nonce: toHex(details.nonce),\n signature: signatureToDecimalArray(signature),\n version: '0x2',\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, addressSalt, constructorCalldata, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier, skipValidate },\n {\n type: TransactionType.DEPLOY_ACCOUNT,\n class_hash: toHex(classHash),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata || []),\n contract_address_salt: toHex(addressSalt || 0),\n signature: signatureToDecimalArray(signature),\n version: toHex(details?.version || 0),\n nonce: toHex(details.nonce),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n const params: Sequencer.EstimateFeeRequestBulk = invocations.map((invocation) => {\n let res;\n if (invocation.type === 'INVOKE_FUNCTION') {\n res = {\n type: invocation.type,\n sender_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n };\n } else if (invocation.type === 'DECLARE') {\n res = {\n type: invocation.type,\n sender_address: invocation.senderAddress,\n contract_class: invocation.contractDefinition,\n };\n } else {\n res = {\n type: invocation.type,\n class_hash: toHex(toBigInt(invocation.classHash)),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(\n invocation.constructorCalldata || []\n ),\n contract_address_salt: toHex(toBigInt(invocation.addressSalt || 0)),\n };\n }\n return {\n ...res,\n signature: bigNumberishArrayToDecimalStringArray(formatSignature(invocation.signature)),\n version: toHex(toBigInt(invocation?.version || 1)),\n nonce: toHex(toBigInt(invocation.nonce)),\n };\n });\n\n return this.fetchEndpoint('estimate_fee_bulk', { blockIdentifier }, params).then(\n this.responseParser.parseFeeEstimateBulkResponse\n );\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.GetCodeResponse> {\n return this.fetchEndpoint('get_code', { contractAddress, blockIdentifier });\n }\n\n public async waitForTransaction(txHash: BigNumberish, options?: waitForTransactionOptions) {\n const errorStates = [TransactionStatus.REJECTED, TransactionStatus.NOT_RECEIVED];\n let onchain = false;\n let res;\n const retryInterval = options?.retryInterval ?? 8000;\n const successStates = options?.successStates ?? [\n TransactionStatus.ACCEPTED_ON_L1,\n TransactionStatus.ACCEPTED_ON_L2,\n TransactionStatus.PENDING,\n ];\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 res = await this.getTransactionStatus(txHash);\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 const txReceipt = await this.getTransactionReceipt(txHash);\n return txReceipt;\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(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 * @param txHash\n * @returns the transaction trace\n */\n public async getTransactionTrace(txHash: BigNumberish): Promise<TransactionTraceResponse> {\n const txHashHex = toHex(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 = this.blockIdentifier\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 public async getSimulateTransaction(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = this.blockIdentifier,\n skipValidate: boolean = false\n ): Promise<TransactionSimulationResponse> {\n return this.fetchEndpoint(\n 'simulate_transaction',\n { blockIdentifier, skipValidate },\n {\n type: 'INVOKE_FUNCTION',\n sender_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: signatureToDecimalArray(invocation.signature),\n version: toHex(invocationDetails?.version || 1),\n nonce: toHex(invocationDetails.nonce),\n max_fee: toHex(invocationDetails?.maxFee || 0),\n }\n ).then(this.responseParser.parseFeeSimulateTransactionResponse);\n }\n\n public async getStateUpdate(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<StateUpdateResponse> {\n const args = new Block(blockIdentifier).sequencerIdentifier;\n return this.fetchEndpoint('get_state_update', { ...args }).then(\n this.responseParser.parseGetStateUpdateResponse\n );\n }\n\n // consider adding an optional trace retrieval parameter to the getBlock method\n public async getBlockTraces(\n blockIdentifier: BlockIdentifier = this.blockIdentifier\n ): Promise<Sequencer.BlockTransactionTracesResponse> {\n const args = new Block(blockIdentifier).sequencerIdentifier;\n return this.fetchEndpoint('get_block_traces', { ...args });\n }\n\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string): Promise<string> {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string): Promise<string> {\n return getAddressFromStarkName(this, name, StarknetIdContract);\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 EstimateFeeResponseBulk,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n Sequencer,\n StateUpdateResponse,\n TransactionSimulationResponse,\n} from '../../types';\nimport { toBigInt } from '../num';\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_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: toBigInt(res.gas_usage),\n gas_price: toBigInt(res.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBigInt(res.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBigInt(res.amount),\n };\n }\n\n public parseFeeEstimateBulkResponse(\n res: Sequencer.EstimateFeeResponseBulk\n ): EstimateFeeResponseBulk {\n return [].concat(res as []).map((item: Sequencer.EstimateFeeResponse) => {\n if ('overall_fee' in item) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBigInt(item.gas_usage),\n gas_price: toBigInt(item.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBigInt(item.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBigInt(item.amount),\n };\n });\n }\n\n public parseFeeSimulateTransactionResponse(\n res: Sequencer.TransactionSimulationResponse\n ): TransactionSimulationResponse {\n if ('overall_fee' in res.fee_estimation) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBigInt(res.fee_estimation.gas_usage),\n gas_price: toBigInt(res.fee_estimation.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n trace: res.trace,\n fee_estimation: {\n ...gasInfo,\n overall_fee: toBigInt(res.fee_estimation.overall_fee),\n },\n };\n }\n\n return {\n trace: res.trace,\n fee_estimation: {\n overall_fee: toBigInt(res.fee_estimation.amount),\n },\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 public parseGetStateUpdateResponse(res: Sequencer.StateUpdateResponse): StateUpdateResponse {\n const nonces = Object.entries(res.state_diff.nonces).map(([contract_address, nonce]) => ({\n contract_address,\n nonce,\n }));\n const storage_diffs = Object.entries(res.state_diff.storage_diffs).map(\n ([address, storage_entries]) => ({ address, storage_entries })\n );\n\n return {\n ...res,\n state_diff: {\n ...res.state_diff,\n storage_diffs,\n nonces,\n },\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","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Nonce,\n RPC,\n StateUpdateResponse,\n Storage,\n TransactionSimulationResponse,\n waitForTransactionOptions,\n} from '../types';\nimport { BigNumberish } from '../utils/num';\nimport { ProviderInterface } from './interface';\nimport { RpcProvider, RpcProviderOptions } from './rpc';\nimport { SequencerProvider, SequencerProviderOptions } from './sequencer';\nimport { getAddressFromStarkName, getStarkName } from './starknetId';\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 instanceof Provider) {\n // providerOrOptions is Provider\n this.provider = providerOrOptions.provider;\n } else if (\n providerOrOptions instanceof RpcProvider ||\n providerOrOptions instanceof SequencerProvider\n ) {\n // providerOrOptions is SequencerProvider or RpcProvider\n this.provider = <ProviderInterface>providerOrOptions;\n } else if (providerOrOptions && 'rpc' in providerOrOptions) {\n // providerOrOptions is rpc option\n this.provider = new RpcProvider(<RpcProviderOptions>providerOrOptions.rpc);\n } else if (providerOrOptions && 'sequencer' in providerOrOptions) {\n // providerOrOptions is sequencer option\n this.provider = new SequencerProvider(<SequencerProviderOptions>providerOrOptions.sequencer);\n } else {\n // providerOrOptions is none, create SequencerProvider as default\n this.provider = new SequencerProvider();\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return this.provider.getChainId();\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse> {\n return this.provider.getBlock(blockIdentifier);\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClass | RPC.ContractClass> {\n return this.provider.getClassAt(contractAddress, blockIdentifier);\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier\n ): Promise<string> {\n return this.provider.getClassHashAt(contractAddress, blockIdentifier);\n }\n\n public getClassByHash(classHash: string): Promise<ContractClass | RPC.ContractClass> {\n return this.provider.getClassByHash(classHash);\n }\n\n public async getEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\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,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getInvokeEstimateFee(\n invocationWithTxType,\n invocationDetails,\n blockIdentifier,\n skipValidate\n );\n }\n\n public async getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponseBulk> {\n return this.provider.getEstimateFeeBulk(invocations, blockIdentifier);\n }\n\n public async getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<Nonce> {\n return this.provider.getNonceForAddress(contractAddress, blockIdentifier);\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<Storage> {\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\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 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,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier, skipValidate);\n }\n\n public getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeployAccountEstimateFee(\n transaction,\n details,\n blockIdentifier,\n skipValidate\n );\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(\n txHash: BigNumberish,\n options?: waitForTransactionOptions\n ): Promise<GetTransactionReceiptResponse> {\n return this.provider.waitForTransaction(txHash, options);\n }\n\n public async getSimulateTransaction(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<TransactionSimulationResponse> {\n return this.provider.getSimulateTransaction(\n invocation,\n invocationDetails,\n blockIdentifier,\n skipValidate\n );\n }\n\n public async getStateUpdate(blockIdentifier?: BlockIdentifier): Promise<StateUpdateResponse> {\n return this.provider.getStateUpdate(blockIdentifier);\n }\n\n public async getStarkName(address: BigNumberish, StarknetIdContract?: string): Promise<string> {\n return getStarkName(this, address, StarknetIdContract);\n }\n\n public async getAddressFromStarkName(name: string, StarknetIdContract?: string): Promise<string> {\n return getAddressFromStarkName(this, name, StarknetIdContract);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport type {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationBulk,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n Nonce,\n RPC,\n StateUpdateResponse,\n Storage,\n TransactionSimulationResponse,\n waitForTransactionOptions,\n} from '../types';\nimport type { BigNumberish } from '../utils/num';\nimport { BlockIdentifier } from './utils';\n\nexport abstract class ProviderInterface {\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 | RPC.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 | RPC.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 getNonceForAddress(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<Nonce>;\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<Storage>;\n\n /**\n * Gets the transaction information from a tx id.\n *\n * @param txHash\n * @returns the transaction 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 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. Should not be used outside of Account class\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. Should not be used outside of Account class\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 * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier,\n skipValidate?: boolean\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 details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getInvokeEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\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 - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\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 - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the estimated fee\n */\n public abstract getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a list of INVOKE transaction\n *\n * @param invocations the array of invocation and invocation details object containing:\n * - contractAddress - the address of the account\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * - nonce - optional nonce\n * - version - optional version\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getEstimateFeeBulk(\n invocations: InvocationBulk,\n blockIdentifier?: BlockIdentifier\n ): Promise<EstimateFeeResponseBulk>;\n\n /**\n * Wait for the transaction to be accepted\n * @param txHash - transaction hash\n * @param retryInterval - retry interval\n * @return GetTransactionReceiptResponse\n */\n public abstract waitForTransaction(\n txHash: BigNumberish,\n options?: waitForTransactionOptions\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Simulates the transaction and returns the transaction trace and estimated fee.\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 * @param blockIdentifier - (optional) block identifier\n * @param skipValidate - (optional) skip cairo __validate__ method\n * @returns the transaction trace and estimated fee\n */\n public abstract getSimulateTransaction(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier?: BlockIdentifier,\n skipValidate?: boolean\n ): Promise<TransactionSimulationResponse>;\n\n /**\n * Gets the state changes in a specific block\n *\n * @param blockIdentifier - block identifier\n * @returns StateUpdateResponse\n */\n public abstract getStateUpdate(blockIdentifier?: BlockIdentifier): Promise<StateUpdateResponse>;\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 { isBigInt } from '../num';\nimport { decodeShortString } from '../shortString';\n\nconst guard = {\n isBN: (data: any, type: any, key: any) => {\n if (!isBigInt(data[key]))\n throw new Error(\n `Data and formatter mismatch on ${key}:${type[key]}, expected response data ${key}:${\n data[key]\n } to be BN instead it is ${typeof data[key]}`\n );\n },\n unknown: (data: any, type: any, key: any) => {\n throw new Error(`Unhandled formatter type on ${key}:${type[key]} for data ${key}:${data[key]}`);\n },\n};\n\nexport default function formatter(data: any, type: any, sameType?: any) {\n // match data element with type element\n return Object.entries(data).reduce((acc, [key, value]: [any, any]) => {\n const elType = sameType ?? type[key];\n\n if (!(key in type) && !sameType) {\n // no type definition for element return original element\n acc[key] = value;\n return acc;\n }\n\n if (elType === 'string') {\n if (Array.isArray(data[key])) {\n // long string (felt*)\n const arrayStr = formatter(\n data[key],\n data[key].map((_: any) => elType)\n );\n acc[key] = Object.values(arrayStr).join('');\n return acc;\n }\n guard.isBN(data, type, key);\n acc[key] = decodeShortString(value);\n return acc;\n }\n if (elType === 'number') {\n guard.isBN(data, type, key);\n acc[key] = Number(value);\n return acc;\n }\n if (typeof elType === 'function') {\n acc[key] = elType(value);\n return acc;\n }\n if (Array.isArray(elType)) {\n const arrayObj = formatter(data[key], elType, elType[0]);\n acc[key] = Object.values(arrayObj);\n return acc;\n }\n if (typeof elType === 'object') {\n acc[key] = formatter(data[key], elType);\n return acc;\n }\n\n guard.unknown(data, type, key);\n return acc;\n }, {} as any);\n}\n","/* eslint-disable no-plusplus */\nimport { isTypeNamedTuple } from './cairo';\n\nfunction parseNamedTuple(namedTuple: string): any {\n const name = namedTuple.substring(0, namedTuple.indexOf(':'));\n const type = namedTuple.substring(name.length + ':'.length);\n return { name, type };\n}\n\nfunction parseSubTuple(s: string) {\n if (!s.includes('(')) return { subTuple: [], result: s };\n const subTuple: string[] = [];\n let result = '';\n let i = 0;\n while (i < s.length) {\n if (s[i] === '(') {\n let counter = 1;\n const lBracket = i;\n i++;\n while (counter) {\n if (s[i] === ')') counter--;\n if (s[i] === '(') counter++;\n i++;\n }\n subTuple.push(s.substring(lBracket, i));\n result += ' ';\n i--;\n } else {\n result += s[i];\n }\n i++;\n }\n\n return {\n subTuple,\n result,\n };\n}\n\n/**\n * Convert tuple string definition into object like definition\n * @param type tuple string definition\n * @returns object like tuple\n */\nexport default function extractTupleMemberTypes(type: string): (string | object)[] {\n const cleanType = type.replace(/\\s/g, '').slice(1, -1); // remove first lvl () and spaces\n\n // Decompose subTuple\n const { subTuple, result } = parseSubTuple(cleanType);\n\n // Recompose subTuple\n let recomposed = result.split(',').map((it) => {\n return subTuple.length ? it.replace(' ', subTuple.shift() as string) : it;\n });\n\n // Parse named tuple\n if (isTypeNamedTuple(type)) {\n recomposed = recomposed.reduce((acc, it) => {\n return acc.concat(parseNamedTuple(it));\n }, []);\n }\n\n return recomposed;\n}\n","import { AbiEntry, AbiStructs, ParsedStruct, Tupled } from '../../types';\nimport { BigNumberish } from '../num';\nimport { isText, splitLongString } from '../shortString';\nimport { felt, isTypeArray, isTypeFeltArray, isTypeStruct, isTypeTuple } from './cairo';\nimport extractTupleMemberTypes from './tuple';\n\n/**\n * Parse tuple type string to array of known objects\n * @param element request element\n * @param typeStr tuple type string\n * @returns Tupled[]\n */\nfunction parseTuple(element: object, typeStr: string): Tupled[] {\n const memberTypes = extractTupleMemberTypes(typeStr);\n const elements = Object.values(element);\n\n if (elements.length !== memberTypes.length) {\n throw Error(\n `ParseTuple: provided and expected abi tuple size do not match.\n provided: ${elements} \n expected: ${memberTypes}`\n );\n }\n\n return memberTypes.map((it: any, dx: number) => {\n return {\n element: elements[dx],\n type: it.type ?? it,\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 * @param structs - structs from abi\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\nfunction parseCalldataValue(\n element: ParsedStruct | BigNumberish | BigNumberish[],\n type: string,\n structs: AbiStructs\n): string | string[] {\n if (element === undefined) {\n throw Error(`Missing parameter for type ${type}`);\n }\n if (Array.isArray(element)) {\n throw Error(`Array inside array (nD) are not supported by cairo. Element: ${element} ${type}`);\n }\n // checking if the passed element is struct\n if (structs[type] && structs[type].members.length) {\n const { members } = structs[type];\n const subElement = element as any;\n\n return members.reduce((acc, it: AbiEntry) => {\n return acc.concat(parseCalldataValue(subElement[it.name], it.type, structs));\n }, [] as string[]);\n }\n // check if abi element is tuple\n if (isTypeTuple(type)) {\n const tupled = parseTuple(element as object, type);\n\n return tupled.reduce((acc, it: Tupled) => {\n const parsedData = parseCalldataValue(it.element, it.type, structs);\n return acc.concat(parsedData);\n }, [] as string[]);\n }\n if (typeof element === 'object') {\n throw Error(`Parameter ${element} do not align with abi parameter ${type}`);\n }\n return felt(element as BigNumberish);\n}\n\n/**\n * Parse one field of the calldata by using input field from the abi for that method\n *\n * @param argsIterator - Iterator<any> for value of the field\n * @param input - input(field) information from the abi that will be used to parse the data\n * @param structs - structs from abi\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\nexport function parseCalldataField(\n argsIterator: Iterator<any>,\n input: AbiEntry,\n structs: AbiStructs\n): string | string[] {\n const { name, type } = input;\n let { value } = argsIterator.next();\n\n switch (true) {\n // Array\n case isTypeArray(type):\n if (!Array.isArray(value) && !isText(value)) {\n throw Error(`ABI expected parameter ${name} to be array or long string, got ${value}`);\n }\n if (typeof value === 'string') {\n // long string match cairo felt*\n value = splitLongString(value);\n }\n // eslint-disable-next-line no-case-declarations\n const result: string[] = [];\n result.push(felt(value.length)); // Add length to array\n\n return (value as (BigNumberish | ParsedStruct)[]).reduce((acc, el) => {\n if (isTypeFeltArray(type)) {\n acc.push(felt(el as BigNumberish));\n } else {\n // structure or tuple\n acc.push(...parseCalldataValue(el, type.replace('*', ''), structs));\n }\n return acc;\n }, result);\n // Struct or Tuple\n case isTypeStruct(type, structs) || isTypeTuple(type):\n return parseCalldataValue(value as ParsedStruct | BigNumberish[], type, structs);\n // Felt or unhandled\n default:\n return felt(value as BigNumberish);\n }\n}\n","import { AbiEntry, AbiStructs, Args, ParsedStruct } from '../../types';\nimport { BigNumberish } from '../num';\nimport { isLen, isTypeArray, isTypeTuple } from './cairo';\nimport extractTupleMemberTypes from './tuple';\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 * @param structs - structs from abi\n * @return {BigNumberish | ParsedStruct} - parsed arguments in format that contract is expecting\n */\nfunction parseResponseStruct(\n responseIterator: Iterator<string>,\n type: string,\n structs: AbiStructs\n): BigNumberish | ParsedStruct {\n // type struct\n if (type in structs && structs[type]) {\n return structs[type].members.reduce((acc, el) => {\n acc[el.name] = parseResponseStruct(responseIterator, el.type, structs);\n return acc;\n }, {} as any);\n }\n // type tuple\n if (isTypeTuple(type)) {\n const memberTypes = extractTupleMemberTypes(type);\n return memberTypes.reduce((acc, it: any, idx) => {\n const tName = it?.name ? it.name : idx;\n const tType = it?.type ? it.type : it;\n acc[tName] = parseResponseStruct(responseIterator, tType, structs);\n return acc;\n }, {} as any);\n }\n const temp = responseIterator.next().value;\n return BigInt(temp);\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 * @param structs - structs from abi\n * @param parsedResult\n * @return - parsed response corresponding to the abi structure of the field\n */\nexport default function responseParser(\n responseIterator: Iterator<string>,\n output: AbiEntry,\n structs: AbiStructs,\n parsedResult?: Args\n): any {\n const { name, type } = output;\n let temp;\n\n switch (true) {\n case isLen(name):\n temp = responseIterator.next().value;\n return BigInt(temp);\n case isTypeArray(type):\n // eslint-disable-next-line no-case-declarations\n const parsedDataArr: (BigNumberish | ParsedStruct)[] = [];\n\n if (parsedResult && parsedResult[`${name}_len`]) {\n const arrLen = parsedResult[`${name}_len`] as number;\n while (parsedDataArr.length < arrLen) {\n parsedDataArr.push(\n parseResponseStruct(responseIterator, output.type.replace('*', ''), structs)\n );\n }\n }\n return parsedDataArr;\n case type in structs || isTypeTuple(type):\n return parseResponseStruct(responseIterator, type, structs);\n default:\n temp = responseIterator.next().value;\n return BigInt(temp);\n }\n}\n","import { AbiEntry, AbiStructs, FunctionAbi } from '../../types';\n/**\n * Validate cairo contract method arguments\n * Flow: Determine type from abi and than validate against parameter\n */\nimport assert from '../assert';\nimport { BigNumberish } from '../num';\nimport { isLongText } from '../shortString';\nimport { isLen, isTypeArray, isTypeFelt, isTypeStruct, isTypeTuple } from './cairo';\n\nconst validateFelt = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'string' || typeof parameter === 'number' || typeof parameter === 'bigint',\n `Validate: arg ${input.name} should be a felt (string, number, BigNumber)`\n );\n};\n\nconst validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => {\n assert(\n typeof parameter === 'object' && !Array.isArray(parameter),\n `Validate: arg ${input.name} is cairo type struct (${input.type}), and should be defined as js object (not array)`\n );\n\n // shallow struct validation, only first depth level\n structs[input.type].members.forEach(({ name }) => {\n assert(\n Object.keys(parameter).includes(name),\n `Validate: arg ${input.name} should have a property ${name}`\n );\n });\n};\n\nconst validateTuple = (parameter: any, input: AbiEntry) => {\n assert(\n typeof parameter === 'object' && !Array.isArray(parameter),\n `Validate: arg ${input.name} should be a tuple (defined as object)`\n );\n // todo: skip tuple structural validation for now\n};\n\nconst validateArray = (parameter: any, input: AbiEntry, structs: AbiStructs) => {\n const baseType = input.type.replace('*', '');\n\n // Long text (special case when parameter is not an array but long text)\n if (isTypeFelt(baseType) && isLongText(parameter)) return;\n\n assert(Array.isArray(parameter), `Validate: arg ${input.name} should be an Array`);\n\n switch (true) {\n case isTypeFelt(baseType):\n parameter.forEach((param: BigNumberish) => validateFelt(param, input));\n break;\n case isTypeTuple(baseType):\n parameter.forEach((it: any) => validateTuple(it, { name: input.name, type: baseType }));\n break;\n case isTypeStruct(baseType, structs):\n parameter.forEach((it: any) =>\n validateStruct(it, { name: input.name, type: baseType }, structs)\n );\n break;\n default:\n throw new Error(\n `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`\n );\n }\n};\n\nexport default function validateFields(\n abiMethod: FunctionAbi,\n args: Array<any>,\n structs: AbiStructs\n) {\n abiMethod.inputs.reduce((acc, input) => {\n const parameter = args[acc];\n\n switch (true) {\n case isLen(input.name):\n return acc;\n case isTypeFelt(input.type):\n validateFelt(parameter, input);\n break;\n case isTypeStruct(input.type, structs):\n validateStruct(parameter, input, structs);\n break;\n case isTypeTuple(input.type):\n validateTuple(parameter, input);\n break;\n case isTypeArray(input.type):\n validateArray(parameter, input, structs);\n break;\n default:\n throw new Error(\n `Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`\n );\n }\n\n return acc + 1;\n }, 0);\n}\n","import { Abi, AbiEntry, AbiStructs, Args, Calldata, FunctionAbi } from '../../types';\nimport assert from '../assert';\nimport { isBigInt } from '../num';\nimport { isLongText, splitLongString } from '../shortString';\nimport { felt, isLen } from './cairo';\nimport formatter from './formatter';\nimport { parseCalldataField } from './requestParser';\nimport responseParser from './responseParser';\nimport validateFields from './validate';\n\n// Helpers\n\nexport class CallData {\n abi: Abi;\n\n protected readonly structs: AbiStructs;\n\n constructor(abi: Abi) {\n this.abi = abi;\n this.structs = CallData.getAbiStruct(abi);\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 public validate(type: 'INVOKE' | 'CALL' | 'DEPLOY', method: string, args: Array<any> = []) {\n // ensure provided method of type exists\n if (type !== 'DEPLOY') {\n const invocableFunctionNames = 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 invocableFunctionNames.includes(method),\n `${type === 'INVOKE' ? 'invocable' : 'viewable'} method not found in abi`\n );\n }\n\n // get requested method from abi\n const abiMethod = this.abi.find((abi) =>\n type === 'DEPLOY'\n ? abi.name === method && abi.type === method\n : abi.name === method && abi.type === 'function'\n ) as FunctionAbi;\n\n // validate arguments length\n const inputsLength = CallData.abiInputsLength(abiMethod.inputs);\n if (args.length !== inputsLength) {\n throw Error(\n `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`\n );\n }\n\n // validate parameters\n validateFields(abiMethod, args, this.structs);\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 public compile(args: Array<any>, inputs: AbiEntry[]): Calldata {\n const argsIterator = args[Symbol.iterator]();\n return inputs.reduce(\n (acc, input) =>\n isLen(input.name) ? acc : acc.concat(parseCalldataField(argsIterator, input, this.structs)),\n [] as Calldata\n );\n }\n\n /**\n * Compile contract callData without abi\n * @param data Object representing cairo method arguments or string array of compiled data\n * @returns string[]\n */\n static compile(data: object | string[]): Calldata {\n const createTree = (obj: object) => {\n const getEntries = (o: object, prefix = ''): any => {\n const oe = Array.isArray(o) ? [o.length.toString(), ...o] : o;\n return Object.entries(oe).flatMap(([k, v]) => {\n let value = v;\n if (isLongText(value)) value = splitLongString(value);\n const kk = Array.isArray(oe) && k === '0' ? '$$len' : k;\n if (isBigInt(value)) return [[`${prefix}${kk}`, felt(value)]];\n return Object(value) === value\n ? getEntries(value, `${prefix}${kk}.`)\n : [[`${prefix}${kk}`, felt(value)]];\n });\n };\n return Object.fromEntries(getEntries(obj));\n };\n\n let callTreeArray;\n if (!Array.isArray(data)) {\n // flatten structs, tuples, add array length. Process leafs as Felt\n const callTree = createTree(data);\n // convert to array\n callTreeArray = Object.values(callTree);\n } else {\n // data are already compiled or some missuses\n callTreeArray = data;\n }\n\n // add compiled property to array object\n Object.defineProperty(callTreeArray, 'compiled', {\n enumerable: false,\n writable: false,\n value: true,\n });\n return callTreeArray;\n }\n\n /**\n * Parse elements of the response array and structuring them into response object\n * @param method - method name\n * @param response - response from the method\n * @return - parsed response corresponding to the abi\n */\n public parse(method: string, response: string[]): object {\n const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const responseIterator = response.flat()[Symbol.iterator]();\n\n return outputs.flat().reduce((acc, output) => {\n acc[output.name] = responseParser(responseIterator, output, this.structs, acc);\n if (acc[output.name] && acc[`${output.name}_len`]) {\n delete acc[`${output.name}_len`];\n }\n return acc;\n }, {} as Args);\n }\n\n /**\n * Format cairo method response data to native js values based on provided format schema\n * @param method - cairo method name\n * @param response - cairo method response\n * @param format - formatter object schema\n * @returns parsed and formatted response object\n */\n public format(method: string, response: string[], format: object): object {\n const parsed = this.parse(method, response);\n return formatter(parsed, format);\n }\n\n // Helper to calculate inputs\n static abiInputsLength(inputs: AbiEntry[]) {\n return inputs.reduce((acc, input) => (!isLen(input.name) ? acc + 1 : acc), 0);\n }\n\n // Helper to extract structs\n static getAbiStruct(abi: Abi) {\n return abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n }\n}\n","import { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport {\n Abi,\n AsyncContractFunction,\n Call,\n ContractFunction,\n FunctionAbi,\n InvokeFunctionResponse,\n Overrides,\n Result,\n StructAbi,\n} from '../types';\nimport assert from '../utils/assert';\nimport { CallData } from '../utils/calldata';\nimport { CallOptions, ContractInterface } from './interface';\n\nconst splitArgsAndOptions = (args: any) => {\n const options = [\n 'blockIdentifier',\n 'parseRequest',\n 'parseResponse',\n 'formatResponse',\n 'maxFee',\n 'nonce',\n 'signature',\n ];\n const lastArg = args[args.length - 1];\n if (typeof lastArg === 'object' && options.some((x) => x in lastArg)) {\n return { args, options: args.pop() };\n }\n return { args, options: {} };\n};\n\n/**\n * Adds call methods to the contract\n */\nfunction buildCall(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const params = splitArgsAndOptions(args);\n return contract.call(functionAbi.name, params.args, {\n parseRequest: true,\n parseResponse: true,\n ...params.options,\n });\n };\n}\n\n/**\n * Adds invoke methods to the contract\n */\nfunction buildInvoke(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const params = splitArgsAndOptions(args);\n return contract.invoke(functionAbi.name, params.args, {\n parseRequest: true,\n ...params.options,\n });\n };\n}\n\n/**\n * Adds call/invoke methods to the contract\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 */\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 */\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 private callData: CallData;\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.callData = new CallData(abi);\n this.structs = CallData.getAbiStruct(abi);\n this.abi = abi;\n\n const options = { enumerable: true, value: {}, writable: false };\n Object.defineProperties(this, {\n functions: { enumerable: true, value: {}, writable: false },\n callStatic: { enumerable: true, value: {}, writable: false },\n populateTransaction: { enumerable: true, value: {}, writable: false },\n estimateFee: { enumerable: true, value: {}, writable: false },\n });\n this.abi.forEach((abiElement) => {\n if (abiElement.type !== 'function') return;\n const signature = abiElement.name;\n if (!this[signature]) {\n Object.defineProperty(this, signature, {\n ...options,\n value: buildDefault(this, abiElement),\n });\n }\n if (!this.functions[signature]) {\n Object.defineProperty(this.functions, signature, {\n ...options,\n value: buildDefault(this, abiElement),\n });\n }\n if (!this.callStatic[signature]) {\n Object.defineProperty(this.callStatic, signature, {\n ...options,\n value: buildCall(this, abiElement),\n });\n }\n if (!this.populateTransaction[signature]) {\n Object.defineProperty(this.populateTransaction, signature, {\n ...options,\n value: buildPopulate(this, abiElement),\n });\n }\n if (!this.estimateFee[signature]) {\n Object.defineProperty(this.estimateFee, signature, {\n ...options,\n value: buildEstimate(this, abiElement),\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 options: CallOptions = { parseRequest: true, parseResponse: true, formatResponse: undefined }\n ): Promise<Result> {\n assert(this.address !== null, 'contract is not connected to an address');\n const blockIdentifier = options?.blockIdentifier || undefined;\n let calldata = args[0];\n\n if (options.parseRequest && !args[0]?.compiled) {\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n\n this.callData.validate('CALL', method, args);\n calldata = this.callData.compile(args, inputs);\n }\n\n return this.providerOrAccount\n .callContract(\n {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n },\n blockIdentifier\n )\n .then((x) => {\n if (!options.parseResponse) {\n return x.result;\n }\n if (options.formatResponse) {\n return this.callData.format(method, x.result, options.formatResponse);\n }\n return this.callData.parse(method, x.result);\n });\n }\n\n public invoke(\n method: string,\n args: Array<any> = [],\n options: Overrides = {\n parseRequest: true,\n }\n ): Promise<InvokeFunctionResponse> {\n assert(this.address !== null, 'contract is not connected to an address');\n\n let calldata = args?.[0];\n if (options.parseRequest && !calldata?.compiled) {\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n\n this.callData.validate('INVOKE', method, args);\n calldata = this.callData.compile(args, inputs);\n }\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 assert(this.address !== null, 'contract is not connected to an address');\n\n if (!args[0]?.compiled) {\n this.callData.validate('INVOKE', method, args);\n }\n\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 const calldata = args?.[0]?.compiled ? args?.[0] : this.callData.compile(args, inputs);\n\n return {\n contractAddress: this.address,\n entrypoint: method,\n calldata,\n };\n }\n}\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} from '../types';\n\nexport type CallOptions = {\n blockIdentifier?: BlockIdentifier;\n parseRequest: Boolean;\n parseResponse: Boolean;\n formatResponse?: object | null;\n};\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(method: string, args?: Array<any>, options?: CallOptions): Promise<Object>;\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 { AccountInterface } from '../account';\nimport { Abi, CompiledContract, FunctionAbi } from '../types';\nimport assert from '../utils/assert';\nimport { CallData } from '../utils/calldata';\nimport { Contract } from './default';\n\nexport class ContractFactory {\n abi: Abi;\n\n compiledContract: CompiledContract;\n\n classHash: string;\n\n account: AccountInterface;\n\n private callData: CallData;\n\n constructor(\n compiledContract: CompiledContract,\n classHash: string,\n account: AccountInterface,\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.account = account;\n this.classHash = classHash;\n this.callData = new CallData(abi);\n }\n\n /**\n * Deploys contract and returns new instance of the Contract\n *\n * @param args - Array of the constructor arguments for deployment\n * @param options (optional) Object - parseRequest, parseResponse, addressSalt\n * @returns deployed Contract\n */\n public async deploy(...args: Array<any>): Promise<Contract> {\n let constructorCalldata;\n let parseRequest: Boolean = true;\n let addressSalt: string | undefined;\n\n // extract options\n args.forEach((arg) => {\n if (typeof arg !== 'object') return;\n if ('addressSalt' in arg) {\n addressSalt = arg.addressSalt;\n }\n if ('parseRequest' in arg) {\n parseRequest = arg.parseRequest;\n }\n });\n\n if (!parseRequest || args[0]?.compiled) {\n // eslint-disable-next-line prefer-destructuring\n constructorCalldata = args[0];\n } else {\n this.callData.validate('DEPLOY', 'constructor', args);\n const { inputs } = this.abi.find((abi) => abi.type === 'constructor') as FunctionAbi;\n constructorCalldata = this.callData.compile(args, inputs);\n }\n\n const {\n deploy: { contract_address, transaction_hash },\n } = await this.account.declareAndDeploy({\n contract: this.compiledContract,\n constructorCalldata,\n salt: 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.account\n );\n contractInstance.deployTransactionHash = transaction_hash;\n\n return contractInstance;\n }\n\n /**\n * Attaches to new Provider or Account\n *\n * @param account - new Provider or Account to attach to\n * @returns ContractFactory\n */\n connect(account: AccountInterface): ContractFactory {\n this.account = account;\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.account);\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 { 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 { CairoVersion, Call, CallStruct, ParsedStruct } from '../types';\nimport { getSelectorFromName } from './hash';\nimport { BigNumberish, bigNumberishArrayToDecimalStringArray, toBigInt } from './num';\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: toBigInt(call.contractAddress).toString(10),\n selector: toBigInt(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), toBigInt(nonce).toString()];\n};\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_cairo1 = (calls: Call[]) => {\n const callArray = calls.map<CallStruct>((call) => ({\n to: toBigInt(call.contractAddress).toString(10),\n selector: toBigInt(getSelectorFromName(call.entrypoint)).toString(10),\n calldata: bigNumberishArrayToDecimalStringArray(call.calldata || []),\n }));\n return callArray;\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_cairo1 = (calls: Call[]): string[] => {\n const callArray = transformCallsToMulticallArrays_cairo1(calls);\n return [\n callArray.length.toString(), // Call size\n ...callArray\n .map(({ to, selector, calldata }) => [to, selector, calldata.length.toString(), ...calldata])\n .flat(),\n ];\n};\n\n/**\n *\n * @param calls Call array\n * @param cairoVersion Defaults to 0\n * @returns string[] of calldata\n */\nexport const getExecuteCalldata = (calls: Call[], cairoVersion: CairoVersion = '0'): string[] => {\n if (cairoVersion === '1') {\n return fromCallsToExecuteCalldata_cairo1(calls);\n }\n return fromCallsToExecuteCalldata(calls);\n};\n","import { computeHashOnElements, getSelectorFromName } from '../hash';\nimport { MerkleTree } from '../merkle';\nimport { BigNumberish, isHex, toHex } from '../num';\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(value);\n } catch (e) {\n if (typeof value === 'string') {\n return toHex(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 { starkCurve } from './ec';\nimport { toBigInt } from './num';\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: string[] = [];\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] = [toBigInt(a), toBigInt(b)].sort((x, y) => (x >= y ? 1 : -1));\n return starkCurve.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 { 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 { Abi, Call, DeclareSignerDetails, InvocationsSignerDetails, Signature } from '../types';\nimport { DeployAccountSignerDetails } from '../types/signer';\nimport { starkCurve } from '../utils/ec';\nimport { buf2hex } from '../utils/encode';\nimport {\n calculateDeclareTransactionHash,\n calculateDeployAccountTransactionHash,\n calculateTransactionHash,\n} from '../utils/hash';\nimport { toHex } from '../utils/num';\nimport { getExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { SignerInterface } from './interface';\n\nexport class Signer implements SignerInterface {\n protected pk: Uint8Array | string;\n\n constructor(pk: Uint8Array | string = starkCurve.utils.randomPrivateKey()) {\n this.pk = pk instanceof Uint8Array ? buf2hex(pk) : toHex(pk);\n }\n\n public async getPubKey(): Promise<string> {\n return starkCurve.getStarkKey(this.pk);\n }\n\n public async signMessage(typedData: TypedData, accountAddress: string): Promise<Signature> {\n const msgHash = getMessageHash(typedData, accountAddress);\n return starkCurve.sign(msgHash, this.pk);\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 = getExecuteCalldata(transactions, transactionsDetail.cairoVersion);\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 starkCurve.sign(msgHash, this.pk);\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 starkCurve.sign(msgHash, this.pk);\n }\n\n public async signDeclareTransaction(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n {\n classHash,\n senderAddress,\n chainId,\n maxFee,\n version,\n nonce,\n compiledClassHash,\n }: DeclareSignerDetails\n ) {\n const msgHash = calculateDeclareTransactionHash(\n classHash,\n senderAddress,\n version,\n maxFee,\n chainId,\n nonce,\n compiledClassHash\n );\n\n return starkCurve.sign(msgHash, this.pk);\n }\n}\n","import { UDC } from '../constants';\nimport { InvokeTransactionReceiptResponse } from '../types/provider';\nimport { cleanHex } from './num';\n\n/**\n * Parse Transaction Receipt Event from UDC invoke transaction and\n * create DeployContractResponse compatibile response with adition of UDC Event data\n *\n * @param txReceipt\n * @returns DeployContractResponse | UDC Event Response data\n */\nexport function parseUDCEvent(txReceipt: InvokeTransactionReceiptResponse) {\n if (!txReceipt.events) {\n throw new Error('UDC emited event is empty');\n }\n const event = txReceipt.events.find(\n (it) => cleanHex(it.from_address) === cleanHex(UDC.ADDRESS)\n ) || {\n data: [],\n };\n return {\n transaction_hash: txReceipt.transaction_hash,\n contract_address: event.data[0],\n address: event.data[0],\n deployer: event.data[1],\n unique: event.data[2],\n classHash: event.data[3],\n calldata_len: event.data[4],\n calldata: event.data.slice(5, 5 + parseInt(event.data[4], 16)),\n salt: event.data[event.data.length - 1],\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 DeclareAndDeployContractPayload,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareContractTransaction,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n DeployContractResponse,\n DeployContractUDCResponse,\n Details,\n EstimateFee,\n EstimateFeeAction,\n EstimateFeeDetails,\n Invocation,\n InvocationsDetails,\n InvocationsSignerDetails,\n InvokeFunctionResponse,\n MultiDeployContractResponse,\n Nonce,\n Signature,\n TransactionBulk,\n TransactionStatus,\n TransactionType,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { EstimateFeeBulk, TransactionSimulation } from '../types/account';\nimport { extractContractHashes, isSierra } from '../utils/contract';\nimport { starkCurve } from '../utils/ec';\nimport { parseUDCEvent } from '../utils/events';\nimport {\n calculateContractAddressFromHash,\n feeTransactionVersion,\n transactionVersion,\n transactionVersion_2,\n} from '../utils/hash';\nimport { BigNumberish, toBigInt, toCairoBool } from '../utils/num';\nimport { parseContract } from '../utils/provider';\nimport {\n compileCalldata,\n estimatedFeeToMaxFee,\n formatSignature,\n randomAddress,\n} from '../utils/stark';\nimport { getExecuteCalldata } 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 pkOrSigner: Uint8Array | string | SignerInterface\n ) {\n super(providerOrOptions);\n this.address = address.toLowerCase();\n this.signer =\n typeof pkOrSigner === 'string' || pkOrSigner instanceof Uint8Array\n ? new Signer(pkOrSigner)\n : pkOrSigner;\n }\n\n public async getNonce(blockIdentifier?: BlockIdentifier): Promise<Nonce> {\n return super.getNonceForAddress(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, skipValidate, cairoVersion }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = toBigInt(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 cairoVersion: cairoVersion ?? '0',\n };\n\n const invocation = await this.buildInvocation(transactions, signerDetails);\n const response = await super.getInvokeEstimateFee(\n { ...invocation },\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeclareFee(\n { contract, classHash: providedClassHash, casm, compiledClassHash }: DeclareContractPayload,\n { blockIdentifier, nonce: providedNonce, skipValidate, cairoVersion }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = !isSierra(contract) ? toBigInt(feeTransactionVersion) : transactionVersion_2;\n const chainId = await this.getChainId();\n\n const declareContractTransaction = await this.buildDeclarePayload(\n { classHash: providedClassHash, contract, casm, compiledClassHash },\n {\n nonce,\n chainId,\n version,\n walletAddress: this.address,\n maxFee: ZERO,\n cairoVersion: cairoVersion ?? '0',\n }\n );\n\n const response = await super.getDeclareEstimateFee(\n declareContractTransaction,\n { version, nonce },\n blockIdentifier,\n skipValidate\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, skipValidate, cairoVersion }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const version = toBigInt(feeTransactionVersion);\n const nonce = ZERO; // DEPLOY_ACCOUNT transaction will have a nonce zero as it is the first transaction in the account\n const chainId = await this.getChainId();\n\n const payload = await this.buildAccountDeployPayload(\n { classHash, addressSalt, constructorCalldata, contractAddress: providedContractAddress },\n {\n nonce,\n chainId,\n version,\n walletAddress: this.address,\n maxFee: ZERO,\n cairoVersion: cairoVersion ?? '0',\n }\n );\n\n const response = await super.getDeployAccountEstimateFee(\n { ...payload },\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeployFee(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails | undefined\n ): Promise<EstimateFee> {\n const calls = this.buildUDCContractPayload(payload);\n return this.estimateInvokeFee(calls, transactionsDetail);\n }\n\n public async estimateFeeBulk(\n transactions: TransactionBulk,\n { nonce: providedNonce, blockIdentifier, cairoVersion }: EstimateFeeDetails = {}\n ): Promise<EstimateFeeBulk> {\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = toBigInt(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const params: any = await Promise.all(\n [].concat(transactions as []).map(async (transaction: any, index: number) => {\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce: toBigInt(Number(nonce) + index),\n maxFee: ZERO,\n version,\n chainId,\n cairoVersion: cairoVersion ?? '0',\n };\n\n const txPayload = transaction.payload;\n\n let res;\n if (typeof transaction === 'object' && transaction.type === 'INVOKE_FUNCTION') {\n const invocation = await this.buildInvocation(\n Array.isArray(txPayload) ? txPayload : [txPayload],\n signerDetails\n );\n res = {\n type: 'INVOKE_FUNCTION',\n ...invocation,\n version,\n nonce: toBigInt(Number(nonce) + index),\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DECLARE') {\n const declareContractPayload = await this.buildDeclarePayload(txPayload, signerDetails);\n res = {\n type: 'DECLARE',\n ...declareContractPayload,\n version,\n nonce: toBigInt(Number(nonce) + index),\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DEPLOY_ACCOUNT') {\n const payload = await this.buildAccountDeployPayload(txPayload, signerDetails);\n res = {\n type: 'DEPLOY_ACCOUNT',\n ...payload,\n version,\n nonce,\n blockIdentifier,\n };\n } else if (typeof transaction === 'object' && transaction.type === 'DEPLOY') {\n const calls = this.buildUDCContractPayload(txPayload);\n const invocation = await this.buildInvocation(calls, signerDetails);\n res = {\n type: 'INVOKE_FUNCTION',\n ...invocation,\n version,\n nonce: toBigInt(Number(nonce) + index),\n blockIdentifier,\n };\n }\n return res;\n })\n );\n\n const response = await super.getEstimateFeeBulk(params, blockIdentifier);\n\n return [].concat(response as []).map((elem: any) => {\n const suggestedMaxFee = estimatedFeeToMaxFee(elem.overall_fee);\n return {\n ...elem,\n suggestedMaxFee,\n };\n });\n }\n\n public async buildInvocation(\n call: Array<Call>,\n signerDetails: InvocationsSignerDetails\n ): Promise<Invocation> {\n const calldata = getExecuteCalldata(call, signerDetails.cairoVersion);\n const signature = await this.signer.signTransaction(call, signerDetails);\n\n return {\n contractAddress: this.address,\n calldata,\n signature,\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 = toBigInt(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n { type: TransactionType.INVOKE, payload: calls },\n transactionsDetail\n ));\n const version = toBigInt(transactionVersion);\n const chainId = await this.getChainId();\n\n const cairoVersion = transactionsDetail.cairoVersion ?? '0';\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee,\n version,\n chainId,\n cairoVersion,\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails, abis);\n\n const calldata = getExecuteCalldata(transactions, cairoVersion);\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 payload: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const declareContractPayload = extractContractHashes(payload);\n const details = {} as Details;\n\n details.nonce = toBigInt(transactionsDetail.nonce ?? (await this.getNonce()));\n details.maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: TransactionType.DECLARE,\n payload: declareContractPayload,\n },\n transactionsDetail\n ));\n details.version = !isSierra(payload.contract) ? transactionVersion : transactionVersion_2;\n details.chainId = await this.getChainId();\n\n const declareContractTransaction = await this.buildDeclarePayload(declareContractPayload, {\n ...details,\n walletAddress: this.address,\n cairoVersion: transactionsDetail.cairoVersion ?? '0', // This can be removed as declare doesn't depend on cairo version. Kept here because of the type mismatch\n });\n\n return this.declareContract(declareContractTransaction, details);\n }\n\n public async deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse> {\n const params = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n const deploySalt = salt ?? randomAddress();\n\n return {\n call: {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n deploySalt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n address: calculateContractAddressFromHash(\n unique ? starkCurve.pedersen(this.address, deploySalt) : deploySalt,\n classHash,\n compiledConstructorCallData,\n unique ? UDC.ADDRESS : 0\n ),\n };\n });\n\n const calls = params.map((it) => it.call);\n const addresses = params.map((it) => it.address);\n const invokeResponse = await this.execute(calls, undefined, details);\n\n return {\n ...invokeResponse,\n contract_address: addresses,\n };\n }\n\n public async deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse> {\n const deployTx = await this.deploy(payload, details);\n const txReceipt = await this.waitForTransaction(deployTx.transaction_hash, {\n successStates: [TransactionStatus.ACCEPTED_ON_L2],\n });\n return parseUDCEvent(txReceipt);\n }\n\n public async declareAndDeploy(\n payload: DeclareAndDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse> {\n const { contract, constructorCalldata, salt, unique } = payload;\n const { transaction_hash, class_hash } = await this.declare({ contract }, details);\n const declare = await this.waitForTransaction(transaction_hash, {\n successStates: [TransactionStatus.ACCEPTED_ON_L2],\n });\n const deploy = await this.deployContract(\n { classHash: class_hash, salt, unique, constructorCalldata },\n details\n );\n return { declare: { ...declare, class_hash }, deploy };\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 version = toBigInt(transactionVersion);\n const nonce = ZERO; // DEPLOY_ACCOUNT transaction will have a nonce zero as it is the first transaction in the account\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: TransactionType.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: toBigInt(hash).toString(),\n signature: formatSignature(signature),\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 TransactionType.INVOKE:\n feeEstimate = await this.estimateInvokeFee(payload, details);\n break;\n\n case TransactionType.DECLARE:\n feeEstimate = await this.estimateDeclareFee(payload, details);\n break;\n\n case TransactionType.DEPLOY_ACCOUNT:\n feeEstimate = await this.estimateAccountDeployFee(payload, details);\n break;\n\n case TransactionType.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;\n }\n\n /**\n * @deprecated will be renamed to buildDeclareContractTransaction\n */\n public async buildDeclarePayload(\n payload: DeclareContractPayload,\n { nonce, chainId, version, walletAddress, maxFee }: InvocationsSignerDetails\n ): Promise<DeclareContractTransaction> {\n const { classHash, contract, compiledClassHash } = extractContractHashes(payload);\n const contractDefinition = parseContract(contract);\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n compiledClassHash,\n senderAddress: walletAddress,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return {\n senderAddress: walletAddress,\n signature,\n contractDefinition,\n compiledClassHash,\n };\n }\n\n public async buildAccountDeployPayload(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { nonce, chainId, version, maxFee }: InvocationsSignerDetails\n ): Promise<DeployAccountContractTransaction> {\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,\n version,\n nonce,\n addressSalt,\n constructorCalldata,\n });\n\n return {\n classHash,\n addressSalt,\n constructorCalldata,\n signature,\n };\n }\n\n public buildUDCContractPayload(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[]\n ): Call[] {\n const calls = [].concat(payload as []).map((it) => {\n const {\n classHash,\n salt = '0',\n unique = true,\n constructorCalldata = [],\n } = it as UniversalDeployerContractPayload;\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n\n return {\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 });\n return calls;\n }\n\n public async simulateTransaction(\n calls: AllowArray<Call>,\n { nonce: providedNonce, blockIdentifier, skipValidate, cairoVersion }: EstimateFeeDetails = {}\n ): Promise<TransactionSimulation> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBigInt(providedNonce ?? (await this.getNonce()));\n const version = toBigInt(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 cairoVersion: cairoVersion ?? '0',\n };\n\n const invocation = await this.buildInvocation(transactions, signerDetails);\n const response = await super.getSimulateTransaction(\n invocation,\n { version, nonce },\n blockIdentifier,\n skipValidate\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.fee_estimation.overall_fee);\n\n return {\n ...response,\n fee_estimation: {\n ...response.fee_estimation,\n suggestedMaxFee,\n },\n };\n }\n\n public override async getStarkName(\n address: BigNumberish = this.address, // default to the wallet address\n StarknetIdContract?: string\n ): Promise<string> {\n return super.getStarkName(address, StarknetIdContract);\n }\n}\n","import { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport { SignerInterface } from '../signer';\nimport {\n Abi,\n AllowArray,\n Call,\n DeclareAndDeployContractPayload,\n DeclareContractPayload,\n DeclareContractResponse,\n DeclareDeployUDCResponse,\n DeployAccountContractPayload,\n DeployContractResponse,\n DeployContractUDCResponse,\n EstimateFeeAction,\n EstimateFeeDetails,\n EstimateFeeResponse,\n EstimateFeeResponseBulk,\n InvocationsDetails,\n InvokeFunctionResponse,\n MultiDeployContractResponse,\n Nonce,\n Signature,\n TransactionBulk,\n TransactionSimulation,\n UniversalDeployerContractPayload,\n} from '../types';\nimport { BigNumberish } from '../utils/num';\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 * 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 -\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 * @param estimateFeeDetails -\n * - optional blockIdentifier\n * - constant nonce = 0\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 * \n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract estimateDeployFee(\n deployContractPayload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n transactionsDetail?: InvocationsDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a list of transactions on starknet\n * Contract must be deployed for fee estimation to be possible\n *\n * @param transactions array of transaction object containing :\n * - type - the type of transaction : 'DECLARE' | 'DEPLOY' | 'INVOKE_FUNCTION' | 'DEPLOY_ACCOUNT'\n * - payload - the payload of the transaction\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFeeBulk(\n transactions: TransactionBulk,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponseBulk>;\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 - (optional) classHash: computed class hash of compiled contract. Pre-compute it for faster execution.\n - (required for Cairo1 without compiledClassHash) casm: CompiledContract | string;\n - (optional for Cairo1 with casm) compiledClassHash: compiled class hash from casm. Pre-compute it for faster execution.\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 declared contract to starknet - using Universal Deployer Contract (UDC)\n * support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address[]\n * - transaction_hash\n */\n public abstract deploy(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<MultiDeployContractResponse>;\n\n /**\n * Simplify deploy simulating old DeployContract with same response + UDC specific response\n * Internal wait for L2 transaction, support multicall\n *\n * @param payload -\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details -\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract deployContract(\n payload: UniversalDeployerContractPayload | UniversalDeployerContractPayload[],\n details?: InvocationsDetails | undefined\n ): Promise<DeployContractUDCResponse>;\n\n /**\n * Declares and Deploy a given compiled contract (json) to starknet using UDC\n * Internal wait for L2 transaction, do not support multicall\n *\n * @param containing\n * - contract: compiled contract code\n * - classHash: computed class hash of compiled contract\n * - [constructorCalldata] contract constructor calldata\n * - [salt=pseudorandom] deploy address salt\n * - [unique=true] ensure unique salt\n * @param details\n * - [nonce=getNonce]\n * - [version=transactionVersion]\n * - [maxFee=getSuggestedMaxFee]\n * @returns\n * - declare\n * - transaction_hash\n * - deploy\n * - contract_address\n * - transaction_hash\n * - address\n * - deployer\n * - unique\n * - classHash\n * - calldata_len\n * - calldata\n * - salt\n */\n public abstract declareAndDeploy(\n payload: DeclareAndDeployContractPayload,\n details?: InvocationsDetails | undefined\n ): Promise<DeclareDeployUDCResponse>;\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 - constant nonce = 0\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<Nonce>;\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<bigint>;\n\n /**\n * Simulates the transaction and returns the transaction trace and estimated fee.\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 simulateTransaction(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<TransactionSimulation>;\n}\n","/* eslint-disable no-bitwise */\nimport { hexToBytes } from '@noble/curves/abstract/utils';\n\nimport { MASK_251, ZERO } from '../constants';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { keccakBn } from './hash';\nimport { BigNumberish, assertInRange, toHex } from './num';\n\nexport function addAddressPadding(address: BigNumberish): string {\n return addHexPrefix(removeHexPrefix(toHex(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 hex = removeHexPrefix(keccakBn(address));\n const hashed = hexToBytes(hex.padStart(64, '0'));\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,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE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","names":["EntryPointType","TransactionStatus","TransactionType","RPC","TransactionType","isomorphicFetch","BaseUrl","NetworkName","StarknetChainId","TransactionHashPrefix","number","hexToBytesNoble","parse","stringify","json","stringify","parse","parse","import_micro_starknet","stringify","stringify","parse","stringify","import_url_join","urljoin","defaultOptions","urljoin","stringify","parse","import_utils"]}