@bgd-labs/toolbox 0.0.7 → 0.0.8

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/math/binary.ts","../src/aave/user.ts","../src/aave/reserve.ts","../src/aave/constants.ts","../src/aave/ray-math.ts","../src/aave/pool-math.ts","../../../node_modules/.pnpm/@bgd-labs+aave-address-book@4.15.0/node_modules/@bgd-labs/aave-address-book/src/ts/abis/IPayloadsControllerCore.ts","../../../node_modules/.pnpm/@bgd-labs+aave-address-book@4.15.0/node_modules/@bgd-labs/aave-address-book/src/ts/abis/IGovernanceCore.ts","../src/aave/governance/payloads-controller.ts","../src/math/slot.ts","../src/aave/governance/governance.ts","../src/ecosystem/generated/etherscanExplorers.ts","../src/ecosystem/generated/routescanExplorers.ts","../src/ecosystem/explorers.ts","../src/ecosystem/tenderly.ts","../src/ecosystem/foundry.ts","../src/ecosystem/event-db.ts","../src/ecosystem/chainIds.ts","../src/ecosystem/rpcs.ts","../src/ecosystem/generated/alchemyNetworkMap.ts","../src/ecosystem/generated/quicknodeNetworkMap.ts","../src/ecosystem/constants.ts","../src/operations/diffCode.ts","../src/seatbelt/logs.ts","../src/seatbelt/selfdestruct.ts","../src/seatbelt/verified.ts","../src/seatbelt/tenderly-report.ts"],"sourcesContent":["export * from \"./math/binary\";\nexport * from \"./aave/user\";\nexport * from \"./aave/reserve\";\nexport * from \"./aave/constants\";\nexport * from \"./aave/pool-math\";\nexport * from \"./aave/ray-math\";\nexport * from \"./aave/governance/payloads-controller\";\nexport * from \"./aave/governance/governance\";\nexport * from \"./ecosystem/explorers\";\nexport * from \"./ecosystem/tenderly\";\nexport * from \"./ecosystem/foundry\";\nexport * from \"./ecosystem/event-db\";\nexport * from \"./ecosystem/chainIds\";\nexport * from \"./ecosystem/rpcs\";\nexport * from \"./ecosystem/generated/alchemyNetworkMap\";\nexport * from \"./ecosystem/generated/quicknodeNetworkMap\";\nexport * from \"./ecosystem/generated/etherscanExplorers\";\nexport * from \"./ecosystem/generated/routescanExplorers\";\n// some commonjs issue idk\n// export * from \"./ecosystem/ipfs\";\nexport * from \"./ecosystem/constants\";\nexport * from \"./operations/diffCode\";\nexport * from \"./seatbelt/logs\";\nexport * from \"./seatbelt/selfdestruct\";\nexport * from \"./seatbelt/tenderly-report\";\n","/**\n * In solidity it is a quite common practice to encode bit variables in bitmaps opposed to bool structs.\n * The reason for this is that solidity will pack one boolean per byte, while with a bitmap, one can pack one bit.. per bit.\n * These utilities help with extracting the indexes of a given bitmap.\n */\n\n/**\n * Decodes a bitmap as an array of indexes.\n * @param bitmap The bitmap\n * @returns an array of indexes\n */\nexport function bitmapToIndexes(bitmap: bigint): number[] {\n const indexes: number[] = [];\n for (let i = 0; bitmap != 0n; i++) {\n if (bitmap & 0x1n) indexes.push(i);\n bitmap = bitmap >> 1n;\n }\n return indexes;\n}\n\n/**\n * Returns the selected bits of a uint256 as bigint\n * @param uint256\n * @param startBit\n * @param endBit\n * @returns\n */\nexport function getBits(\n uint256: bigint,\n startBit: bigint,\n _endBit: bigint,\n): bigint {\n let endBit = _endBit;\n if (startBit > endBit) {\n throw new Error(\n \"Invalid bit range: startBit must be less than or equal to endBit\",\n );\n }\n\n const bitLength = BigInt(uint256.toString(2)).toString().length;\n if (endBit >= bitLength) {\n endBit = BigInt(bitLength - 1);\n }\n\n const mask = (1n << (endBit - startBit + 1n)) - 1n;\n return (uint256 >> startBit) & mask;\n}\n\n/**\n * Sets the bits in a bigint\n * @param input\n * @param startBit inclusive\n * @param endBit inclusive\n * @param value the value to replace\n * @returns\n */\nexport function setBits(\n input: bigint,\n startBit: bigint,\n endBit: bigint,\n replaceValue: bigint | number,\n) {\n const bigIntReplaceValue = BigInt(replaceValue);\n\n // Calculate the mask for the specified range\n let mask = BigInt(0);\n for (let i = startBit; i < endBit + 1n; i++) {\n mask |= BigInt(1) << BigInt(i);\n }\n // Clear the bits in the original number within the specified range\n const clearedNumber = input & ~mask;\n\n // Set the new bits in the specified range\n const result = clearedNumber | (bigIntReplaceValue << BigInt(startBit));\n return result;\n}\n","import { bitmapToIndexes } from \"../math/binary\";\n\n/**\n * The userConfiguration on aave is stored as an alteranting bitmap.\n * The least significant bit starts with borrowing on reserve 0\n * In practice this means that the following bitmap b'1011 would mean a user\n * is borrowing(bit 0) reserve 0, and supplies(bit 1,3) collateral on reserve 0 and 1\n * @param userConfiguration bitmap\n */\nexport function decodeUserConfiguration(userConfiguration: bigint) {\n const indexes = bitmapToIndexes(userConfiguration);\n const borrowedAssetIds: number[] = [];\n const collateralAssetIds: number[] = [];\n for (const index of indexes) {\n if (index % 2 == 0) borrowedAssetIds.push(index / 2);\n else collateralAssetIds.push((index - 1) / 2);\n }\n return { borrowedAssetIds, collateralAssetIds };\n}\n","import { getBits } from \"../math/binary\";\n\nexport type ReserveConfiguration = {\n ltv: bigint;\n liquidationThreshold: bigint;\n liquidationBonus: bigint;\n decimals: bigint;\n active: boolean;\n frozen: boolean;\n borrowingEnabled: boolean;\n // deprecated in 3.1\n // stableRateBorrowingEnabled: boolean;\n paused: boolean;\n borrowingInIsolation: boolean;\n siloedBorrowingEnabled: boolean;\n flashloaningEnabled: boolean;\n reserveFactor: bigint;\n borrowCap: bigint;\n supplyCap: bigint;\n liquidationProtocolFee: bigint;\n // deprecated in 3.2\n // eModeCategory: bigint;\n unbackedMintCap: bigint;\n debtCeiling: bigint;\n virtualAccountingEnabled: boolean;\n};\n\n/**\n * ReserveConfiguration is a tightly packed struct that contains the configuration of a reserve\n * @param data\n * @returns the decoded ReserveConfiguration\n */\nexport function decodeReserveConfiguration(data: bigint): ReserveConfiguration {\n const ltv = getBits(data, 0n, 15n);\n const liquidationThreshold = getBits(data, 16n, 31n);\n const liquidationBonus = getBits(data, 32n, 47n);\n const decimals = getBits(data, 48n, 55n);\n const active = getBits(data, 56n, 56n);\n const frozen = getBits(data, 57n, 57n);\n const borrowingEnabled = getBits(data, 58n, 58n);\n // const stableRateBorrowingEnabled = getBits(data, 59n, 59n);\n const paused = getBits(data, 60n, 60n);\n const borrowingInIsolation = getBits(data, 61n, 61n);\n const siloedBorrowingEnabled = getBits(data, 62n, 62n);\n const flashloaningEnabled = getBits(data, 63n, 63n);\n const reserveFactor = getBits(data, 64n, 79n);\n const borrowCap = getBits(data, 80n, 115n);\n const supplyCap = getBits(data, 116n, 151n);\n const liquidationProtocolFee = getBits(data, 152n, 167n);\n // const eModeCategory = getBits(data, 168n, 175n);\n const unbackedMintCap = getBits(data, 176n, 211n);\n const debtCeiling = getBits(data, 212n, 251n);\n const virtualAccountingEnabled = getBits(data, 252n, 252n);\n\n return {\n ltv,\n liquidationThreshold,\n liquidationBonus,\n decimals,\n active: !!active,\n frozen: !!frozen,\n borrowingEnabled: !!borrowingEnabled,\n // stableRateBorrowingEnabled: !!stableRateBorrowingEnabled,\n paused: !!paused,\n borrowingInIsolation: !!borrowingInIsolation,\n reserveFactor,\n borrowCap,\n supplyCap,\n liquidationProtocolFee,\n // eModeCategory,\n unbackedMintCap,\n debtCeiling,\n siloedBorrowingEnabled: !!siloedBorrowingEnabled,\n flashloaningEnabled: !!flashloaningEnabled,\n virtualAccountingEnabled: !!virtualAccountingEnabled,\n };\n}\n\nexport function decodeReserveConfigurationV2(data: bigint) {\n const ltv = getBits(data, 0n, 15n);\n const liquidationThreshold = getBits(data, 16n, 31n);\n const liquidationBonus = getBits(data, 32n, 47n);\n const decimals = getBits(data, 48n, 55n);\n const active = Number(getBits(data, 56n, 56n));\n const frozen = Number(getBits(data, 57n, 57n));\n const borrowingEnabled = Number(getBits(data, 58n, 58n));\n const stableBorrowingEnabled = Number(getBits(data, 59n, 59n));\n const reserveFactor = getBits(data, 64n, 79n);\n return {\n ltv,\n liquidationThreshold,\n liquidationBonus,\n decimals,\n active: !!active,\n frozen: !!frozen,\n borrowingEnabled: !!borrowingEnabled,\n stableBorrowingEnabled: !!stableBorrowingEnabled,\n reserveFactor,\n };\n}\n","export const SECONDS_PER_YEAR = 31536000n;\nexport const LTV_PRECISION = 4n;\n","// JS implementation of https://github.com/bgd-labs/aave-v3-origin/blob/main/src/contracts/protocol/libraries/math/WadRayMath.sol\nexport const WAD = 10n ** 18n;\nexport const HALF_WAD = WAD / 2n;\n\nexport const RAY = 10n ** 27n;\nexport const HALF_RAY = RAY / 2n;\n\nexport const WAD_RAY_RATIO = 10n ** 9n;\n\nexport function rayMul(a: bigint, b: bigint): bigint {\n return (a * b + HALF_RAY) / RAY;\n}\n\nexport function rayDiv(a: bigint, b: bigint): bigint {\n const halfB = b / 2n;\n\n return (halfB + a * RAY) / b;\n}\n\nexport function rayToWad(a: bigint): bigint {\n const halfRatio = WAD_RAY_RATIO / 2n;\n\n return (halfRatio + a) / WAD_RAY_RATIO;\n}\n\nexport function wadToRay(a: bigint): bigint {\n return a * WAD_RAY_RATIO;\n}\n\nexport function wadDiv(a: bigint, b: bigint): bigint {\n const halfB = b / 2n;\n\n return (halfB + a * WAD) / b;\n}\n","import { LTV_PRECISION, SECONDS_PER_YEAR } from \"./constants\";\nimport * as RayMath from \"./ray-math\";\n\ninterface CalculateCompoundedInterestRequest {\n rate: bigint;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateCompoundedInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: CalculateCompoundedInterestRequest): bigint {\n const exp = BigInt(currentTimestamp - lastUpdateTimestamp);\n\n if (exp == 0n) {\n return RayMath.RAY;\n }\n\n const expMinusOne = exp - 1n;\n const expMinusTwo = exp > 2 ? exp - 2n : 0n;\n const basePowerTwo =\n RayMath.rayMul(rate, rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\n const basePowerThree = RayMath.rayMul(basePowerTwo, rate) / SECONDS_PER_YEAR;\n\n const secondTerm = (exp * expMinusOne * basePowerTwo) / 2n;\n const thirdTerm = (exp * expMinusOne * expMinusTwo * basePowerThree) / 6n;\n return RayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\n}\n\ninterface LinearInterestRequest {\n rate: bigint;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateLinearInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: LinearInterestRequest): bigint {\n return (\n (rate * BigInt(currentTimestamp - lastUpdateTimestamp)) / SECONDS_PER_YEAR +\n RayMath.RAY\n );\n}\n\ninterface NormalizedIncomeRequest {\n rate: bigint;\n index: bigint;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\nexport function getNormalizedIncome({\n rate,\n index,\n lastUpdateTimestamp,\n currentTimestamp,\n}: NormalizedIncomeRequest): bigint {\n if (!rate) {\n return index;\n }\n\n const cumulatedInterest = calculateLinearInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n });\n\n return RayMath.rayMul(index, cumulatedInterest);\n}\n\nexport function getNormalizedDebt({\n rate,\n index,\n currentTimestamp,\n lastUpdateTimestamp,\n}: NormalizedIncomeRequest): bigint {\n if (currentTimestamp === lastUpdateTimestamp || rate === 0n) {\n return index;\n }\n return RayMath.rayMul(\n index,\n calculateCompoundedInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n }),\n );\n}\n\ninterface CurrentBalanceRequest {\n scaledBalance: bigint;\n index: bigint;\n rate: bigint;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\nexport function getCurrentLiquidityBalance({\n scaledBalance,\n index,\n rate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: CurrentBalanceRequest) {\n if (!scaledBalance) {\n return 0n;\n }\n\n return RayMath.rayToWad(\n RayMath.rayMul(\n RayMath.wadToRay(scaledBalance),\n getNormalizedIncome({\n rate,\n index,\n lastUpdateTimestamp,\n currentTimestamp,\n }),\n ),\n );\n}\n\nexport function getCurrentDebtBalance({\n index,\n scaledBalance,\n rate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: CurrentBalanceRequest): bigint {\n if (!scaledBalance) {\n return 0n;\n }\n\n return RayMath.rayMul(\n scaledBalance,\n getNormalizedDebt({\n index,\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n }),\n );\n}\n\ninterface HealthFactorFromBalanceRequest {\n collateralBalanceMarketReferenceCurrency: bigint;\n borrowBalanceMarketReferenceCurrency: bigint;\n averageLiquidationThreshold: bigint;\n}\n\n// 1e18 returned means 1HF\nexport function calculateHealthFactorFromBalances({\n borrowBalanceMarketReferenceCurrency,\n collateralBalanceMarketReferenceCurrency,\n averageLiquidationThreshold,\n}: HealthFactorFromBalanceRequest): bigint {\n if (!borrowBalanceMarketReferenceCurrency) {\n return -1n; // Invalid number\n }\n\n return RayMath.wadDiv(\n (collateralBalanceMarketReferenceCurrency * averageLiquidationThreshold) /\n 10n ** LTV_PRECISION,\n borrowBalanceMarketReferenceCurrency,\n );\n}\n\ninterface AvailableBorrowsMarketReferenceCurrencyRequest {\n collateralBalanceMarketReferenceCurrency: bigint;\n borrowBalanceMarketReferenceCurrency: bigint;\n currentLtv: bigint;\n}\n\nexport function calculateAvailableBorrowsMarketReferenceCurrency({\n collateralBalanceMarketReferenceCurrency,\n borrowBalanceMarketReferenceCurrency,\n currentLtv,\n}: AvailableBorrowsMarketReferenceCurrencyRequest): bigint {\n if (!currentLtv) {\n return 0n;\n }\n\n const availableBorrowsMarketReferenceCurrency =\n (collateralBalanceMarketReferenceCurrency * currentLtv) /\n 10n ** LTV_PRECISION -\n borrowBalanceMarketReferenceCurrency;\n return availableBorrowsMarketReferenceCurrency > 0\n ? availableBorrowsMarketReferenceCurrency\n : 0n;\n}\n\ninterface MarketReferenceCurrencyAndUsdBalanceRequest {\n balance: bigint;\n priceInMarketReferenceCurrency: bigint;\n marketReferenceCurrencyDecimals: number;\n decimals: number;\n marketReferencePriceInUsdNormalized: bigint;\n}\n\ninterface MarketReferenceAndUsdBalanceResponse {\n marketReferenceCurrencyBalance: bigint;\n usdBalance: bigint;\n}\n/**\n * @returns non humanized/normalized values for usd/marketReference\n */\nexport function getMarketReferenceCurrencyAndUsdBalance({\n balance,\n priceInMarketReferenceCurrency,\n marketReferenceCurrencyDecimals,\n decimals,\n marketReferencePriceInUsdNormalized,\n}: MarketReferenceCurrencyAndUsdBalanceRequest): MarketReferenceAndUsdBalanceResponse {\n const marketReferenceCurrencyBalance =\n (balance * priceInMarketReferenceCurrency) / BigInt(10 ** decimals);\n const usdBalance =\n (marketReferenceCurrencyBalance * marketReferencePriceInUsdNormalized) /\n BigInt(10 ** marketReferenceCurrencyDecimals);\n return { marketReferenceCurrencyBalance, usdBalance };\n}\n","// AUTOGENERATED - MANUALLY CHANGES WILL BE REVERTED BY THE GENERATOR\nexport const IPayloadsControllerCore_ABI = [\n {\n type: 'function',\n name: 'EXPIRATION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'GRACE_PERIOD',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MAX_EXECUTION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MIN_EXECUTION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'cancelPayload',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'createPayload',\n inputs: [\n {\n name: 'actions',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'executePayload',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'getExecutorSettingsByAccessControl',\n inputs: [\n {\n name: 'accessControl',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.ExecutorConfig',\n components: [\n {\n name: 'executor',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadById',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.Payload',\n components: [\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'maximumAccessLevelRequired',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'state',\n type: 'uint8',\n internalType: 'enum IPayloadsControllerCore.PayloadState',\n },\n {\n name: 'createdAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'queuedAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'executedAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'cancelledAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'expirationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'gracePeriod',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'actions',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadState',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint8',\n internalType: 'enum IPayloadsControllerCore.PayloadState',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'updateExecutors',\n inputs: [\n {\n name: 'executors',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.UpdateExecutorInput[]',\n components: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'executorConfig',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.ExecutorConfig',\n components: [\n {\n name: 'executor',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n name: 'ExecutorSet',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'executor',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadCancelled',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadCreated',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: true,\n internalType: 'uint40',\n },\n {\n name: 'creator',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'actions',\n type: 'tuple[]',\n indexed: false,\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n {\n name: 'maximumAccessLevelRequired',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadExecuted',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadExecutionMessageReceived',\n inputs: [\n {\n name: 'originSender',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'originChainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'delivered',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n {\n name: 'message',\n type: 'bytes',\n indexed: false,\n internalType: 'bytes',\n },\n {\n name: 'reason',\n type: 'bytes',\n indexed: false,\n internalType: 'bytes',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadQueued',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n] as const;\n","// AUTOGENERATED - MANUALLY CHANGES WILL BE REVERTED BY THE GENERATOR\nexport const IGovernanceCore_ABI = [\n {\n type: 'function',\n name: 'ACHIEVABLE_VOTING_PARTICIPATION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'CANCELLATION_FEE_COLLECTOR',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'COOLDOWN_PERIOD',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MIN_VOTING_DURATION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'NAME',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'PRECISION_DIVIDER',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'PROPOSAL_EXPIRATION_TIME',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'VOTING_TOKENS_CAP',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'activateVoting',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'addVotingPortals',\n inputs: [\n {\n name: 'votingPortals',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'cancelProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'createProposal',\n inputs: [\n {\n name: 'payloads',\n type: 'tuple[]',\n internalType: 'struct PayloadsControllerUtils.Payload[]',\n components: [\n {\n name: 'chain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'payloadsController',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'executeProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'getCancellationFee',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPowerStrategy',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IGovernancePowerStrategy',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IGovernanceCore.Proposal',\n components: [\n {\n name: 'state',\n type: 'uint8',\n internalType: 'enum IGovernanceCore.State',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'creationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingActivationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'queuingTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'cancelTimestamp',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'snapshotBlockHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: 'forVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'againstVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'cancellationFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'payloads',\n type: 'tuple[]',\n internalType: 'struct PayloadsControllerUtils.Payload[]',\n components: [\n {\n name: 'chain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'payloadsController',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposalState',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint8',\n internalType: 'enum IGovernanceCore.State',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposalsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getRepresentativeByChain',\n inputs: [\n {\n name: 'voter',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getRepresentedVotersByChain',\n inputs: [\n {\n name: 'representative',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getVotingConfig',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IGovernanceCore.VotingConfig',\n components: [\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint56',\n internalType: 'uint56',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint56',\n internalType: 'uint56',\n },\n {\n name: 'minPropositionPower',\n type: 'uint56',\n internalType: 'uint56',\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getVotingPortalsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'isVotingPortalApproved',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'queueProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'forVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'againstVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'redeemCancellationFee',\n inputs: [\n {\n name: 'proposalIds',\n type: 'uint256[]',\n internalType: 'uint256[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'removeVotingPortals',\n inputs: [\n {\n name: 'votingPortals',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'rescueVotingPortal',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setPowerStrategy',\n inputs: [\n {\n name: 'newPowerStrategy',\n type: 'address',\n internalType: 'contract IGovernancePowerStrategy',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setVotingConfigs',\n inputs: [\n {\n name: 'votingConfigs',\n type: 'tuple[]',\n internalType: 'struct IGovernanceCore.SetVotingConfigInput[]',\n components: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'minPropositionPower',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'updateCancellationFee',\n inputs: [\n {\n name: 'cancellationFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'updateRepresentativesForChain',\n inputs: [\n {\n name: 'representatives',\n type: 'tuple[]',\n internalType: 'struct IGovernanceCore.RepresentativeInput[]',\n components: [\n {\n name: 'representative',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n name: 'CancellationFeeRedeemed',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'to',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'cancellationFee',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'success',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'CancellationFeeUpdated',\n inputs: [\n {\n name: 'cancellationFee',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadSent',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n {\n name: 'payloadsController',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'payloadNumberOnProposal',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'numberOfPayloadsOnProposal',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PowerStrategyUpdated',\n inputs: [\n {\n name: 'newPowerStrategy',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalCanceled',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalCreated',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'creator',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n indexed: false,\n internalType: 'bytes32',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalExecuted',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalFailed',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'votesFor',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n {\n name: 'votesAgainst',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalQueued',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'votesFor',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n {\n name: 'votesAgainst',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'RepresentativeUpdated',\n inputs: [\n {\n name: 'voter',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'representative',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VoteForwarded',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'voter',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'support',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n {\n name: 'votingAssetsWithSlot',\n type: 'tuple[]',\n indexed: false,\n internalType: 'struct IVotingMachineWithProofs.VotingAssetWithSlot[]',\n components: [\n {\n name: 'underlyingAsset',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'slot',\n type: 'uint128',\n internalType: 'uint128',\n },\n ],\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingActivated',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'snapshotBlockHash',\n type: 'bytes32',\n indexed: true,\n internalType: 'bytes32',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingConfigUpdated',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'minPropositionPower',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingPortalUpdated',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n ],\n anonymous: false,\n },\n] as const;\n","import { IPayloadsControllerCore_ABI } from \"@bgd-labs/aave-address-book/abis\";\nimport {\n Address,\n Client,\n GetContractReturnType,\n Hex,\n TestClient,\n encodePacked,\n getContract,\n} from \"viem\";\nimport { getSolidityStorageSlotUint } from \"../../math/slot\";\nimport { getBlock } from \"viem/actions\";\n\nexport enum PayloadState {\n None = 0,\n Created = 1,\n Queued = 2,\n Executed = 3,\n Cancelled = 4,\n Expired = 5,\n}\n\nexport const HUMAN_READABLE_PAYLOAD_STATE = {\n [PayloadState.None]: \"None\",\n [PayloadState.Created]: \"Created\",\n [PayloadState.Queued]: \"Queued\",\n [PayloadState.Executed]: \"Executed\",\n [PayloadState.Cancelled]: \"Cancelled\",\n [PayloadState.Expired]: \"Expired\",\n};\n\nexport type PayloadsControllerContract = GetContractReturnType<\n typeof IPayloadsControllerCore_ABI,\n Client\n>;\n\nexport function getPayloadsController<T extends Client>(\n client: T,\n address: Hex,\n): PayloadsControllerContract {\n return getContract({\n abi: IPayloadsControllerCore_ABI,\n client,\n address,\n });\n}\n\nexport async function makePayloadExecutableOnTestClient(\n client: TestClient,\n payloadsController: Address,\n payloadId: number,\n) {\n const controllerContract = getPayloadsController(client, payloadsController);\n const payload = await controllerContract.read.getPayloadById([payloadId]);\n const currentBlock = await getBlock(client);\n return client.setStorageAt({\n address: payloadsController,\n // 3 is the slot of the payloads mapping\n index: getSolidityStorageSlotUint(3n, BigInt(payloadId)),\n value: encodePacked(\n [\"uint40\", \"uint40\", \"uint8\", \"uint8\", \"address\"],\n [\n // we subtract 240n(4min), as tenderly might have been fallen behind\n // therefore using block_number -1 (latest on tenderly) and a 4min margin should give a save margin\n Number(currentBlock.timestamp - BigInt(payload.delay) - 1n - 240n), // altering queued time so can be executed in current block\n payload.createdAt,\n PayloadState.Queued,\n payload.maximumAccessLevelRequired,\n payload.creator,\n ],\n ),\n });\n}\n\nexport function isPayloadFinal(state: PayloadState) {\n return ![PayloadState.Queued, PayloadState.Created].includes(state);\n}\n\nexport async function getNonFinalizedPayloads<T extends Client>(\n client: T,\n payloadsController: Address,\n): Promise<number[]> {\n const controllerContract = getPayloadsController(client, payloadsController);\n const payloadsCount = await controllerContract.read.getPayloadsCount();\n const nonFinalPayloads: number[] = [];\n for (let payloadId = payloadsCount - 1; payloadId != 0; payloadId--) {\n // controllerContract.read.EXPIRATION_DELAY(), controllerContract.read.MAX_EXECUTION_DELAY(), controllerContract.read.GRACE_PERIOD()\n const maxRange = (35 + 10 + 7) * 24 * 60 * 60;\n const payload = await controllerContract.read.getPayloadById([payloadId]);\n if (!isPayloadFinal(payload.state)) nonFinalPayloads.push(payloadId);\n // If the payload was created longer then maxRange in the past, we now everything that was created before will be expired as well\n if (payload.createdAt < Date.now() / 1000 - maxRange) break;\n }\n return nonFinalPayloads;\n}\n","import {\n type Hex,\n concat,\n encodeAbiParameters,\n fromHex,\n getAddress,\n keccak256,\n pad,\n parseAbiParameters,\n slice,\n toBytes,\n toHex,\n trim,\n} from \"viem\";\n/**\n * @notice Returns the storage slot for a Solidity mapping with bytes32 keys, given the slot of the mapping itself\n * @dev Read more at https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html#mappings-and-dynamic-arrays\n * @param mappingSlot Mapping slot in storage\n * @param key Mapping key to find slot for\n * @returns Storage slot\n */\nexport function getSolidityStorageSlotBytes(mappingSlot: Hex, key: Hex) {\n const slot = pad(mappingSlot, { size: 32 });\n return trim(\n keccak256(\n encodeAbiParameters(parseAbiParameters(\"bytes32, uint256\"), [\n key,\n BigInt(slot),\n ]),\n ),\n );\n}\n\n/**\n * @notice Returns the storage slot for a Solidity mapping with uint keys, given the slot of the mapping itself\n * @dev Read more at https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html#mappings-and-dynamic-arrays\n * @param mappingSlot Mapping slot in storage\n * @param key Mapping key to find slot for\n * @returns Storage slot\n */\nexport function getSolidityStorageSlotUint(mappingSlot: bigint, key: bigint) {\n return keccak256(\n encodeAbiParameters(parseAbiParameters(\"uint256, uint256\"), [\n key,\n mappingSlot,\n ]),\n );\n}\n\nexport function getSolidityStorageSlotAddress(\n mappingSlot: bigint | number,\n key: Hex,\n) {\n return keccak256(\n encodeAbiParameters(parseAbiParameters(\"address, uint256\"), [\n key,\n BigInt(mappingSlot),\n ]),\n );\n}\n\n/**\n * Returns the slot of an array item\n * @param baseSlot baseSlot of the array size pointer\n * @param arrayIndex index within the array\n * @param itemSize number of slots consumed per array item\n * @returns\n */\nexport function getDynamicArraySlot(\n baseSlot: bigint,\n arrayIndex: number,\n itemSize: number,\n): Hex {\n return pad(\n toHex(\n fromHex(\n keccak256(\n encodeAbiParameters(parseAbiParameters(\"uint256\"), [baseSlot]),\n ),\n \"bigint\",\n ) + BigInt(arrayIndex * itemSize),\n ),\n { size: 32 },\n );\n}\n\n/**\n * https://ethereum.stackexchange.com/questions/107282/storage-and-memory-layout-of-strings\n * @param value string | bytes\n */\nexport function getBytesValue(value: string | Hex) {\n const bytesString = toBytes(value);\n if (bytesString.length > 31)\n throw new Error(\"Error: strings > 31 bytes are not implemented\");\n return concat([\n toHex(pad(bytesString, { size: 31, dir: \"right\" })),\n toHex(bytesString.length * 2, { size: 1 }),\n ]);\n}\n\nexport function bytes32ToAddress(bytes32: Hex) {\n return getAddress(slice(bytes32, 12, 32));\n}\n","import { IGovernanceCore_ABI } from \"@bgd-labs/aave-address-book/abis\";\nimport {\n Address,\n Client,\n fromHex,\n getContract,\n GetContractReturnType,\n Hex,\n TestClient,\n toHex,\n} from \"viem\";\nimport { getBlock, getStorageAt } from \"viem/actions\";\nimport { getSolidityStorageSlotUint } from \"../../math/slot\";\nimport { setBits } from \"../../math/binary\";\n\nexport enum ProposalState {\n Null = 0, // proposal does not exists\n Created = 1, // created, waiting for a cooldown to initiate the balances snapshot\n Active = 2, // balances snapshot set, voting in progress\n Queued = 3, // voting results submitted, but proposal is under grace period when guardian can cancel it\n Executed = 4, // results sent to the execution chain(s)\n Failed = 5, // voting was not successful\n Cancelled = 6, // got cancelled by guardian, or because proposition power of creator dropped below allowed minimum\n Expired = 7,\n}\n\nexport const HUMAN_READABLE_PROPOSAL_STATE = {\n [ProposalState.Null]: \"Null\",\n [ProposalState.Created]: \"Created\",\n [ProposalState.Active]: \"Active\",\n [ProposalState.Queued]: \"Queued\",\n [ProposalState.Executed]: \"Executed\",\n [ProposalState.Failed]: \"Failed\",\n [ProposalState.Cancelled]: \"Cancelled\",\n [ProposalState.Expired]: \"Expired\",\n};\n\nexport type GovernanceContract = GetContractReturnType<\n typeof IGovernanceCore_ABI,\n Client\n>;\n\nexport function getGovernance<T extends Client>(\n client: T,\n address: Hex,\n): GovernanceContract {\n return getContract({\n abi: IGovernanceCore_ABI,\n client,\n address,\n });\n}\n\nexport async function makeProposalExecutableOnTestClient(\n client: TestClient,\n governance: Address,\n proposalId: bigint,\n) {\n const currentBlock = await getBlock(client);\n // 7n is the base slot of the proposal mapping\n const proposalSlot = getSolidityStorageSlotUint(7n, proposalId);\n const data = await getStorageAt(client, {\n address: governance,\n slot: proposalSlot,\n });\n let manipulatedStorage = fromHex(data!, { to: \"bigint\" });\n // set queued\n manipulatedStorage = setBits(\n manipulatedStorage,\n 0n,\n 8n,\n ProposalState.Queued,\n );\n // set creation time\n manipulatedStorage = setBits(\n manipulatedStorage,\n 16n,\n 56n,\n currentBlock.timestamp - 2592000n, // (await governanceContract.read.PROPOSAL_EXPIRATION_TIME())\n );\n return client.setStorageAt({\n address: governance,\n // 3 is the slot of the payloads mapping\n index: proposalSlot,\n value: toHex(manipulatedStorage, { size: 32 }),\n });\n}\n\nexport function isProposalFinal(state: ProposalState) {\n return ![\n ProposalState.Queued,\n ProposalState.Created,\n ProposalState.Active,\n ].includes(state);\n}\n\nexport async function getNonFinalizedProposals<T extends Client>(\n client: T,\n governanceAddress: Address,\n): Promise<bigint[]> {\n const goverannceContract = getGovernance(client, governanceAddress);\n const proposalsCount = await goverannceContract.read.getProposalsCount();\n const nonFinalProposals: bigint[] = [];\n for (let proposalId = proposalsCount - 1n; proposalId != 0n; proposalId--) {\n const proposal = await goverannceContract.read.getProposal([proposalId]);\n if (isProposalFinal(proposal.state)) nonFinalProposals.push(proposalId);\n // If the payload was created longer then expiration time in the past we no longer care\n if (proposal.creationTime < Date.now() / 1000 - 2592000) break;\n }\n return nonFinalProposals;\n}\n","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const etherscanExplorers = {\n 1: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://etherscan.io\"\n },\n 10: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://optimistic.etherscan.io/\"\n },\n 25: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://cronoscan.com\"\n },\n 50: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://xdcscan.com/\"\n },\n 51: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.xdcscan.com/\"\n },\n 56: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://bscscan.com\"\n },\n 97: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.bscscan.com\"\n },\n 100: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://gnosisscan.io/\"\n },\n 130: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://uniscan.xyz/\"\n },\n 137: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://polygonscan.com\"\n },\n 146: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sonicscan.org/\"\n },\n 199: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://bttcscan.com/\"\n },\n 204: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://opbnb.bscscan.com/\"\n },\n 250: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://ftmscan.com\"\n },\n 252: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://fraxscan.com/\"\n },\n 255: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://kromascan.com/\"\n },\n 300: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia-era.zksync.network/\"\n },\n 324: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://era.zksync.network/\"\n },\n 480: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://worldscan.org/\"\n },\n 1028: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.bttcscan.com/\"\n },\n 1101: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://zkevm.polygonscan.com/\"\n },\n 1111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://wemixscan.com/\"\n },\n 1112: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.wemixscan.com/\"\n },\n 1284: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonbeam.moonscan.io/\"\n },\n 1285: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonriver.moonscan.io/\"\n },\n 1287: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonbase.moonscan.io/\"\n },\n 1301: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.uniscan.xyz/\"\n },\n 2358: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.kromascan.com/\"\n },\n 2442: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://cardona-zkevm.polygonscan.com/\"\n },\n 2522: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://holesky.fraxscan.com/\"\n },\n 2741: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://abscan.org/\"\n },\n 4002: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.ftmscan.com/\"\n },\n 4801: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.worldscan.org/\"\n },\n 5000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://mantlescan.xyz/\"\n },\n 5003: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.mantlescan.xyz/\"\n },\n 5611: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://opbnb-testnet.bscscan.com/\"\n },\n 8453: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://basescan.org\"\n },\n 11124: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.abscan.org/\"\n },\n 17000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.etherscan.io\"\n },\n 33111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://curtis.apescan.io/\"\n },\n 33139: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://apescan.io/\"\n },\n 42161: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://arbiscan.io\"\n },\n 42170: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://nova.arbiscan.io/\"\n },\n 42220: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://celoscan.io\"\n },\n 43113: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.snowscan.xyz/\"\n },\n 43114: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://snowscan.xyz/\"\n },\n 44787: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://alfajores.celoscan.io/\"\n },\n 50104: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sophscan.xyz/\"\n },\n 57054: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.sonicscan.org/\"\n },\n 59141: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.lineascan.build/\"\n },\n 59144: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://lineascan.build/\"\n },\n 80002: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://amoy.polygonscan.com/\"\n },\n 80094: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://berascan.com/\"\n },\n 81457: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://blastscan.io/\"\n },\n 84532: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.basescan.org/\"\n },\n 167000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://taikoscan.io/\"\n },\n 167009: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://hekla.taikoscan.io/\"\n },\n 421614: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.arbiscan.io/\"\n },\n 534351: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.scrollscan.com/\"\n },\n 534352: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://scrollscan.com/\"\n },\n 660279: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://xaiscan.io/\"\n },\n 11155111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.etherscan.io\"\n },\n 11155420: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia-optimism.etherscan.io/\"\n },\n 168587773: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.blastscan.io/\"\n },\n 531050104: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.sophscan.xyz/\"\n },\n 37714555429: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.xaiscan.io/\"\n }\n} as const;","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const routescanExplorers = {\n 1: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1/etherscan\",\n explorer: \"1.routescan.io\"\n },\n 10: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10/etherscan\",\n explorer: \"10.routescan.io\"\n },\n 14: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/14/etherscan\",\n explorer: \"14.routescan.io\"\n },\n 16: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/16/etherscan\",\n explorer: \"16.routescan.io\"\n },\n 19: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/19/etherscan\",\n explorer: \"19.routescan.io\"\n },\n 56: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/56/etherscan\",\n explorer: \"56.routescan.io\"\n },\n 97: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/97/etherscan\",\n explorer: \"97.routescan.io\"\n },\n 114: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/114/etherscan\",\n explorer: \"114.routescan.io\"\n },\n 146: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/146/etherscan\",\n explorer: \"146.routescan.io\"\n },\n 151: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/151/etherscan\",\n explorer: \"151.routescan.io\"\n },\n 166: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/166/etherscan\",\n explorer: \"166.routescan.io\"\n },\n 183: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/183/etherscan\",\n explorer: \"183.routescan.io\"\n },\n 185: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/185/etherscan\",\n explorer: \"185.routescan.io\"\n },\n 233: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/233/etherscan\",\n explorer: \"233.routescan.io\"\n },\n 252: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/252/etherscan\",\n explorer: \"252.routescan.io\"\n },\n 254: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/254/etherscan\",\n explorer: \"254.routescan.io\"\n },\n 255: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/255/etherscan\",\n explorer: \"255.routescan.io\"\n },\n 288: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/288/etherscan\",\n explorer: \"288.routescan.io\"\n },\n 291: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/291/etherscan\",\n explorer: \"291.routescan.io\"\n },\n 303: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/303/etherscan\",\n explorer: \"303.routescan.io\"\n },\n 324: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/324/etherscan\",\n explorer: \"324.routescan.io\"\n },\n 335: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/335/etherscan\",\n explorer: \"335.routescan.io\"\n },\n 357: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/357/etherscan\",\n explorer: \"357.routescan.io\"\n },\n 392: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/392/etherscan\",\n explorer: \"392.routescan.io\"\n },\n 480: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/480/etherscan\",\n explorer: \"480.routescan.io\"\n },\n 749: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/749/etherscan\",\n explorer: \"749.routescan.io\"\n },\n 919: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/919/etherscan\",\n explorer: \"919.routescan.io\"\n },\n 1010: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1010/etherscan\",\n explorer: \"1010.routescan.io\"\n },\n 1088: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan\",\n explorer: \"1088.routescan.io\"\n },\n 1135: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1135/etherscan\",\n explorer: \"1135.routescan.io\"\n },\n 1234: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1234/etherscan\",\n explorer: \"1234.routescan.io\"\n },\n 1301: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1301/etherscan\",\n explorer: \"1301.routescan.io\"\n },\n 1687: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1687/etherscan\",\n explorer: \"1687.routescan.io\"\n },\n 1853: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1853/etherscan\",\n explorer: \"1853.routescan.io\"\n },\n 1923: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1923/etherscan\",\n explorer: \"1923.routescan.io\"\n },\n 1946: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1946/etherscan\",\n explorer: \"1946.routescan.io\"\n },\n 2037: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2037/etherscan\",\n explorer: \"2037.routescan.io\"\n },\n 2044: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/2044/etherscan\",\n explorer: \"2044.routescan.io\"\n },\n 2233: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2233/etherscan\",\n explorer: \"2233.routescan.io\"\n },\n 2358: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2358/etherscan\",\n explorer: \"2358.routescan.io\"\n },\n 2522: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2522/etherscan\",\n explorer: \"2522.routescan.io\"\n },\n 2818: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/2818/etherscan\",\n explorer: \"2818.routescan.io\"\n },\n 3011: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/3011/etherscan\",\n explorer: \"3011.routescan.io\"\n },\n 3012: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3012/etherscan\",\n explorer: \"3012.routescan.io\"\n },\n 3636: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3636/etherscan\",\n explorer: \"3636.routescan.io\"\n },\n 3939: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3939/etherscan\",\n explorer: \"3939.routescan.io\"\n },\n 4202: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4202/etherscan\",\n explorer: \"4202.routescan.io\"\n },\n 4337: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/4337/etherscan\",\n explorer: \"4337.routescan.io\"\n },\n 4460: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4460/etherscan\",\n explorer: \"4460.routescan.io\"\n },\n 4801: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4801/etherscan\",\n explorer: \"4801.routescan.io\"\n },\n 5000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5000/etherscan\",\n explorer: \"5000.routescan.io\"\n },\n 5115: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/5115/etherscan\",\n explorer: \"5115.routescan.io\"\n },\n 5330: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5330/etherscan\",\n explorer: \"5330.routescan.io\"\n },\n 5566: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5566/etherscan\",\n explorer: \"5566.routescan.io\"\n },\n 6119: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/6119/etherscan\",\n explorer: \"6119.routescan.io\"\n },\n 6900: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/6900/etherscan\",\n explorer: \"6900.routescan.io\"\n },\n 6911: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/6911/etherscan\",\n explorer: \"6911.routescan.io\"\n },\n 7171: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7171/etherscan\",\n explorer: \"7171.routescan.io\"\n },\n 7210: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/7210/etherscan\",\n explorer: \"7210.routescan.io\"\n },\n 7222: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/7222/etherscan\",\n explorer: \"7222.routescan.io\"\n },\n 7560: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7560/etherscan\",\n explorer: \"7560.routescan.io\"\n },\n 7887: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7887/etherscan\",\n explorer: \"7887.routescan.io\"\n },\n 7979: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7979/etherscan\",\n explorer: \"7979.routescan.io\"\n },\n 8008: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8008/etherscan\",\n explorer: \"8008.routescan.io\"\n },\n 8082: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/8082/etherscan\",\n explorer: \"8082.routescan.io\"\n },\n 8453: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8453/etherscan\",\n explorer: \"8453.routescan.io\"\n },\n 8888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8888/etherscan\",\n explorer: \"8888.routescan.io\"\n },\n 9728: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/9728/etherscan\",\n explorer: \"9728.routescan.io\"\n },\n 10507: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10507/etherscan\",\n explorer: \"10507.routescan.io\"\n },\n 10849: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10849/etherscan\",\n explorer: \"10849.routescan.io\"\n },\n 10880: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/10880/etherscan\",\n explorer: \"10880.routescan.io\"\n },\n 10888: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/10888/etherscan\",\n explorer: \"10888.routescan.io\"\n },\n 12150: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/12150/etherscan\",\n explorer: \"12150.routescan.io\"\n },\n 17000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/17000/etherscan\",\n explorer: \"17000.routescan.io\"\n },\n 26659: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/26659/etherscan\",\n explorer: \"26659.routescan.io\"\n },\n 28882: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/28882/etherscan\",\n explorer: \"28882.routescan.io\"\n },\n 31335: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/31335/etherscan\",\n explorer: \"31335.routescan.io\"\n },\n 34443: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan\",\n explorer: \"34443.routescan.io\"\n },\n 42026: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/42026/etherscan\",\n explorer: \"42026.routescan.io\"\n },\n 42069: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/42069/etherscan\",\n explorer: \"42069.routescan.io\"\n },\n 42161: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/42161/etherscan\",\n explorer: \"42161.routescan.io\"\n },\n 43113: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/43113/etherscan\",\n explorer: \"43113.routescan.io\"\n },\n 43114: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan\",\n explorer: \"43114.routescan.io\"\n },\n 48795: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/48795/etherscan\",\n explorer: \"48795.routescan.io\"\n },\n 49321: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/49321/etherscan\",\n explorer: \"49321.routescan.io\"\n },\n 53123: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/53123/etherscan\",\n explorer: \"53123.routescan.io\"\n },\n 53302: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/53302/etherscan\",\n explorer: \"53302.routescan.io\"\n },\n 53935: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/53935/etherscan\",\n explorer: \"53935.routescan.io\"\n },\n 55551: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/55551/etherscan\",\n explorer: \"55551.routescan.io\"\n },\n 56288: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/56288/etherscan\",\n explorer: \"56288.routescan.io\"\n },\n 57054: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/57054/etherscan\",\n explorer: \"57054.routescan.io\"\n },\n 57073: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/57073/etherscan\",\n explorer: \"57073.routescan.io\"\n },\n 60118: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/60118/etherscan\",\n explorer: \"60118.routescan.io\"\n },\n 62707: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/62707/etherscan\",\n explorer: \"62707.routescan.io\"\n },\n 70800: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/70800/etherscan\",\n explorer: \"70800.routescan.io\"\n },\n 70953: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/70953/etherscan\",\n explorer: \"70953.routescan.io\"\n },\n 76736: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/76736/etherscan\",\n explorer: \"76736.routescan.io\"\n },\n 78170: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/78170/etherscan\",\n explorer: \"78170.routescan.io\"\n },\n 80000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80000/etherscan\",\n explorer: \"80000.routescan.io\"\n },\n 80002: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80002/etherscan\",\n explorer: \"80002.routescan.io\"\n },\n 80008: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80008/etherscan\",\n explorer: \"80008.routescan.io\"\n },\n 80069: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80069/etherscan\",\n explorer: \"80069.routescan.io\"\n },\n 80084: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80084/etherscan\",\n explorer: \"80084.routescan.io\"\n },\n 80085: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80085/etherscan\",\n explorer: \"80085.routescan.io\"\n },\n 80094: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/80094/etherscan\",\n explorer: \"80094.routescan.io\"\n },\n 81457: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/81457/etherscan\",\n explorer: \"81457.routescan.io\"\n },\n 84532: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/84532/etherscan\",\n explorer: \"84532.routescan.io\"\n },\n 88882: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/88882/etherscan\",\n explorer: \"88882.routescan.io\"\n },\n 88888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/88888/etherscan\",\n explorer: \"88888.routescan.io\"\n },\n 124832: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/124832/etherscan\",\n explorer: \"124832.routescan.io\"\n },\n 167000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/167000/etherscan\",\n explorer: \"167000.routescan.io\"\n },\n 167008: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/167008/etherscan\",\n explorer: \"167008.routescan.io\"\n },\n 167009: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/167009/etherscan\",\n explorer: \"167009.routescan.io\"\n },\n 173750: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/173750/etherscan\",\n explorer: \"173750.routescan.io\"\n },\n 421614: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/421614/etherscan\",\n explorer: \"421614.routescan.io\"\n },\n 432201: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/432201/etherscan\",\n explorer: \"432201.routescan.io\"\n },\n 432204: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/432204/etherscan\",\n explorer: \"432204.routescan.io\"\n },\n 504441: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/504441/etherscan\",\n explorer: \"504441.routescan.io\"\n },\n 555666: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/555666/etherscan\",\n explorer: \"555666.routescan.io\"\n },\n 710420: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/710420/etherscan\",\n explorer: \"710420.routescan.io\"\n },\n 763373: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/763373/etherscan\",\n explorer: \"763373.routescan.io\"\n },\n 779672: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/779672/etherscan\",\n explorer: \"779672.routescan.io\"\n },\n 999999: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/999999/etherscan\",\n explorer: \"999999.routescan.io\"\n },\n 3397901: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3397901/etherscan\",\n explorer: \"3397901.routescan.io\"\n },\n 7777777: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7777777/etherscan\",\n explorer: \"7777777.routescan.io\"\n },\n 11155111: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155111/etherscan\",\n explorer: \"11155111.routescan.io\"\n },\n 11155420: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155420/etherscan\",\n explorer: \"11155420.routescan.io\"\n },\n 11155931: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155931/etherscan\",\n explorer: \"11155931.routescan.io\"\n },\n 12345678: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/12345678/etherscan\",\n explorer: \"12345678.routescan.io\"\n },\n 13068200: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/13068200/etherscan\",\n explorer: \"13068200.routescan.io\"\n },\n 20241133: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/20241133/etherscan\",\n explorer: \"20241133.routescan.io\"\n },\n 21000000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/21000000/etherscan\",\n explorer: \"21000000.routescan.io\"\n },\n 21000001: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/21000001/etherscan\",\n explorer: \"21000001.routescan.io\"\n },\n 28122024: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/28122024/etherscan\",\n explorer: \"28122024.routescan.io\"\n },\n 111557560: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/111557560/etherscan\",\n explorer: \"111557560.routescan.io\"\n },\n 168587773: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/168587773/etherscan\",\n explorer: \"168587773.routescan.io\"\n },\n 333000333: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/333000333/etherscan\",\n explorer: \"333000333.routescan.io\"\n },\n 420120000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/420120000/etherscan\",\n explorer: \"420120000.routescan.io\"\n },\n 420120001: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/420120001/etherscan\",\n explorer: \"420120001.routescan.io\"\n },\n 686669576: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/686669576/etherscan\",\n explorer: \"686669576.routescan.io\"\n },\n 888888888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/888888888/etherscan\",\n explorer: \"888888888.routescan.io\"\n },\n 999999999: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/999999999/etherscan\",\n explorer: \"999999999.routescan.io\"\n },\n 920637907288165: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/920637907288165/etherscan\",\n explorer: \"920637907288165.routescan.io\"\n }\n} as const;","import { Address, Hex } from \"viem\";\nimport { etherscanExplorers } from \"./generated/etherscanExplorers\";\nimport { routescanExplorers } from \"./generated/routescanExplorers\";\nimport { StandardJsonInput } from \"./types\";\n\nexport type ExplorerConfig = { api: string; explorer: string };\n\n/**\n * Fetches what we consider the \"best\" explorer for a given chain.\n * For our tooling we have a opinionated priorization for explorers:\n * 1. Etherscan\n * 2. Routescan\n * 3. Blockscout and others\n * @param chainId Id of the chain to fetch the explorer for\n */\nexport function getExplorer(chainId: number): ExplorerConfig {\n const etherscan =\n etherscanExplorers[chainId as keyof typeof etherscanExplorers];\n if (etherscan) return etherscan;\n const routescan =\n routescanExplorers[chainId as keyof typeof routescanExplorers];\n if (routescan) return routescan;\n throw new Error(`No explorer found for chainId: ${chainId}`);\n}\n\ntype GetSourceCodeParams = {\n chainId: number;\n address: Address;\n apiUrl?: string;\n apiKey?: string;\n};\n\nexport async function getSourceCode(params: GetSourceCodeParams) {\n const payload = {\n chainid: String(params.chainId),\n address: params.address,\n module: \"contract\",\n action: \"getsourcecode\",\n };\n if (params.apiKey) (payload as any).apikey = params.apiKey;\n const formattedPayload = new URLSearchParams(payload).toString();\n const url = `${params.apiUrl ? params.apiUrl : getExplorer(params.chainId).api}?${formattedPayload}`;\n const request = await fetch(url);\n const { status, message, result } = (await request.json()) as {\n message: string;\n result: {\n ABI: any;\n CompilerVersion: string;\n ConstructorArguments: Hex;\n ContractName: string;\n EVMVersion: string;\n Implementation: Address;\n Library: string;\n LicenseType: string;\n OptimizationUsed: string;\n Proxy: string; // \"1\" meaning true (i think)\n Runs: string;\n SimilarMatch: string;\n SourceCode: string;\n }[];\n status: string;\n };\n if (status != \"1\") {\n throw new Error(result as unknown as string);\n }\n return result[0];\n}\n\nexport function parseEtherscanStyleSourceCode(\n sourceCode: string,\n): StandardJsonInput {\n // Handling possible variations in SourceCode format\n if (sourceCode.startsWith(\"{{\") && sourceCode.endsWith(\"}}\")) {\n // Strip the extra curly braces and parse\n sourceCode = sourceCode.substring(1, sourceCode.length - 1);\n }\n return JSON.parse(sourceCode);\n}\n","/**\n * While tenderly is a fenomanal tool for testing, it is not always easy to use as there are minor bugs and small nuances to consider everywhere.\n * This is a simple wrapper around the tenderly APIs.\n */\nimport {\n Hex,\n TestClient,\n WalletClient,\n createTestClient,\n createWalletClient,\n http,\n} from \"viem\";\n\ntype TenderlyConfig = {\n accountSlug: string;\n projectSlug: string;\n accessToken: string;\n};\n\ntype Tenderly_createVnetParams = {\n slug: string;\n displayName: string;\n baseChainId: number;\n forkChainId: number;\n blockNumber?: Hex;\n // deletes the existing fork in case a fork with the same name already exists\n force?: boolean;\n};\n\nexport type Tenderly_createVnetParamsResponse = {\n id: string;\n slug: string;\n display_name: number;\n fork_config: { network_id: number; block_number: Hex };\n virtual_network_config: {\n chain_config: { chain_id: number };\n accounts: { address: string }[];\n };\n rpcs: [\n { url: string; name: \"Admin RPC\" },\n { url: string; name: \"Public RPC\" },\n ];\n};\n\nconst TENDERLY_BASE_URL = \"https://api.tenderly.co/api/v1\";\n\nexport async function tenderly_deleteVnet(\n vnetId: string,\n { accountSlug, projectSlug, accessToken }: TenderlyConfig,\n) {\n return fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets/${vnetId}`,\n {\n method: \"DELETE\",\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n );\n}\n\nexport async function tenderly_simVnet(\n vnetId: string,\n { accountSlug, projectSlug, accessToken }: TenderlyConfig,\n body: any,\n) {\n return (\n await fetch(\n // Note: this is subject to change and currently uses the internal api of tenderly\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/testnet/${vnetId}/simulate`,\n {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n )\n ).json();\n}\n\nexport async function tenderly_getVnet(\n slug: string,\n { accountSlug, projectSlug, accessToken }: TenderlyConfig,\n): Promise<{ id: string; slug: string }[]> {\n return (\n await fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets?match_field=slug&match_type=prefix&keywords=${slug}`,\n {\n method: \"GET\",\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n )\n ).json();\n}\n\nexport async function tenderly_createVnet(\n {\n slug,\n displayName,\n baseChainId,\n forkChainId,\n blockNumber,\n force,\n }: Tenderly_createVnetParams,\n { accessToken, accountSlug, projectSlug }: TenderlyConfig,\n) {\n if (!accessToken) throw new Error(\"Tenderly access token not provided\");\n if (!accountSlug) throw new Error(\"Tenderly account slug not provided\");\n if (!projectSlug) throw new Error(\"Tenderly project slug not provided\");\n const body = {\n slug: slug,\n display_name: displayName,\n fork_config: {\n network_id: baseChainId,\n ...(blockNumber ? { block_number: blockNumber } : {}),\n },\n virtual_network_config: {\n chain_config: {\n chain_id: forkChainId,\n },\n },\n sync_state_config: {\n enabled: false,\n },\n explorer_page_config: {\n enabled: false,\n verification_visibility: \"bytecode\",\n },\n };\n\n async function createVnet() {\n return (\n await fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets`,\n {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n )\n ).json() as Promise<Tenderly_createVnetParamsResponse>;\n }\n\n let response = await createVnet();\n if ((response as any).error?.slug === \"vnet_duplicate_key\" && force) {\n const staleVnet = await tenderly_getVnet(slug, {\n accessToken,\n accountSlug,\n projectSlug,\n });\n await tenderly_deleteVnet(staleVnet[0].id, {\n accessToken,\n accountSlug,\n projectSlug,\n });\n response = await createVnet();\n }\n if ((response as any).error) {\n console.info((response as any).error);\n throw new Error(\"Tenderly vnet could not be created\");\n }\n return {\n vnet: response,\n testClient: createTestClient({\n mode: \"tenderly\" as any,\n transport: http(response.rpcs[0].url),\n }) as TestClient,\n walletClient: createWalletClient({\n chain: { id: forkChainId } as any,\n account: \"0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9\",\n transport: http(response.rpcs[0].url),\n }) as WalletClient,\n simulate: (body: any) =>\n tenderly_simVnet(\n response.id,\n {\n accessToken,\n accountSlug,\n projectSlug,\n },\n body,\n ),\n delete: () =>\n tenderly_deleteVnet(response.id, {\n accessToken,\n accountSlug,\n projectSlug,\n }),\n };\n}\n","import { execSync } from \"node:child_process\";\nimport { StandardJsonInput } from \"./types\";\nimport { createPatch } from \"diff\";\n\n/**\n * Returns the standardJsonInput format as consumed by most explorers\n * @param input Contract or path:Contract if contract is not unique.\n */\nexport function foundry_getStandardJsonInput(input: string) {\n const output = JSON.parse(\n execSync(\n `forge verify-contract --show-standard-json-input --verifier etherscan 0x0000000000000000000000000000000000000000 ${input}`,\n ).toString(),\n ) as StandardJsonInput;\n return output;\n}\n\nexport type Storage = {\n astId: string;\n contract: string;\n label: string;\n offset: number;\n slot: number;\n type: string;\n};\n\nexport type StorageType = {\n encoding: string;\n label: string;\n numberOfBytes: number;\n base?: string;\n key?: string;\n value?: string;\n members?: {\n astId: string;\n contract: string;\n offset: number;\n slot: number;\n type: string;\n label: string;\n }[];\n};\n\nexport type FoundryStorage = {\n storage: Storage[];\n types: Record<string, StorageType>;\n};\n\nexport function foundry_getStorageLayout(input: string) {\n const output = JSON.parse(\n execSync(`forge inspect ${input} storage --json`).toString(),\n ) as FoundryStorage;\n return output;\n}\n\nfunction cleanupFoundryStorageForDiffing(layout: FoundryStorage) {\n const cleanTypes = { ...layout.types };\n for (const key of Object.keys(cleanTypes)) {\n if (cleanTypes[key].members)\n cleanTypes[key].members = cleanTypes[key].members.map((member) => ({\n label: member.label,\n contract: member.contract.split(\":\")[1],\n offset: member.offset,\n slot: member.slot,\n type: member.type,\n })) as any;\n if (cleanTypes[key].value)\n cleanTypes[key].value = cleanTypes[cleanTypes[key].value] as any;\n }\n const cleanStorage = layout.storage.map((storage) => ({\n label: storage.label,\n slot: storage.slot,\n offset: storage.offset,\n type: cleanTypes[storage.type],\n contract: storage.contract.split(\":\")[1],\n }));\n return cleanStorage;\n}\n\nexport function diffFoundryStorageLayout(\n layoutBefore: FoundryStorage,\n layoutAfter: FoundryStorage,\n) {\n const beforeString = JSON.stringify(\n cleanupFoundryStorageForDiffing(layoutBefore),\n null,\n 2,\n );\n const afterString = JSON.stringify(\n cleanupFoundryStorageForDiffing(layoutAfter),\n null,\n 2,\n );\n return createPatch(\"storage\", beforeString, afterString);\n}\n","// a manually maintained list of known events\nexport const EVENT_DB = [] as const;\n","import {\n arbitrum,\n arbitrumSepolia,\n avalanche,\n avalancheFuji,\n base,\n baseSepolia,\n bsc,\n celo,\n fantom,\n fantomTestnet,\n gnosis,\n harmonyOne,\n linea,\n mainnet,\n mantle,\n metis,\n optimism,\n optimismSepolia,\n polygon,\n polygonAmoy,\n polygonZkEvm,\n scroll,\n scrollSepolia,\n sepolia,\n sonic,\n zksync,\n ink,\n} from \"viem/chains\";\n\nexport const ChainId = {\n celo: celo.id,\n mainnet: mainnet.id,\n polygon: polygon.id,\n polygon_amoy: polygonAmoy.id,\n avalanche: avalanche.id,\n avalanche_fuji: avalancheFuji.id,\n arbitrum: arbitrum.id,\n arbitrum_sepolia: arbitrumSepolia.id,\n fantom: fantom.id,\n fantom_testnet: fantomTestnet.id,\n optimism: optimism.id,\n optimism_sepolia: optimismSepolia.id,\n harmony: harmonyOne.id,\n sepolia: sepolia.id,\n scroll: scroll.id,\n scroll_sepolia: scrollSepolia.id,\n sonic: sonic.id,\n mantle: mantle.id,\n metis: metis.id,\n base: base.id,\n base_sepolia: baseSepolia.id,\n bnb: bsc.id,\n gnosis: gnosis.id,\n zkEVM: polygonZkEvm.id,\n zksync: zksync.id,\n linea: linea.id,\n ink: ink.id,\n} as const;\n\nexport const ChainList = {\n [ChainId.mainnet]: mainnet,\n [ChainId.polygon]: polygon,\n [ChainId.polygon_amoy]: polygonAmoy,\n [ChainId.avalanche]: avalanche,\n [ChainId.avalanche_fuji]: avalancheFuji,\n [ChainId.arbitrum]: arbitrum,\n [ChainId.arbitrum_sepolia]: arbitrumSepolia,\n [ChainId.fantom]: fantom,\n [ChainId.fantom_testnet]: fantomTestnet,\n [ChainId.optimism]: optimism,\n [ChainId.optimism_sepolia]: optimismSepolia,\n [ChainId.harmony]: harmonyOne,\n [ChainId.sepolia]: sepolia,\n [ChainId.scroll]: scroll,\n [ChainId.scroll_sepolia]: scrollSepolia,\n [ChainId.sonic]: sonic,\n [ChainId.mantle]: mantle,\n [ChainId.metis]: metis,\n [ChainId.base]: base,\n [ChainId.base_sepolia]: baseSepolia,\n [ChainId.bnb]: bsc,\n [ChainId.gnosis]: gnosis,\n [ChainId.zkEVM]: polygonZkEvm,\n [ChainId.celo]: celo,\n [ChainId.zksync]: zksync,\n [ChainId.linea]: linea,\n [ChainId.ink]: ink,\n};\n","import {\n http,\n type Client,\n type ClientConfig,\n type HttpTransportConfig,\n createClient,\n} from \"viem\";\nimport { alchemyNetworkMap } from \"./generated/alchemyNetworkMap\";\nimport { ChainId, ChainList } from \"./chainIds\";\nimport { quicknodeNetworkMap } from \"./generated/quicknodeNetworkMap\";\n\ntype SupportedChainIds = (typeof ChainId)[keyof typeof ChainId];\n\n/**\n * A manually maintained list of public rpcs.\n * These should only be used for prs coming from forks, which should not access secrets like the alchemy api key.\n */\nexport const publicRPCs = {\n [ChainId.mainnet]: \"https://eth.llamarpc.com\",\n [ChainId.polygon]: \"https://polygon.llamarpc.com\",\n [ChainId.arbitrum]: \"https://polygon.llamarpc.com\",\n [ChainId.base]: \"https://base.llamarpc.com\",\n [ChainId.bnb]: \"https://binance.llamarpc.com\",\n [ChainId.metis]: \"https://andromeda.metis.io/?owner=1088\",\n [ChainId.gnosis]: \"https://rpc.ankr.com/gnosis\",\n [ChainId.scroll]: \"https://rpc.scroll.io\",\n [ChainId.zksync]: \"https://mainnet.era.zksync.io\",\n [ChainId.fantom]: \"https://rpc.ftm.tools\",\n [ChainId.avalanche]: \"https://api.avax.network/ext/bc/C/rpc\",\n [ChainId.linea]: \"https://rpc.linea.build\",\n} as const;\n\nexport const alchemySupportedChainIds = Object.values(ChainId).filter(\n (id) => alchemyNetworkMap[id as keyof typeof alchemyNetworkMap],\n);\n\nexport const getNetworkEnv = (chainId: SupportedChainIds) => {\n const symbol = Object.entries(ChainId).find(\n ([, value]) => value === chainId,\n )?.[0] as keyof typeof ChainId | undefined;\n\n if (!symbol) {\n throw new Error(\n `Didn't find a viem symbol for chainId: ${chainId}. Wire it up in 'src/chainIds.ts'!`,\n );\n }\n\n const env =\n `RPC_${symbol.toUpperCase() as Uppercase<typeof symbol>}` as const;\n\n return env;\n};\n\nexport function getExplicitRPC(chainId: SupportedChainIds) {\n const env = getNetworkEnv(chainId);\n\n // User provided RPC_ URL\n if (process.env[env]) {\n return process.env[env];\n }\n throw new Error(`Env '${env}' is not set. Please set it manually.`);\n}\n\nexport function getAlchemyRPC(chainId: SupportedChainIds, alchemyKey: string) {\n const alchemyId =\n alchemyNetworkMap[chainId as keyof typeof alchemyNetworkMap];\n\n if (!alchemyId) {\n throw new Error(`ChainId '${chainId}' is not supported by Alchemy.`);\n }\n\n // Typescript prevents this, catching it in runtime for js-usages\n if (!alchemyKey) {\n throw new Error(\n `ChainId '${chainId}' is supported by Alchemy, but no 'alchemyKey' was provided.`,\n );\n }\n\n return `https://${alchemyId}.g.alchemy.com/v2/${alchemyKey}`;\n}\n\nexport function getPublicRpc(chainId: SupportedChainIds) {\n const publicRpc = publicRPCs[chainId as keyof typeof publicRPCs];\n if (!publicRpc)\n throw new Error(`No default public rpc for '${chainId}' configured.`);\n return publicRpc;\n}\n\nexport function getQuicknodeRpc(\n chainId: SupportedChainIds,\n options: { quicknodeEndpointName: string; quicknodeToken: string },\n) {\n const quickNodeSlug =\n quicknodeNetworkMap[chainId as keyof typeof quicknodeNetworkMap];\n if (!quickNodeSlug) {\n throw new Error(`ChainId '${chainId}' is not supported by Quicknode.`);\n }\n\n // Typescript prevents this, catching it in runtime for js-usages\n if (!options.quicknodeEndpointName) {\n throw new Error(\n `ChainId '${chainId}' is supported by Quicknode, but no 'quicknodeEndpointName' was provided.`,\n );\n }\n if (!options.quicknodeToken) {\n throw new Error(\n `ChainId '${chainId}' is supported by Quicknode, but no 'quicknodeToken' was provided.`,\n );\n }\n // for mainnet the api slug provided apparently is wrong and the network for whatever reason has no slug at all\n if (chainId === ChainId.mainnet) {\n return `https://${options.quicknodeEndpointName}.quiknode.pro/${options.quicknodeToken}`;\n }\n return `https://${options.quicknodeEndpointName}.${quickNodeSlug}.quiknode.pro/${options.quicknodeToken}`;\n}\n\ntype GetRPCUrlOptions = {\n alchemyKey?: string;\n quicknodeEndpointName?: string;\n quicknodeToken?: string;\n};\n\n/**\n * Return a RPC_URL for supported chains.\n * If the RPC_URL environment variable is set, it will be used.\n * Otherwise will construct the URL based on the chain ID and Alchemy API key.\n *\n * @notice This method acts as fall-through and will only revert if the ChainId is strictly not supported.\n * If no RPC_URL is set, and non of the private rpc providers supports the chain, it will return undefined.\n * @param chainId\n * @param alchemyKey\n * @returns the RPC_URL for the given chain ID\n */\nexport const getRPCUrl = (\n chainId: SupportedChainIds,\n options?: GetRPCUrlOptions,\n) => {\n // Typescript prevents this, catching it in runtime for js-usages\n if (!Object.values(ChainId).includes(chainId)) {\n throw new Error(\n `ChainId '${chainId}' is not supported by this library. Feel free to open an issue.`,\n );\n }\n\n try {\n return getExplicitRPC(chainId);\n } catch (e) {\n // ignore error as getRPCURL should never throw\n }\n if (options?.alchemyKey) {\n try {\n return getAlchemyRPC(chainId, options?.alchemyKey);\n } catch (e) {}\n }\n if (options?.quicknodeEndpointName && options.quicknodeToken) {\n try {\n return getQuicknodeRpc(chainId, {\n quicknodeToken: options.quicknodeToken,\n quicknodeEndpointName: options.quicknodeEndpointName,\n });\n } catch (e) {}\n }\n try {\n return getPublicRpc(chainId);\n } catch (e) {}\n};\n\nconst clientCache: Record<number, Client> = {};\n\n/**\n * Returns a viem client for the given chain with the supplied config.\n * @param chainId\n * @param param1\n * @returns A viem Client\n */\nexport function getClient(\n chainId: number,\n {\n httpConfig,\n clientConfig,\n providerConfig,\n forceRebuildClient,\n }: {\n httpConfig?: Partial<HttpTransportConfig>;\n clientConfig?: Partial<ClientConfig>;\n providerConfig: GetRPCUrlOptions;\n // If supplied will create a new client, omitting the cache.\n // This can be useful when creating client with different configs.\n forceRebuildClient?: boolean;\n },\n) {\n if (!clientCache[chainId] || forceRebuildClient) {\n const rpcURL = getRPCUrl(chainId as keyof typeof ChainList, providerConfig);\n\n clientCache[chainId] = createClient({\n chain: ChainList[chainId as keyof typeof ChainList],\n transport: http(rpcURL, httpConfig),\n ...clientConfig,\n });\n }\n return clientCache[chainId];\n}\n","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const alchemyNetworkMap = {\n 1: \"eth-mainnet\",\n 10: \"opt-mainnet\",\n 30: \"rootstock-mainnet\",\n 31: \"rootstock-testnet\",\n 56: \"bnb-mainnet\",\n 97: \"bnb-testnet\",\n 100: \"gnosis-mainnet\",\n 130: \"unichain-mainnet\",\n 137: \"polygon-mainnet\",\n 146: \"sonic-mainnet\",\n 204: \"opbnb-mainnet\",\n 250: \"fantom-mainnet\",\n 252: \"frax-mainnet\",\n 300: \"zksync-sepolia\",\n 324: \"zksync-mainnet\",\n 360: \"shape-mainnet\",\n 480: \"worldchain-mainnet\",\n 545: \"flow-testnet\",\n 592: \"astar-mainnet\",\n 747: \"flow-mainnet\",\n 1088: \"metis-mainnet\",\n 1101: \"polygonzkevm-mainnet\",\n 1301: \"unichain-sepolia\",\n 1328: \"sei-testnet\",\n 1329: \"sei-mainnet\",\n 1868: \"soneium-mainnet\",\n 1946: \"soneium-minato\",\n 2020: \"ronin-mainnet\",\n 2021: \"ronin-saigon\",\n 2442: \"polygonzkevm-cardona\",\n 2522: \"frax-sepolia\",\n 2741: \"abstract-mainnet\",\n 4002: \"fantom-testnet\",\n 4157: \"crossfi-testnet\",\n 4158: \"crossfi-mainnet\",\n 4801: \"worldchain-sepolia\",\n 5000: \"mantle-mainnet\",\n 5003: \"mantle-sepolia\",\n 5373: \"settlus-septestnet\",\n 5611: \"opbnb-testnet\",\n 7000: \"zetachain-mainnet\",\n 7001: \"zetachain-testnet\",\n 8008: \"polynomial-mainnet\",\n 8009: \"polynomial-sepolia\",\n 8453: \"base-mainnet\",\n 10143: \"monad-testnet\",\n 10200: \"gnosis-chiado\",\n 11011: \"shape-sepolia\",\n 11124: \"abstract-testnet\",\n 17000: \"eth-holesky\",\n 33111: \"apechain-curtis\",\n 33139: \"apechain-mainnet\",\n 37111: \"lens-sepolia\",\n 42161: \"arb-mainnet\",\n 42170: \"arbnova-mainnet\",\n 43113: \"avax-fuji\",\n 43114: \"avax-mainnet\",\n 57054: \"sonic-blaze\",\n 57073: \"ink-mainnet\",\n 59141: \"linea-sepolia\",\n 59144: \"linea-mainnet\",\n 63157: \"geist-mainnet\",\n 80002: \"polygon-amoy\",\n 80094: \"berachain-mainnet\",\n 81457: \"blast-mainnet\",\n 84532: \"base-sepolia\",\n 421614: \"arb-sepolia\",\n 534351: \"scroll-sepolia\",\n 534352: \"scroll-mainnet\",\n 631571: \"geist-polter\",\n 763373: \"ink-sepolia\",\n 7777777: \"zora-mainnet\",\n 11155111: \"eth-sepolia\",\n 11155420: \"opt-sepolia\",\n 168587773: \"blast-sepolia\",\n 241320161: \"xmtp-testnet\",\n 666666666: \"degen-mainnet\",\n 994873017: \"lumia-prism\",\n 999999999: \"zora-sepolia\",\n 1952959480: \"lumia-testnet\"\n} as const;","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const quicknodeNetworkMap = {\n 1: \"mainnet\",\n 10: \"optimism\",\n 14: \"flare-mainnet\",\n 56: \"bsc\",\n 81: \"joc-mainnet\",\n 97: \"bsc-testnet\",\n 100: \"xdai\",\n 114: \"flare-coston2\",\n 130: \"unichain-mainnet\",\n 137: \"matic\",\n 164: \"omni-omega\",\n 166: \"omni-mainnet\",\n 250: \"fantom\",\n 252: \"fraxtal-mainnet\",\n 295: \"hedera-mainnet\",\n 296: \"hedera-testnet\",\n 300: \"zksync-sepolia\",\n 324: \"zksync-mainnet\",\n 480: \"worldchain-mainnet\",\n 545: \"flow-testnet\",\n 690: \"redstone-mainnet\",\n 747: \"flow-mainnet\",\n 1001: \"kaia-kairos\",\n 1101: \"zkevm-mainnet\",\n 1135: \"lisk-mainnet\",\n 1301: \"unichain-sepolia\",\n 1315: \"story-aeneid\",\n 1328: \"sei-atlantic\",\n 1329: \"sei-pacific\",\n 1480: \"vana-mainnet\",\n 1513: \"story-testnet\",\n 1516: \"story-odyssey\",\n 1993: \"b3-sepolia\",\n 2442: \"zkevm-cardona\",\n 2741: \"abstract-mainnet\",\n 2810: \"morph-holesky\",\n 2818: \"morph-mainnet\",\n 3338: \"peaq-mainnet\",\n 4801: \"worldchain-sepolia\",\n 5000: \"mantle-mainnet\",\n 5003: \"mantle-sepolia\",\n 6805: \"race-mainnet\",\n 6806: \"race-sepolia\",\n 7560: \"cyber-mainnet\",\n 8217: \"kaia-mainnet\",\n 8333: \"b3-mainnet\",\n 8453: \"base-mainnet\",\n 11124: \"abstract-testnet\",\n 13371: \"imx-mainnet\",\n 13473: \"imx-testnet\",\n 14800: \"vana-moksha\",\n 16600: \"0g-newton\",\n 17000: \"ethereum-holesky\",\n 34443: \"mode-mainnet\",\n 42161: \"arbitrum-mainnet\",\n 42170: \"nova-mainnet\",\n 42220: \"celo-mainnet\",\n 43113: \"avalanche-testnet\",\n 43114: \"avalanche-mainnet\",\n 59144: \"linea-mainnet\",\n 80002: \"matic-amoy\",\n 80084: \"bera-bartio\",\n 80085: \"bera-artio\",\n 80094: \"bera-mainnet\",\n 81457: \"blast-mainnet\",\n 84532: \"base-sepolia\",\n 421613: \"arbitrum-goerli\",\n 421614: \"arbitrum-sepolia\",\n 534351: \"scroll-testnet\",\n 534352: \"scroll-mainnet\",\n 660279: \"xai-mainnet\",\n 763373: \"ink-sepolia\",\n 7777777: \"zora-mainnet\",\n 11155111: \"ethereum-sepolia\",\n 11155420: \"optimism-sepolia\",\n 111557560: \"cyber-sepolia\",\n 168587773: \"blast-sepolia\",\n 37714555429: \"xai-testnet\"\n} as const;","export const erc1967_ImplementationSlot =\n \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\";\nexport const erc1967_AdminSlot =\n \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\";\n","import { createPatch, createTwoFilesPatch } from \"diff\";\nimport { format } from \"prettier/standalone\";\nimport solidityPlugin from \"prettier-plugin-solidity/standalone\";\nimport { StandardJsonInput } from \"../ecosystem/types\";\n\nconst prettierOptions = { parser: \"solidity-parse\", plugins: [solidityPlugin] };\n\nexport async function diffCode(\n before: StandardJsonInput,\n after: StandardJsonInput,\n) {\n const changes: Record<string, string> = {};\n\n // diff settings\n const settingsBefore = JSON.stringify(before.settings, null, 2);\n const settingsAfter = JSON.stringify(after.settings, null, 2);\n if (settingsBefore !== settingsAfter)\n changes.settings = createPatch(\"settings\", settingsBefore, settingsAfter);\n const contractsBefore = await Promise.all(\n Object.entries(before.sources).map(async ([path, source]) => [\n path.replace(/^.*[\\\\/]/, \"\"),\n path,\n await format(source.content, prettierOptions),\n ]),\n );\n const contractsAfter = await Promise.all(\n Object.entries(after.sources).map(async ([path, source]) => [\n path.replace(/^.*[\\\\/]/, \"\"),\n path,\n await format(source.content, prettierOptions),\n ]),\n );\n for (const [name, path, source] of contractsBefore) {\n const indexAfter = contractsAfter.findIndex(([_name]) => _name === name);\n // removed\n if (indexAfter === -1) {\n changes[name] = createPatch(path, source, \"\");\n } else {\n if (source !== contractsAfter[indexAfter][2])\n changes[name] = createTwoFilesPatch(\n path,\n contractsAfter[indexAfter][1],\n source,\n contractsAfter[indexAfter][2],\n );\n }\n }\n for (const [name, path, source] of contractsAfter) {\n const indexAfter = contractsBefore.findIndex(([_name]) => _name === name);\n // removed\n if (indexAfter === -1) {\n changes[name] = createPatch(path, \"\", source);\n }\n }\n return changes;\n}\n","import {\n Abi,\n Address,\n decodeEventLog,\n Hex,\n parseEventLogs,\n RpcLog,\n} from \"viem\";\n\ntype LogType = {\n topics: [Hex];\n data: Hex;\n emitter: Address;\n};\n\ninterface ParseLogsArgs {\n logs: LogType[];\n eventDb: Abi;\n}\n\nexport function parseLogs({ logs, eventDb }: ParseLogsArgs) {\n const parsedLogs = logs.map((log) => {\n try {\n const decoded = decodeEventLog({\n data: log.data,\n topics: log.topics,\n abi: eventDb,\n });\n return { ...log, ...decoded };\n } catch (e) {\n return log;\n }\n });\n\n return parsedLogs;\n}\n","import { Address, Client, Hex } from \"viem\";\nimport { getBytecode, getTransactionCount } from \"viem/actions\";\n\nconst STOP = 0x00;\nconst JUMPDEST = 0x5b;\nconst PUSH1 = 0x60;\nconst PUSH32 = 0x7f;\nconst RETURN = 0xf3;\nconst REVERT = 0xfd;\nconst INVALID = 0xfe;\nconst SELFDESTRUCT = 0xff;\nconst DELEGATECALL = 0xf4;\n\nconst isHalting = (opcode: number): boolean =>\n [STOP, RETURN, REVERT, INVALID, SELFDESTRUCT].includes(opcode);\nconst isPUSH = (opcode: number): boolean => opcode >= PUSH1 && opcode <= PUSH32;\n\nexport enum SelfdestuctCheckState {\n TRUSTED,\n EOA,\n EMPTY,\n DELEGATECALL,\n SAFE,\n SELF_DESTRUCT,\n}\n\nexport async function checkForSelfdestruct(\n client: Client,\n addresses: Address[],\n trustedAddresses: Address[],\n) {\n const result: { address: Address; state: SelfdestuctCheckState }[] = [];\n for (const address of addresses) {\n if (trustedAddresses.includes(address)) {\n result.push({ address, state: SelfdestuctCheckState.TRUSTED });\n continue;\n }\n const code = await getBytecode(client, { address });\n if (!code) {\n // If there is no code and nonce is > 0 then it's an EOA.\n // If nonce is 0 it is an empty account that might have code later.\n // A contract might have nonce > 0, but then it will have code.\n // If it had code, but was selfdestructed, the nonce should be reset to 0.\n const nonce = await getTransactionCount(client, { address });\n if (nonce > 0) result.push({ address, state: SelfdestuctCheckState.EOA });\n else result.push({ address, state: SelfdestuctCheckState.EMPTY });\n continue;\n }\n\n // Detection logic from https://github.com/MrLuit/selfdestruct-detect\n const bytecode = Buffer.from(code.substring(2), \"hex\");\n const { delegatecall, selfDestruct } = checkCode(bytecode);\n if (selfDestruct) {\n result.push({ address, state: SelfdestuctCheckState.SELF_DESTRUCT });\n } else if (delegatecall) {\n result.push({ address, state: SelfdestuctCheckState.DELEGATECALL });\n } else {\n result.push({ address, state: SelfdestuctCheckState.SAFE });\n }\n }\n return result;\n}\n\nfunction checkCode(bytecode: Buffer) {\n let halted = false;\n let delegatecall = false;\n for (let index = 0; index < bytecode.length; index++) {\n const opcode = bytecode[index];\n if (opcode === SELFDESTRUCT && !halted) {\n return { halted, delegatecall, selfDestruct: true };\n }\n if (opcode === DELEGATECALL && !halted) {\n delegatecall = true;\n } else if (opcode === JUMPDEST) {\n halted = false;\n } else if (isHalting(opcode)) {\n halted = true;\n } else if (isPUSH(opcode)) {\n index += opcode - PUSH1 + 0x01;\n }\n }\n return { halted, delegatecall, selfDestruct: false };\n}\n","import { Address } from \"viem\";\nimport { getSourceCode } from \"../ecosystem/explorers\";\n\ninterface GetVerificationStatusParams {\n chainId: number;\n addresses: Address[];\n contractDb: Record<Address, string>;\n apiKey?: string;\n apiUrl?: string;\n}\n\nenum VerificationStatus {\n CACHE,\n NEW,\n ERROR,\n}\n\nexport function getVerificationStatus({\n chainId,\n addresses,\n contractDb,\n apiKey,\n apiUrl,\n}: GetVerificationStatusParams) {\n return Promise.all(\n addresses.map(async (address) => {\n if (contractDb[address])\n return {\n address,\n name: contractDb[address],\n status: VerificationStatus.CACHE,\n };\n try {\n const code = await getSourceCode({ chainId, address, apiKey, apiUrl });\n return {\n address,\n name: code.ContractName,\n status: VerificationStatus.NEW,\n };\n } catch (e) {\n return {\n address,\n status: VerificationStatus.ERROR,\n };\n }\n }),\n );\n}\n","import { Client } from \"viem\";\nimport { EVENT_DB } from \"../ecosystem/event-db\";\nimport { parseLogs } from \"./logs\";\nimport { checkForSelfdestruct } from \"./selfdestruct\";\nimport { getVerificationStatus } from \"./verified\";\n\ntype RenderTenderlyReportParams = {\n client: Client;\n sim: any;\n};\n\nexport async function renderTenderlyReport({\n client,\n sim,\n}: RenderTenderlyReportParams) {\n const logs = parseLogs({\n logs: (sim.transaction.transaction_info.logs || []).map((l: any) => l.raw),\n eventDb: EVENT_DB,\n });\n const selfDestruct = checkForSelfdestruct(\n client,\n sim.transaction.addresses,\n [], // trusted addresses\n );\n const verified = getVerificationStatus({\n chainId: client.chain!.id,\n addresses: sim.transaction.addresses,\n contractDb: {},\n });\n\n return logs;\n}\n"],"mappings":"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;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;AACF;;;ACtfO,IAAM,sBAAsB;EACjC;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA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L,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EAC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","names":["import_viem","PayloadState","import_viem","import_actions","ProposalState","import_viem","body","import_viem","import_diff","import_standalone","solidityPlugin","import_viem","import_actions","SelfdestuctCheckState"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/math/binary.ts","../src/aave/user.ts","../src/aave/reserve.ts","../src/aave/constants.ts","../src/aave/ray-math.ts","../src/aave/pool-math.ts","../../../node_modules/.pnpm/@bgd-labs+aave-address-book@4.15.0/node_modules/@bgd-labs/aave-address-book/src/ts/abis/IPayloadsControllerCore.ts","../../../node_modules/.pnpm/@bgd-labs+aave-address-book@4.15.0/node_modules/@bgd-labs/aave-address-book/src/ts/abis/IGovernanceCore.ts","../src/aave/governance/payloads-controller.ts","../src/math/slot.ts","../src/aave/governance/governance.ts","../src/ecosystem/generated/etherscanExplorers.ts","../src/ecosystem/generated/routescanExplorers.ts","../src/ecosystem/explorers.ts","../src/ecosystem/tenderly.ts","../src/ecosystem/foundry.ts","../src/ecosystem/event-db.ts","../src/ecosystem/chainIds.ts","../src/ecosystem/rpcs.ts","../src/ecosystem/generated/alchemyNetworkMap.ts","../src/ecosystem/generated/quicknodeNetworkMap.ts","../src/ecosystem/constants.ts","../src/operations/diffCode.ts","../src/seatbelt/logs.ts","../src/seatbelt/selfdestruct.ts","../src/seatbelt/verified.ts","../src/seatbelt/tenderly-report.ts"],"sourcesContent":["export * from \"./math/binary\";\nexport * from \"./aave/user\";\nexport * from \"./aave/reserve\";\nexport * from \"./aave/constants\";\nexport * from \"./aave/pool-math\";\nexport * from \"./aave/ray-math\";\nexport * from \"./aave/governance/payloads-controller\";\nexport * from \"./aave/governance/governance\";\nexport * from \"./ecosystem/explorers\";\nexport * from \"./ecosystem/tenderly\";\nexport * from \"./ecosystem/foundry\";\nexport * from \"./ecosystem/event-db\";\nexport * from \"./ecosystem/chainIds\";\nexport * from \"./ecosystem/rpcs\";\nexport * from \"./ecosystem/generated/alchemyNetworkMap\";\nexport * from \"./ecosystem/generated/quicknodeNetworkMap\";\nexport * from \"./ecosystem/generated/etherscanExplorers\";\nexport * from \"./ecosystem/generated/routescanExplorers\";\n// some commonjs issue idk\n// export * from \"./ecosystem/ipfs\";\nexport * from \"./ecosystem/constants\";\nexport * from \"./operations/diffCode\";\nexport * from \"./seatbelt/logs\";\nexport * from \"./seatbelt/selfdestruct\";\nexport * from \"./seatbelt/tenderly-report\";\n","/**\n * In solidity it is a quite common practice to encode bit variables in bitmaps opposed to bool structs.\n * The reason for this is that solidity will pack one boolean per byte, while with a bitmap, one can pack one bit.. per bit.\n * These utilities help with extracting the indexes of a given bitmap.\n */\n\n/**\n * Decodes a bitmap as an array of indexes.\n * @param bitmap The bitmap\n * @returns an array of indexes\n */\nexport function bitmapToIndexes(bitmap: bigint): number[] {\n const indexes: number[] = [];\n for (let i = 0; bitmap != 0n; i++) {\n if (bitmap & 0x1n) indexes.push(i);\n bitmap = bitmap >> 1n;\n }\n return indexes;\n}\n\n/**\n * Returns the selected bits of a uint256 as bigint\n * @param uint256\n * @param startBit\n * @param endBit\n * @returns\n */\nexport function getBits(\n uint256: bigint,\n startBit: bigint,\n _endBit: bigint,\n): bigint {\n let endBit = _endBit;\n if (startBit > endBit) {\n throw new Error(\n \"Invalid bit range: startBit must be less than or equal to endBit\",\n );\n }\n\n const bitLength = BigInt(uint256.toString(2)).toString().length;\n if (endBit >= bitLength) {\n endBit = BigInt(bitLength - 1);\n }\n\n const mask = (1n << (endBit - startBit + 1n)) - 1n;\n return (uint256 >> startBit) & mask;\n}\n\n/**\n * Sets the bits in a bigint\n * @param input\n * @param startBit inclusive\n * @param endBit inclusive\n * @param value the value to replace\n * @returns\n */\nexport function setBits(\n input: bigint,\n startBit: bigint,\n endBit: bigint,\n replaceValue: bigint | number,\n) {\n const bigIntReplaceValue = BigInt(replaceValue);\n\n // Calculate the mask for the specified range\n let mask = BigInt(0);\n for (let i = startBit; i < endBit + 1n; i++) {\n mask |= BigInt(1) << BigInt(i);\n }\n // Clear the bits in the original number within the specified range\n const clearedNumber = input & ~mask;\n\n // Set the new bits in the specified range\n const result = clearedNumber | (bigIntReplaceValue << BigInt(startBit));\n return result;\n}\n","import { bitmapToIndexes } from \"../math/binary\";\n\n/**\n * The userConfiguration on aave is stored as an alteranting bitmap.\n * The least significant bit starts with borrowing on reserve 0\n * In practice this means that the following bitmap b'1011 would mean a user\n * is borrowing(bit 0) reserve 0, and supplies(bit 1,3) collateral on reserve 0 and 1\n * @param userConfiguration bitmap\n */\nexport function decodeUserConfiguration(userConfiguration: bigint) {\n const indexes = bitmapToIndexes(userConfiguration);\n const borrowedAssetIds: number[] = [];\n const collateralAssetIds: number[] = [];\n for (const index of indexes) {\n if (index % 2 == 0) borrowedAssetIds.push(index / 2);\n else collateralAssetIds.push((index - 1) / 2);\n }\n return { borrowedAssetIds, collateralAssetIds };\n}\n","import { getBits } from \"../math/binary\";\n\nexport type ReserveConfiguration = {\n ltv: bigint;\n liquidationThreshold: bigint;\n liquidationBonus: bigint;\n decimals: bigint;\n active: boolean;\n frozen: boolean;\n borrowingEnabled: boolean;\n // deprecated in 3.1\n // stableRateBorrowingEnabled: boolean;\n paused: boolean;\n borrowingInIsolation: boolean;\n siloedBorrowingEnabled: boolean;\n flashloaningEnabled: boolean;\n reserveFactor: bigint;\n borrowCap: bigint;\n supplyCap: bigint;\n liquidationProtocolFee: bigint;\n // deprecated in 3.2\n // eModeCategory: bigint;\n unbackedMintCap: bigint;\n debtCeiling: bigint;\n virtualAccountingEnabled: boolean;\n};\n\n/**\n * ReserveConfiguration is a tightly packed struct that contains the configuration of a reserve\n * @param data\n * @returns the decoded ReserveConfiguration\n */\nexport function decodeReserveConfiguration(data: bigint): ReserveConfiguration {\n const ltv = getBits(data, 0n, 15n);\n const liquidationThreshold = getBits(data, 16n, 31n);\n const liquidationBonus = getBits(data, 32n, 47n);\n const decimals = getBits(data, 48n, 55n);\n const active = getBits(data, 56n, 56n);\n const frozen = getBits(data, 57n, 57n);\n const borrowingEnabled = getBits(data, 58n, 58n);\n // const stableRateBorrowingEnabled = getBits(data, 59n, 59n);\n const paused = getBits(data, 60n, 60n);\n const borrowingInIsolation = getBits(data, 61n, 61n);\n const siloedBorrowingEnabled = getBits(data, 62n, 62n);\n const flashloaningEnabled = getBits(data, 63n, 63n);\n const reserveFactor = getBits(data, 64n, 79n);\n const borrowCap = getBits(data, 80n, 115n);\n const supplyCap = getBits(data, 116n, 151n);\n const liquidationProtocolFee = getBits(data, 152n, 167n);\n // const eModeCategory = getBits(data, 168n, 175n);\n const unbackedMintCap = getBits(data, 176n, 211n);\n const debtCeiling = getBits(data, 212n, 251n);\n const virtualAccountingEnabled = getBits(data, 252n, 252n);\n\n return {\n ltv,\n liquidationThreshold,\n liquidationBonus,\n decimals,\n active: !!active,\n frozen: !!frozen,\n borrowingEnabled: !!borrowingEnabled,\n // stableRateBorrowingEnabled: !!stableRateBorrowingEnabled,\n paused: !!paused,\n borrowingInIsolation: !!borrowingInIsolation,\n reserveFactor,\n borrowCap,\n supplyCap,\n liquidationProtocolFee,\n // eModeCategory,\n unbackedMintCap,\n debtCeiling,\n siloedBorrowingEnabled: !!siloedBorrowingEnabled,\n flashloaningEnabled: !!flashloaningEnabled,\n virtualAccountingEnabled: !!virtualAccountingEnabled,\n };\n}\n\nexport function decodeReserveConfigurationV2(data: bigint) {\n const ltv = getBits(data, 0n, 15n);\n const liquidationThreshold = getBits(data, 16n, 31n);\n const liquidationBonus = getBits(data, 32n, 47n);\n const decimals = getBits(data, 48n, 55n);\n const active = Number(getBits(data, 56n, 56n));\n const frozen = Number(getBits(data, 57n, 57n));\n const borrowingEnabled = Number(getBits(data, 58n, 58n));\n const stableBorrowingEnabled = Number(getBits(data, 59n, 59n));\n const reserveFactor = getBits(data, 64n, 79n);\n return {\n ltv,\n liquidationThreshold,\n liquidationBonus,\n decimals,\n active: !!active,\n frozen: !!frozen,\n borrowingEnabled: !!borrowingEnabled,\n stableBorrowingEnabled: !!stableBorrowingEnabled,\n reserveFactor,\n };\n}\n","export const SECONDS_PER_YEAR = 31536000n;\nexport const LTV_PRECISION = 4n;\n","// JS implementation of https://github.com/bgd-labs/aave-v3-origin/blob/main/src/contracts/protocol/libraries/math/WadRayMath.sol\nexport const WAD = 10n ** 18n;\nexport const HALF_WAD = WAD / 2n;\n\nexport const RAY = 10n ** 27n;\nexport const HALF_RAY = RAY / 2n;\n\nexport const WAD_RAY_RATIO = 10n ** 9n;\n\nexport function rayMul(a: bigint, b: bigint): bigint {\n return (a * b + HALF_RAY) / RAY;\n}\n\nexport function rayDiv(a: bigint, b: bigint): bigint {\n const halfB = b / 2n;\n\n return (halfB + a * RAY) / b;\n}\n\nexport function rayToWad(a: bigint): bigint {\n const halfRatio = WAD_RAY_RATIO / 2n;\n\n return (halfRatio + a) / WAD_RAY_RATIO;\n}\n\nexport function wadToRay(a: bigint): bigint {\n return a * WAD_RAY_RATIO;\n}\n\nexport function wadDiv(a: bigint, b: bigint): bigint {\n const halfB = b / 2n;\n\n return (halfB + a * WAD) / b;\n}\n","import { LTV_PRECISION, SECONDS_PER_YEAR } from \"./constants\";\nimport * as RayMath from \"./ray-math\";\n\ninterface CalculateCompoundedInterestRequest {\n rate: bigint;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateCompoundedInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: CalculateCompoundedInterestRequest): bigint {\n const exp = BigInt(currentTimestamp - lastUpdateTimestamp);\n\n if (exp == 0n) {\n return RayMath.RAY;\n }\n\n const expMinusOne = exp - 1n;\n const expMinusTwo = exp > 2 ? exp - 2n : 0n;\n const basePowerTwo =\n RayMath.rayMul(rate, rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\n const basePowerThree = RayMath.rayMul(basePowerTwo, rate) / SECONDS_PER_YEAR;\n\n const secondTerm = (exp * expMinusOne * basePowerTwo) / 2n;\n const thirdTerm = (exp * expMinusOne * expMinusTwo * basePowerThree) / 6n;\n return RayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\n}\n\ninterface LinearInterestRequest {\n rate: bigint;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateLinearInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: LinearInterestRequest): bigint {\n return (\n (rate * BigInt(currentTimestamp - lastUpdateTimestamp)) / SECONDS_PER_YEAR +\n RayMath.RAY\n );\n}\n\ninterface NormalizedIncomeRequest {\n rate: bigint;\n index: bigint;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\nexport function getNormalizedIncome({\n rate,\n index,\n lastUpdateTimestamp,\n currentTimestamp,\n}: NormalizedIncomeRequest): bigint {\n if (!rate) {\n return index;\n }\n\n const cumulatedInterest = calculateLinearInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n });\n\n return RayMath.rayMul(index, cumulatedInterest);\n}\n\nexport function getNormalizedDebt({\n rate,\n index,\n currentTimestamp,\n lastUpdateTimestamp,\n}: NormalizedIncomeRequest): bigint {\n if (currentTimestamp === lastUpdateTimestamp || rate === 0n) {\n return index;\n }\n return RayMath.rayMul(\n index,\n calculateCompoundedInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n }),\n );\n}\n\ninterface CurrentBalanceRequest {\n scaledBalance: bigint;\n index: bigint;\n rate: bigint;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\nexport function getCurrentLiquidityBalance({\n scaledBalance,\n index,\n rate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: CurrentBalanceRequest) {\n if (!scaledBalance) {\n return 0n;\n }\n\n return RayMath.rayToWad(\n RayMath.rayMul(\n RayMath.wadToRay(scaledBalance),\n getNormalizedIncome({\n rate,\n index,\n lastUpdateTimestamp,\n currentTimestamp,\n }),\n ),\n );\n}\n\nexport function getCurrentDebtBalance({\n index,\n scaledBalance,\n rate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: CurrentBalanceRequest): bigint {\n if (!scaledBalance) {\n return 0n;\n }\n\n return RayMath.rayMul(\n scaledBalance,\n getNormalizedDebt({\n index,\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n }),\n );\n}\n\ninterface HealthFactorFromBalanceRequest {\n collateralBalanceMarketReferenceCurrency: bigint;\n borrowBalanceMarketReferenceCurrency: bigint;\n averageLiquidationThreshold: bigint;\n}\n\n// 1e18 returned means 1HF\nexport function calculateHealthFactorFromBalances({\n borrowBalanceMarketReferenceCurrency,\n collateralBalanceMarketReferenceCurrency,\n averageLiquidationThreshold,\n}: HealthFactorFromBalanceRequest): bigint {\n if (!borrowBalanceMarketReferenceCurrency) {\n return -1n; // Invalid number\n }\n\n return RayMath.wadDiv(\n (collateralBalanceMarketReferenceCurrency * averageLiquidationThreshold) /\n 10n ** LTV_PRECISION,\n borrowBalanceMarketReferenceCurrency,\n );\n}\n\ninterface AvailableBorrowsMarketReferenceCurrencyRequest {\n collateralBalanceMarketReferenceCurrency: bigint;\n borrowBalanceMarketReferenceCurrency: bigint;\n currentLtv: bigint;\n}\n\nexport function calculateAvailableBorrowsMarketReferenceCurrency({\n collateralBalanceMarketReferenceCurrency,\n borrowBalanceMarketReferenceCurrency,\n currentLtv,\n}: AvailableBorrowsMarketReferenceCurrencyRequest): bigint {\n if (!currentLtv) {\n return 0n;\n }\n\n const availableBorrowsMarketReferenceCurrency =\n (collateralBalanceMarketReferenceCurrency * currentLtv) /\n 10n ** LTV_PRECISION -\n borrowBalanceMarketReferenceCurrency;\n return availableBorrowsMarketReferenceCurrency > 0\n ? availableBorrowsMarketReferenceCurrency\n : 0n;\n}\n\ninterface MarketReferenceCurrencyAndUsdBalanceRequest {\n balance: bigint;\n priceInMarketReferenceCurrency: bigint;\n marketReferenceCurrencyDecimals: number;\n decimals: number;\n marketReferencePriceInUsdNormalized: bigint;\n}\n\ninterface MarketReferenceAndUsdBalanceResponse {\n marketReferenceCurrencyBalance: bigint;\n usdBalance: bigint;\n}\n/**\n * @returns non humanized/normalized values for usd/marketReference\n */\nexport function getMarketReferenceCurrencyAndUsdBalance({\n balance,\n priceInMarketReferenceCurrency,\n marketReferenceCurrencyDecimals,\n decimals,\n marketReferencePriceInUsdNormalized,\n}: MarketReferenceCurrencyAndUsdBalanceRequest): MarketReferenceAndUsdBalanceResponse {\n const marketReferenceCurrencyBalance =\n (balance * priceInMarketReferenceCurrency) / BigInt(10 ** decimals);\n const usdBalance =\n (marketReferenceCurrencyBalance * marketReferencePriceInUsdNormalized) /\n BigInt(10 ** marketReferenceCurrencyDecimals);\n return { marketReferenceCurrencyBalance, usdBalance };\n}\n","// AUTOGENERATED - MANUALLY CHANGES WILL BE REVERTED BY THE GENERATOR\nexport const IPayloadsControllerCore_ABI = [\n {\n type: 'function',\n name: 'EXPIRATION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'GRACE_PERIOD',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MAX_EXECUTION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MIN_EXECUTION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'cancelPayload',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'createPayload',\n inputs: [\n {\n name: 'actions',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'executePayload',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'getExecutorSettingsByAccessControl',\n inputs: [\n {\n name: 'accessControl',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.ExecutorConfig',\n components: [\n {\n name: 'executor',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadById',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.Payload',\n components: [\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'maximumAccessLevelRequired',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'state',\n type: 'uint8',\n internalType: 'enum IPayloadsControllerCore.PayloadState',\n },\n {\n name: 'createdAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'queuedAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'executedAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'cancelledAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'expirationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'gracePeriod',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'actions',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadState',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint8',\n internalType: 'enum IPayloadsControllerCore.PayloadState',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'updateExecutors',\n inputs: [\n {\n name: 'executors',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.UpdateExecutorInput[]',\n components: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'executorConfig',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.ExecutorConfig',\n components: [\n {\n name: 'executor',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n name: 'ExecutorSet',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'executor',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadCancelled',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadCreated',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: true,\n internalType: 'uint40',\n },\n {\n name: 'creator',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'actions',\n type: 'tuple[]',\n indexed: false,\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n {\n name: 'maximumAccessLevelRequired',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadExecuted',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadExecutionMessageReceived',\n inputs: [\n {\n name: 'originSender',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'originChainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'delivered',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n {\n name: 'message',\n type: 'bytes',\n indexed: false,\n internalType: 'bytes',\n },\n {\n name: 'reason',\n type: 'bytes',\n indexed: false,\n internalType: 'bytes',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadQueued',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n] as const;\n","// AUTOGENERATED - MANUALLY CHANGES WILL BE REVERTED BY THE GENERATOR\nexport const IGovernanceCore_ABI = [\n {\n type: 'function',\n name: 'ACHIEVABLE_VOTING_PARTICIPATION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'CANCELLATION_FEE_COLLECTOR',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'COOLDOWN_PERIOD',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MIN_VOTING_DURATION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'NAME',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'PRECISION_DIVIDER',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'PROPOSAL_EXPIRATION_TIME',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'VOTING_TOKENS_CAP',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'activateVoting',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'addVotingPortals',\n inputs: [\n {\n name: 'votingPortals',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'cancelProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'createProposal',\n inputs: [\n {\n name: 'payloads',\n type: 'tuple[]',\n internalType: 'struct PayloadsControllerUtils.Payload[]',\n components: [\n {\n name: 'chain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'payloadsController',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'executeProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'getCancellationFee',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPowerStrategy',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IGovernancePowerStrategy',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IGovernanceCore.Proposal',\n components: [\n {\n name: 'state',\n type: 'uint8',\n internalType: 'enum IGovernanceCore.State',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'creationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingActivationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'queuingTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'cancelTimestamp',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'snapshotBlockHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: 'forVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'againstVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'cancellationFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'payloads',\n type: 'tuple[]',\n internalType: 'struct PayloadsControllerUtils.Payload[]',\n components: [\n {\n name: 'chain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'payloadsController',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposalState',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint8',\n internalType: 'enum IGovernanceCore.State',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposalsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getRepresentativeByChain',\n inputs: [\n {\n name: 'voter',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getRepresentedVotersByChain',\n inputs: [\n {\n name: 'representative',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getVotingConfig',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IGovernanceCore.VotingConfig',\n components: [\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint56',\n internalType: 'uint56',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint56',\n internalType: 'uint56',\n },\n {\n name: 'minPropositionPower',\n type: 'uint56',\n internalType: 'uint56',\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getVotingPortalsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'isVotingPortalApproved',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'queueProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'forVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'againstVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'redeemCancellationFee',\n inputs: [\n {\n name: 'proposalIds',\n type: 'uint256[]',\n internalType: 'uint256[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'removeVotingPortals',\n inputs: [\n {\n name: 'votingPortals',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'rescueVotingPortal',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setPowerStrategy',\n inputs: [\n {\n name: 'newPowerStrategy',\n type: 'address',\n internalType: 'contract IGovernancePowerStrategy',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setVotingConfigs',\n inputs: [\n {\n name: 'votingConfigs',\n type: 'tuple[]',\n internalType: 'struct IGovernanceCore.SetVotingConfigInput[]',\n components: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'minPropositionPower',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'updateCancellationFee',\n inputs: [\n {\n name: 'cancellationFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'updateRepresentativesForChain',\n inputs: [\n {\n name: 'representatives',\n type: 'tuple[]',\n internalType: 'struct IGovernanceCore.RepresentativeInput[]',\n components: [\n {\n name: 'representative',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n name: 'CancellationFeeRedeemed',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'to',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'cancellationFee',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'success',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'CancellationFeeUpdated',\n inputs: [\n {\n name: 'cancellationFee',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadSent',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n {\n name: 'payloadsController',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'payloadNumberOnProposal',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'numberOfPayloadsOnProposal',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PowerStrategyUpdated',\n inputs: [\n {\n name: 'newPowerStrategy',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalCanceled',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalCreated',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'creator',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n indexed: false,\n internalType: 'bytes32',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalExecuted',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalFailed',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'votesFor',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n {\n name: 'votesAgainst',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalQueued',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'votesFor',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n {\n name: 'votesAgainst',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'RepresentativeUpdated',\n inputs: [\n {\n name: 'voter',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'representative',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VoteForwarded',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'voter',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'support',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n {\n name: 'votingAssetsWithSlot',\n type: 'tuple[]',\n indexed: false,\n internalType: 'struct IVotingMachineWithProofs.VotingAssetWithSlot[]',\n components: [\n {\n name: 'underlyingAsset',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'slot',\n type: 'uint128',\n internalType: 'uint128',\n },\n ],\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingActivated',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'snapshotBlockHash',\n type: 'bytes32',\n indexed: true,\n internalType: 'bytes32',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingConfigUpdated',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'minPropositionPower',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingPortalUpdated',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n ],\n anonymous: false,\n },\n] as const;\n","import { IPayloadsControllerCore_ABI } from \"@bgd-labs/aave-address-book/abis\";\nimport {\n Address,\n Client,\n GetContractReturnType,\n Hex,\n TestClient,\n encodePacked,\n getContract,\n} from \"viem\";\nimport { getSolidityStorageSlotUint } from \"../../math/slot\";\nimport { getBlock } from \"viem/actions\";\n\nexport enum PayloadState {\n None = 0,\n Created = 1,\n Queued = 2,\n Executed = 3,\n Cancelled = 4,\n Expired = 5,\n}\n\nexport const HUMAN_READABLE_PAYLOAD_STATE = {\n [PayloadState.None]: \"None\",\n [PayloadState.Created]: \"Created\",\n [PayloadState.Queued]: \"Queued\",\n [PayloadState.Executed]: \"Executed\",\n [PayloadState.Cancelled]: \"Cancelled\",\n [PayloadState.Expired]: \"Expired\",\n};\n\nexport type PayloadsControllerContract = GetContractReturnType<\n typeof IPayloadsControllerCore_ABI,\n Client\n>;\n\nexport function getPayloadsController<T extends Client>(\n client: T,\n address: Hex,\n): PayloadsControllerContract {\n return getContract({\n abi: IPayloadsControllerCore_ABI,\n client,\n address,\n });\n}\n\nexport async function makePayloadExecutableOnTestClient(\n client: TestClient,\n payloadsController: Address,\n payloadId: number,\n) {\n const controllerContract = getPayloadsController(client, payloadsController);\n const payload = await controllerContract.read.getPayloadById([payloadId]);\n const currentBlock = await getBlock(client);\n return client.setStorageAt({\n address: payloadsController,\n // 3 is the slot of the payloads mapping\n index: getSolidityStorageSlotUint(3n, BigInt(payloadId)),\n value: encodePacked(\n [\"uint40\", \"uint40\", \"uint8\", \"uint8\", \"address\"],\n [\n // we subtract 240n(4min), as tenderly might have been fallen behind\n // therefore using block_number -1 (latest on tenderly) and a 4min margin should give a save margin\n Number(currentBlock.timestamp - BigInt(payload.delay) - 1n - 240n), // altering queued time so can be executed in current block\n payload.createdAt,\n PayloadState.Queued,\n payload.maximumAccessLevelRequired,\n payload.creator,\n ],\n ),\n });\n}\n\nexport function isPayloadFinal(state: PayloadState) {\n return ![PayloadState.Queued, PayloadState.Created].includes(state);\n}\n\nexport async function getNonFinalizedPayloads<T extends Client>(\n client: T,\n payloadsController: Address,\n): Promise<number[]> {\n const controllerContract = getPayloadsController(client, payloadsController);\n const payloadsCount = await controllerContract.read.getPayloadsCount();\n const nonFinalPayloads: number[] = [];\n for (let payloadId = payloadsCount - 1; payloadId != 0; payloadId--) {\n // controllerContract.read.EXPIRATION_DELAY(), controllerContract.read.MAX_EXECUTION_DELAY(), controllerContract.read.GRACE_PERIOD()\n const maxRange = (35 + 10 + 7) * 24 * 60 * 60;\n const payload = await controllerContract.read.getPayloadById([payloadId]);\n if (!isPayloadFinal(payload.state)) nonFinalPayloads.push(payloadId);\n // If the payload was created longer then maxRange in the past, we now everything that was created before will be expired as well\n if (payload.createdAt < Date.now() / 1000 - maxRange) break;\n }\n return nonFinalPayloads;\n}\n","import {\n type Hex,\n concat,\n encodeAbiParameters,\n fromHex,\n getAddress,\n keccak256,\n pad,\n parseAbiParameters,\n slice,\n toBytes,\n toHex,\n trim,\n} from \"viem\";\n/**\n * @notice Returns the storage slot for a Solidity mapping with bytes32 keys, given the slot of the mapping itself\n * @dev Read more at https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html#mappings-and-dynamic-arrays\n * @param mappingSlot Mapping slot in storage\n * @param key Mapping key to find slot for\n * @returns Storage slot\n */\nexport function getSolidityStorageSlotBytes(mappingSlot: Hex, key: Hex) {\n const slot = pad(mappingSlot, { size: 32 });\n return trim(\n keccak256(\n encodeAbiParameters(parseAbiParameters(\"bytes32, uint256\"), [\n key,\n BigInt(slot),\n ]),\n ),\n );\n}\n\n/**\n * @notice Returns the storage slot for a Solidity mapping with uint keys, given the slot of the mapping itself\n * @dev Read more at https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html#mappings-and-dynamic-arrays\n * @param mappingSlot Mapping slot in storage\n * @param key Mapping key to find slot for\n * @returns Storage slot\n */\nexport function getSolidityStorageSlotUint(mappingSlot: bigint, key: bigint) {\n return keccak256(\n encodeAbiParameters(parseAbiParameters(\"uint256, uint256\"), [\n key,\n mappingSlot,\n ]),\n );\n}\n\nexport function getSolidityStorageSlotAddress(\n mappingSlot: bigint | number,\n key: Hex,\n) {\n return keccak256(\n encodeAbiParameters(parseAbiParameters(\"address, uint256\"), [\n key,\n BigInt(mappingSlot),\n ]),\n );\n}\n\n/**\n * Returns the slot of an array item\n * @param baseSlot baseSlot of the array size pointer\n * @param arrayIndex index within the array\n * @param itemSize number of slots consumed per array item\n * @returns\n */\nexport function getDynamicArraySlot(\n baseSlot: bigint,\n arrayIndex: number,\n itemSize: number,\n): Hex {\n return pad(\n toHex(\n fromHex(\n keccak256(\n encodeAbiParameters(parseAbiParameters(\"uint256\"), [baseSlot]),\n ),\n \"bigint\",\n ) + BigInt(arrayIndex * itemSize),\n ),\n { size: 32 },\n );\n}\n\n/**\n * https://ethereum.stackexchange.com/questions/107282/storage-and-memory-layout-of-strings\n * @param value string | bytes\n */\nexport function getBytesValue(value: string | Hex) {\n const bytesString = toBytes(value);\n if (bytesString.length > 31)\n throw new Error(\"Error: strings > 31 bytes are not implemented\");\n return concat([\n toHex(pad(bytesString, { size: 31, dir: \"right\" })),\n toHex(bytesString.length * 2, { size: 1 }),\n ]);\n}\n\nexport function bytes32ToAddress(bytes32: Hex) {\n return getAddress(slice(bytes32, 12, 32));\n}\n","import { IGovernanceCore_ABI } from \"@bgd-labs/aave-address-book/abis\";\nimport {\n Address,\n Client,\n fromHex,\n getContract,\n GetContractReturnType,\n Hex,\n TestClient,\n toHex,\n} from \"viem\";\nimport { getBlock, getStorageAt } from \"viem/actions\";\nimport { getSolidityStorageSlotUint } from \"../../math/slot\";\nimport { setBits } from \"../../math/binary\";\n\nexport enum ProposalState {\n Null = 0, // proposal does not exists\n Created = 1, // created, waiting for a cooldown to initiate the balances snapshot\n Active = 2, // balances snapshot set, voting in progress\n Queued = 3, // voting results submitted, but proposal is under grace period when guardian can cancel it\n Executed = 4, // results sent to the execution chain(s)\n Failed = 5, // voting was not successful\n Cancelled = 6, // got cancelled by guardian, or because proposition power of creator dropped below allowed minimum\n Expired = 7,\n}\n\nexport const HUMAN_READABLE_PROPOSAL_STATE = {\n [ProposalState.Null]: \"Null\",\n [ProposalState.Created]: \"Created\",\n [ProposalState.Active]: \"Active\",\n [ProposalState.Queued]: \"Queued\",\n [ProposalState.Executed]: \"Executed\",\n [ProposalState.Failed]: \"Failed\",\n [ProposalState.Cancelled]: \"Cancelled\",\n [ProposalState.Expired]: \"Expired\",\n};\n\nexport type GovernanceContract = GetContractReturnType<\n typeof IGovernanceCore_ABI,\n Client\n>;\n\nexport function getGovernance<T extends Client>(\n client: T,\n address: Hex,\n): GovernanceContract {\n return getContract({\n abi: IGovernanceCore_ABI,\n client,\n address,\n });\n}\n\nexport async function makeProposalExecutableOnTestClient(\n client: TestClient,\n governance: Address,\n proposalId: bigint,\n) {\n const currentBlock = await getBlock(client);\n // 7n is the base slot of the proposal mapping\n const proposalSlot = getSolidityStorageSlotUint(7n, proposalId);\n const data = await getStorageAt(client, {\n address: governance,\n slot: proposalSlot,\n });\n let manipulatedStorage = fromHex(data!, { to: \"bigint\" });\n // set queued\n manipulatedStorage = setBits(\n manipulatedStorage,\n 0n,\n 8n,\n ProposalState.Queued,\n );\n // set creation time\n manipulatedStorage = setBits(\n manipulatedStorage,\n 16n,\n 56n,\n currentBlock.timestamp - 2592000n, // (await governanceContract.read.PROPOSAL_EXPIRATION_TIME())\n );\n return client.setStorageAt({\n address: governance,\n // 3 is the slot of the payloads mapping\n index: proposalSlot,\n value: toHex(manipulatedStorage, { size: 32 }),\n });\n}\n\nexport function isProposalFinal(state: ProposalState) {\n return ![\n ProposalState.Queued,\n ProposalState.Created,\n ProposalState.Active,\n ].includes(state);\n}\n\nexport async function getNonFinalizedProposals<T extends Client>(\n client: T,\n governanceAddress: Address,\n): Promise<bigint[]> {\n const goverannceContract = getGovernance(client, governanceAddress);\n const proposalsCount = await goverannceContract.read.getProposalsCount();\n const nonFinalProposals: bigint[] = [];\n for (let proposalId = proposalsCount - 1n; proposalId != 0n; proposalId--) {\n const proposal = await goverannceContract.read.getProposal([proposalId]);\n if (isProposalFinal(proposal.state)) nonFinalProposals.push(proposalId);\n // If the payload was created longer then expiration time in the past we no longer care\n if (proposal.creationTime < Date.now() / 1000 - 2592000) break;\n }\n return nonFinalProposals;\n}\n","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const etherscanExplorers = {\n 1: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://etherscan.io\"\n },\n 10: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://optimistic.etherscan.io/\"\n },\n 25: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://cronoscan.com\"\n },\n 50: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://xdcscan.com/\"\n },\n 51: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.xdcscan.com/\"\n },\n 56: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://bscscan.com\"\n },\n 97: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.bscscan.com\"\n },\n 100: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://gnosisscan.io/\"\n },\n 130: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://uniscan.xyz/\"\n },\n 137: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://polygonscan.com\"\n },\n 146: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sonicscan.org/\"\n },\n 199: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://bttcscan.com/\"\n },\n 204: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://opbnb.bscscan.com/\"\n },\n 250: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://ftmscan.com\"\n },\n 252: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://fraxscan.com/\"\n },\n 255: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://kromascan.com/\"\n },\n 300: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia-era.zksync.network/\"\n },\n 324: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://era.zksync.network/\"\n },\n 480: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://worldscan.org/\"\n },\n 1028: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.bttcscan.com/\"\n },\n 1101: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://zkevm.polygonscan.com/\"\n },\n 1111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://wemixscan.com/\"\n },\n 1112: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.wemixscan.com/\"\n },\n 1284: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonbeam.moonscan.io/\"\n },\n 1285: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonriver.moonscan.io/\"\n },\n 1287: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonbase.moonscan.io/\"\n },\n 1301: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.uniscan.xyz/\"\n },\n 2358: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.kromascan.com/\"\n },\n 2442: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://cardona-zkevm.polygonscan.com/\"\n },\n 2522: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://holesky.fraxscan.com/\"\n },\n 2741: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://abscan.org/\"\n },\n 4002: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.ftmscan.com/\"\n },\n 4801: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.worldscan.org/\"\n },\n 5000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://mantlescan.xyz/\"\n },\n 5003: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.mantlescan.xyz/\"\n },\n 5611: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://opbnb-testnet.bscscan.com/\"\n },\n 8453: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://basescan.org\"\n },\n 11124: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.abscan.org/\"\n },\n 17000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.etherscan.io\"\n },\n 33111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://curtis.apescan.io/\"\n },\n 33139: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://apescan.io/\"\n },\n 42161: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://arbiscan.io\"\n },\n 42170: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://nova.arbiscan.io/\"\n },\n 42220: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://celoscan.io\"\n },\n 43113: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.snowscan.xyz/\"\n },\n 43114: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://snowscan.xyz/\"\n },\n 44787: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://alfajores.celoscan.io/\"\n },\n 50104: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sophscan.xyz/\"\n },\n 57054: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.sonicscan.org/\"\n },\n 59141: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.lineascan.build/\"\n },\n 59144: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://lineascan.build/\"\n },\n 80002: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://amoy.polygonscan.com/\"\n },\n 80094: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://berascan.com/\"\n },\n 81457: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://blastscan.io/\"\n },\n 84532: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.basescan.org/\"\n },\n 167000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://taikoscan.io/\"\n },\n 167009: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://hekla.taikoscan.io/\"\n },\n 421614: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.arbiscan.io/\"\n },\n 534351: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.scrollscan.com/\"\n },\n 534352: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://scrollscan.com/\"\n },\n 660279: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://xaiscan.io/\"\n },\n 11155111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.etherscan.io\"\n },\n 11155420: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia-optimism.etherscan.io/\"\n },\n 168587773: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.blastscan.io/\"\n },\n 531050104: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.sophscan.xyz/\"\n },\n 37714555429: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.xaiscan.io/\"\n }\n} as const;","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const routescanExplorers = {\n 1: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1/etherscan\",\n explorer: \"1.routescan.io\"\n },\n 10: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10/etherscan\",\n explorer: \"10.routescan.io\"\n },\n 14: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/14/etherscan\",\n explorer: \"14.routescan.io\"\n },\n 16: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/16/etherscan\",\n explorer: \"16.routescan.io\"\n },\n 19: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/19/etherscan\",\n explorer: \"19.routescan.io\"\n },\n 56: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/56/etherscan\",\n explorer: \"56.routescan.io\"\n },\n 97: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/97/etherscan\",\n explorer: \"97.routescan.io\"\n },\n 114: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/114/etherscan\",\n explorer: \"114.routescan.io\"\n },\n 146: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/146/etherscan\",\n explorer: \"146.routescan.io\"\n },\n 151: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/151/etherscan\",\n explorer: \"151.routescan.io\"\n },\n 166: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/166/etherscan\",\n explorer: \"166.routescan.io\"\n },\n 183: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/183/etherscan\",\n explorer: \"183.routescan.io\"\n },\n 185: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/185/etherscan\",\n explorer: \"185.routescan.io\"\n },\n 233: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/233/etherscan\",\n explorer: \"233.routescan.io\"\n },\n 252: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/252/etherscan\",\n explorer: \"252.routescan.io\"\n },\n 254: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/254/etherscan\",\n explorer: \"254.routescan.io\"\n },\n 255: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/255/etherscan\",\n explorer: \"255.routescan.io\"\n },\n 288: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/288/etherscan\",\n explorer: \"288.routescan.io\"\n },\n 291: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/291/etherscan\",\n explorer: \"291.routescan.io\"\n },\n 303: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/303/etherscan\",\n explorer: \"303.routescan.io\"\n },\n 324: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/324/etherscan\",\n explorer: \"324.routescan.io\"\n },\n 335: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/335/etherscan\",\n explorer: \"335.routescan.io\"\n },\n 357: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/357/etherscan\",\n explorer: \"357.routescan.io\"\n },\n 392: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/392/etherscan\",\n explorer: \"392.routescan.io\"\n },\n 480: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/480/etherscan\",\n explorer: \"480.routescan.io\"\n },\n 749: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/749/etherscan\",\n explorer: \"749.routescan.io\"\n },\n 919: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/919/etherscan\",\n explorer: \"919.routescan.io\"\n },\n 1010: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1010/etherscan\",\n explorer: \"1010.routescan.io\"\n },\n 1088: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan\",\n explorer: \"1088.routescan.io\"\n },\n 1135: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1135/etherscan\",\n explorer: \"1135.routescan.io\"\n },\n 1234: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1234/etherscan\",\n explorer: \"1234.routescan.io\"\n },\n 1301: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1301/etherscan\",\n explorer: \"1301.routescan.io\"\n },\n 1687: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1687/etherscan\",\n explorer: \"1687.routescan.io\"\n },\n 1853: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1853/etherscan\",\n explorer: \"1853.routescan.io\"\n },\n 1923: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1923/etherscan\",\n explorer: \"1923.routescan.io\"\n },\n 1946: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1946/etherscan\",\n explorer: \"1946.routescan.io\"\n },\n 2037: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2037/etherscan\",\n explorer: \"2037.routescan.io\"\n },\n 2044: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/2044/etherscan\",\n explorer: \"2044.routescan.io\"\n },\n 2233: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2233/etherscan\",\n explorer: \"2233.routescan.io\"\n },\n 2358: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2358/etherscan\",\n explorer: \"2358.routescan.io\"\n },\n 2522: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2522/etherscan\",\n explorer: \"2522.routescan.io\"\n },\n 2818: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/2818/etherscan\",\n explorer: \"2818.routescan.io\"\n },\n 3011: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/3011/etherscan\",\n explorer: \"3011.routescan.io\"\n },\n 3012: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3012/etherscan\",\n explorer: \"3012.routescan.io\"\n },\n 3636: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3636/etherscan\",\n explorer: \"3636.routescan.io\"\n },\n 3939: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3939/etherscan\",\n explorer: \"3939.routescan.io\"\n },\n 4202: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4202/etherscan\",\n explorer: \"4202.routescan.io\"\n },\n 4337: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/4337/etherscan\",\n explorer: \"4337.routescan.io\"\n },\n 4460: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4460/etherscan\",\n explorer: \"4460.routescan.io\"\n },\n 4801: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4801/etherscan\",\n explorer: \"4801.routescan.io\"\n },\n 5000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5000/etherscan\",\n explorer: \"5000.routescan.io\"\n },\n 5115: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/5115/etherscan\",\n explorer: \"5115.routescan.io\"\n },\n 5330: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5330/etherscan\",\n explorer: \"5330.routescan.io\"\n },\n 5566: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5566/etherscan\",\n explorer: \"5566.routescan.io\"\n },\n 6119: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/6119/etherscan\",\n explorer: \"6119.routescan.io\"\n },\n 6900: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/6900/etherscan\",\n explorer: \"6900.routescan.io\"\n },\n 6911: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/6911/etherscan\",\n explorer: \"6911.routescan.io\"\n },\n 7171: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7171/etherscan\",\n explorer: \"7171.routescan.io\"\n },\n 7210: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/7210/etherscan\",\n explorer: \"7210.routescan.io\"\n },\n 7222: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/7222/etherscan\",\n explorer: \"7222.routescan.io\"\n },\n 7560: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7560/etherscan\",\n explorer: \"7560.routescan.io\"\n },\n 7887: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7887/etherscan\",\n explorer: \"7887.routescan.io\"\n },\n 7979: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7979/etherscan\",\n explorer: \"7979.routescan.io\"\n },\n 8008: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8008/etherscan\",\n explorer: \"8008.routescan.io\"\n },\n 8082: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/8082/etherscan\",\n explorer: \"8082.routescan.io\"\n },\n 8453: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8453/etherscan\",\n explorer: \"8453.routescan.io\"\n },\n 8888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8888/etherscan\",\n explorer: \"8888.routescan.io\"\n },\n 9728: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/9728/etherscan\",\n explorer: \"9728.routescan.io\"\n },\n 10507: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10507/etherscan\",\n explorer: \"10507.routescan.io\"\n },\n 10849: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10849/etherscan\",\n explorer: \"10849.routescan.io\"\n },\n 10880: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/10880/etherscan\",\n explorer: \"10880.routescan.io\"\n },\n 10888: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/10888/etherscan\",\n explorer: \"10888.routescan.io\"\n },\n 12150: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/12150/etherscan\",\n explorer: \"12150.routescan.io\"\n },\n 17000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/17000/etherscan\",\n explorer: \"17000.routescan.io\"\n },\n 26659: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/26659/etherscan\",\n explorer: \"26659.routescan.io\"\n },\n 28882: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/28882/etherscan\",\n explorer: \"28882.routescan.io\"\n },\n 31335: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/31335/etherscan\",\n explorer: \"31335.routescan.io\"\n },\n 34443: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan\",\n explorer: \"34443.routescan.io\"\n },\n 42026: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/42026/etherscan\",\n explorer: \"42026.routescan.io\"\n },\n 42069: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/42069/etherscan\",\n explorer: \"42069.routescan.io\"\n },\n 42161: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/42161/etherscan\",\n explorer: \"42161.routescan.io\"\n },\n 43113: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/43113/etherscan\",\n explorer: \"43113.routescan.io\"\n },\n 43114: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan\",\n explorer: \"43114.routescan.io\"\n },\n 48795: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/48795/etherscan\",\n explorer: \"48795.routescan.io\"\n },\n 49321: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/49321/etherscan\",\n explorer: \"49321.routescan.io\"\n },\n 53123: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/53123/etherscan\",\n explorer: \"53123.routescan.io\"\n },\n 53302: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/53302/etherscan\",\n explorer: \"53302.routescan.io\"\n },\n 53935: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/53935/etherscan\",\n explorer: \"53935.routescan.io\"\n },\n 55551: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/55551/etherscan\",\n explorer: \"55551.routescan.io\"\n },\n 56288: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/56288/etherscan\",\n explorer: \"56288.routescan.io\"\n },\n 57054: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/57054/etherscan\",\n explorer: \"57054.routescan.io\"\n },\n 57073: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/57073/etherscan\",\n explorer: \"57073.routescan.io\"\n },\n 60118: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/60118/etherscan\",\n explorer: \"60118.routescan.io\"\n },\n 62707: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/62707/etherscan\",\n explorer: \"62707.routescan.io\"\n },\n 70800: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/70800/etherscan\",\n explorer: \"70800.routescan.io\"\n },\n 70953: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/70953/etherscan\",\n explorer: \"70953.routescan.io\"\n },\n 76736: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/76736/etherscan\",\n explorer: \"76736.routescan.io\"\n },\n 78170: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/78170/etherscan\",\n explorer: \"78170.routescan.io\"\n },\n 80000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80000/etherscan\",\n explorer: \"80000.routescan.io\"\n },\n 80002: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80002/etherscan\",\n explorer: \"80002.routescan.io\"\n },\n 80008: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80008/etherscan\",\n explorer: \"80008.routescan.io\"\n },\n 80069: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80069/etherscan\",\n explorer: \"80069.routescan.io\"\n },\n 80084: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80084/etherscan\",\n explorer: \"80084.routescan.io\"\n },\n 80085: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80085/etherscan\",\n explorer: \"80085.routescan.io\"\n },\n 80094: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/80094/etherscan\",\n explorer: \"80094.routescan.io\"\n },\n 81457: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/81457/etherscan\",\n explorer: \"81457.routescan.io\"\n },\n 84532: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/84532/etherscan\",\n explorer: \"84532.routescan.io\"\n },\n 88882: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/88882/etherscan\",\n explorer: \"88882.routescan.io\"\n },\n 88888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/88888/etherscan\",\n explorer: \"88888.routescan.io\"\n },\n 124832: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/124832/etherscan\",\n explorer: \"124832.routescan.io\"\n },\n 167000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/167000/etherscan\",\n explorer: \"167000.routescan.io\"\n },\n 167008: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/167008/etherscan\",\n explorer: \"167008.routescan.io\"\n },\n 167009: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/167009/etherscan\",\n explorer: \"167009.routescan.io\"\n },\n 173750: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/173750/etherscan\",\n explorer: \"173750.routescan.io\"\n },\n 421614: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/421614/etherscan\",\n explorer: \"421614.routescan.io\"\n },\n 432201: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/432201/etherscan\",\n explorer: \"432201.routescan.io\"\n },\n 432204: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/432204/etherscan\",\n explorer: \"432204.routescan.io\"\n },\n 504441: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/504441/etherscan\",\n explorer: \"504441.routescan.io\"\n },\n 555666: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/555666/etherscan\",\n explorer: \"555666.routescan.io\"\n },\n 710420: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/710420/etherscan\",\n explorer: \"710420.routescan.io\"\n },\n 763373: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/763373/etherscan\",\n explorer: \"763373.routescan.io\"\n },\n 779672: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/779672/etherscan\",\n explorer: \"779672.routescan.io\"\n },\n 999999: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/999999/etherscan\",\n explorer: \"999999.routescan.io\"\n },\n 3397901: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3397901/etherscan\",\n explorer: \"3397901.routescan.io\"\n },\n 7777777: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7777777/etherscan\",\n explorer: \"7777777.routescan.io\"\n },\n 11155111: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155111/etherscan\",\n explorer: \"11155111.routescan.io\"\n },\n 11155420: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155420/etherscan\",\n explorer: \"11155420.routescan.io\"\n },\n 11155931: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155931/etherscan\",\n explorer: \"11155931.routescan.io\"\n },\n 12345678: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/12345678/etherscan\",\n explorer: \"12345678.routescan.io\"\n },\n 13068200: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/13068200/etherscan\",\n explorer: \"13068200.routescan.io\"\n },\n 20241133: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/20241133/etherscan\",\n explorer: \"20241133.routescan.io\"\n },\n 21000000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/21000000/etherscan\",\n explorer: \"21000000.routescan.io\"\n },\n 21000001: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/21000001/etherscan\",\n explorer: \"21000001.routescan.io\"\n },\n 28122024: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/28122024/etherscan\",\n explorer: \"28122024.routescan.io\"\n },\n 111557560: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/111557560/etherscan\",\n explorer: \"111557560.routescan.io\"\n },\n 168587773: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/168587773/etherscan\",\n explorer: \"168587773.routescan.io\"\n },\n 333000333: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/333000333/etherscan\",\n explorer: \"333000333.routescan.io\"\n },\n 420120000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/420120000/etherscan\",\n explorer: \"420120000.routescan.io\"\n },\n 420120001: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/420120001/etherscan\",\n explorer: \"420120001.routescan.io\"\n },\n 686669576: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/686669576/etherscan\",\n explorer: \"686669576.routescan.io\"\n },\n 888888888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/888888888/etherscan\",\n explorer: \"888888888.routescan.io\"\n },\n 999999999: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/999999999/etherscan\",\n explorer: \"999999999.routescan.io\"\n },\n 920637907288165: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/920637907288165/etherscan\",\n explorer: \"920637907288165.routescan.io\"\n }\n} as const;","import { Address, Hex } from \"viem\";\nimport { etherscanExplorers } from \"./generated/etherscanExplorers\";\nimport { routescanExplorers } from \"./generated/routescanExplorers\";\nimport { StandardJsonInput } from \"./types\";\n\nexport type ExplorerConfig = { api: string; explorer: string };\n\n/**\n * Fetches what we consider the \"best\" explorer for a given chain.\n * For our tooling we have a opinionated priorization for explorers:\n * 1. Etherscan\n * 2. Routescan\n * 3. Blockscout and others\n * @param chainId Id of the chain to fetch the explorer for\n */\nexport function getExplorer(chainId: number): ExplorerConfig {\n const etherscan =\n etherscanExplorers[chainId as keyof typeof etherscanExplorers];\n if (etherscan) return etherscan;\n const routescan =\n routescanExplorers[chainId as keyof typeof routescanExplorers];\n if (routescan) return routescan;\n throw new Error(`No explorer found for chainId: ${chainId}`);\n}\n\ntype GetSourceCodeParams = {\n chainId: number;\n address: Address;\n apiUrl?: string;\n apiKey?: string;\n};\n\nexport async function getSourceCode(params: GetSourceCodeParams) {\n const payload = {\n chainid: String(params.chainId),\n address: params.address,\n module: \"contract\",\n action: \"getsourcecode\",\n };\n if (params.apiKey) (payload as any).apikey = params.apiKey;\n const formattedPayload = new URLSearchParams(payload).toString();\n const url = `${params.apiUrl ? params.apiUrl : getExplorer(params.chainId).api}?${formattedPayload}`;\n const request = await fetch(url);\n const { status, message, result } = (await request.json()) as {\n message: string;\n result: {\n ABI: any;\n CompilerVersion: string;\n ConstructorArguments: Hex;\n ContractName: string;\n EVMVersion: string;\n Implementation: Address;\n Library: string;\n LicenseType: string;\n OptimizationUsed: string;\n Proxy: string; // \"1\" meaning true (i think)\n Runs: string;\n SimilarMatch: string;\n SourceCode: string;\n }[];\n status: string;\n };\n if (status != \"1\") {\n throw new Error(result as unknown as string);\n }\n return result[0];\n}\n\nexport function parseEtherscanStyleSourceCode(\n sourceCode: string,\n): StandardJsonInput {\n // Handling possible variations in SourceCode format\n if (sourceCode.startsWith(\"{{\") && sourceCode.endsWith(\"}}\")) {\n // Strip the extra curly braces and parse\n sourceCode = sourceCode.substring(1, sourceCode.length - 1);\n }\n return JSON.parse(sourceCode);\n}\n","/**\n * While tenderly is a fenomanal tool for testing, it is not always easy to use as there are minor bugs and small nuances to consider everywhere.\n * This is a simple wrapper around the tenderly APIs.\n */\nimport {\n Hex,\n TestClient,\n WalletClient,\n createTestClient,\n createWalletClient,\n http,\n} from \"viem\";\n\ntype TenderlyConfig = {\n accountSlug: string;\n projectSlug: string;\n accessToken: string;\n};\n\ntype Tenderly_createVnetParams = {\n slug: string;\n displayName: string;\n baseChainId: number;\n forkChainId: number;\n blockNumber?: Hex;\n // deletes the existing fork in case a fork with the same name already exists\n force?: boolean;\n};\n\nexport type Tenderly_createVnetParamsResponse = {\n id: string;\n slug: string;\n display_name: number;\n fork_config: { network_id: number; block_number: Hex };\n virtual_network_config: {\n chain_config: { chain_id: number };\n accounts: { address: string }[];\n };\n rpcs: [\n { url: string; name: \"Admin RPC\" },\n { url: string; name: \"Public RPC\" },\n ];\n};\n\nconst TENDERLY_BASE_URL = \"https://api.tenderly.co/api/v1\";\n\nexport async function tenderly_deleteVnet(\n vnetId: string,\n { accountSlug, projectSlug, accessToken }: TenderlyConfig,\n) {\n return fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets/${vnetId}`,\n {\n method: \"DELETE\",\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n );\n}\n\nexport async function tenderly_simVnet(\n vnetId: string,\n { accountSlug, projectSlug, accessToken }: TenderlyConfig,\n body: any,\n) {\n const response = await fetch(\n // Note: this is subject to change and currently uses the internal api of tenderly\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/testnet/${vnetId}/simulate`,\n {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n );\n return response.json();\n}\n\nexport async function tenderly_getVnet(\n slug: string,\n { accountSlug, projectSlug, accessToken }: TenderlyConfig,\n): Promise<{ id: string; slug: string }[]> {\n return (\n await fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets?match_field=slug&match_type=prefix&keywords=${slug}`,\n {\n method: \"GET\",\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n )\n ).json();\n}\n\nexport async function tenderly_createVnet(\n {\n slug,\n displayName,\n baseChainId,\n forkChainId,\n blockNumber,\n force,\n }: Tenderly_createVnetParams,\n { accessToken, accountSlug, projectSlug }: TenderlyConfig,\n) {\n if (!accessToken) throw new Error(\"Tenderly access token not provided\");\n if (!accountSlug) throw new Error(\"Tenderly account slug not provided\");\n if (!projectSlug) throw new Error(\"Tenderly project slug not provided\");\n const body = {\n slug: slug,\n display_name: displayName,\n fork_config: {\n network_id: baseChainId,\n ...(blockNumber ? { block_number: blockNumber } : {}),\n },\n virtual_network_config: {\n chain_config: {\n chain_id: forkChainId,\n },\n },\n sync_state_config: {\n enabled: false,\n },\n explorer_page_config: {\n enabled: false,\n verification_visibility: \"bytecode\",\n },\n };\n\n async function createVnet() {\n return (\n await fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets`,\n {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n )\n ).json() as Promise<Tenderly_createVnetParamsResponse>;\n }\n\n let response = await createVnet();\n if ((response as any).error?.slug === \"conflict\" && force) {\n const staleVnet = await tenderly_getVnet(slug, {\n accessToken,\n accountSlug,\n projectSlug,\n });\n await tenderly_deleteVnet(staleVnet[0].id, {\n accessToken,\n accountSlug,\n projectSlug,\n });\n response = await createVnet();\n }\n if ((response as any).error) {\n console.info((response as any).error);\n throw new Error(\"Tenderly vnet could not be created\");\n }\n const rpc = response.rpcs.find(\n (r) => r.name.includes(\"Admin\") && r.url.includes(\"https://\"),\n )!;\n return {\n vnet: response,\n testClient: createTestClient({\n mode: \"tenderly\" as any,\n transport: http(rpc.url),\n }) as TestClient,\n walletClient: createWalletClient({\n chain: { id: forkChainId } as any,\n account: \"0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9\",\n transport: http(rpc.url),\n }) as WalletClient,\n simulate: (body: object) =>\n tenderly_simVnet(\n response.id,\n {\n accessToken,\n accountSlug,\n projectSlug,\n },\n {\n ...body,\n network_id: baseChainId.toString(),\n block_number: null,\n transaction_index: 0,\n gas_price: \"0\",\n access_list: [],\n generate_access_list: true,\n save: true,\n source: \"dashboard\",\n },\n ),\n delete: () =>\n tenderly_deleteVnet(response.id, {\n accessToken,\n accountSlug,\n projectSlug,\n }),\n };\n}\n","import { execSync } from \"node:child_process\";\nimport { StandardJsonInput } from \"./types\";\nimport { createPatch } from \"diff\";\n\n/**\n * Returns the standardJsonInput format as consumed by most explorers\n * @param input Contract or path:Contract if contract is not unique.\n */\nexport function foundry_getStandardJsonInput(input: string) {\n const output = JSON.parse(\n execSync(\n `forge verify-contract --show-standard-json-input --verifier etherscan 0x0000000000000000000000000000000000000000 ${input}`,\n ).toString(),\n ) as StandardJsonInput;\n return output;\n}\n\nexport type Storage = {\n astId: string;\n contract: string;\n label: string;\n offset: number;\n slot: number;\n type: string;\n};\n\nexport type StorageType = {\n encoding: string;\n label: string;\n numberOfBytes: number;\n base?: string;\n key?: string;\n value?: string;\n members?: {\n astId: string;\n contract: string;\n offset: number;\n slot: number;\n type: string;\n label: string;\n }[];\n};\n\nexport type FoundryStorage = {\n storage: Storage[];\n types: Record<string, StorageType>;\n};\n\nexport function foundry_getStorageLayout(input: string) {\n const output = JSON.parse(\n execSync(`forge inspect ${input} storage --json`).toString(),\n ) as FoundryStorage;\n return output;\n}\n\nfunction cleanupFoundryStorageForDiffing(layout: FoundryStorage) {\n const cleanTypes = { ...layout.types };\n for (const key of Object.keys(cleanTypes)) {\n if (cleanTypes[key].members)\n cleanTypes[key].members = cleanTypes[key].members.map((member) => ({\n label: member.label,\n contract: member.contract.split(\":\")[1],\n offset: member.offset,\n slot: member.slot,\n type: member.type,\n })) as any;\n if (cleanTypes[key].value)\n cleanTypes[key].value = cleanTypes[cleanTypes[key].value] as any;\n }\n const cleanStorage = layout.storage.map((storage) => ({\n label: storage.label,\n slot: storage.slot,\n offset: storage.offset,\n type: cleanTypes[storage.type],\n contract: storage.contract.split(\":\")[1],\n }));\n return cleanStorage;\n}\n\nexport function diffFoundryStorageLayout(\n layoutBefore: FoundryStorage,\n layoutAfter: FoundryStorage,\n) {\n const beforeString = JSON.stringify(\n cleanupFoundryStorageForDiffing(layoutBefore),\n null,\n 2,\n );\n const afterString = JSON.stringify(\n cleanupFoundryStorageForDiffing(layoutAfter),\n null,\n 2,\n );\n return createPatch(\"storage\", beforeString, afterString);\n}\n","// a manually maintained list of known events\nexport const EVENT_DB = [] as const;\n","import {\n arbitrum,\n arbitrumSepolia,\n avalanche,\n avalancheFuji,\n base,\n baseSepolia,\n bsc,\n celo,\n fantom,\n fantomTestnet,\n gnosis,\n harmonyOne,\n linea,\n mainnet,\n mantle,\n metis,\n optimism,\n optimismSepolia,\n polygon,\n polygonAmoy,\n polygonZkEvm,\n scroll,\n scrollSepolia,\n sepolia,\n sonic,\n zksync,\n ink,\n} from \"viem/chains\";\n\nexport const ChainId = {\n celo: celo.id,\n mainnet: mainnet.id,\n polygon: polygon.id,\n polygon_amoy: polygonAmoy.id,\n avalanche: avalanche.id,\n avalanche_fuji: avalancheFuji.id,\n arbitrum: arbitrum.id,\n arbitrum_sepolia: arbitrumSepolia.id,\n fantom: fantom.id,\n fantom_testnet: fantomTestnet.id,\n optimism: optimism.id,\n optimism_sepolia: optimismSepolia.id,\n harmony: harmonyOne.id,\n sepolia: sepolia.id,\n scroll: scroll.id,\n scroll_sepolia: scrollSepolia.id,\n sonic: sonic.id,\n mantle: mantle.id,\n metis: metis.id,\n base: base.id,\n base_sepolia: baseSepolia.id,\n bnb: bsc.id,\n gnosis: gnosis.id,\n zkEVM: polygonZkEvm.id,\n zksync: zksync.id,\n linea: linea.id,\n ink: ink.id,\n} as const;\n\nexport const ChainList = {\n [ChainId.mainnet]: mainnet,\n [ChainId.polygon]: polygon,\n [ChainId.polygon_amoy]: polygonAmoy,\n [ChainId.avalanche]: avalanche,\n [ChainId.avalanche_fuji]: avalancheFuji,\n [ChainId.arbitrum]: arbitrum,\n [ChainId.arbitrum_sepolia]: arbitrumSepolia,\n [ChainId.fantom]: fantom,\n [ChainId.fantom_testnet]: fantomTestnet,\n [ChainId.optimism]: optimism,\n [ChainId.optimism_sepolia]: optimismSepolia,\n [ChainId.harmony]: harmonyOne,\n [ChainId.sepolia]: sepolia,\n [ChainId.scroll]: scroll,\n [ChainId.scroll_sepolia]: scrollSepolia,\n [ChainId.sonic]: sonic,\n [ChainId.mantle]: mantle,\n [ChainId.metis]: metis,\n [ChainId.base]: base,\n [ChainId.base_sepolia]: baseSepolia,\n [ChainId.bnb]: bsc,\n [ChainId.gnosis]: gnosis,\n [ChainId.zkEVM]: polygonZkEvm,\n [ChainId.celo]: celo,\n [ChainId.zksync]: zksync,\n [ChainId.linea]: linea,\n [ChainId.ink]: ink,\n};\n","import {\n http,\n type Client,\n type ClientConfig,\n type HttpTransportConfig,\n createClient,\n} from \"viem\";\nimport { alchemyNetworkMap } from \"./generated/alchemyNetworkMap\";\nimport { ChainId, ChainList } from \"./chainIds\";\nimport { quicknodeNetworkMap } from \"./generated/quicknodeNetworkMap\";\n\ntype SupportedChainIds = (typeof ChainId)[keyof typeof ChainId];\n\n/**\n * A manually maintained list of public rpcs.\n * These should only be used for prs coming from forks, which should not access secrets like the alchemy api key.\n */\nexport const publicRPCs = {\n [ChainId.mainnet]: \"https://eth.llamarpc.com\",\n [ChainId.polygon]: \"https://polygon.llamarpc.com\",\n [ChainId.arbitrum]: \"https://polygon.llamarpc.com\",\n [ChainId.base]: \"https://base.llamarpc.com\",\n [ChainId.bnb]: \"https://binance.llamarpc.com\",\n [ChainId.metis]: \"https://andromeda.metis.io/?owner=1088\",\n [ChainId.gnosis]: \"https://rpc.ankr.com/gnosis\",\n [ChainId.scroll]: \"https://rpc.scroll.io\",\n [ChainId.zksync]: \"https://mainnet.era.zksync.io\",\n [ChainId.fantom]: \"https://rpc.ftm.tools\",\n [ChainId.avalanche]: \"https://api.avax.network/ext/bc/C/rpc\",\n [ChainId.linea]: \"https://rpc.linea.build\",\n} as const;\n\nexport const alchemySupportedChainIds = Object.values(ChainId).filter(\n (id) => alchemyNetworkMap[id as keyof typeof alchemyNetworkMap],\n);\n\nexport const getNetworkEnv = (chainId: SupportedChainIds) => {\n const symbol = Object.entries(ChainId).find(\n ([, value]) => value === chainId,\n )?.[0] as keyof typeof ChainId | undefined;\n\n if (!symbol) {\n throw new Error(\n `Didn't find a viem symbol for chainId: ${chainId}. Wire it up in 'src/chainIds.ts'!`,\n );\n }\n\n const env =\n `RPC_${symbol.toUpperCase() as Uppercase<typeof symbol>}` as const;\n\n return env;\n};\n\nexport function getExplicitRPC(chainId: SupportedChainIds) {\n const env = getNetworkEnv(chainId);\n\n // User provided RPC_ URL\n if (process.env[env]) {\n return process.env[env];\n }\n throw new Error(`Env '${env}' is not set. Please set it manually.`);\n}\n\nexport function getAlchemyRPC(chainId: SupportedChainIds, alchemyKey: string) {\n const alchemyId =\n alchemyNetworkMap[chainId as keyof typeof alchemyNetworkMap];\n\n if (!alchemyId) {\n throw new Error(`ChainId '${chainId}' is not supported by Alchemy.`);\n }\n\n // Typescript prevents this, catching it in runtime for js-usages\n if (!alchemyKey) {\n throw new Error(\n `ChainId '${chainId}' is supported by Alchemy, but no 'alchemyKey' was provided.`,\n );\n }\n\n return `https://${alchemyId}.g.alchemy.com/v2/${alchemyKey}`;\n}\n\nexport function getPublicRpc(chainId: SupportedChainIds) {\n const publicRpc = publicRPCs[chainId as keyof typeof publicRPCs];\n if (!publicRpc)\n throw new Error(`No default public rpc for '${chainId}' configured.`);\n return publicRpc;\n}\n\nexport function getQuicknodeRpc(\n chainId: SupportedChainIds,\n options: { quicknodeEndpointName: string; quicknodeToken: string },\n) {\n const quickNodeSlug =\n quicknodeNetworkMap[chainId as keyof typeof quicknodeNetworkMap];\n if (!quickNodeSlug) {\n throw new Error(`ChainId '${chainId}' is not supported by Quicknode.`);\n }\n\n // Typescript prevents this, catching it in runtime for js-usages\n if (!options.quicknodeEndpointName) {\n throw new Error(\n `ChainId '${chainId}' is supported by Quicknode, but no 'quicknodeEndpointName' was provided.`,\n );\n }\n if (!options.quicknodeToken) {\n throw new Error(\n `ChainId '${chainId}' is supported by Quicknode, but no 'quicknodeToken' was provided.`,\n );\n }\n // for mainnet the api slug provided apparently is wrong and the network for whatever reason has no slug at all\n if (chainId === ChainId.mainnet) {\n return `https://${options.quicknodeEndpointName}.quiknode.pro/${options.quicknodeToken}`;\n }\n return `https://${options.quicknodeEndpointName}.${quickNodeSlug}.quiknode.pro/${options.quicknodeToken}`;\n}\n\ntype GetRPCUrlOptions = {\n alchemyKey?: string;\n quicknodeEndpointName?: string;\n quicknodeToken?: string;\n};\n\n/**\n * Return a RPC_URL for supported chains.\n * If the RPC_URL environment variable is set, it will be used.\n * Otherwise will construct the URL based on the chain ID and Alchemy API key.\n *\n * @notice This method acts as fall-through and will only revert if the ChainId is strictly not supported.\n * If no RPC_URL is set, and non of the private rpc providers supports the chain, it will return undefined.\n * @param chainId\n * @param alchemyKey\n * @returns the RPC_URL for the given chain ID\n */\nexport const getRPCUrl = (\n chainId: SupportedChainIds,\n options?: GetRPCUrlOptions,\n) => {\n // Typescript prevents this, catching it in runtime for js-usages\n if (!Object.values(ChainId).includes(chainId)) {\n throw new Error(\n `ChainId '${chainId}' is not supported by this library. Feel free to open an issue.`,\n );\n }\n\n try {\n return getExplicitRPC(chainId);\n } catch (e) {\n // ignore error as getRPCURL should never throw\n }\n if (options?.alchemyKey) {\n try {\n return getAlchemyRPC(chainId, options?.alchemyKey);\n } catch (e) {}\n }\n if (options?.quicknodeEndpointName && options.quicknodeToken) {\n try {\n return getQuicknodeRpc(chainId, {\n quicknodeToken: options.quicknodeToken,\n quicknodeEndpointName: options.quicknodeEndpointName,\n });\n } catch (e) {}\n }\n try {\n return getPublicRpc(chainId);\n } catch (e) {}\n};\n\nconst clientCache: Record<number, Client> = {};\n\n/**\n * Returns a viem client for the given chain with the supplied config.\n * @param chainId\n * @param param1\n * @returns A viem Client\n */\nexport function getClient(\n chainId: number,\n {\n httpConfig,\n clientConfig,\n providerConfig,\n forceRebuildClient,\n }: {\n httpConfig?: Partial<HttpTransportConfig>;\n clientConfig?: Partial<ClientConfig>;\n providerConfig: GetRPCUrlOptions;\n // If supplied will create a new client, omitting the cache.\n // This can be useful when creating client with different configs.\n forceRebuildClient?: boolean;\n },\n) {\n if (!clientCache[chainId] || forceRebuildClient) {\n const rpcURL = getRPCUrl(chainId as keyof typeof ChainList, providerConfig);\n\n clientCache[chainId] = createClient({\n chain: ChainList[chainId as keyof typeof ChainList],\n transport: http(rpcURL, httpConfig),\n ...clientConfig,\n });\n }\n return clientCache[chainId];\n}\n","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const alchemyNetworkMap = {\n 1: \"eth-mainnet\",\n 10: \"opt-mainnet\",\n 30: \"rootstock-mainnet\",\n 31: \"rootstock-testnet\",\n 56: \"bnb-mainnet\",\n 97: \"bnb-testnet\",\n 100: \"gnosis-mainnet\",\n 130: \"unichain-mainnet\",\n 137: \"polygon-mainnet\",\n 146: \"sonic-mainnet\",\n 204: \"opbnb-mainnet\",\n 250: \"fantom-mainnet\",\n 252: \"frax-mainnet\",\n 300: \"zksync-sepolia\",\n 324: \"zksync-mainnet\",\n 360: \"shape-mainnet\",\n 480: \"worldchain-mainnet\",\n 545: \"flow-testnet\",\n 592: \"astar-mainnet\",\n 747: \"flow-mainnet\",\n 1088: \"metis-mainnet\",\n 1101: \"polygonzkevm-mainnet\",\n 1301: \"unichain-sepolia\",\n 1328: \"sei-testnet\",\n 1329: \"sei-mainnet\",\n 1868: \"soneium-mainnet\",\n 1946: \"soneium-minato\",\n 2020: \"ronin-mainnet\",\n 2021: \"ronin-saigon\",\n 2442: \"polygonzkevm-cardona\",\n 2522: \"frax-sepolia\",\n 2741: \"abstract-mainnet\",\n 4002: \"fantom-testnet\",\n 4157: \"crossfi-testnet\",\n 4158: \"crossfi-mainnet\",\n 4801: \"worldchain-sepolia\",\n 5000: \"mantle-mainnet\",\n 5003: \"mantle-sepolia\",\n 5373: \"settlus-septestnet\",\n 5611: \"opbnb-testnet\",\n 7000: \"zetachain-mainnet\",\n 7001: \"zetachain-testnet\",\n 8008: \"polynomial-mainnet\",\n 8009: \"polynomial-sepolia\",\n 8453: \"base-mainnet\",\n 10143: \"monad-testnet\",\n 10200: \"gnosis-chiado\",\n 11011: \"shape-sepolia\",\n 11124: \"abstract-testnet\",\n 17000: \"eth-holesky\",\n 33111: \"apechain-curtis\",\n 33139: \"apechain-mainnet\",\n 37111: \"lens-sepolia\",\n 42161: \"arb-mainnet\",\n 42170: \"arbnova-mainnet\",\n 43113: \"avax-fuji\",\n 43114: \"avax-mainnet\",\n 57054: \"sonic-blaze\",\n 57073: \"ink-mainnet\",\n 59141: \"linea-sepolia\",\n 59144: \"linea-mainnet\",\n 63157: \"geist-mainnet\",\n 80002: \"polygon-amoy\",\n 80094: \"berachain-mainnet\",\n 81457: \"blast-mainnet\",\n 84532: \"base-sepolia\",\n 421614: \"arb-sepolia\",\n 534351: \"scroll-sepolia\",\n 534352: \"scroll-mainnet\",\n 631571: \"geist-polter\",\n 763373: \"ink-sepolia\",\n 7777777: \"zora-mainnet\",\n 11155111: \"eth-sepolia\",\n 11155420: \"opt-sepolia\",\n 168587773: \"blast-sepolia\",\n 241320161: \"xmtp-testnet\",\n 666666666: \"degen-mainnet\",\n 994873017: \"lumia-prism\",\n 999999999: \"zora-sepolia\",\n 1952959480: \"lumia-testnet\"\n} as const;","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const quicknodeNetworkMap = {\n 1: \"mainnet\",\n 10: \"optimism\",\n 14: \"flare-mainnet\",\n 56: \"bsc\",\n 81: \"joc-mainnet\",\n 97: \"bsc-testnet\",\n 100: \"xdai\",\n 114: \"flare-coston2\",\n 130: \"unichain-mainnet\",\n 137: \"matic\",\n 164: \"omni-omega\",\n 166: \"omni-mainnet\",\n 250: \"fantom\",\n 252: \"fraxtal-mainnet\",\n 295: \"hedera-mainnet\",\n 296: \"hedera-testnet\",\n 300: \"zksync-sepolia\",\n 324: \"zksync-mainnet\",\n 480: \"worldchain-mainnet\",\n 545: \"flow-testnet\",\n 690: \"redstone-mainnet\",\n 747: \"flow-mainnet\",\n 1001: \"kaia-kairos\",\n 1101: \"zkevm-mainnet\",\n 1135: \"lisk-mainnet\",\n 1301: \"unichain-sepolia\",\n 1315: \"story-aeneid\",\n 1328: \"sei-atlantic\",\n 1329: \"sei-pacific\",\n 1480: \"vana-mainnet\",\n 1513: \"story-testnet\",\n 1516: \"story-odyssey\",\n 1993: \"b3-sepolia\",\n 2442: \"zkevm-cardona\",\n 2741: \"abstract-mainnet\",\n 2810: \"morph-holesky\",\n 2818: \"morph-mainnet\",\n 3338: \"peaq-mainnet\",\n 4801: \"worldchain-sepolia\",\n 5000: \"mantle-mainnet\",\n 5003: \"mantle-sepolia\",\n 6805: \"race-mainnet\",\n 6806: \"race-sepolia\",\n 7560: \"cyber-mainnet\",\n 8217: \"kaia-mainnet\",\n 8333: \"b3-mainnet\",\n 8453: \"base-mainnet\",\n 11124: \"abstract-testnet\",\n 13371: \"imx-mainnet\",\n 13473: \"imx-testnet\",\n 14800: \"vana-moksha\",\n 16600: \"0g-newton\",\n 17000: \"ethereum-holesky\",\n 34443: \"mode-mainnet\",\n 42161: \"arbitrum-mainnet\",\n 42170: \"nova-mainnet\",\n 42220: \"celo-mainnet\",\n 43113: \"avalanche-testnet\",\n 43114: \"avalanche-mainnet\",\n 59144: \"linea-mainnet\",\n 80002: \"matic-amoy\",\n 80084: \"bera-bartio\",\n 80085: \"bera-artio\",\n 80094: \"bera-mainnet\",\n 81457: \"blast-mainnet\",\n 84532: \"base-sepolia\",\n 421613: \"arbitrum-goerli\",\n 421614: \"arbitrum-sepolia\",\n 534351: \"scroll-testnet\",\n 534352: \"scroll-mainnet\",\n 660279: \"xai-mainnet\",\n 763373: \"ink-sepolia\",\n 7777777: \"zora-mainnet\",\n 11155111: \"ethereum-sepolia\",\n 11155420: \"optimism-sepolia\",\n 111557560: \"cyber-sepolia\",\n 168587773: \"blast-sepolia\",\n 37714555429: \"xai-testnet\"\n} as const;","export const erc1967_ImplementationSlot =\n \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\";\nexport const erc1967_AdminSlot =\n \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\";\n","import { createPatch, createTwoFilesPatch } from \"diff\";\nimport { format } from \"prettier/standalone\";\nimport solidityPlugin from \"prettier-plugin-solidity/standalone\";\nimport { StandardJsonInput } from \"../ecosystem/types\";\n\nconst prettierOptions = { parser: \"solidity-parse\", plugins: [solidityPlugin] };\n\nexport async function diffCode(\n before: StandardJsonInput,\n after: StandardJsonInput,\n) {\n const changes: Record<string, string> = {};\n\n // diff settings\n const settingsBefore = JSON.stringify(before.settings, null, 2);\n const settingsAfter = JSON.stringify(after.settings, null, 2);\n if (settingsBefore !== settingsAfter)\n changes.settings = createPatch(\"settings\", settingsBefore, settingsAfter);\n const contractsBefore = await Promise.all(\n Object.entries(before.sources).map(async ([path, source]) => [\n path.replace(/^.*[\\\\/]/, \"\"),\n path,\n await format(source.content, prettierOptions),\n ]),\n );\n const contractsAfter = await Promise.all(\n Object.entries(after.sources).map(async ([path, source]) => [\n path.replace(/^.*[\\\\/]/, \"\"),\n path,\n await format(source.content, prettierOptions),\n ]),\n );\n for (const [name, path, source] of contractsBefore) {\n const indexAfter = contractsAfter.findIndex(([_name]) => _name === name);\n // removed\n if (indexAfter === -1) {\n changes[name] = createPatch(path, source, \"\");\n } else {\n if (source !== contractsAfter[indexAfter][2])\n changes[name] = createTwoFilesPatch(\n path,\n contractsAfter[indexAfter][1],\n source,\n contractsAfter[indexAfter][2],\n );\n }\n }\n for (const [name, path, source] of contractsAfter) {\n const indexAfter = contractsBefore.findIndex(([_name]) => _name === name);\n // removed\n if (indexAfter === -1) {\n changes[name] = createPatch(path, \"\", source);\n }\n }\n return changes;\n}\n","import {\n Abi,\n Address,\n decodeEventLog,\n Hex,\n parseEventLogs,\n RpcLog,\n} from \"viem\";\n\ntype LogType = {\n topics: [Hex];\n data: Hex;\n emitter: Address;\n};\n\ninterface ParseLogsArgs {\n logs: LogType[];\n eventDb: Abi;\n}\n\nexport function parseLogs({ logs, eventDb }: ParseLogsArgs) {\n const parsedLogs = logs.map((log) => {\n try {\n const decoded = decodeEventLog({\n data: log.data,\n topics: log.topics,\n abi: eventDb,\n });\n return { ...log, ...decoded };\n } catch (e) {\n return log;\n }\n });\n\n return parsedLogs;\n}\n","import { Address, Client, Hex } from \"viem\";\nimport { getBytecode, getTransactionCount } from \"viem/actions\";\n\nconst STOP = 0x00;\nconst JUMPDEST = 0x5b;\nconst PUSH1 = 0x60;\nconst PUSH32 = 0x7f;\nconst RETURN = 0xf3;\nconst REVERT = 0xfd;\nconst INVALID = 0xfe;\nconst SELFDESTRUCT = 0xff;\nconst DELEGATECALL = 0xf4;\n\nconst isHalting = (opcode: number): boolean =>\n [STOP, RETURN, REVERT, INVALID, SELFDESTRUCT].includes(opcode);\nconst isPUSH = (opcode: number): boolean => opcode >= PUSH1 && opcode <= PUSH32;\n\nexport enum SelfdestuctCheckState {\n TRUSTED,\n EOA,\n EMPTY,\n DELEGATECALL,\n SAFE,\n SELF_DESTRUCT,\n}\n\nexport async function checkForSelfdestruct(\n client: Client,\n addresses: Address[],\n trustedAddresses: Address[],\n) {\n const result: { address: Address; state: SelfdestuctCheckState }[] = [];\n for (const address of addresses) {\n if (trustedAddresses.includes(address)) {\n result.push({ address, state: SelfdestuctCheckState.TRUSTED });\n continue;\n }\n const code = await getBytecode(client, { address });\n if (!code) {\n // If there is no code and nonce is > 0 then it's an EOA.\n // If nonce is 0 it is an empty account that might have code later.\n // A contract might have nonce > 0, but then it will have code.\n // If it had code, but was selfdestructed, the nonce should be reset to 0.\n const nonce = await getTransactionCount(client, { address });\n if (nonce > 0) result.push({ address, state: SelfdestuctCheckState.EOA });\n else result.push({ address, state: SelfdestuctCheckState.EMPTY });\n continue;\n }\n\n // Detection logic from https://github.com/MrLuit/selfdestruct-detect\n const bytecode = Buffer.from(code.substring(2), \"hex\");\n const { delegatecall, selfDestruct } = checkCode(bytecode);\n if (selfDestruct) {\n result.push({ address, state: SelfdestuctCheckState.SELF_DESTRUCT });\n } else if (delegatecall) {\n result.push({ address, state: SelfdestuctCheckState.DELEGATECALL });\n } else {\n result.push({ address, state: SelfdestuctCheckState.SAFE });\n }\n }\n return result;\n}\n\nfunction checkCode(bytecode: Buffer) {\n let halted = false;\n let delegatecall = false;\n for (let index = 0; index < bytecode.length; index++) {\n const opcode = bytecode[index];\n if (opcode === SELFDESTRUCT && !halted) {\n return { halted, delegatecall, selfDestruct: true };\n }\n if (opcode === DELEGATECALL && !halted) {\n delegatecall = true;\n } else if (opcode === JUMPDEST) {\n halted = false;\n } else if (isHalting(opcode)) {\n halted = true;\n } else if (isPUSH(opcode)) {\n index += opcode - PUSH1 + 0x01;\n }\n }\n return { halted, delegatecall, selfDestruct: false };\n}\n","import { Address } from \"viem\";\nimport { getSourceCode } from \"../ecosystem/explorers\";\n\ninterface GetVerificationStatusParams {\n chainId: number;\n addresses: Address[];\n contractDb: Record<Address, string>;\n apiKey?: string;\n apiUrl?: string;\n}\n\nenum VerificationStatus {\n CACHE,\n NEW,\n ERROR,\n}\n\nexport function getVerificationStatus({\n chainId,\n addresses,\n contractDb,\n apiKey,\n apiUrl,\n}: GetVerificationStatusParams) {\n return Promise.all(\n addresses.map(async (address) => {\n if (contractDb[address])\n return {\n address,\n name: contractDb[address],\n status: VerificationStatus.CACHE,\n };\n try {\n const code = await getSourceCode({ chainId, address, apiKey, apiUrl });\n return {\n address,\n name: code.ContractName,\n status: VerificationStatus.NEW,\n };\n } catch (e) {\n return {\n address,\n status: VerificationStatus.ERROR,\n };\n }\n }),\n );\n}\n","import { Client } from \"viem\";\nimport { EVENT_DB } from \"../ecosystem/event-db\";\nimport { parseLogs } from \"./logs\";\nimport { checkForSelfdestruct } from \"./selfdestruct\";\nimport { getVerificationStatus } from \"./verified\";\n\ntype RenderTenderlyReportParams = {\n client: Client;\n sim: any;\n};\n\nexport async function renderTenderlyReport({\n client,\n sim,\n}: RenderTenderlyReportParams) {\n const logs = parseLogs({\n logs: (sim.transaction.transaction_info.logs || []).map((l: any) => l.raw),\n eventDb: EVENT_DB,\n });\n const selfDestruct = checkForSelfdestruct(\n client,\n sim.transaction.addresses,\n [], // trusted addresses\n );\n const verified = getVerificationStatus({\n chainId: client.chain!.id,\n addresses: sim.transaction.addresses,\n contractDb: {},\n });\n\n return logs;\n}\n"],"mappings":"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;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;AACF;;;ACtfO,IAAM,sBAAsB;EACjC;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA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L,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EAC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","names":["import_viem","PayloadState","import_viem","import_actions","ProposalState","import_viem","body","import_viem","import_diff","import_standalone","solidityPlugin","import_viem","import_actions","SelfdestuctCheckState"]}