@continuumdao/ctm-mpc-defi 0.2.41 → 0.2.43
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/agent/catalog.cjs +219 -27
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +914 -197
- package/dist/agent/catalog.js +214 -28
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/aerodrome/SKILL.md +1 -1
- package/dist/agent/skills/arcus/SKILL.md +1 -1
- package/dist/agent/skills/morpho/SKILL.md +32 -5
- package/dist/agent/skills/yield-compare/SKILL.md +6 -2
- package/dist/chains/evm/index.cjs +6 -2
- package/dist/chains/evm/index.cjs.map +1 -1
- package/dist/chains/evm/index.js +7 -3
- package/dist/chains/evm/index.js.map +1 -1
- package/dist/core/index.cjs +14 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +7 -2
- package/dist/core/index.js +13 -2
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +45 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +44 -8
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aave-v4/index.cjs +11 -7
- package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/aave-v4/index.js +12 -8
- package/dist/protocols/evm/aave-v4/index.js.map +1 -1
- package/dist/protocols/evm/aerodrome/index.cjs +81 -50
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.d.ts +8 -8
- package/dist/protocols/evm/aerodrome/index.js +96 -65
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/arcus/index.cjs +6 -2
- package/dist/protocols/evm/arcus/index.cjs.map +1 -1
- package/dist/protocols/evm/arcus/index.js +7 -3
- package/dist/protocols/evm/arcus/index.js.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.cjs +7 -3
- package/dist/protocols/evm/circle-cctp/index.cjs.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.js +8 -4
- package/dist/protocols/evm/circle-cctp/index.js.map +1 -1
- package/dist/protocols/evm/compound-v3/index.cjs +9 -3
- package/dist/protocols/evm/compound-v3/index.cjs.map +1 -1
- package/dist/protocols/evm/compound-v3/index.js +10 -4
- package/dist/protocols/evm/compound-v3/index.js.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.cjs +11 -5
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.js +12 -6
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/dist/protocols/evm/curve-dao/index.cjs +8 -4
- package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/curve-dao/index.js +9 -5
- package/dist/protocols/evm/curve-dao/index.js.map +1 -1
- package/dist/protocols/evm/ethena/index.cjs +13 -9
- package/dist/protocols/evm/ethena/index.cjs.map +1 -1
- package/dist/protocols/evm/ethena/index.js +14 -10
- package/dist/protocols/evm/ethena/index.js.map +1 -1
- package/dist/protocols/evm/euler-v2/index.cjs +20 -16
- package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
- package/dist/protocols/evm/euler-v2/index.js +21 -17
- package/dist/protocols/evm/euler-v2/index.js.map +1 -1
- package/dist/protocols/evm/gmx/index.cjs +12 -8
- package/dist/protocols/evm/gmx/index.cjs.map +1 -1
- package/dist/protocols/evm/gmx/index.js +13 -9
- package/dist/protocols/evm/gmx/index.js.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.cjs +5 -1
- package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.js +6 -2
- package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
- package/dist/protocols/evm/lido/index.cjs +7 -3
- package/dist/protocols/evm/lido/index.cjs.map +1 -1
- package/dist/protocols/evm/lido/index.js +8 -4
- package/dist/protocols/evm/lido/index.js.map +1 -1
- package/dist/protocols/evm/maple/index.cjs +7 -3
- package/dist/protocols/evm/maple/index.cjs.map +1 -1
- package/dist/protocols/evm/maple/index.js +8 -4
- package/dist/protocols/evm/maple/index.js.map +1 -1
- package/dist/protocols/evm/morpho/index.cjs +454 -64
- package/dist/protocols/evm/morpho/index.cjs.map +1 -1
- package/dist/protocols/evm/morpho/index.d.ts +123 -2
- package/dist/protocols/evm/morpho/index.js +432 -66
- package/dist/protocols/evm/morpho/index.js.map +1 -1
- package/dist/protocols/evm/pendle/index.cjs +9 -3
- package/dist/protocols/evm/pendle/index.cjs.map +1 -1
- package/dist/protocols/evm/pendle/index.js +10 -4
- package/dist/protocols/evm/pendle/index.js.map +1 -1
- package/dist/protocols/evm/sky/index.cjs +17 -13
- package/dist/protocols/evm/sky/index.cjs.map +1 -1
- package/dist/protocols/evm/sky/index.js +18 -14
- package/dist/protocols/evm/sky/index.js.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.cjs +13 -7
- package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.js +14 -8
- package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
- package/dist/protocols/evm/venice/index.cjs +10 -4
- package/dist/protocols/evm/venice/index.cjs.map +1 -1
- package/dist/protocols/evm/venice/index.js +10 -4
- package/dist/protocols/evm/venice/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/compound-v3/support.ts","../../../../src/protocols/evm/compound-v3/markets.ts","../../../../src/protocols/evm/compound-v3/cometAbi.ts","../../../../src/protocols/evm/compound-v3/compound-js-artifacts/comet-constants.json","../../../../src/protocols/evm/compound-v3/compoundJs.ts","../../../../src/protocols/evm/compound-v3/apr.ts","../../../../src/protocols/evm/compound-v3/subgraph.ts","../../../../src/protocols/evm/compound-v3/reads.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/compound-v3/txHelpers.ts","../../../../src/protocols/evm/compound-v3/multisign.ts","../../../../src/protocols/evm/compound-v3/bulkerMultisign.ts","../../../../src/protocols/evm/compound-v3/index.ts"],"names":["getAddress","zeroAddress","parseAbi","stringToHex","defineChain","createPublicClient","http","formatUnits","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","publicClient","fetchChainFeeParams","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","encodeFunctionData","maxUint256","parseUnits","ERC20_APPROVE_FALLBACK","encodeAbiParameters"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\n\nexport const COMPOUND_V3_PROTOCOL_ID = 'compound-v3'\n\n/** Live Comet deployments. Scroll and Ronin omitted (effectively dead). Testnets omitted. */\nexport const COMPOUND_V3_CHAIN_IDS = [1, 8453, 42161, 10, 137, 5000, 130, 59144] as const\n\nexport type CompoundV3ChainId = (typeof COMPOUND_V3_CHAIN_IDS)[number]\n\nexport const COMPOUND_V3_WRAPPED_NATIVE: Readonly<Record<number, Address>> = {\n 1: getAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),\n 8453: getAddress('0x4200000000000000000000000000000000000006'),\n 42161: getAddress('0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'),\n 10: getAddress('0x4200000000000000000000000000000000000006'),\n 137: getAddress('0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270'),\n 5000: getAddress('0x78c1b0C915c4CD0f08633e2ec3d4961Ab0237669'),\n 130: getAddress('0x4200000000000000000000000000000000000006'),\n 59144: getAddress('0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f'),\n}\n\nexport function isCompoundV3ChainSupported(chainId: number): boolean {\n return (COMPOUND_V3_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function compoundV3WrappedNative(chainId: number): Address | null {\n return COMPOUND_V3_WRAPPED_NATIVE[chainId] ?? null\n}\n\nexport function isNativeAssetAddress(address: string): boolean {\n try {\n return getAddress(address) === zeroAddress\n } catch {\n return false\n }\n}\n\nexport function resolveCompoundV3ActionAsset(args: {\n chainId: number\n asset: string\n isNative?: boolean\n}): { asset: Address; isNative: boolean; nativeWrapped: Address | null } {\n const nativeWrapped = compoundV3WrappedNative(args.chainId)\n const isNative = args.isNative === true || isNativeAssetAddress(args.asset)\n if (isNative) {\n if (!nativeWrapped) {\n throw new Error(`No wrapped native token configured for Compound III on chain ${args.chainId}.`)\n }\n return { asset: nativeWrapped, isNative: true, nativeWrapped }\n }\n return { asset: getAddress(args.asset), isNative: false, nativeWrapped }\n}\n","import { getAddress, type Address } from 'viem'\nimport { COMPOUND_V3_CHAIN_IDS, isCompoundV3ChainSupported } from './support.js'\n\nexport type CompoundV3MarketRecord = {\n chainId: number\n slug: string\n symbol: string\n comet: Address\n rewards: Address\n bulker: Address | null\n /** Known base token when documented; on-chain `baseToken()` wins. */\n baseToken?: Address\n source: 'comet-deployments'\n}\n\n/**\n * Official Comet proxy + Rewards + Bulker from\n * https://github.com/compound-finance/comet/tree/main/deployments\n * (`roots.json`). Always use `comet` (proxy) with CometInterface — never the implementation.\n */\nexport const COMPOUND_V3_MARKETS: readonly CompoundV3MarketRecord[] = [\n // Ethereum\n {\n chainId: 1,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xc3d688B66703497DAA19211EEdff47f25384cdc3'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'usds',\n symbol: 'cUSDSv3',\n comet: getAddress('0x5D409e56D886231aDAf00c8775665AD0f9897b56'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xdC035D45d973E3EC169d2276DDab16f1e407384F'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0x3Afdc9BCA9213A35503b077a6072F3D0d5AB0840'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xdAC17F958D2ee523a2206206994597C13D831ec7'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'wbtc',\n symbol: 'cWBTCv3',\n comet: getAddress('0xe85Dc543813B8c2CFEaAc371517b925a166a9293'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0xA17581A9E3356d9A858b789D68B4d866e593aE94'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'wsteth',\n symbol: 'cWstETHv3',\n comet: getAddress('0x3D0bb1ccaB520A66e607822fC55BC921738fAFE3'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0x2c776041CCFe903071AF44aa147368a9c8EEA518'),\n baseToken: getAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),\n source: 'comet-deployments',\n },\n // Base\n {\n chainId: 8453,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xb125E6687d4313864e53df431d5425969c15Eb2F'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'usdbc',\n symbol: 'cUSDbCv3',\n comet: getAddress('0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'usds',\n symbol: 'cUSDSv3',\n comet: getAddress('0x2c776041CCFe903071AF44aa147368a9c8EEA518'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x820C137fa70C8691f0e44Dc420a5e53c168921Dc'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x46e6b214b524310239732D51387075E0e70970bf'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'aero',\n symbol: 'cAEROv3',\n comet: getAddress('0x784efeB622244d2348d4F2522f8860B96fbEcE89'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x940181a94A35A4569E4529A3CDfB74e38FD98631'),\n source: 'comet-deployments',\n },\n // Arbitrum\n {\n chainId: 42161,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xaf88d065e77c8cC2239327C5EDb3A432268e5831'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'usdc.e',\n symbol: 'cUSDC.ev3',\n comet: getAddress('0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0xd98Be00b5D27fc98112BdE293e487f8D4cA57d07'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'),\n source: 'comet-deployments',\n },\n // Optimism\n {\n chainId: 10,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x2e44e174f7D53F0212823acC11C01A11d58c5bCB'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'),\n source: 'comet-deployments',\n },\n {\n chainId: 10,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0x995E394b8B2437aC8Ce61Ee0bC610D617962B214'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x94b008aA00579c1307B0EF2c499aD98a8ce58e58'),\n source: 'comet-deployments',\n },\n {\n chainId: 10,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0xE36A30D249f7761327fd973001A32010b521b6Fd'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n // Polygon\n {\n chainId: 137,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xF25212E676D1F7F89Cd72fFEe66158f541246445'),\n rewards: getAddress('0x45939657d1CA34A8FA39A924B71D28Fe8431e581'),\n bulker: getAddress('0x59e242D352ae13166B4987aE5c990C232f7f7CD6'),\n baseToken: getAddress('0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174'),\n source: 'comet-deployments',\n },\n {\n chainId: 137,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0xaeB318360f27748Acb200CE616E389A6C9409a07'),\n rewards: getAddress('0x45939657d1CA34A8FA39A924B71D28Fe8431e581'),\n bulker: getAddress('0x59e242D352ae13166B4987aE5c990C232f7f7CD6'),\n baseToken: getAddress('0xc2132D05D31c914a87C6611C10748AEb04B58e8F'),\n source: 'comet-deployments',\n },\n // Mantle\n {\n chainId: 5000,\n slug: 'usde',\n symbol: 'cUSDev3',\n comet: getAddress('0x606174f62cd968d8e684c645080fa694c1D7786E'),\n rewards: getAddress('0xCd83CbBFCE149d141A5171C3D6a0F0fCCeE225Ab'),\n bulker: getAddress('0x67DFCa85CcEEFA2C5B1dB4DEe3BEa716A28B9baa'),\n source: 'comet-deployments',\n },\n // Unichain\n {\n chainId: 130,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n rewards: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n bulker: getAddress('0x58EbB8Db8b4FdF2dCbbB16E04c2F5b952963B514'),\n baseToken: getAddress('0x078D782b760474a361dDA0AF3839290b0EF57AD6'),\n source: 'comet-deployments',\n },\n {\n chainId: 130,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x6C987dDE50dB1dcDd32Cd4175778C2a291978E2a'),\n rewards: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n bulker: getAddress('0x58EbB8Db8b4FdF2dCbbB16E04c2F5b952963B514'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n // Linea\n {\n chainId: 59144,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x8D38A3d6B3c3B7d96D6536DA7Eef94A9d7dbC991'),\n rewards: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n bulker: getAddress('0x023ee795361B28cDbB94e302983578486A0A5f1B'),\n baseToken: getAddress('0x176211869cA2b568f2A7D4EE941E073a821EE1ff'),\n source: 'comet-deployments',\n },\n {\n chainId: 59144,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x60F2058379716A64a7A5d29219397e79bC552194'),\n rewards: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n bulker: getAddress('0x023ee795361B28cDbB94e302983578486A0A5f1B'),\n baseToken: getAddress('0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f'),\n source: 'comet-deployments',\n },\n]\n\nexport function listCompoundV3SupportedChainIds(): number[] {\n return [...COMPOUND_V3_CHAIN_IDS]\n}\n\nexport function listCompoundV3MarketsForChain(chainId: number): CompoundV3MarketRecord[] {\n if (!isCompoundV3ChainSupported(chainId)) return []\n return COMPOUND_V3_MARKETS.filter((m) => m.chainId === chainId)\n}\n\nexport function getCompoundV3MarketByComet(chainId: number, comet: string): CompoundV3MarketRecord | null {\n let normalized: string\n try {\n normalized = getAddress(comet)\n } catch {\n return null\n }\n return COMPOUND_V3_MARKETS.find((m) => m.chainId === chainId && m.comet === normalized) ?? null\n}\n\nexport function requireCompoundV3Market(chainId: number, comet: string): CompoundV3MarketRecord {\n const market = getCompoundV3MarketByComet(chainId, comet)\n if (!market) {\n throw new Error(\n `Unknown Compound III Comet proxy ${comet} on chain ${chainId}. Use ctm_compound_v3_fetch_markets.`,\n )\n }\n return market\n}\n\nexport function listCompoundV3KnownTokenAddresses(chainId: number): Address[] {\n const out = new Set<string>()\n for (const m of listCompoundV3MarketsForChain(chainId)) {\n out.add(m.comet)\n if (m.baseToken) out.add(m.baseToken)\n }\n return [...out] as Address[]\n}\n","import { parseAbi, stringToHex } from 'viem'\n\n/** CometInterface — call on the proxy only. Sourced from compound-js Comet ABI + Comet docs. */\nexport const cometInterfaceAbi = parseAbi([\n 'function supply(address asset, uint256 amount)',\n 'function supplyTo(address dst, address asset, uint256 amount)',\n 'function withdraw(address asset, uint256 amount)',\n 'function withdrawTo(address to, address asset, uint256 amount)',\n 'function allow(address manager, bool isAllowed)',\n 'function hasPermission(address owner, address manager) view returns (bool)',\n 'function balanceOf(address account) view returns (uint256)',\n 'function borrowBalanceOf(address account) view returns (uint256)',\n 'function collateralBalanceOf(address account, address asset) view returns (uint128)',\n 'function baseToken() view returns (address)',\n 'function baseTokenPriceFeed() view returns (address)',\n 'function decimals() view returns (uint8)',\n 'function numAssets() view returns (uint8)',\n 'function getUtilization() view returns (uint256)',\n 'function getSupplyRate(uint256 utilization) view returns (uint64)',\n 'function getBorrowRate(uint256 utilization) view returns (uint64)',\n 'function getPrice(address priceFeed) view returns (uint256)',\n 'function isBorrowCollateralized(address account) view returns (bool)',\n 'function isLiquidatable(address account) view returns (bool)',\n 'function getAssetInfo(uint8 i) view returns ((uint8 offset, address asset, address priceFeed, uint64 scale, uint64 borrowCollateralFactor, uint64 liquidateCollateralFactor, uint64 liquidationFactor, uint128 supplyCap))',\n 'function getAssetInfoByAddress(address asset) view returns ((uint8 offset, address asset, address priceFeed, uint64 scale, uint64 borrowCollateralFactor, uint64 liquidateCollateralFactor, uint64 liquidationFactor, uint128 supplyCap))',\n 'function baseTrackingSupplySpeed() view returns (uint256)',\n 'function baseTrackingBorrowSpeed() view returns (uint256)',\n 'function baseIndexScale() view returns (uint64)',\n 'function trackingIndexScale() view returns (uint256)',\n 'function totalSupply() view returns (uint256)',\n 'function totalBorrow() view returns (uint256)',\n])\n\nexport const cometRewardsAbi = parseAbi([\n 'function getRewardOwed(address comet, address account) view returns ((address token, uint256 owed))',\n 'function claim(address comet, address src, bool shouldAccrue)',\n 'function rewardConfig(address comet) view returns ((address token, uint64 rescaleFactor, bool shouldUpscale))',\n])\n\nexport const cometBulkerAbi = parseAbi([\n 'function invoke(bytes32[] actions, bytes[] data) payable',\n])\n\nexport const erc20ReadAbi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function symbol() view returns (string)',\n 'function name() view returns (string)',\n])\n\nexport const erc20ApproveAbi = parseAbi(['function approve(address spender, uint256 amount) returns (bool)'])\n\nexport const wethAbi = parseAbi(['function deposit() payable', 'function withdraw(uint256 wad)'])\n\n/** Solidity `bytes32 constant ACTION_* = \"ACTION_*\"` (short string). */\nexport function bulkerActionId(name: string): `0x${string}` {\n return stringToHex(name, { size: 32 })\n}\n\nexport const BULKER_ACTION_SUPPLY_ASSET = bulkerActionId('ACTION_SUPPLY_ASSET')\nexport const BULKER_ACTION_SUPPLY_NATIVE_TOKEN = bulkerActionId('ACTION_SUPPLY_NATIVE_TOKEN')\nexport const BULKER_ACTION_WITHDRAW_ASSET = bulkerActionId('ACTION_WITHDRAW_ASSET')\nexport const BULKER_ACTION_WITHDRAW_NATIVE_TOKEN = bulkerActionId('ACTION_WITHDRAW_NATIVE_TOKEN')\nexport const BULKER_ACTION_CLAIM_REWARD = bulkerActionId('ACTION_CLAIM_REWARD')\nexport const BULKER_ACTION_TRANSFER_ASSET = bulkerActionId('ACTION_TRANSFER_ASSET')\n","{\"moveToParentClass\":{\"Comet\":\"Comet\",\"MAINNET_USDC\":\"mainnet_usdc\",\"COMP\":\"COMP\",\"WBTC\":\"WBTC\",\"WETH\":\"WETH\",\"UNI\":\"UNI\",\"LINK\":\"LINK\",\"USDC\":\"USDC\",\"MAINNET_WETH\":\"mainnet_weth\",\"cbETH\":\"cbETH\",\"wstETH\":\"wstETH\",\"POLYGON_USDC\":\"polygon_usdc\",\"WMATIC\":\"WMATIC\",\"MaticX\":\"MaticX\",\"ARBITRUM_USDC\":\"arbitrum_usdc\",\"ARB\":\"ARB\",\"GMX\":\"GMX\",\"BASE_USDBC\":\"base_usdbc\",\"USDbC\":\"USDbC\",\"BASE_WETH\":\"base_weth\",\"GOERLI_USDC\":\"goerli_usdc\",\"GOERLI_WETH\":\"goerli_weth\",\"MUMBAI_USDC\":\"mumbai_usdc\",\"DAI\":\"DAI\",\"GOERLI_ARBITRUM_USDC\":\"goerli_arbitrum_usdc\",\"GOERLI_OPTIMISM_USDC\":\"goerli_optimism_usdc\",\"OP\":\"OP\",\"GOERLI_BASE_USDC\":\"goerli_base_usdc\",\"GOERLI_BASE_WETH\":\"goerli_base_weth\",\"FUJI_USDC\":\"fuji_usdc\",\"WBTC_e\":\"WBTC_e\",\"WAVAX\":\"WAVAX\"},\"address\":{\"mainnet_usdc\":{\"COMP\":{\"contract\":\"0xc00e94Cb662C3520282E6f5717214004A7f26888\",\"priceFeed\":\"0xdbd020CAeF83eFd542f4De03e3cF0C28A4428bd5\"},\"WBTC\":{\"contract\":\"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599\",\"priceFeed\":\"0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c\"},\"WETH\":{\"contract\":\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\"priceFeed\":\"0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419\"},\"UNI\":{\"contract\":\"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984\",\"priceFeed\":\"0x553303d460EE0afB37EdFf9bE42922D8FF63220e\"},\"LINK\":{\"contract\":\"0x514910771AF9Ca656af840dff83E8264EcF986CA\",\"priceFeed\":\"0x2c1d072e956AFFC0D435Cb7AC38EF18d24d9127c\"},\"USDC\":{\"contract\":\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\"priceFeed\":\"0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6\"},\"Comet\":\"0xc3d688B66703497DAA19211EEdff47f25384cdc3\"},\"mainnet_weth\":{\"cbETH\":{\"contract\":\"0xBe9895146f7AF43049ca1c1AE358B0541Ea49704\",\"priceFeed\":\"0x23a982b74a3236A5F2297856d4391B2edBBB5549\"},\"wstETH\":{\"contract\":\"0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0\",\"priceFeed\":\"0x4F67e4d9BD67eFa28236013288737D39AeF48e79\"},\"WETH\":{\"contract\":\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\"priceFeed\":\"0xD72ac1bCE9177CFe7aEb5d0516a38c88a64cE0AB\"},\"Comet\":\"0xA17581A9E3356d9A858b789D68B4d866e593aE94\"},\"polygon_usdc\":{\"WETH\":{\"contract\":\"0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619\",\"priceFeed\":\"0xF9680D99D6C9589e2a93a78A04A279e509205945\"},\"WBTC\":{\"contract\":\"0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6\",\"priceFeed\":\"0xDE31F8bFBD8c84b5360CFACCa3539B938dd78ae6\"},\"WMATIC\":{\"contract\":\"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270\",\"priceFeed\":\"0xAB594600376Ec9fD91F8e885dADF0CE036862dE0\"},\"MaticX\":{\"contract\":\"0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6\",\"priceFeed\":\"0x5d37E4b374E6907de8Fc7fb33EE3b0af403C7403\"},\"USDC\":{\"contract\":\"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\"priceFeed\":\"0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7\"},\"Comet\":\"0xF25212E676D1F7F89Cd72fFEe66158f541246445\"},\"arbitrum_usdc\":{\"ARB\":{\"contract\":\"0x912CE59144191C1204E64559FE8253a0e49E6548\",\"priceFeed\":\"0xb2A824043730FE05F3DA2efaFa1CBbe83fa548D6\"},\"GMX\":{\"contract\":\"0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a\",\"priceFeed\":\"0xDB98056FecFff59D032aB628337A4887110df3dB\"},\"WETH\":{\"contract\":\"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\",\"priceFeed\":\"0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612\"},\"WBTC\":{\"contract\":\"0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f\",\"priceFeed\":\"0xd0C7101eACbB49F3deCcCc166d238410D6D46d57\"},\"USDC\":{\"contract\":\"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\"priceFeed\":\"0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3\"},\"Comet\":\"0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA\"},\"base_usdbc\":{\"cbETH\":{\"contract\":\"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22\",\"priceFeed\":\"0x4687670f5f01716fAA382E2356C103BaD776752C\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70\"},\"USDbC\":{\"contract\":\"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA\",\"priceFeed\":\"0x7e860098F58bBFC8648a4311b374B1D669a2bc6B\"},\"Comet\":\"0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf\"},\"base_weth\":{\"cbETH\":{\"contract\":\"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22\",\"priceFeed\":\"0x59e242D352ae13166B4987aE5c990C232f7f7CD6\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x9f485610E26B9c0140439f88Dc0C7742903Bd1CF\"},\"Comet\":\"0x46e6b214b524310239732D51387075E0e70970bf\"},\"goerli_usdc\":{\"COMP\":{\"contract\":\"0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4\",\"priceFeed\":\"0x54a06047087927D9B0fb21c1cf0ebd792764dDB8\"},\"WBTC\":{\"contract\":\"0xAAD4992D949f9214458594dF92B44165Fb84dC19\",\"priceFeed\":\"0xA39434A63A52E749F02807ae27335515BA4b07F7\"},\"WETH\":{\"contract\":\"0x42a71137C09AE83D8d05974960fd607d40033499\",\"priceFeed\":\"0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e\"},\"LINK\":{\"contract\":\"0xaf95Ff5fB592646D86BF240B3CaE0903b6E4dd38\",\"priceFeed\":\"0x48731cF7e84dc94C5f84577882c14Be11a5B7456\"},\"USDC\":{\"contract\":\"0x07865c6E87B9F70255377e024ace6630C1Eaa37F\",\"priceFeed\":\"0xAb5c49580294Aff77670F839ea425f5b78ab3Ae7\"},\"Comet\":\"0x3EE77595A8459e93C2888b13aDB354017B198188\"},\"goerli_weth\":{\"cbETH\":{\"contract\":\"0x2459f06a13ea0997d623224F362519bE71507258\",\"priceFeed\":\"0xb79BbFE63309E036dDFa1BD44513d956BeE55c2a\"},\"wstETH\":{\"contract\":\"0x4942BBAf745f235e525BAff49D31450810EDed5b\",\"priceFeed\":\"0x5608d174a3B828abb4eE8b9B6a6433f2346c3E54\"},\"WETH\":{\"contract\":\"0x42a71137C09AE83D8d05974960fd607d40033499\",\"priceFeed\":\"0x1eb99992A2e3456ed2c8C6eD87E4c029bC679FeF\"},\"Comet\":\"0x9A539EEc489AAA03D588212a164d0abdB5F08F5F\"},\"mumbai_usdc\":{\"DAI\":{\"contract\":\"0x4DAFE12E1293D889221B1980672FE260Ac9dDd28\",\"priceFeed\":\"0x0FCAa9c899EC5A91eBc3D5Dd869De833b06fB046\"},\"WETH\":{\"contract\":\"0xE1e67212B1A4BF629Bdf828e08A3745307537ccE\",\"priceFeed\":\"0x0715A7794a1dc8e42615F059dD6e406A6594651A\"},\"WBTC\":{\"contract\":\"0x4B5A0F4E00bC0d6F16A593Cae27338972614E713\",\"priceFeed\":\"0x007A22900a3B98143368Bd5906f8E17e9867581b\"},\"WMATIC\":{\"contract\":\"0xfec23a9E1DBA805ADCF55E0338Bf5E03488FC7Fb\",\"priceFeed\":\"0xd0D5e3DB44DE05E9F294BB0a3bEEaF030DE24Ada\"},\"USDC\":{\"contract\":\"0xDB3cB4f2688daAB3BFf59C24cC42D4B6285828e9\",\"priceFeed\":\"0x572dDec9087154dC5dfBB1546Bb62713147e0Ab0\"},\"Comet\":\"0xF09F0369aB0a875254fB565E52226c88f10Bc839\"},\"goerli_arbitrum_usdc\":{\"LINK\":{\"contract\":\"0xbb7303602bE1B9149B097aAFb094ffce1860E532\",\"priceFeed\":\"0xd28Ba6CA3bB72bF371b80a2a0a33cBcf9073C954\"},\"WETH\":{\"contract\":\"0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3\",\"priceFeed\":\"0x62CAe0FA2da220f43a51F86Db2EDb36DcA9A5A08\"},\"WBTC\":{\"contract\":\"0x22d5e2dE578677791f6c90e0110Ec629be9d5Fb5\",\"priceFeed\":\"0x6550bc2301936011c1334555e62A87705A81C12C\"},\"USDC\":{\"contract\":\"0x8FB1E3fC51F3b789dED7557E680551d93Ea9d892\",\"priceFeed\":\"0x1692Bdd32F31b831caAc1b0c9fAF68613682813b\"},\"Comet\":\"0x1d573274E19174260c5aCE3f2251598959d24456\"},\"goerli_optimism_usdc\":{\"OP\":{\"contract\":\"0x32719c5e2e35909C8f42167315445e349e749E05\",\"priceFeed\":\"0xE882831E58eec48B7f304482771F67e6b846733D\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x57241A37733983F97C4Ab06448F244A1E0Ca0ba8\"},\"WBTC\":{\"contract\":\"0xe0a592353e81a94Db6E3226fD4A99F881751776a\",\"priceFeed\":\"0xC16679B963CeB52089aD2d95312A5b85E318e9d2\"},\"USDC\":{\"contract\":\"0x7E07E15D2a87A24492740D16f5bdF58c16db0c4E\",\"priceFeed\":\"0x2636B223652d388721A0ED2861792DA9062D8C73\"},\"Comet\":\"0xb8F2f9C84ceD7bBCcc1Db6FB7bb1F19A9a4adfF4\"},\"goerli_base_usdc\":{\"cbETH\":{\"contract\":\"0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2\",\"priceFeed\":\"0xcD2A119bD1F7DF95d706DE6F2057fDD45A0503E2\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0xcD2A119bD1F7DF95d706DE6F2057fDD45A0503E2\"},\"USDC\":{\"contract\":\"0x31D3A7711a74b4Ec970F50c3eaf1ee47ba803A95\",\"priceFeed\":\"0xb85765935B4d9Ab6f841c9a00690Da5F34368bc0\"},\"Comet\":\"0xe78Fc55c884704F9485EDa042fb91BfE16fD55c1\"},\"goerli_base_weth\":{\"cbETH\":{\"contract\":\"0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2\",\"priceFeed\":\"0x5B0156A396BdFc2eb814D945Ac99C40A0F8592B2\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x22738A450dDA849BedDFcA219739a5d72dfB3Ec6\"},\"Comet\":\"0xED94f3052638620fE226a9661ead6a39C2a265bE\"},\"fuji_usdc\":{\"WBTC_e\":{\"contract\":\"0xfa78400e01Fc9da830Cb2F13B3e7E18F813414Ff\",\"priceFeed\":\"0x31CF013A08c6Ac228C94551d535d5BAfE19c602a\"},\"WAVAX\":{\"contract\":\"0xA2c25E48269e3f89A60b2CC8e02AAfEeB3BAb761\",\"priceFeed\":\"0x5498BB86BC934c8D34FDA08E81D444153d0D06aD\"},\"USDC\":{\"contract\":\"0x4fed3d02D095f7D92AF161311fA6Ef23dc8dA040\",\"priceFeed\":\"0x7898AcCC83587C3C55116c5230C17a6Cd9C71bad\"},\"Comet\":\"0x59BF4753899C20EA152dEefc6f6A14B2a5CC3021\"}},\"decimals\":{\"mainnet_usdc\":{\"COMP\":18,\"WBTC\":8,\"WETH\":18,\"UNI\":18,\"LINK\":18,\"USDC\":6},\"mainnet_weth\":{\"cbETH\":18,\"wstETH\":18,\"WETH\":18},\"polygon_usdc\":{\"WETH\":18,\"WBTC\":8,\"WMATIC\":18,\"MaticX\":18,\"USDC\":6},\"arbitrum_usdc\":{\"ARB\":18,\"GMX\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"base_usdbc\":{\"cbETH\":18,\"WETH\":18,\"USDbC\":6},\"base_weth\":{\"cbETH\":18,\"WETH\":18},\"goerli_usdc\":{\"COMP\":18,\"WBTC\":8,\"WETH\":18,\"LINK\":18,\"USDC\":6},\"goerli_weth\":{\"cbETH\":18,\"wstETH\":18,\"WETH\":18},\"mumbai_usdc\":{\"DAI\":18,\"WETH\":18,\"WBTC\":8,\"WMATIC\":18,\"USDC\":6},\"goerli_arbitrum_usdc\":{\"LINK\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"goerli_optimism_usdc\":{\"OP\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"goerli_base_usdc\":{\"cbETH\":18,\"WETH\":18,\"USDC\":6},\"goerli_base_weth\":{\"cbETH\":18,\"WETH\":18},\"fuji_usdc\":{\"WBTC_e\":8,\"WAVAX\":18,\"USDC\":6}},\"collaterals\":{\"mainnet_usdc\":[\"COMP\",\"WBTC\",\"WETH\",\"UNI\",\"LINK\",\"USDC\"],\"mainnet_weth\":[\"cbETH\",\"wstETH\",\"WETH\"],\"polygon_usdc\":[\"WETH\",\"WBTC\",\"WMATIC\",\"MaticX\",\"USDC\"],\"arbitrum_usdc\":[\"ARB\",\"GMX\",\"WETH\",\"WBTC\",\"USDC\"],\"base_usdbc\":[\"cbETH\",\"WETH\",\"USDbC\"],\"base_weth\":[\"cbETH\",\"WETH\"],\"goerli_usdc\":[\"COMP\",\"WBTC\",\"WETH\",\"LINK\",\"USDC\"],\"goerli_weth\":[\"cbETH\",\"wstETH\",\"WETH\"],\"mumbai_usdc\":[\"DAI\",\"WETH\",\"WBTC\",\"WMATIC\",\"USDC\"],\"goerli_arbitrum_usdc\":[\"LINK\",\"WETH\",\"WBTC\",\"USDC\"],\"goerli_optimism_usdc\":[\"OP\",\"WETH\",\"WBTC\",\"USDC\"],\"goerli_base_usdc\":[\"cbETH\",\"WETH\",\"USDC\"],\"goerli_base_weth\":[\"cbETH\",\"WETH\"],\"fuji_usdc\":[\"WBTC_e\",\"WAVAX\",\"USDC\"]},\"base\":{\"mainnet_usdc\":\"USDC\",\"mainnet_weth\":\"WETH\",\"polygon_usdc\":\"USDC\",\"arbitrum_usdc\":\"USDC\",\"base_usdbc\":\"USDbC\",\"base_weth\":\"WETH\",\"goerli_usdc\":\"USDC\",\"goerli_weth\":\"WETH\",\"mumbai_usdc\":\"USDC\",\"goerli_arbitrum_usdc\":\"USDC\",\"goerli_optimism_usdc\":\"USDC\",\"goerli_base_usdc\":\"USDC\",\"goerli_base_weth\":\"WETH\",\"fuji_usdc\":\"USDC\"},\"instanceNetworkMap\":{\"mainnet_usdc\":\"mainnet\",\"mainnet_weth\":\"mainnet\",\"polygon_usdc\":\"matic\",\"arbitrum_usdc\":\"arbitrum\",\"base_usdbc\":\"base\",\"base_weth\":\"base\",\"goerli_usdc\":\"goerli\",\"goerli_weth\":\"goerli\",\"mumbai_usdc\":\"maticmum\",\"goerli_arbitrum_usdc\":\"optimism-arbitrum\",\"goerli_optimism_usdc\":\"optimism-goerli\",\"goerli_base_usdc\":\"base-goerli\",\"goerli_base_weth\":\"base-goerli\",\"fuji_usdc\":\"ava-fuji\"},\"abi\":[{\"inputs\":[],\"name\":\"Absurd\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadAsset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadDiscount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadMinimum\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadPrice\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadSignatory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowCFTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientReserves\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInt104\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInt256\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt104\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt128\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt64\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValueS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValueV\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateCFTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NegativeNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoSelfTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotCollateralized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotForSale\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotLiquidatable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SupplyCapExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimestampTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyAssets\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooMuchSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferInFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferOutFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAbsorbed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdValue\",\"type\":\"uint256\"}],\"name\":\"AbsorbCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"basePaidOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdValue\",\"type\":\"uint256\"}],\"name\":\"AbsorbDebt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"}],\"name\":\"BuyCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"supplyPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"transferPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"withdrawPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"absorbPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"buyPaused\",\"type\":\"bool\"}],\"name\":\"PauseAction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SupplyCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawReserves\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"absorb\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"accrueAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"name\":\"allow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"allowBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveThis\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseAccrualScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseBorrowMin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseIndexScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseMinForRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseScale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTokenPriceFeed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"baseTrackingAccrued\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTrackingBorrowSpeed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTrackingSupplySpeed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowKink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateSlopeHigh\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateSlopeLow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"buyCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"collateralBalanceOf\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extensionDelegate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factorScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"i\",\"type\":\"uint8\"}],\"name\":\"getAssetInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"offset\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"scale\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"borrowCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidateCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidationFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"supplyCap\",\"type\":\"uint128\"}],\"internalType\":\"struct CometCore.AssetInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetInfoByAddress\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"offset\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"scale\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"borrowCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidateCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidationFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"supplyCap\",\"type\":\"uint128\"}],\"internalType\":\"struct CometCore.AssetInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"utilization\",\"type\":\"uint256\"}],\"name\":\"getBorrowRate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getCollateralReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"utilization\",\"type\":\"uint256\"}],\"name\":\"getSupplyRate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUtilization\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isAbsorbPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isBorrowCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isBuyPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isLiquidatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSupplyPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTransferPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isWithdrawPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidatorPoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"numAbsorbs\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"numAbsorbed\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"approxSpend\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"_reserved\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAssets\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numAssets\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"supplyPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"transferPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"withdrawPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"absorbPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"buyPaused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseGuardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"}],\"name\":\"quoteCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storeFrontPriceFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supplyFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyKink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateSlopeHigh\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateSlopeLow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supplyTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalsBasic\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"baseSupplyIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"baseBorrowIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"trackingSupplyIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"trackingBorrowIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint104\",\"name\":\"totalSupplyBase\",\"type\":\"uint104\"},{\"internalType\":\"uint104\",\"name\":\"totalBorrowBase\",\"type\":\"uint104\"},{\"internalType\":\"uint40\",\"name\":\"lastAccrualTime\",\"type\":\"uint40\"},{\"internalType\":\"uint8\",\"name\":\"pauseFlags\",\"type\":\"uint8\"}],\"internalType\":\"struct CometStorage.TotalsBasic\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"totalsCollateral\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"totalSupplyAsset\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_reserved\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trackingIndexScale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferAssetFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userBasic\",\"outputs\":[{\"internalType\":\"int104\",\"name\":\"principal\",\"type\":\"int104\"},{\"internalType\":\"uint64\",\"name\":\"baseTrackingIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"baseTrackingAccrued\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"assetsIn\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"_reserved\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userCollateral\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"balance\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_reserved\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]}","/**\n * Isolated adapter over official Compound.js artifacts\n * (https://github.com/compound-finance/compound-js).\n *\n * The npm package peers ethers@5 and cannot be a hard runtime dependency next to\n * ethers@6 / viem. We vendor `comet-constants.json` from that repo and treat\n * official comet `deployments/` as the address source of truth.\n */\nimport { getAddress, type Address } from 'viem'\nimport cometConstants from './compound-js-artifacts/comet-constants.json'\n\nexport type CompoundJsInstanceId = string\n\ntype CompoundJsAddressMap = Record<string, Record<string, string | { contract?: string }>>\n\nconst INSTANCE_CHAIN_ID: Readonly<Record<string, number>> = {\n mainnet_usdc: 1,\n mainnet_weth: 1,\n polygon_usdc: 137,\n arbitrum_usdc: 42161,\n base_usdbc: 8453,\n base_weth: 8453,\n}\n\nexport type CompoundJsKnownComet = {\n instanceId: string\n chainId: number\n comet: Address\n baseSymbol: string\n collateralSymbols: string[]\n}\n\nfunction asAddressMap(): CompoundJsAddressMap {\n return cometConstants.address as CompoundJsAddressMap\n}\n\nexport function listCompoundJsCometInstances(): CompoundJsKnownComet[] {\n const address = asAddressMap()\n const base = cometConstants.base as Record<string, string>\n const collaterals = cometConstants.collaterals as Record<string, string[]>\n const out: CompoundJsKnownComet[] = []\n for (const [instanceId, contracts] of Object.entries(address)) {\n if (instanceId.startsWith('goerli_') || instanceId.startsWith('mumbai_') || instanceId.startsWith('fuji_')) {\n continue\n }\n const chainId = INSTANCE_CHAIN_ID[instanceId]\n const cometRaw = contracts.Comet\n if (typeof cometRaw !== 'string' || chainId == null) continue\n out.push({\n instanceId,\n chainId,\n comet: getAddress(cometRaw),\n baseSymbol: base[instanceId] ?? instanceId,\n collateralSymbols: collaterals[instanceId] ?? [],\n })\n }\n return out\n}\n\nexport function compoundJsCometAddress(instanceId: string): Address | null {\n const row = asAddressMap()[instanceId]\n const comet = row?.Comet\n if (typeof comet !== 'string') return null\n return getAddress(comet)\n}\n\nexport function compoundJsCollateralAddresses(instanceId: string): Address[] {\n const row = asAddressMap()[instanceId]\n const names = (cometConstants.collaterals as Record<string, string[]>)[instanceId] ?? []\n const out: Address[] = []\n for (const name of names) {\n const entry = row?.[name]\n const contract = typeof entry === 'string' ? entry : entry?.contract\n if (!contract) continue\n out.push(getAddress(contract))\n }\n return out\n}\n\n/** Cross-check: official deployment proxy should match Compound.js when both list the market. */\nexport function compoundJsAgreesWithOfficial(instanceId: string, officialComet: string): boolean {\n const js = compoundJsCometAddress(instanceId)\n if (!js) return false\n return js === getAddress(officialComet)\n}\n","/** Compound III rates are per-second, scaled by 1e18. */\n\nexport const COMPOUND_V3_SECONDS_PER_YEAR = 365 * 24 * 60 * 60\nexport const COMPOUND_V3_FACTOR_SCALE = 10n ** 18n\n\nexport function compoundV3RatePerSecondToAprDecimal(ratePerSecond: bigint): number {\n if (ratePerSecond <= 0n) return 0\n return (Number(ratePerSecond) / 1e18) * COMPOUND_V3_SECONDS_PER_YEAR\n}\n\nexport function compoundV3AprToPercentLabel(aprDecimal: number): string {\n if (!Number.isFinite(aprDecimal)) return '—'\n const pct = aprDecimal * 100\n if (Math.abs(pct) < 0.001) return '0.00%'\n return `${pct.toFixed(2)}%`\n}\n\nexport function compoundV3UtilizationToDecimal(utilization: bigint): number {\n if (utilization <= 0n) return 0\n return Number(utilization) / 1e18\n}\n\nexport function compoundV3FactorToPercent(factor: bigint): number {\n return Number(factor) / 1e16\n}\n\n/** Comet `getPrice` scale (USD, 8 decimals). */\nexport const COMPOUND_V3_PRICE_SCALE = 1e8\n/** Default tracking index scale when `trackingIndexScale()` is unavailable. */\nexport const COMPOUND_V3_TRACKING_INDEX_SCALE = 1e15\n\n/**\n * Forward COMP (or other reward-token) APR from tracking speed.\n * `trackingSpeed` is tokens/second × trackingIndexScale. Prices are Comet `getPrice` (1e8 USD).\n */\n/** Returns a percent (5 = 5%), or null when unpriced / zero speed. */\nexport function compoundV3TrackingSpeedToRewardAprPercent(args: {\n trackingSpeed: bigint\n trackingIndexScale: bigint\n totalBase: bigint\n baseDecimals: number\n basePrice: bigint\n rewardPrice: bigint\n}): number | null {\n if (args.trackingSpeed <= 0n || args.totalBase <= 0n || args.basePrice <= 0n || args.rewardPrice <= 0n) {\n return null\n }\n const scale = Number(args.trackingIndexScale > 0n ? args.trackingIndexScale : BigInt(COMPOUND_V3_TRACKING_INDEX_SCALE))\n if (!Number.isFinite(scale) || scale <= 0) return null\n const tokensPerYear = (Number(args.trackingSpeed) / scale) * COMPOUND_V3_SECONDS_PER_YEAR\n const rewardUsdPerYear = tokensPerYear * (Number(args.rewardPrice) / COMPOUND_V3_PRICE_SCALE)\n const totalUsd = (Number(args.totalBase) / 10 ** args.baseDecimals) * (Number(args.basePrice) / COMPOUND_V3_PRICE_SCALE)\n if (!Number.isFinite(rewardUsdPerYear) || !Number.isFinite(totalUsd) || totalUsd <= 0) return null\n const pct = (rewardUsdPerYear / totalUsd) * 100\n if (!Number.isFinite(pct) || pct < 0) return null\n return pct\n}\n","/**\n * Optional PaperclipLabs Compound V3 subgraphs (The Graph).\n * Never used as the execution address source — official comet deployments win.\n */\nconst COMPOUND_V3_SUBGRAPH_BY_CHAIN: Readonly<Record<number, string>> = {\n 1: '5nwMCSHaTqG3Kd2gHznbTXEnZ9QNWsssQfbHhDqQSQFp',\n 137: 'AaFtUWKfFdj2x8nnE3RxTSJkHwGHvawH3VWFBykCGzLs',\n 42161: 'Ff7ha9ELmpmg81D6nYxy4t8aGP26dPztqD1LDJNPqjLS',\n 8453: '2hcXhs36pTBDVUmk5K2Zkr6N4UYGwaHuco2a6jyTsijo',\n 10: 'FhHNkfh5z6Z2WCEBxB6V3s8RPxnJfWZ9zAfM5bVvbvbb',\n}\n\nexport type CompoundV3SubgraphMarketHint = {\n id: string\n comet: string\n}\n\nexport function compoundV3SubgraphIdForChain(chainId: number): string | null {\n return COMPOUND_V3_SUBGRAPH_BY_CHAIN[chainId] ?? null\n}\n\nexport async function fetchCompoundV3SubgraphMarkets(args: {\n chainId: number\n apiKey?: string\n}): Promise<CompoundV3SubgraphMarketHint[] | null> {\n const id = compoundV3SubgraphIdForChain(args.chainId)\n const apiKey = (args.apiKey ?? process.env.THE_GRAPH_API_KEY ?? '').trim()\n if (!id || !apiKey) return null\n const url = `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/${id}`\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n query: `query CompoundV3Markets { markets(first: 50) { id } }`,\n }),\n })\n if (!res.ok) return null\n const json = (await res.json()) as { data?: { markets?: Array<{ id: string }> } }\n const markets = json.data?.markets\n if (!markets) return null\n return markets.map((m) => ({ id: m.id, comet: m.id }))\n } catch {\n return null\n }\n}\n","import {\n createPublicClient,\n defineChain,\n formatUnits,\n getAddress,\n http,\n zeroAddress,\n type Address,\n type PublicClient,\n} from 'viem'\nimport {\n COMPOUND_V3_TRACKING_INDEX_SCALE,\n compoundV3AprToPercentLabel,\n compoundV3FactorToPercent,\n compoundV3RatePerSecondToAprDecimal,\n compoundV3TrackingSpeedToRewardAprPercent,\n compoundV3UtilizationToDecimal,\n} from './apr.js'\nimport { cometInterfaceAbi, cometRewardsAbi, erc20ReadAbi } from './cometAbi.js'\nimport {\n getCompoundV3MarketByComet,\n listCompoundV3MarketsForChain,\n type CompoundV3MarketRecord,\n} from './markets.js'\nimport { compoundV3WrappedNative, isCompoundV3ChainSupported, isNativeAssetAddress } from './support.js'\nimport { fetchCompoundV3SubgraphMarkets } from './subgraph.js'\n\nexport type CompoundV3AssetInfoRow = {\n asset: string\n symbol: string\n decimals: number\n borrowCollateralFactorPercent: number\n liquidateCollateralFactorPercent: number\n priceRaw: string\n role: 'base' | 'collateral'\n}\n\nexport type CompoundV3MarketSummary = {\n chainId: number\n slug: string\n symbol: string\n comet: string\n rewards: string\n bulker: string | null\n baseToken: string | null\n utilization: number | null\n supplyAprPercent: string | null\n borrowAprPercent: string | null\n supplyRewardAprPercent: string | null\n borrowRewardAprPercent: string | null\n assets: CompoundV3AssetInfoRow[]\n}\n\nexport type CompoundV3AccountSummary = {\n comet: string\n symbol: string\n baseSupplied: string\n baseBorrowed: string\n collaterals: Array<{ asset: string; symbol: string; balance: string }>\n isBorrowCollateralized: boolean\n isLiquidatable: boolean\n rewardToken: string | null\n rewardOwed: string | null\n}\n\nfunction publicClient(rpcUrl: string, chainId: number): PublicClient {\n const chain = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain, transport: http(rpcUrl) })\n}\n\nasync function readTokenMeta(\n client: PublicClient,\n asset: Address,\n): Promise<{ symbol: string; decimals: number }> {\n const [symbol, decimals] = await Promise.all([\n client.readContract({ address: asset, abi: erc20ReadAbi, functionName: 'symbol' }).catch(() => 'TOKEN'),\n client.readContract({ address: asset, abi: erc20ReadAbi, functionName: 'decimals' }).catch(() => 18),\n ])\n return { symbol: String(symbol), decimals: Number(decimals) }\n}\n\nasync function enrichMarketOnChain(\n client: PublicClient,\n market: CompoundV3MarketRecord,\n): Promise<CompoundV3MarketSummary> {\n const comet = market.comet\n const [baseToken, utilization, numAssets, decimals] = await Promise.all([\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseToken' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getUtilization' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'numAssets' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'decimals' }),\n ])\n const [supplyRate, borrowRate, baseMeta, baseFeed, supplySpeed, borrowSpeed, totalSupply, totalBorrow, trackingScale] =\n await Promise.all([\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getSupplyRate',\n args: [utilization],\n }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getBorrowRate',\n args: [utilization],\n }),\n readTokenMeta(client, getAddress(baseToken)),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTokenPriceFeed' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTrackingSupplySpeed' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTrackingBorrowSpeed' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'totalSupply' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'totalBorrow' }).catch(() => 0n),\n client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'trackingIndexScale' })\n .catch(() => BigInt(COMPOUND_V3_TRACKING_INDEX_SCALE)),\n ])\n const basePrice = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [baseFeed] })\n .catch(() => 0n)\n\n const assets: CompoundV3AssetInfoRow[] = [\n {\n asset: getAddress(baseToken),\n symbol: baseMeta.symbol,\n decimals: Number(decimals) || baseMeta.decimals,\n borrowCollateralFactorPercent: 0,\n liquidateCollateralFactorPercent: 0,\n priceRaw: basePrice.toString(),\n role: 'base',\n },\n ]\n\n const n = Number(numAssets)\n for (let i = 0; i < n; i++) {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfo',\n args: [i],\n })\n const token = getAddress(info.asset)\n const meta = await readTokenMeta(client, token)\n const price = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [info.priceFeed] })\n .catch(() => 0n)\n assets.push({\n asset: token,\n symbol: meta.symbol,\n decimals: meta.decimals,\n borrowCollateralFactorPercent: compoundV3FactorToPercent(info.borrowCollateralFactor),\n liquidateCollateralFactorPercent: compoundV3FactorToPercent(info.liquidateCollateralFactor),\n priceRaw: price.toString(),\n role: 'collateral',\n })\n }\n\n let rewardPrice = 0n\n try {\n const cfg = await client.readContract({\n address: getAddress(market.rewards),\n abi: cometRewardsAbi,\n functionName: 'rewardConfig',\n args: [comet],\n })\n const rewardToken = getAddress(cfg.token)\n const listed = assets.find((a) => a.asset.toLowerCase() === rewardToken.toLowerCase())\n if (listed && listed.priceRaw !== '0') {\n rewardPrice = BigInt(listed.priceRaw)\n } else {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfoByAddress',\n args: [rewardToken],\n })\n rewardPrice = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [info.priceFeed] })\n .catch(() => 0n)\n }\n } catch {\n rewardPrice = 0n\n }\n\n const baseDecimals = Number(decimals) || baseMeta.decimals\n const supplyRewardApr = compoundV3TrackingSpeedToRewardAprPercent({\n trackingSpeed: supplySpeed,\n trackingIndexScale: trackingScale,\n totalBase: totalSupply,\n baseDecimals,\n basePrice,\n rewardPrice,\n })\n const borrowRewardApr = compoundV3TrackingSpeedToRewardAprPercent({\n trackingSpeed: borrowSpeed,\n trackingIndexScale: trackingScale,\n totalBase: totalBorrow,\n baseDecimals,\n basePrice,\n rewardPrice,\n })\n\n return {\n chainId: market.chainId,\n slug: market.slug,\n symbol: market.symbol,\n comet: market.comet,\n rewards: market.rewards,\n bulker: market.bulker,\n baseToken: getAddress(baseToken),\n utilization: compoundV3UtilizationToDecimal(utilization),\n supplyAprPercent: compoundV3AprToPercentLabel(compoundV3RatePerSecondToAprDecimal(supplyRate)),\n borrowAprPercent: compoundV3AprToPercentLabel(compoundV3RatePerSecondToAprDecimal(borrowRate)),\n supplyRewardAprPercent: supplyRewardApr == null ? null : compoundV3AprToPercentLabel(supplyRewardApr / 100),\n borrowRewardAprPercent: borrowRewardApr == null ? null : compoundV3AprToPercentLabel(borrowRewardApr / 100),\n assets,\n }\n}\n\nfunction registryMarketRow(market: CompoundV3MarketRecord): CompoundV3MarketSummary {\n return {\n chainId: market.chainId,\n slug: market.slug,\n symbol: market.symbol,\n comet: market.comet,\n rewards: market.rewards,\n bulker: market.bulker,\n baseToken: market.baseToken ?? null,\n utilization: null,\n supplyAprPercent: null,\n borrowAprPercent: null,\n supplyRewardAprPercent: null,\n borrowRewardAprPercent: null,\n assets: market.baseToken\n ? [\n {\n asset: market.baseToken,\n symbol: market.slug.toUpperCase(),\n decimals: 18,\n borrowCollateralFactorPercent: 0,\n liquidateCollateralFactorPercent: 0,\n priceRaw: '0',\n role: 'base',\n },\n ]\n : [],\n }\n}\n\nexport async function compoundV3FetchMarketsSummary(args: {\n chainId: number\n rpcUrl?: string\n}): Promise<{ markets: CompoundV3MarketSummary[]; notes: string }> {\n if (!isCompoundV3ChainSupported(args.chainId)) {\n return { markets: [], notes: `Compound III is not deployed on chain ${args.chainId}.` }\n }\n const registry = listCompoundV3MarketsForChain(args.chainId)\n let subgraphNote = ''\n const subgraph = await fetchCompoundV3SubgraphMarkets({ chainId: args.chainId })\n if (subgraph) {\n subgraphNote = ` Subgraph listed ${subgraph.length} market id(s); official comet deployments are the address source.`\n }\n if (!args.rpcUrl?.trim()) {\n return {\n markets: registry.map(registryMarketRow),\n notes:\n 'Registry from official comet deployments. Pass rpcUrl (MCP server injects it) to enrich APRs, reward APRs, and collaterals.' +\n subgraphNote,\n }\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n const markets: CompoundV3MarketSummary[] = []\n for (const row of registry) {\n try {\n markets.push(await enrichMarketOnChain(client, row))\n } catch {\n markets.push(registryMarketRow(row))\n }\n }\n return {\n markets,\n notes:\n 'Comet proxy addresses from official deployments; base supply/borrow APR and COMP incentive APR from on-chain CometInterface. Incentive APR is extra and variable; null when the reward token has no on-chain price feed.' +\n subgraphNote,\n }\n}\n\nexport async function compoundV3FetchMarketSummary(args: {\n chainId: number\n comet: string\n rpcUrl?: string\n}): Promise<CompoundV3MarketSummary> {\n if (!args.rpcUrl?.trim()) {\n throw new Error('rpcUrl is required for ctm_compound_v3_fetch_market (MCP server injects it from the chain registry).')\n }\n const market = getCompoundV3MarketByComet(args.chainId, args.comet)\n if (!market) {\n throw new Error(`Unknown Compound III Comet ${args.comet} on chain ${args.chainId}.`)\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n return enrichMarketOnChain(client, market)\n}\n\nexport async function compoundV3FetchAccountSummary(args: {\n chainId: number\n comet: string\n account: string\n rpcUrl?: string\n}): Promise<CompoundV3AccountSummary> {\n if (!args.rpcUrl?.trim()) {\n throw new Error(\n 'rpcUrl is required for ctm_compound_v3_fetch_account (MCP server injects it from the chain registry).',\n )\n }\n const market = getCompoundV3MarketByComet(args.chainId, args.comet)\n if (!market) {\n throw new Error(`Unknown Compound III Comet ${args.comet} on chain ${args.chainId}.`)\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n const comet = market.comet\n const account = getAddress(args.account)\n const [baseToken, decimals, supplied, borrowed, numAssets, collateralized, liquidatable] = await Promise.all([\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseToken' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'decimals' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'balanceOf', args: [account] }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'borrowBalanceOf',\n args: [account],\n }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'numAssets' }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'isBorrowCollateralized',\n args: [account],\n }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'isLiquidatable',\n args: [account],\n }),\n ])\n const baseMeta = await readTokenMeta(client, getAddress(baseToken))\n const dec = Number(decimals) || baseMeta.decimals\n const collaterals: CompoundV3AccountSummary['collaterals'] = []\n const n = Number(numAssets)\n for (let i = 0; i < n; i++) {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfo',\n args: [i],\n })\n const token = getAddress(info.asset)\n const bal = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'collateralBalanceOf',\n args: [account, token],\n })\n const meta = await readTokenMeta(client, token)\n collaterals.push({\n asset: token,\n symbol: meta.symbol,\n balance: formatUnits(bal, meta.decimals),\n })\n }\n\n let rewardToken: string | null = null\n let rewardOwed: string | null = null\n try {\n const owed = await client.readContract({\n address: market.rewards,\n abi: cometRewardsAbi,\n functionName: 'getRewardOwed',\n args: [comet, account],\n })\n rewardToken = getAddress(owed.token)\n const rewardMeta = await readTokenMeta(client, getAddress(owed.token))\n rewardOwed = formatUnits(owed.owed, rewardMeta.decimals)\n } catch {\n rewardToken = null\n rewardOwed = null\n }\n\n return {\n comet,\n symbol: market.symbol,\n baseSupplied: formatUnits(supplied, dec),\n baseBorrowed: formatUnits(borrowed, dec),\n collaterals,\n isBorrowCollateralized: Boolean(collateralized),\n isLiquidatable: Boolean(liquidatable),\n rewardToken,\n rewardOwed,\n }\n}\n\nexport type CompoundV3AssetModes = {\n base: boolean\n collateral: boolean\n}\n\nconst chainAssetCache = new Map<number, Map<string, CompoundV3AssetModes>>()\n\nexport function compoundV3KeyForNodeAssetRow(args: {\n contractAddress: string\n chainId: number\n}): string {\n if (isNativeAssetAddress(args.contractAddress)) {\n const wrapped = compoundV3WrappedNative(args.chainId)\n return (wrapped ?? zeroAddress).toLowerCase()\n }\n return getAddress(args.contractAddress).toLowerCase()\n}\n\nexport async function ensureCompoundV3ChainAssetCache(args: {\n chainId: number\n rpcUrl?: string\n}): Promise<Map<string, CompoundV3AssetModes>> {\n const existing = chainAssetCache.get(args.chainId)\n if (existing && existing.size > 0 && !args.rpcUrl) return existing\n\n const map = new Map<string, CompoundV3AssetModes>()\n const add = (address: string, role: keyof CompoundV3AssetModes) => {\n const key = getAddress(address).toLowerCase()\n const cur = map.get(key) ?? { base: false, collateral: false }\n cur[role] = true\n map.set(key, cur)\n }\n\n if (args.rpcUrl?.trim()) {\n try {\n const { markets } = await compoundV3FetchMarketsSummary({ chainId: args.chainId, rpcUrl: args.rpcUrl })\n for (const m of markets) {\n for (const a of m.assets) add(a.asset, a.role === 'base' ? 'base' : 'collateral')\n }\n chainAssetCache.set(args.chainId, map)\n return map\n } catch {\n /* fall through to registry bases */\n }\n }\n\n for (const m of listCompoundV3MarketsForChain(args.chainId)) {\n if (m.baseToken) add(m.baseToken, 'base')\n }\n chainAssetCache.set(args.chainId, map)\n return map\n}\n\nexport function getCompoundV3AssetModesFromCache(\n chainId: number,\n contractAddress: string,\n): CompoundV3AssetModes | null {\n const cache = chainAssetCache.get(chainId)\n if (!cache) return null\n const key = compoundV3KeyForNodeAssetRow({ contractAddress, chainId })\n return cache.get(key) ?? null\n}\n\nexport function listCompoundV3MarketsForAsset(args: {\n chainId: number\n contractAddress: string\n}): CompoundV3MarketRecord[] {\n const key = compoundV3KeyForNodeAssetRow({ contractAddress: args.contractAddress, chainId: args.chainId })\n return listCompoundV3MarketsForChain(args.chainId).filter((m) => {\n if (m.baseToken && m.baseToken.toLowerCase() === key) return true\n const modes = chainAssetCache.get(args.chainId)?.get(key)\n return Boolean(modes?.base || modes?.collateral)\n })\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import {\n createPublicClient,\n defineChain,\n encodeFunctionData,\n getAddress,\n http,\n type Address,\n type PublicClient,\n} from 'viem'\nimport { erc20ApproveAbi, erc20ReadAbi } from './cometAbi.js'\n\nexport type CompoundV3BuildStepKind =\n | 'weth_deposit'\n | 'weth_withdraw'\n | 'approve'\n | 'supply'\n | 'withdraw'\n | 'claim'\n | 'allow'\n | 'bulker_invoke'\n\nexport type CompoundV3BuildStep = {\n kind: CompoundV3BuildStepKind\n to: Address\n data: `0x${string}`\n value: bigint\n}\n\nexport function createCompoundV3PublicClient(rpcUrl: string, chainId: number): PublicClient {\n const chain = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain, transport: http(rpcUrl) })\n}\n\nexport async function pushApproveIfNeeded(args: {\n client: PublicClient\n steps: CompoundV3BuildStep[]\n token: Address\n owner: Address\n spender: Address\n amountWei: bigint\n}): Promise<void> {\n const current = await args.client.readContract({\n address: args.token,\n abi: erc20ReadAbi,\n functionName: 'allowance',\n args: [getAddress(args.owner), getAddress(args.spender)],\n })\n if (current >= args.amountWei) return\n if (current > 0n) {\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [getAddress(args.spender), 0n],\n }),\n value: 0n,\n })\n }\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [getAddress(args.spender), args.amountWei],\n }),\n value: 0n,\n })\n}\n","import {\n encodeFunctionData,\n getAddress,\n maxUint256,\n parseUnits,\n type Address,\n} from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n cometInterfaceAbi,\n cometRewardsAbi,\n erc20ReadAbi,\n wethAbi,\n} from './cometAbi.js'\nimport { requireCompoundV3Market } from './markets.js'\nimport { resolveCompoundV3ActionAsset } from './support.js'\nimport {\n createCompoundV3PublicClient,\n pushApproveIfNeeded,\n type CompoundV3BuildStep,\n type CompoundV3BuildStepKind,\n} from './txHelpers.js'\n\nconst WETH_DEPOSIT_FALLBACK = 120_000n\nconst WETH_WITHDRAW_FALLBACK = 80_000n\nconst ERC20_APPROVE_FALLBACK = 100_000n\nconst COMET_SUPPLY_FALLBACK = 500_000n\nconst COMET_WITHDRAW_FALLBACK = 600_000n\nconst REWARDS_CLAIM_FALLBACK = 250_000n\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type { CompoundV3BuildStep, CompoundV3BuildStepKind } from './txHelpers.js'\n\ntype CommonBuildArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n comet: Address\n executorAddress: Address\n purposeText: string\n}\n\nfunction fallbackGas(kind: CompoundV3BuildStepKind): bigint {\n if (kind === 'weth_deposit') return WETH_DEPOSIT_FALLBACK\n if (kind === 'weth_withdraw') return WETH_WITHDRAW_FALLBACK\n if (kind === 'approve') return ERC20_APPROVE_FALLBACK\n if (kind === 'withdraw') return COMET_WITHDRAW_FALLBACK\n if (kind === 'claim') return REWARDS_CLAIM_FALLBACK\n return COMET_SUPPLY_FALLBACK\n}\n\nfunction finishBatch(args: {\n common: CommonBuildArgs\n steps: CompoundV3BuildStep[]\n purposeSuffix: string\n extraMeta: Record<string, unknown>\n}) {\n const evmSteps: EvmTxStep[] = args.steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: fallbackGas(s.kind),\n }))\n const first = evmSteps[0]\n if (!first) throw new Error('Compound III batch has no steps.')\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.common.keyGen,\n purposeText: args.common.purposeText,\n chainId: args.common.chainId,\n rpcUrl: args.common.rpcUrl,\n executorAddress: getAddress(args.common.executorAddress),\n chainDetail: args.common.chainDetail,\n useCustomGas: args.common.useCustomGas,\n customGasChainDetails: args.common.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: args.purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n buildBatchMeta: ({ index }) => {\n const s = args.steps[index]!\n return {\n signatureText: JSON.stringify({\n kind: 'CompoundV3',\n step: s.kind,\n to: s.to,\n ...args.extraMeta,\n }),\n evm: { type: `compound_v3_${s.kind}`, version: 1, chainId: String(args.common.chainId) },\n compoundV3: { ...args.extraMeta, step: s.kind, comet: args.common.comet },\n }\n },\n })\n}\n\nasync function resolveAmountWei(args: {\n rpcUrl: string\n chainId: number\n asset: Address\n amountHuman: string\n}): Promise<bigint> {\n if (args.amountHuman.trim().toLowerCase() === 'max') return maxUint256\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n const dec = await client.readContract({ address: args.asset, abi: erc20ReadAbi, functionName: 'decimals' })\n const amountWei = parseUnits(args.amountHuman, Number(dec))\n if (amountWei === 0n) throw new Error('Amount is zero after converting with token decimals.')\n return amountWei\n}\n\n/**\n * Supply base (earn / repay) or collateral. Native ETH always wraps via WETH.deposit\n * when `isNative` / zero address — Bulker is not required.\n */\nexport async function buildEvmMultisignBodyCompoundV3Supply(args: CommonBuildArgs & {\n asset: string\n amountHuman: string\n isNative?: boolean\n isNativeIn?: boolean\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: args.asset,\n isNative: args.isNative ?? args.isNativeIn,\n })\n const amountWei = await resolveAmountWei({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n })\n const executor = getAddress(args.executorAddress)\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n const steps: CompoundV3BuildStep[] = []\n\n if (resolved.isNative) {\n steps.push({\n kind: 'weth_deposit',\n to: resolved.asset,\n data: encodeFunctionData({ abi: wethAbi, functionName: 'deposit', args: [] }),\n value: amountWei,\n })\n }\n\n await pushApproveIfNeeded({\n client,\n steps,\n token: resolved.asset,\n owner: executor,\n spender: market.comet,\n amountWei,\n })\n\n steps.push({\n kind: 'supply',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometInterfaceAbi,\n functionName: 'supply',\n args: [resolved.asset, amountWei],\n }),\n value: 0n,\n })\n\n const n = steps.length\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: resolved.isNative\n ? `Compound III: ${n}-tx batch — wrap native to WETH, approve Comet, supply.`\n : n === 1\n ? 'Compound III: 1-tx — supply (allowance already sufficient).'\n : `Compound III: ${n}-tx batch — approve Comet, then supply.`,\n extraMeta: {\n market: market.symbol,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n isNative: resolved.isNative,\n },\n })\n}\n\nexport async function buildEvmMultisignBodyCompoundV3Repay(\n args: Parameters<typeof buildEvmMultisignBodyCompoundV3Supply>[0],\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n return buildEvmMultisignBodyCompoundV3Supply(args)\n}\n\n/**\n * Withdraw collateral or base. Withdrawing base while undercollateralized is borrow.\n * Native path always unwraps via WETH.withdraw after Comet.withdraw — Bulker is not required.\n */\nexport async function buildEvmMultisignBodyCompoundV3Withdraw(args: CommonBuildArgs & {\n asset: string\n amountHuman: string\n isNative?: boolean\n isNativeIn?: boolean\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: args.asset,\n isNative: args.isNative ?? args.isNativeIn,\n })\n const amountWei = await resolveAmountWei({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n })\n const executor = getAddress(args.executorAddress)\n const steps: CompoundV3BuildStep[] = [\n {\n kind: 'withdraw',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometInterfaceAbi,\n functionName: 'withdraw',\n args: [resolved.asset, amountWei],\n }),\n value: 0n,\n },\n ]\n if (resolved.isNative) {\n if (amountWei === maxUint256) {\n throw new Error('Native ETH unwrap cannot use amount \"max\"; pass an explicit amount to unwrap.')\n }\n steps.push({\n kind: 'weth_withdraw',\n to: resolved.asset,\n data: encodeFunctionData({ abi: wethAbi, functionName: 'withdraw', args: [amountWei] }),\n value: 0n,\n })\n }\n\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: resolved.isNative\n ? 'Compound III: 2-tx batch — withdraw WETH from Comet, unwrap to ETH.'\n : 'Compound III: 1-tx — withdraw (borrow if this is base while undercollateralized).',\n extraMeta: {\n market: market.symbol,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n isNative: resolved.isNative,\n note: 'Withdraw of base while undercollateralized borrows the base asset.',\n },\n })\n}\n\nexport async function buildEvmMultisignBodyCompoundV3ClaimRewards(args: CommonBuildArgs): Promise<{\n bodyForSign: Record<string, unknown>\n messageToSign: string\n}> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const executor = getAddress(args.executorAddress)\n const steps: CompoundV3BuildStep[] = [\n {\n kind: 'claim',\n to: market.rewards,\n data: encodeFunctionData({\n abi: cometRewardsAbi,\n functionName: 'claim',\n args: [market.comet, executor, true],\n }),\n value: 0n,\n },\n ]\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: 'Compound III: 1-tx — claim rewards.',\n extraMeta: { market: market.symbol, rewards: market.rewards },\n })\n}\n","import { encodeAbiParameters, encodeFunctionData, getAddress, parseAbi, parseUnits, type Address } from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n BULKER_ACTION_CLAIM_REWARD,\n BULKER_ACTION_SUPPLY_ASSET,\n BULKER_ACTION_SUPPLY_NATIVE_TOKEN,\n BULKER_ACTION_WITHDRAW_ASSET,\n BULKER_ACTION_WITHDRAW_NATIVE_TOKEN,\n cometBulkerAbi,\n cometInterfaceAbi,\n erc20ReadAbi,\n} from './cometAbi.js'\nimport { requireCompoundV3Market } from './markets.js'\nimport { resolveCompoundV3ActionAsset } from './support.js'\nimport {\n createCompoundV3PublicClient,\n pushApproveIfNeeded,\n type CompoundV3BuildStep,\n} from './txHelpers.js'\n\nconst ALLOW_FALLBACK = 80_000n\nconst ERC20_APPROVE_FALLBACK = 100_000n\nconst BULKER_INVOKE_FALLBACK = 900_000n\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type CompoundV3BulkerStepInput = {\n action: 'supply' | 'withdraw' | 'claim'\n asset?: string\n amountHuman?: string\n isNative?: boolean\n}\n\nconst cometAllowAbi = parseAbi(['function allow(address manager, bool isAllowed)'])\n\n/**\n * Combined Bulker.invoke. Native supply/withdraw uses ACTION_*_NATIVE_TOKEN.\n * Requires ERC-20 approve(bulker) and Comet.allow(bulker) when not already set.\n */\nexport async function buildEvmMultisignBodyCompoundV3Bulker(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n comet: Address\n executorAddress: Address\n purposeText: string\n steps: CompoundV3BulkerStepInput[]\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (!args.steps?.length) throw new Error('Bulker requires at least one step.')\n const market = requireCompoundV3Market(args.chainId, args.comet)\n if (!market.bulker) throw new Error(`No Bulker contract for ${market.symbol} on chain ${args.chainId}.`)\n const bulker = market.bulker\n const executor = getAddress(args.executorAddress)\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n\n const allowed = await client\n .readContract({\n address: market.comet,\n abi: cometInterfaceAbi,\n functionName: 'hasPermission',\n args: [executor, bulker],\n })\n .catch(() => false)\n\n const prefix: CompoundV3BuildStep[] = []\n if (!allowed) {\n prefix.push({\n kind: 'allow',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometAllowAbi,\n functionName: 'allow',\n args: [bulker, true],\n }),\n value: 0n,\n })\n }\n\n const actions: `0x${string}`[] = []\n const datas: `0x${string}`[] = []\n let nativeValue = 0n\n\n for (const step of args.steps) {\n if (step.action === 'claim') {\n actions.push(BULKER_ACTION_CLAIM_REWARD)\n datas.push(\n encodeAbiParameters(\n [\n { type: 'address' },\n { type: 'address' },\n { type: 'address' },\n { type: 'bool' },\n ],\n [market.comet, market.rewards, executor, true],\n ),\n )\n continue\n }\n if (!step.asset || !step.amountHuman) {\n throw new Error(`Bulker ${step.action} requires asset and amountHuman.`)\n }\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: step.asset,\n isNative: step.isNative,\n })\n const dec = await client.readContract({\n address: resolved.asset,\n abi: erc20ReadAbi,\n functionName: 'decimals',\n })\n const amountWei = parseUnits(step.amountHuman, Number(dec))\n if (amountWei === 0n) throw new Error('Bulker step amount is zero.')\n\n if (step.action === 'supply') {\n if (resolved.isNative) {\n actions.push(BULKER_ACTION_SUPPLY_NATIVE_TOKEN)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, amountWei],\n ),\n )\n nativeValue += amountWei\n } else {\n await pushApproveIfNeeded({\n client,\n steps: prefix,\n token: resolved.asset,\n owner: executor,\n spender: bulker,\n amountWei,\n })\n actions.push(BULKER_ACTION_SUPPLY_ASSET)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, resolved.asset, amountWei],\n ),\n )\n }\n } else {\n if (resolved.isNative) {\n actions.push(BULKER_ACTION_WITHDRAW_NATIVE_TOKEN)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, amountWei],\n ),\n )\n } else {\n actions.push(BULKER_ACTION_WITHDRAW_ASSET)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, resolved.asset, amountWei],\n ),\n )\n }\n }\n }\n\n const invokeData = encodeFunctionData({\n abi: cometBulkerAbi,\n functionName: 'invoke',\n args: [actions, datas],\n })\n prefix.push({\n kind: 'bulker_invoke',\n to: bulker,\n data: invokeData,\n value: nativeValue,\n })\n\n const evmSteps: EvmTxStep[] = prefix.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas:\n s.kind === 'approve' ? ERC20_APPROVE_FALLBACK : s.kind === 'allow' ? ALLOW_FALLBACK : BULKER_INVOKE_FALLBACK,\n }))\n const first = evmSteps[0]!\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: `Compound III: ${evmSteps.length}-tx Bulker batch (${args.steps.map((s) => s.action).join(', ')}).`,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n payableValueWei: nativeValue > 0n ? nativeValue : undefined,\n buildBatchMeta: ({ index }) => {\n const s = prefix[index]!\n return {\n signatureText: JSON.stringify({\n kind: 'CompoundV3',\n step: s.kind,\n bulker,\n comet: market.comet,\n actions: args.steps.map((st) => st.action),\n }),\n evm: { type: `compound_v3_${s.kind}`, version: 1, chainId: String(args.chainId) },\n compoundV3: { market: market.symbol, comet: market.comet, bulker, step: s.kind },\n }\n },\n })\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { COMPOUND_V3_PROTOCOL_ID, isCompoundV3ChainSupported } from './support.js'\n\nexport const compoundV3ProtocolModule: ProtocolModule = {\n id: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n const id = typeof ctx.chainId === 'string' ? Number(ctx.chainId) : ctx.chainId\n return ctx.chainCategory === 'evm' && isCompoundV3ChainSupported(id)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'native' || token.kind === 'erc20')\n },\n actions: [\n {\n id: 'compound-v3.supply',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Supply base (earn/repay) or collateral to a Comet proxy',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.withdraw',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw collateral or base (withdraw of base while undercollateralized = borrow)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.repay',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Repay base debt by supplying base',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.claim-rewards',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim COMP / reward token from CometRewards',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.bulker',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Combined Bulker.invoke (optional)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n ],\n}\n\nregisterProtocolModule(compoundV3ProtocolModule)\n\nexport * from './support.js'\nexport * from './markets.js'\nexport * from './cometAbi.js'\nexport * from './compoundJs.js'\nexport * from './apr.js'\nexport * from './subgraph.js'\nexport * from './reads.js'\nexport * from './multisign.js'\nexport * from './bulkerMultisign.js'\nexport * from './txHelpers.js'\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/compound-v3/support.ts","../../../../src/protocols/evm/compound-v3/markets.ts","../../../../src/protocols/evm/compound-v3/cometAbi.ts","../../../../src/protocols/evm/compound-v3/compound-js-artifacts/comet-constants.json","../../../../src/protocols/evm/compound-v3/compoundJs.ts","../../../../src/protocols/evm/compound-v3/apr.ts","../../../../src/protocols/evm/compound-v3/subgraph.ts","../../../../src/core/defiEvmClient.ts","../../../../src/protocols/evm/compound-v3/reads.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/compound-v3/txHelpers.ts","../../../../src/protocols/evm/compound-v3/multisign.ts","../../../../src/protocols/evm/compound-v3/bulkerMultisign.ts","../../../../src/protocols/evm/compound-v3/index.ts"],"names":["getAddress","zeroAddress","parseAbi","stringToHex","http","defineChain","createPublicClient","formatUnits","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","publicClient","fetchChainFeeParams","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","encodeFunctionData","maxUint256","parseUnits","ERC20_APPROVE_FALLBACK","encodeAbiParameters"],"mappings":";;;;;;AAEA,IAAM,UAA4B,EAAC;AAE5B,SAAS,uBAAuB,GAAA,EAA2B;AAChE,EAAA,MAAM,QAAA,GAAW,QAAQ,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,IAAI,EAAE,CAAA;AACzD,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,OAAA,CAAQ,QAAQ,CAAA,GAAI,GAAA;AAAA,EACtB,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,EAClB;AACF;ACTO,IAAM,uBAAA,GAA0B;AAGhC,IAAM,qBAAA,GAAwB,CAAC,CAAA,EAAG,IAAA,EAAM,OAAO,EAAA,EAAI,GAAA,EAAK,GAAA,EAAM,GAAA,EAAK,KAAK;AAIxE,IAAM,0BAAA,GAAgE;AAAA,EAC3E,CAAA,EAAGA,gBAAW,4CAA4C,CAAA;AAAA,EAC1D,IAAA,EAAMA,gBAAW,4CAA4C,CAAA;AAAA,EAC7D,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,EAC9D,EAAA,EAAIA,gBAAW,4CAA4C,CAAA;AAAA,EAC3D,GAAA,EAAKA,gBAAW,4CAA4C,CAAA;AAAA,EAC5D,GAAA,EAAMA,gBAAW,4CAA4C,CAAA;AAAA,EAC7D,GAAA,EAAKA,gBAAW,4CAA4C,CAAA;AAAA,EAC5D,KAAA,EAAOA,gBAAW,4CAA4C;AAChE;AAEO,SAAS,2BAA2B,OAAA,EAA0B;AACnE,EAAA,OAAQ,qBAAA,CAA4C,SAAS,OAAO,CAAA;AACtE;AAEO,SAAS,wBAAwB,OAAA,EAAiC;AACvE,EAAA,OAAO,0BAAA,CAA2B,OAAO,CAAA,IAAK,IAAA;AAChD;AAEO,SAAS,qBAAqB,OAAA,EAA0B;AAC7D,EAAA,IAAI;AACF,IAAA,OAAOA,eAAA,CAAW,OAAO,CAAA,KAAMC,gBAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,6BAA6B,IAAA,EAI4B;AACvE,EAAA,MAAM,aAAA,GAAgB,uBAAA,CAAwB,IAAA,CAAK,OAAO,CAAA;AAC1D,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA,KAAa,IAAA,IAAQ,oBAAA,CAAqB,KAAK,KAAK,CAAA;AAC1E,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6DAAA,EAAgE,IAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,IACjG;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,aAAA,EAAe,QAAA,EAAU,MAAM,aAAA,EAAc;AAAA,EAC/D;AACA,EAAA,OAAO,EAAE,OAAOD,eAAA,CAAW,IAAA,CAAK,KAAK,CAAA,EAAG,QAAA,EAAU,OAAO,aAAA,EAAc;AACzE;AC9BO,IAAM,mBAAA,GAAyD;AAAA;AAAA,EAEpE;AAAA,IACE,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,WAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA;AAAA,EAEA;AAAA,IACE,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ,UAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA;AAAA,EAEA;AAAA,IACE,OAAA,EAAS,KAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,KAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,WAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,KAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,KAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA;AAAA,EAEA;AAAA,IACE,OAAA,EAAS,EAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,EAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,EAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA;AAAA,EAEA;AAAA,IACE,OAAA,EAAS,GAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,GAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA;AAAA,EAEA;AAAA,IACE,OAAA,EAAS,GAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,MAAA,EAAQ;AAAA,GACV;AAAA;AAAA,EAEA;AAAA,IACE,OAAA,EAAS,GAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,GAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA;AAAA,EAEA;AAAA,IACE,OAAA,EAAS,KAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,OAAA,EAAS,KAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAOA,gBAAW,4CAA4C,CAAA;AAAA,IAC9D,OAAA,EAASA,gBAAW,4CAA4C,CAAA;AAAA,IAChE,MAAA,EAAQA,gBAAW,4CAA4C,CAAA;AAAA,IAC/D,SAAA,EAAWA,gBAAW,4CAA4C,CAAA;AAAA,IAClE,MAAA,EAAQ;AAAA;AAEZ;AAEO,SAAS,+BAAA,GAA4C;AAC1D,EAAA,OAAO,CAAC,GAAG,qBAAqB,CAAA;AAClC;AAEO,SAAS,8BAA8B,OAAA,EAA2C;AACvF,EAAA,IAAI,CAAC,0BAAA,CAA2B,OAAO,CAAA,SAAU,EAAC;AAClD,EAAA,OAAO,oBAAoB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,OAAO,CAAA;AAChE;AAEO,SAAS,0BAAA,CAA2B,SAAiB,KAAA,EAA8C;AACxG,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAaA,gBAAW,KAAK,CAAA;AAAA,EAC/B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,OAAA,IAAW,CAAA,CAAE,KAAA,KAAU,UAAU,CAAA,IAAK,IAAA;AAC7F;AAEO,SAAS,uBAAA,CAAwB,SAAiB,KAAA,EAAuC;AAC9F,EAAA,MAAM,MAAA,GAAS,0BAAA,CAA2B,OAAA,EAAS,KAAK,CAAA;AACxD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,iCAAA,EAAoC,KAAK,CAAA,UAAA,EAAa,OAAO,CAAA,oCAAA;AAAA,KAC/D;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,kCAAkC,OAAA,EAA4B;AAC5E,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,EAAA,KAAA,MAAW,CAAA,IAAK,6BAAA,CAA8B,OAAO,CAAA,EAAG;AACtD,IAAA,GAAA,CAAI,GAAA,CAAI,EAAE,KAAK,CAAA;AACf,IAAA,IAAI,CAAA,CAAE,SAAA,EAAW,GAAA,CAAI,GAAA,CAAI,EAAE,SAAS,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,CAAC,GAAG,GAAG,CAAA;AAChB;ACzTO,IAAM,oBAAoBE,aAAA,CAAS;AAAA,EACxC,gDAAA;AAAA,EACA,+DAAA;AAAA,EACA,kDAAA;AAAA,EACA,gEAAA;AAAA,EACA,iDAAA;AAAA,EACA,4EAAA;AAAA,EACA,4DAAA;AAAA,EACA,kEAAA;AAAA,EACA,qFAAA;AAAA,EACA,6CAAA;AAAA,EACA,sDAAA;AAAA,EACA,0CAAA;AAAA,EACA,2CAAA;AAAA,EACA,kDAAA;AAAA,EACA,mEAAA;AAAA,EACA,mEAAA;AAAA,EACA,6DAAA;AAAA,EACA,sEAAA;AAAA,EACA,8DAAA;AAAA,EACA,4NAAA;AAAA,EACA,2OAAA;AAAA,EACA,2DAAA;AAAA,EACA,2DAAA;AAAA,EACA,iDAAA;AAAA,EACA,sDAAA;AAAA,EACA,+CAAA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,kBAAkBA,aAAA,CAAS;AAAA,EACtC,qGAAA;AAAA,EACA,+DAAA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,iBAAiBA,aAAA,CAAS;AAAA,EACrC;AACF,CAAC;AAEM,IAAM,eAAeA,aAAA,CAAS;AAAA,EACnC,2EAAA;AAAA,EACA,0CAAA;AAAA,EACA,yCAAA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,eAAA,GAAkBA,aAAA,CAAS,CAAC,kEAAkE,CAAC;AAErG,IAAM,OAAA,GAAUA,aAAA,CAAS,CAAC,4BAAA,EAA8B,gCAAgC,CAAC;AAGzF,SAAS,eAAe,IAAA,EAA6B;AAC1D,EAAA,OAAOC,gBAAA,CAAY,IAAA,EAAM,EAAE,IAAA,EAAM,IAAI,CAAA;AACvC;AAEO,IAAM,0BAAA,GAA6B,eAAe,qBAAqB;AACvE,IAAM,iCAAA,GAAoC,eAAe,4BAA4B;AACrF,IAAM,4BAAA,GAA+B,eAAe,uBAAuB;AAC3E,IAAM,mCAAA,GAAsC,eAAe,8BAA8B;AACzF,IAAM,0BAAA,GAA6B,eAAe,qBAAqB;AACvE,IAAM,4BAAA,GAA+B,eAAe,uBAAuB;;;AChElF,IAAA,uBAAA,GAAA,EAA+tB,OAAA,EAAU,EAAC,YAAA,EAAe,EAAC,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,GAAA,EAAM,EAAC,QAAA,EAAW,4CAAA,EAA6C,WAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,OAAQ,4CAAA,EAA4C,EAAE,YAAA,EAAe,EAAC,KAAA,EAAQ,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,MAAA,EAAS,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,8CAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,4CAAA,EAA4C,EAAE,YAAA,EAAe,EAAC,IAAA,EAAO,EAAC,QAAA,EAAW,8CAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,MAAA,EAAS,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,IAA8C,MAAA,EAAS,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,4CAAA,IAA8C,aAAA,EAAgB,EAAC,GAAA,EAAM,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,GAAA,EAAM,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,MAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,8CAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,4CAAA,EAA4C,EAAE,UAAA,EAAa,EAAC,KAAA,EAAQ,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,4CAAA,EAA4C,EAAE,SAAA,EAAY,EAAC,KAAA,EAAQ,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,4CAAA,IAA8C,WAAA,EAAc,EAAC,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,MAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,8CAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,4CAAA,EAA4C,EAAE,WAAA,EAAc,EAAC,KAAA,EAAQ,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,MAAA,EAAS,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,4CAAA,EAA4C,EAAE,WAAA,EAAc,EAAC,GAAA,EAAM,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,UAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,MAAA,EAAS,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,8CAA4C,EAAE,KAAA,EAAQ,4CAAA,EAA4C,EAAE,oBAAA,EAAuB,EAAC,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,8CAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,IAA8C,KAAA,EAAQ,4CAAA,EAA4C,EAAE,oBAAA,EAAuB,EAAC,EAAA,EAAK,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,WAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,OAAQ,4CAAA,EAA4C,EAAE,gBAAA,EAAmB,EAAC,KAAA,EAAQ,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,8CAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,4CAAA,EAA4C,EAAE,gBAAA,EAAmB,EAAC,KAAA,EAAQ,EAAC,QAAA,EAAW,8CAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,4CAAA,EAA4C,EAAE,SAAA,EAAY,EAAC,MAAA,EAAS,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,EAAC,QAAA,EAAW,4CAAA,EAA6C,SAAA,EAAY,4CAAA,EAA4C,EAAE,IAAA,EAAO,EAAC,QAAA,EAAW,4CAAA,EAA6C,WAAY,4CAAA,EAA4C,EAAE,KAAA,EAAQ,4CAAA,EAA4C,EAAC,EAAyxB,WAAA,EAAc,EAAC,YAAA,EAAe,CAAC,MAAA,EAAO,MAAA,EAAO,MAAA,EAAO,KAAA,EAAM,MAAA,EAAO,MAAM,CAAA,EAAE,cAAe,CAAC,OAAA,EAAQ,QAAA,EAAS,MAAM,CAAA,EAAE,YAAA,EAAe,CAAC,MAAA,EAAO,MAAA,EAAO,QAAA,EAAS,QAAA,EAAS,MAAM,CAAA,EAAE,aAAA,EAAgB,CAAC,KAAA,EAAM,OAAM,MAAA,EAAO,MAAA,EAAO,MAAM,CAAA,EAAE,UAAA,EAAa,CAAC,OAAA,EAAQ,MAAA,EAAO,OAAO,CAAA,EAAE,SAAA,EAAY,CAAC,OAAA,EAAQ,MAAM,CAAA,EAAE,WAAA,EAAc,CAAC,MAAA,EAAO,MAAA,EAAO,MAAA,EAAO,MAAA,EAAO,MAAM,CAAA,EAAE,WAAA,EAAc,CAAC,OAAA,EAAQ,QAAA,EAAS,MAAM,CAAA,EAAE,WAAA,EAAc,CAAC,KAAA,EAAM,MAAA,EAAO,QAAO,QAAA,EAAS,MAAM,CAAA,EAAE,oBAAA,EAAuB,CAAC,MAAA,EAAO,MAAA,EAAO,MAAA,EAAO,MAAM,CAAA,EAAE,oBAAA,EAAuB,CAAC,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,MAAM,GAAE,gBAAA,EAAmB,CAAC,OAAA,EAAQ,MAAA,EAAO,MAAM,CAAA,EAAE,gBAAA,EAAmB,CAAC,OAAA,EAAQ,MAAM,CAAA,EAAE,SAAA,EAAY,CAAC,QAAA,EAAS,OAAA,EAAQ,MAAM,GAAC,EAAE,IAAA,EAAO,EAAC,YAAA,EAAe,MAAA,EAAO,YAAA,EAAe,MAAA,EAAO,YAAA,EAAe,MAAA,EAAO,aAAA,EAAgB,MAAA,EAAO,UAAA,EAAa,OAAA,EAAQ,SAAA,EAAY,MAAA,EAAO,WAAA,EAAc,QAAO,WAAA,EAAc,MAAA,EAAO,WAAA,EAAc,MAAA,EAAO,oBAAA,EAAuB,MAAA,EAAO,oBAAA,EAAuB,MAAA,EAAO,gBAAA,EAAmB,MAAA,EAAO,gBAAA,EAAmB,MAAA,EAAO,SAAA,EAAY,MAAA,EAAyywB,CAAA;;;ACe9ikC,IAAM,iBAAA,GAAsD;AAAA,EAC1D,YAAA,EAAc,CAAA;AAAA,EACd,YAAA,EAAc,CAAA;AAAA,EACd,YAAA,EAAc,GAAA;AAAA,EACd,aAAA,EAAe,KAAA;AAAA,EACf,UAAA,EAAY,IAAA;AAAA,EACZ,SAAA,EAAW;AACb,CAAA;AAUA,SAAS,YAAA,GAAqC;AAC5C,EAAA,OAAO,uBAAA,CAAe,OAAA;AACxB;AAEO,SAAS,4BAAA,GAAuD;AACrE,EAAA,MAAM,UAAU,YAAA,EAAa;AAC7B,EAAA,MAAM,OAAO,uBAAA,CAAe,IAAA;AAC5B,EAAA,MAAM,cAAc,uBAAA,CAAe,WAAA;AACnC,EAAA,MAAM,MAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC7D,IAAA,IAAI,UAAA,CAAW,UAAA,CAAW,SAAS,CAAA,IAAK,UAAA,CAAW,UAAA,CAAW,SAAS,CAAA,IAAK,UAAA,CAAW,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1G,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,kBAAkB,UAAU,CAAA;AAC5C,IAAA,MAAM,WAAW,SAAA,CAAU,KAAA;AAC3B,IAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,OAAA,IAAW,IAAA,EAAM;AACrD,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,UAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA,EAAOH,gBAAW,QAAQ,CAAA;AAAA,MAC1B,UAAA,EAAY,IAAA,CAAK,UAAU,CAAA,IAAK,UAAA;AAAA,MAChC,iBAAA,EAAmB,WAAA,CAAY,UAAU,CAAA,IAAK;AAAC,KAChD,CAAA;AAAA,EACH;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,uBAAuB,UAAA,EAAoC;AACzE,EAAA,MAAM,GAAA,GAAM,YAAA,EAAa,CAAE,UAAU,CAAA;AACrC,EAAA,MAAM,QAAQ,GAAA,EAAK,KAAA;AACnB,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,EAAA,OAAOA,gBAAW,KAAK,CAAA;AACzB;AAEO,SAAS,8BAA8B,UAAA,EAA+B;AAC3E,EAAA,MAAM,GAAA,GAAM,YAAA,EAAa,CAAE,UAAU,CAAA;AACrC,EAAA,MAAM,KAAA,GAAS,uBAAA,CAAe,WAAA,CAAyC,UAAU,KAAK,EAAC;AACvF,EAAA,MAAM,MAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAI,CAAA;AACxB,IAAA,MAAM,QAAA,GAAW,OAAO,KAAA,KAAU,QAAA,GAAW,QAAQ,KAAA,EAAO,QAAA;AAC5D,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,GAAA,CAAI,IAAA,CAAKA,eAAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,4BAAA,CAA6B,YAAoB,aAAA,EAAgC;AAC/F,EAAA,MAAM,EAAA,GAAK,uBAAuB,UAAU,CAAA;AAC5C,EAAA,IAAI,CAAC,IAAI,OAAO,KAAA;AAChB,EAAA,OAAO,EAAA,KAAOA,gBAAW,aAAa,CAAA;AACxC;;;AClFO,IAAM,4BAAA,GAA+B,GAAA,GAAM,EAAA,GAAK,EAAA,GAAK;AACrD,IAAM,2BAA2B,GAAA,IAAO;AAExC,SAAS,oCAAoC,aAAA,EAA+B;AACjF,EAAA,IAAI,aAAA,IAAiB,IAAI,OAAO,CAAA;AAChC,EAAA,OAAQ,MAAA,CAAO,aAAa,CAAA,GAAI,IAAA,GAAQ,4BAAA;AAC1C;AAEO,SAAS,4BAA4B,UAAA,EAA4B;AACtE,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,UAAU,GAAG,OAAO,QAAA;AACzC,EAAA,MAAM,MAAM,UAAA,GAAa,GAAA;AACzB,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI,MAAO,OAAO,OAAA;AAClC,EAAA,OAAO,CAAA,EAAG,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAC1B;AAEO,SAAS,+BAA+B,WAAA,EAA6B;AAC1E,EAAA,IAAI,WAAA,IAAe,IAAI,OAAO,CAAA;AAC9B,EAAA,OAAO,MAAA,CAAO,WAAW,CAAA,GAAI,IAAA;AAC/B;AAEO,SAAS,0BAA0B,MAAA,EAAwB;AAChE,EAAA,OAAO,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA;AAC1B;AAGO,IAAM,uBAAA,GAA0B;AAEhC,IAAM,gCAAA,GAAmC;AAOzC,SAAS,0CAA0C,IAAA,EAOxC;AAChB,EAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,EAAA,IAAM,IAAA,CAAK,SAAA,IAAa,EAAA,IAAM,IAAA,CAAK,SAAA,IAAa,EAAA,IAAM,IAAA,CAAK,WAAA,IAAe,EAAA,EAAI;AACtG,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,kBAAA,GAAqB,KAAK,IAAA,CAAK,kBAAA,GAAqB,MAAA,CAAO,gCAAgC,CAAC,CAAA;AACtH,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,KAAA,IAAS,GAAG,OAAO,IAAA;AAClD,EAAA,MAAM,aAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,aAAa,IAAI,KAAA,GAAS,4BAAA;AAC7D,EAAA,MAAM,gBAAA,GAAmB,aAAA,IAAiB,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,GAAI,uBAAA,CAAA;AACrE,EAAA,MAAM,QAAA,GAAY,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,GAAI,EAAA,IAAM,IAAA,CAAK,YAAA,IAAiB,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,GAAI,uBAAA,CAAA;AAChG,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,gBAAgB,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA,IAAY,CAAA,EAAG,OAAO,IAAA;AAC9F,EAAA,MAAM,GAAA,GAAO,mBAAmB,QAAA,GAAY,GAAA;AAC5C,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,GAAM,GAAG,OAAO,IAAA;AAC7C,EAAA,OAAO,GAAA;AACT;;;ACpDA,IAAM,6BAAA,GAAkE;AAAA,EACtE,CAAA,EAAG,8CAAA;AAAA,EACH,GAAA,EAAK,8CAAA;AAAA,EACL,KAAA,EAAO,8CAAA;AAAA,EACP,IAAA,EAAM,8CAAA;AAAA,EACN,EAAA,EAAI;AACN,CAAA;AAOO,SAAS,6BAA6B,OAAA,EAAgC;AAC3E,EAAA,OAAO,6BAAA,CAA8B,OAAO,CAAA,IAAK,IAAA;AACnD;AAEA,eAAsB,+BAA+B,IAAA,EAGF;AACjD,EAAA,MAAM,EAAA,GAAK,4BAAA,CAA6B,IAAA,CAAK,OAAO,CAAA;AACpD,EAAA,MAAM,UAAU,IAAA,CAAK,MAAA,IAAU,QAAQ,GAAA,CAAI,iBAAA,IAAqB,IAAI,IAAA,EAAK;AACzE,EAAA,IAAI,CAAC,EAAA,IAAM,CAAC,MAAA,EAAQ,OAAO,IAAA;AAC3B,EAAA,MAAM,GAAA,GAAM,CAAA,iCAAA,EAAoC,MAAM,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAA;AACzE,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,KAAA,EAAO,CAAA,qDAAA;AAAA,OACR;AAAA,KACF,CAAA;AACD,IAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,OAAO,IAAA;AACpB,IAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAC7B,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAM,OAAA;AAC3B,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,KAAA,EAAO,CAAA,CAAE,EAAA,EAAG,CAAE,CAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AC5BO,SAAS,gBAAA,CAAiB,QAAgB,IAAA,EAA8C;AAC7F,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,EAAK;AACxB,EAAA,OAAwCI,SAAA,CAAK,KAAK,IAAI,CAAA;AACxD;;;ACqCA,SAAS,YAAA,CAAa,QAAgB,OAAA,EAA+B;AACnE,EAAA,MAAM,QAAQC,gBAAA,CAAY;AAAA,IACxB,EAAA,EAAI,OAAA;AAAA,IACJ,IAAA,EAAM,aAAA;AAAA,IACN,gBAAgB,EAAE,QAAA,EAAU,IAAI,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,EAAM;AAAA,IAC7D,OAAA,EAAS,EAAE,OAAA,EAAS,EAAE,MAAM,CAAC,MAAM,GAAE;AAAE,GACxC,CAAA;AACD,EAAA,OAAOC,wBAAmB,EAAE,KAAA,EAAO,WAAW,gBAAA,CAAiB,MAAM,GAAG,CAAA;AAC1E;AAEA,eAAe,aAAA,CACb,QACA,KAAA,EAC+C;AAC/C,EAAA,MAAM,CAAC,MAAA,EAAQ,QAAQ,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IAC3C,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,YAAA,EAAc,YAAA,EAAc,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,IACtG,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,YAAA,EAAc,YAAA,EAAc,UAAA,EAAY,CAAA,CAAE,KAAA,CAAM,MAAM,EAAE;AAAA,GACpG,CAAA;AACD,EAAA,OAAO,EAAE,QAAQ,MAAA,CAAO,MAAM,GAAG,QAAA,EAAU,MAAA,CAAO,QAAQ,CAAA,EAAE;AAC9D;AAEA,eAAe,mBAAA,CACb,QACA,MAAA,EACkC;AAClC,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,MAAM,CAAC,WAAW,WAAA,EAAa,SAAA,EAAW,QAAQ,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IACtE,MAAA,CAAO,aAAa,EAAE,OAAA,EAAS,OAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,WAAA,EAAa,CAAA;AAAA,IACzF,MAAA,CAAO,aAAa,EAAE,OAAA,EAAS,OAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,gBAAA,EAAkB,CAAA;AAAA,IAC9F,MAAA,CAAO,aAAa,EAAE,OAAA,EAAS,OAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,WAAA,EAAa,CAAA;AAAA,IACzF,MAAA,CAAO,aAAa,EAAE,OAAA,EAAS,OAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,UAAA,EAAY;AAAA,GACzF,CAAA;AACD,EAAA,MAAM,CAAC,UAAA,EAAY,UAAA,EAAY,QAAA,EAAU,QAAA,EAAU,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,WAAA,EAAa,aAAa,CAAA,GAClH,MAAM,QAAQ,GAAA,CAAI;AAAA,IAChB,OAAO,YAAA,CAAa;AAAA,MAClB,OAAA,EAAS,KAAA;AAAA,MACT,GAAA,EAAK,iBAAA;AAAA,MACL,YAAA,EAAc,eAAA;AAAA,MACd,IAAA,EAAM,CAAC,WAAW;AAAA,KACnB,CAAA;AAAA,IACD,OAAO,YAAA,CAAa;AAAA,MAClB,OAAA,EAAS,KAAA;AAAA,MACT,GAAA,EAAK,iBAAA;AAAA,MACL,YAAA,EAAc,eAAA;AAAA,MACd,IAAA,EAAM,CAAC,WAAW;AAAA,KACnB,CAAA;AAAA,IACD,aAAA,CAAc,MAAA,EAAQN,eAAAA,CAAW,SAAS,CAAC,CAAA;AAAA,IAC3C,MAAA,CAAO,aAAa,EAAE,OAAA,EAAS,OAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,oBAAA,EAAsB,CAAA;AAAA,IAClG,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,yBAAA,EAA2B,CAAA,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAAA,IACvH,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,yBAAA,EAA2B,CAAA,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAAA,IACvH,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,aAAA,EAAe,CAAA,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAAA,IAC3G,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,aAAA,EAAe,CAAA,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAAA,IAC3G,MAAA,CACG,YAAA,CAAa,EAAE,OAAA,EAAS,OAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,oBAAA,EAAsB,CAAA,CAC3F,KAAA,CAAM,MAAM,MAAA,CAAO,gCAAgC,CAAC;AAAA,GACxD,CAAA;AACH,EAAA,MAAM,YAAY,MAAM,MAAA,CACrB,aAAa,EAAE,OAAA,EAAS,OAAO,GAAA,EAAK,iBAAA,EAAmB,cAAc,UAAA,EAAY,IAAA,EAAM,CAAC,QAAQ,CAAA,EAAG,CAAA,CACnG,KAAA,CAAM,MAAM,EAAE,CAAA;AAEjB,EAAA,MAAM,MAAA,GAAmC;AAAA,IACvC;AAAA,MACE,KAAA,EAAOA,gBAAW,SAAS,CAAA;AAAA,MAC3B,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,QAAA,EAAU,MAAA,CAAO,QAAQ,CAAA,IAAK,QAAA,CAAS,QAAA;AAAA,MACvC,6BAAA,EAA+B,CAAA;AAAA,MAC/B,gCAAA,EAAkC,CAAA;AAAA,MAClC,QAAA,EAAU,UAAU,QAAA,EAAS;AAAA,MAC7B,IAAA,EAAM;AAAA;AACR,GACF;AAEA,EAAA,MAAM,CAAA,GAAI,OAAO,SAAS,CAAA;AAC1B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACrC,OAAA,EAAS,KAAA;AAAA,MACT,GAAA,EAAK,iBAAA;AAAA,MACL,YAAA,EAAc,cAAA;AAAA,MACd,IAAA,EAAM,CAAC,CAAC;AAAA,KACT,CAAA;AACD,IAAA,MAAM,KAAA,GAAQA,eAAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AACnC,IAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,MAAA,EAAQ,KAAK,CAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CACjB,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAO,KAAK,iBAAA,EAAmB,YAAA,EAAc,YAAY,IAAA,EAAM,CAAC,KAAK,SAAS,CAAA,EAAG,CAAA,CACzG,KAAA,CAAM,MAAM,EAAE,CAAA;AACjB,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,KAAA;AAAA,MACP,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,6BAAA,EAA+B,yBAAA,CAA0B,IAAA,CAAK,sBAAsB,CAAA;AAAA,MACpF,gCAAA,EAAkC,yBAAA,CAA0B,IAAA,CAAK,yBAAyB,CAAA;AAAA,MAC1F,QAAA,EAAU,MAAM,QAAA,EAAS;AAAA,MACzB,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,WAAA,GAAc,EAAA;AAClB,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACpC,OAAA,EAASA,eAAAA,CAAW,MAAA,CAAO,OAAO,CAAA;AAAA,MAClC,GAAA,EAAK,eAAA;AAAA,MACL,YAAA,EAAc,cAAA;AAAA,MACd,IAAA,EAAM,CAAC,KAAK;AAAA,KACb,CAAA;AACD,IAAA,MAAM,WAAA,GAAcA,eAAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AACxC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,WAAA,EAAY,KAAM,WAAA,CAAY,WAAA,EAAa,CAAA;AACrF,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,GAAA,EAAK;AACrC,MAAA,WAAA,GAAc,MAAA,CAAO,OAAO,QAAQ,CAAA;AAAA,IACtC,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,QACrC,OAAA,EAAS,KAAA;AAAA,QACT,GAAA,EAAK,iBAAA;AAAA,QACL,YAAA,EAAc,uBAAA;AAAA,QACd,IAAA,EAAM,CAAC,WAAW;AAAA,OACnB,CAAA;AACD,MAAA,WAAA,GAAc,MAAM,MAAA,CACjB,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAO,KAAK,iBAAA,EAAmB,YAAA,EAAc,YAAY,IAAA,EAAM,CAAC,KAAK,SAAS,CAAA,EAAG,CAAA,CACzG,KAAA,CAAM,MAAM,EAAE,CAAA;AAAA,IACnB;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,WAAA,GAAc,EAAA;AAAA,EAChB;AAEA,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,QAAQ,CAAA,IAAK,QAAA,CAAS,QAAA;AAClD,EAAA,MAAM,kBAAkB,yCAAA,CAA0C;AAAA,IAChE,aAAA,EAAe,WAAA;AAAA,IACf,kBAAA,EAAoB,aAAA;AAAA,IACpB,SAAA,EAAW,WAAA;AAAA,IACX,YAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAM,kBAAkB,yCAAA,CAA0C;AAAA,IAChE,aAAA,EAAe,WAAA;AAAA,IACf,kBAAA,EAAoB,aAAA;AAAA,IACpB,SAAA,EAAW,WAAA;AAAA,IACX,YAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAA,EAAWA,gBAAW,SAAS,CAAA;AAAA,IAC/B,WAAA,EAAa,+BAA+B,WAAW,CAAA;AAAA,IACvD,gBAAA,EAAkB,2BAAA,CAA4B,mCAAA,CAAoC,UAAU,CAAC,CAAA;AAAA,IAC7F,gBAAA,EAAkB,2BAAA,CAA4B,mCAAA,CAAoC,UAAU,CAAC,CAAA;AAAA,IAC7F,wBAAwB,eAAA,IAAmB,IAAA,GAAO,IAAA,GAAO,2BAAA,CAA4B,kBAAkB,GAAG,CAAA;AAAA,IAC1G,wBAAwB,eAAA,IAAmB,IAAA,GAAO,IAAA,GAAO,2BAAA,CAA4B,kBAAkB,GAAG,CAAA;AAAA,IAC1G;AAAA,GACF;AACF;AAEA,SAAS,kBAAkB,MAAA,EAAyD;AAClF,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAA,EAAW,OAAO,SAAA,IAAa,IAAA;AAAA,IAC/B,WAAA,EAAa,IAAA;AAAA,IACb,gBAAA,EAAkB,IAAA;AAAA,IAClB,gBAAA,EAAkB,IAAA;AAAA,IAClB,sBAAA,EAAwB,IAAA;AAAA,IACxB,sBAAA,EAAwB,IAAA;AAAA,IACxB,MAAA,EAAQ,OAAO,SAAA,GACX;AAAA,MACE;AAAA,QACE,OAAO,MAAA,CAAO,SAAA;AAAA,QACd,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,WAAA,EAAY;AAAA,QAChC,QAAA,EAAU,EAAA;AAAA,QACV,6BAAA,EAA+B,CAAA;AAAA,QAC/B,gCAAA,EAAkC,CAAA;AAAA,QAClC,QAAA,EAAU,GAAA;AAAA,QACV,IAAA,EAAM;AAAA;AACR,QAEF;AAAC,GACP;AACF;AAEA,eAAsB,8BAA8B,IAAA,EAGe;AACjE,EAAA,IAAI,CAAC,0BAAA,CAA2B,IAAA,CAAK,OAAO,CAAA,EAAG;AAC7C,IAAA,OAAO,EAAE,SAAS,EAAC,EAAG,OAAO,CAAA,sCAAA,EAAyC,IAAA,CAAK,OAAO,CAAA,CAAA,CAAA,EAAI;AAAA,EACxF;AACA,EAAA,MAAM,QAAA,GAAW,6BAAA,CAA8B,IAAA,CAAK,OAAO,CAAA;AAC3D,EAAA,IAAI,YAAA,GAAe,EAAA;AACnB,EAAA,MAAM,WAAW,MAAM,8BAAA,CAA+B,EAAE,OAAA,EAAS,IAAA,CAAK,SAAS,CAAA;AAC/E,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,YAAA,GAAe,CAAA,iBAAA,EAAoB,SAAS,MAAM,CAAA,iEAAA,CAAA;AAAA,EACpD;AACA,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,QAAA,CAAS,GAAA,CAAI,iBAAiB,CAAA;AAAA,MACvC,OACE,6HAAA,GACA;AAAA,KACJ;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,MAAM,UAAqC,EAAC;AAC5C,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,mBAAA,CAAoB,MAAA,EAAQ,GAAG,CAAC,CAAA;AAAA,IACrD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,IAAA,CAAK,iBAAA,CAAkB,GAAG,CAAC,CAAA;AAAA,IACrC;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,OACE,0NAAA,GACA;AAAA,GACJ;AACF;AAEA,eAAsB,6BAA6B,IAAA,EAId;AACnC,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,sGAAsG,CAAA;AAAA,EACxH;AACA,EAAA,MAAM,MAAA,GAAS,0BAAA,CAA2B,IAAA,CAAK,OAAA,EAAS,KAAK,KAAK,CAAA;AAClE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,CAAA,2BAAA,EAA8B,IAAA,CAAK,KAAK,CAAA,UAAA,EAAa,IAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACtF;AACA,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,OAAO,mBAAA,CAAoB,QAAQ,MAAM,CAAA;AAC3C;AAEA,eAAsB,8BAA8B,IAAA,EAKd;AACpC,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,0BAAA,CAA2B,IAAA,CAAK,OAAA,EAAS,KAAK,KAAK,CAAA;AAClE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,CAAA,2BAAA,EAA8B,IAAA,CAAK,KAAK,CAAA,UAAA,EAAa,IAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACtF;AACA,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,MAAM,OAAA,GAAUA,eAAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AACvC,EAAA,MAAM,CAAC,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,cAAA,EAAgB,YAAY,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI;AAAA,IAC3G,MAAA,CAAO,aAAa,EAAE,OAAA,EAAS,OAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,WAAA,EAAa,CAAA;AAAA,IACzF,MAAA,CAAO,aAAa,EAAE,OAAA,EAAS,OAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,UAAA,EAAY,CAAA;AAAA,IACxF,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,WAAA,EAAa,IAAA,EAAM,CAAC,OAAO,GAAG,CAAA;AAAA,IAC1G,OAAO,YAAA,CAAa;AAAA,MAClB,OAAA,EAAS,KAAA;AAAA,MACT,GAAA,EAAK,iBAAA;AAAA,MACL,YAAA,EAAc,iBAAA;AAAA,MACd,IAAA,EAAM,CAAC,OAAO;AAAA,KACf,CAAA;AAAA,IACD,MAAA,CAAO,aAAa,EAAE,OAAA,EAAS,OAAO,GAAA,EAAK,iBAAA,EAAmB,YAAA,EAAc,WAAA,EAAa,CAAA;AAAA,IACzF,OAAO,YAAA,CAAa;AAAA,MAClB,OAAA,EAAS,KAAA;AAAA,MACT,GAAA,EAAK,iBAAA;AAAA,MACL,YAAA,EAAc,wBAAA;AAAA,MACd,IAAA,EAAM,CAAC,OAAO;AAAA,KACf,CAAA;AAAA,IACD,OAAO,YAAA,CAAa;AAAA,MAClB,OAAA,EAAS,KAAA;AAAA,MACT,GAAA,EAAK,iBAAA;AAAA,MACL,YAAA,EAAc,gBAAA;AAAA,MACd,IAAA,EAAM,CAAC,OAAO;AAAA,KACf;AAAA,GACF,CAAA;AACD,EAAA,MAAM,WAAW,MAAM,aAAA,CAAc,MAAA,EAAQA,eAAAA,CAAW,SAAS,CAAC,CAAA;AAClE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,QAAQ,CAAA,IAAK,QAAA,CAAS,QAAA;AACzC,EAAA,MAAM,cAAuD,EAAC;AAC9D,EAAA,MAAM,CAAA,GAAI,OAAO,SAAS,CAAA;AAC1B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACrC,OAAA,EAAS,KAAA;AAAA,MACT,GAAA,EAAK,iBAAA;AAAA,MACL,YAAA,EAAc,cAAA;AAAA,MACd,IAAA,EAAM,CAAC,CAAC;AAAA,KACT,CAAA;AACD,IAAA,MAAM,KAAA,GAAQA,eAAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AACnC,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACpC,OAAA,EAAS,KAAA;AAAA,MACT,GAAA,EAAK,iBAAA;AAAA,MACL,YAAA,EAAc,qBAAA;AAAA,MACd,IAAA,EAAM,CAAC,OAAA,EAAS,KAAK;AAAA,KACtB,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,MAAA,EAAQ,KAAK,CAAA;AAC9C,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,KAAA,EAAO,KAAA;AAAA,MACP,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,OAAA,EAASO,gBAAA,CAAY,GAAA,EAAK,IAAA,CAAK,QAAQ;AAAA,KACxC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,WAAA,GAA6B,IAAA;AACjC,EAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACrC,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,GAAA,EAAK,eAAA;AAAA,MACL,YAAA,EAAc,eAAA;AAAA,MACd,IAAA,EAAM,CAAC,KAAA,EAAO,OAAO;AAAA,KACtB,CAAA;AACD,IAAA,WAAA,GAAcP,eAAAA,CAAW,KAAK,KAAK,CAAA;AACnC,IAAA,MAAM,aAAa,MAAM,aAAA,CAAc,QAAQA,eAAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA;AACrE,IAAA,UAAA,GAAaO,gBAAA,CAAY,IAAA,CAAK,IAAA,EAAM,UAAA,CAAW,QAAQ,CAAA;AAAA,EACzD,CAAA,CAAA,MAAQ;AACN,IAAA,WAAA,GAAc,IAAA;AACd,IAAA,UAAA,GAAa,IAAA;AAAA,EACf;AAEA,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,YAAA,EAAcA,gBAAA,CAAY,QAAA,EAAU,GAAG,CAAA;AAAA,IACvC,YAAA,EAAcA,gBAAA,CAAY,QAAA,EAAU,GAAG,CAAA;AAAA,IACvC,WAAA;AAAA,IACA,sBAAA,EAAwB,QAAQ,cAAc,CAAA;AAAA,IAC9C,cAAA,EAAgB,QAAQ,YAAY,CAAA;AAAA,IACpC,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAOA,IAAM,eAAA,uBAAsB,GAAA,EAA+C;AAEpE,SAAS,6BAA6B,IAAA,EAGlC;AACT,EAAA,IAAI,oBAAA,CAAqB,IAAA,CAAK,eAAe,CAAA,EAAG;AAC9C,IAAA,MAAM,OAAA,GAAU,uBAAA,CAAwB,IAAA,CAAK,OAAO,CAAA;AACpD,IAAA,OAAA,CAAQ,OAAA,IAAWN,kBAAa,WAAA,EAAY;AAAA,EAC9C;AACA,EAAA,OAAOD,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA,CAAE,WAAA,EAAY;AACtD;AAEA,eAAsB,gCAAgC,IAAA,EAGP;AAC7C,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AACjD,EAAA,IAAI,YAAY,QAAA,CAAS,IAAA,GAAO,KAAK,CAAC,IAAA,CAAK,QAAQ,OAAO,QAAA;AAE1D,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAkC;AAClD,EAAA,MAAM,GAAA,GAAM,CAAC,OAAA,EAAiB,IAAA,KAAqC;AACjE,IAAA,MAAM,GAAA,GAAMA,eAAAA,CAAW,OAAO,CAAA,CAAE,WAAA,EAAY;AAC5C,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,GAAG,KAAK,EAAE,IAAA,EAAM,KAAA,EAAO,UAAA,EAAY,KAAA,EAAM;AAC7D,IAAA,GAAA,CAAI,IAAI,CAAA,GAAI,IAAA;AACZ,IAAA,GAAA,CAAI,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAM,6BAAA,CAA8B,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AACtG,MAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,QAAA,KAAA,MAAW,CAAA,IAAK,CAAA,CAAE,MAAA,EAAQ,GAAA,CAAI,CAAA,CAAE,OAAO,CAAA,CAAE,IAAA,KAAS,MAAA,GAAS,MAAA,GAAS,YAAY,CAAA;AAAA,MAClF;AACA,MAAA,eAAA,CAAgB,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AACrC,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAA,IAAK,6BAAA,CAA8B,IAAA,CAAK,OAAO,CAAA,EAAG;AAC3D,IAAA,IAAI,CAAA,CAAE,SAAA,EAAW,GAAA,CAAI,CAAA,CAAE,WAAW,MAAM,CAAA;AAAA,EAC1C;AACA,EAAA,eAAA,CAAgB,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AACrC,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,gCAAA,CACd,SACA,eAAA,EAC6B;AAC7B,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA;AACzC,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,GAAA,GAAM,4BAAA,CAA6B,EAAE,eAAA,EAAiB,SAAS,CAAA;AACrE,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA;AAC3B;AAEO,SAAS,8BAA8B,IAAA,EAGjB;AAC3B,EAAA,MAAM,GAAA,GAAM,6BAA6B,EAAE,eAAA,EAAiB,KAAK,eAAA,EAAiB,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,CAAA;AACzG,EAAA,OAAO,8BAA8B,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM;AAC/D,IAAA,IAAI,EAAE,SAAA,IAAa,CAAA,CAAE,UAAU,WAAA,EAAY,KAAM,KAAK,OAAO,IAAA;AAC7D,IAAA,MAAM,QAAQ,eAAA,CAAgB,GAAA,CAAI,KAAK,OAAO,CAAA,EAAG,IAAI,GAAG,CAAA;AACxD,IAAA,OAAO,OAAA,CAAQ,KAAA,EAAO,IAAA,IAAQ,KAAA,EAAO,UAAU,CAAA;AAAA,EACjD,CAAC,CAAA;AACH;;;ACrdO,SAAS,gBAAA,CAAiB,aAAiC,aAAA,EAAgC;AAChG,EAAA,MAAM,CAAA,GAAA,CAAK,WAAA,IAAe,EAAA,EAAI,IAAA,EAAK;AACnC,EAAA,MAAM,MAAA,GAAA,CAAU,aAAA,IAAiB,EAAA,EAAI,IAAA,EAAK;AAC1C,EAAA,IAAI,CAAC,QAAQ,OAAO,CAAA;AACpB,EAAA,OAAO,CAAA,GAAI,GAAG,CAAC;;AAAA,EAAO,MAAM,CAAA,CAAA,GAAK,MAAA;AACnC;;;ACgCO,SAAS,kBAAkB,KAAA,EAAsD;AACtF,EAAA,MAAM,EAAE,MAAA,EAAQ,kBAAA,EAAoB,IAAA,EAAK,GAAI,KAAA;AAC7C,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EAC/D;AAEA,EAAA,MAAM,EAAA,GAAA,CAAM,MAAA,CAAO,SAAA,IAAa,EAAA,EAAI,IAAA,EAAK;AACzC,EAAA,IAAI,CAAC,EAAA,EAAI,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAEhE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AACnC,EAAA,MAAM,QAAA,GAAWQ,6CAA4B,MAAM,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AAEpB,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAC/C,EAAA,MAAM,kBAAkB,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAChD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACjC,oBAAoB,CAAA,CAAE,kBAAA;AAAA,IACtB,eAAe,CAAA,CAAE,aAAA;AAAA,IACjB,GAAG,CAAA,CAAE;AAAA,GACP,CAAE,CAAA;AAEF,EAAA,MAAM,gBAAA,GAAmB,IAAA,CACtB,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,gBAAgB,CAAA,CAC7B,MAAA,CAAO,CAAC,CAAA,KAAoC,CAAA,IAAK,IAAA,IAAQ,OAAO,MAAM,QAAQ,CAAA;AAEjF,EAAA,MAAM,YAAA,GAAwC;AAAA,IAC5C,SAAA;AAAA,IACA,GAAI,KAAA,CAAM,SAAA,IAAa;AAAC,GAC1B;AACA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,YAAA,EAAc,CAAC,CAAA,EAAG,CAAA,KAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,CAAE,QAAA,KAAa,CAAE,CAAA;AAEnG,EAAA,MAAM,WAAA,GAAuC;AAAA,IAC3C,OAAA;AAAA,IACA,MAAA,EAAQ,EAAA;AAAA,IACR,OAAA,EAAS,cAAc,CAAC,CAAA;AAAA,IACxB,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,kBAAA;AAAA,IACA,kBAAA,EAAoB,KAAA,CAAM,kBAAA,IAAsB,KAAA,CAAM,kBAAA;AAAA,IACtD,SAAA;AAAA,IACA,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,OAAA,EAAS,gBAAA,CAAiB,KAAA,CAAM,WAAA,EAAa,MAAM,aAAa,CAAA;AAAA,IAChE,GAAG,KAAA,CAAM;AAAA,GACX;AAEA,EAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,IAAA,WAAA,CAAY,aAAA,GAAgB,aAAA;AAC5B,IAAA,WAAA,CAAY,eAAA,GAAkB,eAAA;AAAA,EAChC;AAEA,EAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,IAAA,WAAA,CAAY,gBAAA,GAAmB,gBAAA;AAAA,EACjC;AAEA,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,IAAI,QAAA,IAAY,IAAA,IAAQ,QAAA,GAAW,EAAA,EAAI;AACrC,IAAA,WAAA,CAAY,KAAA,GAAQ,SAAS,QAAA,EAAS;AAAA,EACxC;AAEA,EAAA,IAAI,QAAA,cAAsB,QAAA,GAAW,QAAA;AAErC,EAAA,IAAI,KAAA,CAAM,UAAA,IAAc,IAAA,IAAQ,KAAA,CAAM,aAAa,CAAA,EAAG;AACpD,IAAA,WAAA,CAAY,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,UAAU,CAAA;AAAA,EACtD;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,aAAA,EAAe,IAAA,CAAK,SAAA,CAAU,WAAW,CAAA,EAAE;AACnE;ACpGO,SAAS,8BAAA,CACd,cACA,aAAA,EACQ;AACR,EAAA,IAAI,iBAAiB,IAAA,IAAQ,MAAA,CAAO,SAAS,aAAa,CAAA,IAAK,gBAAgB,CAAA,EAAG;AAChF,IAAA,OAAOC,mDAAA,CAAmC,cAAc,aAAa,CAAA;AAAA,EACvE;AACA,EAAA,OAAA,CAAQ,YAAA,GAAe,MAAM,EAAA,IAAM,GAAA;AACrC;;;ACuCA,eAAsB,uBAAuB,IAAA,EAAwD;AACnG,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,IAAA;AAC3B,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,MAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,qBAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAE3F,EAAA,MAAM,KAAKJ,gBAAAA,CAAY;AAAA,IACrB,EAAA,EAAI,OAAA;AAAA,IACJ,IAAA,EAAM,aAAA;AAAA,IACN,gBAAgB,EAAE,QAAA,EAAU,IAAI,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,EAAM;AAAA,IAC7D,OAAA,EAAS,EAAE,OAAA,EAAS,EAAE,MAAM,CAAC,MAAM,GAAE;AAAE,GACxC,CAAA;AACD,EAAA,MAAMK,aAAAA,GAAeJ,wBAAmB,EAAE,KAAA,EAAO,IAAI,SAAA,EAAW,gBAAA,CAAiB,MAAM,CAAA,EAAG,CAAA;AAE1F,EAAA,MAAM,SAAA,GAAY,MAAMK,oCAAA,CAAoB,MAAA,EAAQ,OAAO,CAAA;AAC3D,EAAA,MAAM,SAAS,OAAA,CAAQ,WAAA,EAAa,MAAM,CAAA,IAAK,CAAC,SAAA,CAAU,SAAA;AAC1D,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,GAAA,CACpB,MAAMD,aAAAA,CAAa,QAAA,CAAS,EAAE,QAAA,EAAU,QAAA,EAAU,CAAA,EAAG,aAAA,IAAiB,EAAA,GACxE,EAAA;AAEJ,EAAA,MAAM,cAAA,GACJ,gBAAgB,WAAA,EAAa,QAAA,IAAY,OAAO,MAAA,CAAO,WAAA,CAAY,QAAQ,CAAA,GAAI,MAAA;AACjF,EAAA,MAAM,sBACJ,WAAA,EAAa,QAAA,IAAY,QACzB,MAAA,CAAO,QAAA,CAAS,OAAO,WAAA,CAAY,QAAQ,CAAC,CAAA,IAC5C,MAAA,CAAO,YAAY,QAAQ,CAAA,GAAI,IAC3B,MAAA,CAAO,WAAA,CAAY,QAAQ,CAAA,GAC3B,MAAA;AACN,EAAA,MAAM,gBAAA,GACJ,gBAAgB,WAAA,EAAa,aAAA,IAAiB,OAAO,MAAA,CAAO,WAAA,CAAY,aAAa,CAAA,GAAI,MAAA;AAE3F,EAAA,MAAM,QAAA,GAAWV,gBAAW,eAAe,CAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,MAAMU,aAAAA,CAAa,mBAAA,CAAoB,EAAE,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,CAAA;AAEnG,EAAA,MAAM,OAAuB,EAAC;AAE9B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAM,eAAe,SAAA,GAAY,CAAA;AAEjC,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,MAAA,YAAA,GAAe,MAAM,IAAA,CAAK,kBAAA,CAAmB,EAAE,IAAA,EAAM,OAAO,CAAA,EAAG,YAAA,EAAAA,aAAAA,EAAc,QAAA,EAAU,CAAA;AAAA,IACzF,CAAA,MAAO;AACL,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAMA,cAAa,WAAA,CAAY;AAAA,UAC5C,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH,CAAA,CAAA,MAAQ;AACN,QAAA,YAAA,GAAe,KAAK,WAAA,IAAe,OAAA;AAAA,MACrC;AAAA,IACF;AAEA,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,SAAA,GAAY,MAAM,IAAA,CAAK,eAAA,CAAgB,EAAE,IAAA,EAAM,OAAO,CAAA,EAAG,YAAA,EAAc,YAAA,EAAAA,aAAAA,EAAc,CAAA;AAAA,IACvF,CAAA,MAAA,IAAW,KAAK,UAAA,EAAY;AAC1B,MAAA,SAAA,GAAY,8BAAA,CAA+B,cAAc,mBAAmB,CAAA;AAAA,IAC9E,CAAA,MAAO;AACL,MAAA,SAAA,GAAY,YAAA,GACRD,mDAAAA,CAAmC,YAAA,EAAc,cAAc,CAAA,GAC/D,YAAA;AAAA,IACN;AAEA,IAAA,IAAI,gBAAA;AACJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,UAAA;AAEJ,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAI,WAAA,GAAc,MAAMC,aAAAA,CAAa,WAAA,EAAY;AACjD,MAAA,IAAI,YAAA,IAAgB,gBAAA,IAAoB,IAAA,IAAQ,gBAAA,GAAmB,CAAA,EAAG;AACpE,QAAA,WAAA,GAAe,WAAA,GAAc,MAAA,CAAO,GAAA,GAAM,gBAAgB,CAAA,GAAK,IAAA;AAAA,MACjE;AACA,MAAA,IAAI,gBAAgB,WAAA,EAAa,QAAA,IAAY,IAAA,IAAQ,WAAA,CAAY,WAAW,CAAA,EAAG;AAC7E,QAAA,MAAM,aAAaE,cAAA,CAAUC,oCAAA,CAAoB,OAAO,WAAA,CAAY,QAAQ,CAAC,CAAC,CAAA;AAC9E,QAAA,IAAI,UAAA,GAAa,aAAa,WAAA,GAAc,UAAA;AAAA,MAC9C;AACA,MAAA,UAAA,GAAaC,yBAAA,CAAqB;AAAA,QAChC,IAAA,EAAM,QAAA;AAAA,QACN,IAAI,IAAA,CAAK,EAAA;AAAA,QACT,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,GAAA,EAAK,SAAA;AAAA,QACL,QAAA,EAAU,WAAA;AAAA,QACV,KAAA,EAAO,YAAA;AAAA,QACP;AAAA,OACD,CAAA;AACD,MAAA,gBAAA,GAAmB;AAAA,QACjB,KAAA,EAAO,YAAA;AAAA,QACP,QAAA,EAAU,UAAU,QAAA,EAAS;AAAA,QAC7B,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU,YAAY,QAAA;AAAS,OACjC;AACA,MAAA,WAAA,GAAcC,+CAA8B,gBAAgB,CAAA;AAAA,IAC9D,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,UAAU,WAAA,IAAe,CAAA;AAC7C,MAAA,MAAM,eAAA,GAAkB,UAAU,eAAA,IAAmB,CAAA;AACrD,MAAA,MAAM,cAAA,GACJ,gBAAgB,WAAA,EAAa,OAAA,IAAW,OAAO,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA,GAAI,CAAA;AAC/E,MAAA,MAAM,kBAAA,GACJ,gBAAgB,WAAA,EAAa,WAAA,IAAe,OAAO,MAAA,CAAO,WAAA,CAAY,WAAW,CAAA,GAAI,CAAA;AACvF,MAAA,MAAM,oBAAA,GAAuB,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,cAAc,CAAA;AACjE,MAAA,MAAM,wBAAA,GAA2B,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,kBAAkB,CAAA;AAC7E,MAAA,MAAM,oBAAA,GACJ,YAAA,IAAgB,WAAA,EAAa,iBAAA,IAAqB,IAAA,GAC9C,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,WAAA,CAAY,iBAAiB,CAAC,CAAA,GACnD,GAAA;AACN,MAAA,MAAM,iBAAA,GAAqB,uBAAuB,oBAAA,GAAwB,GAAA;AAC1E,MAAA,MAAM,mBAAmB,iBAAA,GAAoB,wBAAA;AAC7C,MAAA,IAAI,oBAAA,GACF,2BAA2B,CAAA,GACvBH,cAAA,CAAUC,qCAAoB,wBAAwB,CAAC,CAAA,GACvDD,cAAA,CAAU,GAAG,CAAA;AACnB,MAAA,IAAI,YAAA,GAAeA,cAAA,CAAUC,oCAAA,CAAoB,gBAAgB,CAAC,CAAA;AAClE,MAAA,IAAI,YAAA,IAAgB,gBAAA,IAAoB,IAAA,IAAQ,gBAAA,GAAmB,CAAA,EAAG;AACpE,QAAA,oBAAA,GAAwB,oBAAA,GAAuB,MAAA,CAAO,GAAA,GAAM,gBAAgB,CAAA,GAAK,IAAA;AACjF,QAAA,YAAA,GAAgB,YAAA,GAAe,MAAA,CAAO,GAAA,GAAM,gBAAgB,CAAA,GAAK,IAAA;AAAA,MACnE;AACC,MAAA,CAAC,EAAE,YAAA,EAAc,oBAAA,EAAqB,GAAIG,+CAAA;AAAA,QACzC,YAAA;AAAA,QACA,oBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,UAAA,GAAaF,yBAAA,CAAqB;AAAA,QAChC,IAAA,EAAM,SAAA;AAAA,QACN,IAAI,IAAA,CAAK,EAAA;AAAA,QACT,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,GAAA,EAAK,SAAA;AAAA,QACL,YAAA;AAAA,QACA,oBAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP;AAAA,OACD,CAAA;AACD,MAAA,gBAAA,GAAmB;AAAA,QACjB,KAAA,EAAO,YAAA;AAAA,QACP,QAAA,EAAU,UAAU,QAAA,EAAS;AAAA,QAC7B,MAAA,EAAQ,SAAA;AAAA,QACR,YAAA,EAAc,aAAa,QAAA,EAAS;AAAA,QACpC,oBAAA,EAAsB,qBAAqB,QAAA;AAAS,OACtD;AACA,MAAA,WAAA,GAAc,CAAA,KAAM,CAAA,GAAIC,8CAAA,CAA8B,gBAAgB,IAAI,EAAC;AAAA,IAC7E;AAEA,IAAA,MAAM,CAAA,GAAIE,eAAU,UAAU,CAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,EAAE,UAAA,CAAW,IAAI,IAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AAElD,IAAA,MAAM,cAAA,GAAiB,KAAK,cAAA,CAAe,EAAE,MAAM,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,SAAA,EAAW,CAAA;AAElF,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,OAAA;AAAA,MACA,QAAQ,CAAA,KAAM,CAAA,IAAK,KAAK,eAAA,IAAmB,IAAA,GAAO,KAAK,eAAA,GAAkB,UAAA;AAAA,MACzE,oBAAoB,IAAA,CAAK,EAAA;AAAA,MACzB,aAAA,EACE,OAAO,cAAA,CAAe,aAAA,KAAkB,QAAA,GACpC,cAAA,CAAe,aAAA,GACf,IAAA,CAAK,SAAA,CAAU,cAAA,CAAe,aAAA,IAAiB,EAAE,CAAA;AAAA,MACvD,KAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAa,CAAA,KAAM,CAAA,GAAI,WAAA,GAAc,EAAC;AAAA,MACtC,gBAAA;AAAA,MACA,QAAA,EAAU,CAAA,KAAM,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ;AAAA,KAClC,CAAA;AAED,IAAA,IAAI,CAAA,KAAM,CAAA,IAAK,IAAA,CAAK,eAAA,IAAmB,IAAA,EAAM;AAC3C,MAAA,IAAA,CAAK,CAAC,CAAA,CAAG,MAAA,GAAS,IAAA,CAAK,eAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,MAAM,YAAqC,EAAC;AAC5C,EAAA,IAAI,gBAAgB,qBAAA,IAAyB,MAAA,CAAO,KAAK,qBAAqB,CAAA,CAAE,SAAS,CAAA,EAAG;AAC1F,IAAA,SAAA,CAAU,qBAAA,GAAwB,qBAAA;AAAA,EACpC;AAEA,EAAA,MAAM,SAAS,iBAAA,CAAkB;AAAA,IAC/B,MAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,kBAAA,EAAoB,OAAO,OAAO,CAAA;AAAA,IAClC,kBAAA,EAAoB,IAAA,CAAK,kBAAA,IAAsB,KAAA,CAAM,CAAC,CAAA,CAAG,EAAA;AAAA,IACzD,IAAA;AAAA,IACA,WAAW,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,GAAS,IAAI,SAAA,GAAY,MAAA;AAAA,IAC3D,YAAY,OAAA,CAAQ;AAAA,GACrB,CAAA;AACD,EAAA,MAAM,KAAK,IAAA,CAAK,eAAA;AAChB,EAAA,IAAI,EAAA,IAAM,IAAA,IAAQ,EAAA,GAAK,EAAA,EAAI;AACzB,IAAA,MAAA,CAAO,WAAA,CAAY,KAAA,GAAQ,EAAA,CAAG,QAAA,EAAS;AAAA,EACzC;AACA,EAAA,OAAO,MAAA;AACT;ACrOO,SAAS,4BAAA,CAA6B,QAAgB,OAAA,EAA+B;AAC1F,EAAA,MAAM,QAAQZ,gBAAAA,CAAY;AAAA,IACxB,EAAA,EAAI,OAAA;AAAA,IACJ,IAAA,EAAM,aAAA;AAAA,IACN,gBAAgB,EAAE,QAAA,EAAU,IAAI,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,EAAM;AAAA,IAC7D,OAAA,EAAS,EAAE,OAAA,EAAS,EAAE,MAAM,CAAC,MAAM,GAAE;AAAE,GACxC,CAAA;AACD,EAAA,OAAOC,wBAAmB,EAAE,KAAA,EAAO,WAAW,gBAAA,CAAiB,MAAM,GAAG,CAAA;AAC1E;AAEA,eAAsB,oBAAoB,IAAA,EAOxB;AAChB,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa;AAAA,IAC7C,SAAS,IAAA,CAAK,KAAA;AAAA,IACd,GAAA,EAAK,YAAA;AAAA,IACL,YAAA,EAAc,WAAA;AAAA,IACd,IAAA,EAAM,CAACN,eAAAA,CAAW,IAAA,CAAK,KAAK,CAAA,EAAGA,eAAAA,CAAW,IAAA,CAAK,OAAO,CAAC;AAAA,GACxD,CAAA;AACD,EAAA,IAAI,OAAA,IAAW,KAAK,SAAA,EAAW;AAC/B,EAAA,IAAI,UAAU,EAAA,EAAI;AAChB,IAAA,IAAA,CAAK,MAAM,IAAA,CAAK;AAAA,MACd,IAAA,EAAM,SAAA;AAAA,MACN,IAAI,IAAA,CAAK,KAAA;AAAA,MACT,MAAMkB,uBAAA,CAAmB;AAAA,QACvB,GAAA,EAAK,eAAA;AAAA,QACL,YAAA,EAAc,SAAA;AAAA,QACd,MAAM,CAAClB,eAAAA,CAAW,IAAA,CAAK,OAAO,GAAG,EAAE;AAAA,OACpC,CAAA;AAAA,MACD,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AACA,EAAA,IAAA,CAAK,MAAM,IAAA,CAAK;AAAA,IACd,IAAA,EAAM,SAAA;AAAA,IACN,IAAI,IAAA,CAAK,KAAA;AAAA,IACT,MAAMkB,uBAAA,CAAmB;AAAA,MACvB,GAAA,EAAK,eAAA;AAAA,MACL,YAAA,EAAc,SAAA;AAAA,MACd,MAAM,CAAClB,eAAAA,CAAW,KAAK,OAAO,CAAA,EAAG,KAAK,SAAS;AAAA,KAChD,CAAA;AAAA,IACD,KAAA,EAAO;AAAA,GACR,CAAA;AACH;;;AC3CA,IAAM,qBAAA,GAAwB,OAAA;AAC9B,IAAM,sBAAA,GAAyB,MAAA;AAC/B,IAAM,sBAAA,GAAyB,OAAA;AAC/B,IAAM,qBAAA,GAAwB,OAAA;AAC9B,IAAM,uBAAA,GAA0B,OAAA;AAChC,IAAM,sBAAA,GAAyB,OAAA;AA0B/B,SAAS,YAAY,IAAA,EAAuC;AAC1D,EAAA,IAAI,IAAA,KAAS,gBAAgB,OAAO,qBAAA;AACpC,EAAA,IAAI,IAAA,KAAS,iBAAiB,OAAO,sBAAA;AACrC,EAAA,IAAI,IAAA,KAAS,WAAW,OAAO,sBAAA;AAC/B,EAAA,IAAI,IAAA,KAAS,YAAY,OAAO,uBAAA;AAChC,EAAA,IAAI,IAAA,KAAS,SAAS,OAAO,sBAAA;AAC7B,EAAA,OAAO,qBAAA;AACT;AAEA,SAAS,YAAY,IAAA,EAKlB;AACD,EAAA,MAAM,QAAA,GAAwB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACnD,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,WAAA,EAAa,WAAA,CAAY,CAAA,CAAE,IAAI;AAAA,GACjC,CAAE,CAAA;AACF,EAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAC9D,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,IAAA;AAChF,EAAA,OAAO,sBAAA,CAAuB;AAAA,IAC5B,OAAA,EAAS;AAAA,MACP,aAAA,EAAe,KAAA;AAAA,MACf,MAAA,EAAQ,KAAK,MAAA,CAAO,MAAA;AAAA,MACpB,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,MACzB,OAAA,EAAS,KAAK,MAAA,CAAO,OAAA;AAAA,MACrB,MAAA,EAAQ,KAAK,MAAA,CAAO,MAAA;AAAA,MACpB,eAAA,EAAiBA,eAAAA,CAAW,IAAA,CAAK,MAAA,CAAO,eAAe,CAAA;AAAA,MACvD,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,MACzB,YAAA,EAAc,KAAK,MAAA,CAAO,YAAA;AAAA,MAC1B,qBAAA,EAAuB,KAAK,MAAA,CAAO;AAAA,KACrC;AAAA,IACA,KAAA,EAAO,QAAA;AAAA,IACP,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,eAAA,EAAiB,aAAA;AAAA,IACjB,oBAAoB,KAAA,CAAM,EAAA;AAAA,IAC1B,cAAA,EAAgB,CAAC,EAAE,KAAA,EAAM,KAAM;AAC7B,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC1B,MAAA,OAAO;AAAA,QACL,aAAA,EAAe,KAAK,SAAA,CAAU;AAAA,UAC5B,IAAA,EAAM,YAAA;AAAA,UACN,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,IAAI,CAAA,CAAE,EAAA;AAAA,UACN,GAAG,IAAA,CAAK;AAAA,SACT,CAAA;AAAA,QACD,GAAA,EAAK,EAAE,IAAA,EAAM,CAAA,YAAA,EAAe,EAAE,IAAI,CAAA,CAAA,EAAI,OAAA,EAAS,CAAA,EAAG,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,EAAE;AAAA,QACvF,UAAA,EAAY,EAAE,GAAG,IAAA,CAAK,SAAA,EAAW,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,KAAA;AAAM,OAC1E;AAAA,IACF;AAAA,GACD,CAAA;AACH;AAEA,eAAe,iBAAiB,IAAA,EAKZ;AAClB,EAAA,IAAI,KAAK,WAAA,CAAY,IAAA,GAAO,WAAA,EAAY,KAAM,OAAO,OAAOmB,eAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,4BAAA,CAA6B,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrE,EAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,IAAA,CAAK,KAAA,EAAO,GAAA,EAAK,YAAA,EAAc,YAAA,EAAc,UAAA,EAAY,CAAA;AAC1G,EAAA,MAAM,YAAYC,eAAA,CAAW,IAAA,CAAK,WAAA,EAAa,MAAA,CAAO,GAAG,CAAC,CAAA;AAC1D,EAAA,IAAI,SAAA,KAAc,EAAA,EAAI,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAC5F,EAAA,OAAO,SAAA;AACT;AAMA,eAAsB,sCAAsC,IAAA,EAKiB;AAC3E,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,IAAA,CAAK,OAAA,EAAS,KAAK,KAAK,CAAA;AAC/D,EAAA,MAAM,WAAW,4BAAA,CAA6B;AAAA,IAC5C,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK;AAAA,GACjC,CAAA;AACD,EAAA,MAAM,SAAA,GAAY,MAAM,gBAAA,CAAiB;AAAA,IACvC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,aAAa,IAAA,CAAK;AAAA,GACnB,CAAA;AACD,EAAA,MAAM,QAAA,GAAWpB,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,4BAAA,CAA6B,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrE,EAAA,MAAM,QAA+B,EAAC;AAEtC,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAM,cAAA;AAAA,MACN,IAAI,QAAA,CAAS,KAAA;AAAA,MACb,IAAA,EAAMkB,uBAAAA,CAAmB,EAAE,GAAA,EAAK,OAAA,EAAS,cAAc,SAAA,EAAW,IAAA,EAAM,EAAC,EAAG,CAAA;AAAA,MAC5E,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,mBAAA,CAAoB;AAAA,IACxB,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,KAAA,EAAO,QAAA;AAAA,IACP,SAAS,MAAA,CAAO,KAAA;AAAA,IAChB;AAAA,GACD,CAAA;AAED,EAAA,KAAA,CAAM,IAAA,CAAK;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,IAAI,MAAA,CAAO,KAAA;AAAA,IACX,MAAMA,uBAAAA,CAAmB;AAAA,MACvB,GAAA,EAAK,iBAAA;AAAA,MACL,YAAA,EAAc,QAAA;AAAA,MACd,IAAA,EAAM,CAAC,QAAA,CAAS,KAAA,EAAO,SAAS;AAAA,KACjC,CAAA;AAAA,IACD,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,MAAA,EAAQ,EAAE,GAAG,IAAA,EAAM,OAAO,MAAA,CAAO,KAAA,EAAO,iBAAiB,QAAA,EAAS;AAAA,IAClE,KAAA;AAAA,IACA,aAAA,EAAe,QAAA,CAAS,QAAA,GACpB,CAAA,cAAA,EAAiB,CAAC,iEAClB,CAAA,KAAM,CAAA,GACJ,kEAAA,GACA,CAAA,cAAA,EAAiB,CAAC,CAAA,4CAAA,CAAA;AAAA,IACxB,SAAA,EAAW;AAAA,MACT,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,UAAU,QAAA,CAAS;AAAA;AACrB,GACD,CAAA;AACH;AAEA,eAAsB,qCACpB,IAAA,EAC0E;AAC1E,EAAA,OAAO,sCAAsC,IAAI,CAAA;AACnD;AAMA,eAAsB,wCAAwC,IAAA,EAKe;AAC3E,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,IAAA,CAAK,OAAA,EAAS,KAAK,KAAK,CAAA;AAC/D,EAAA,MAAM,WAAW,4BAAA,CAA6B;AAAA,IAC5C,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK;AAAA,GACjC,CAAA;AACD,EAAA,MAAM,SAAA,GAAY,MAAM,gBAAA,CAAiB;AAAA,IACvC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,aAAa,IAAA,CAAK;AAAA,GACnB,CAAA;AACD,EAAA,MAAM,QAAA,GAAWlB,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAChD,EAAA,MAAM,KAAA,GAA+B;AAAA,IACnC;AAAA,MACE,IAAA,EAAM,UAAA;AAAA,MACN,IAAI,MAAA,CAAO,KAAA;AAAA,MACX,MAAMkB,uBAAAA,CAAmB;AAAA,QACvB,GAAA,EAAK,iBAAA;AAAA,QACL,YAAA,EAAc,UAAA;AAAA,QACd,IAAA,EAAM,CAAC,QAAA,CAAS,KAAA,EAAO,SAAS;AAAA,OACjC,CAAA;AAAA,MACD,KAAA,EAAO;AAAA;AACT,GACF;AACA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,IAAI,cAAcC,eAAA,EAAY;AAC5B,MAAA,MAAM,IAAI,MAAM,+EAA+E,CAAA;AAAA,IACjG;AACA,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAM,eAAA;AAAA,MACN,IAAI,QAAA,CAAS,KAAA;AAAA,MACb,IAAA,EAAMD,uBAAAA,CAAmB,EAAE,GAAA,EAAK,OAAA,EAAS,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAAA,MACtF,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,MAAA,EAAQ,EAAE,GAAG,IAAA,EAAM,OAAO,MAAA,CAAO,KAAA,EAAO,iBAAiB,QAAA,EAAS;AAAA,IAClE,KAAA;AAAA,IACA,aAAA,EAAe,QAAA,CAAS,QAAA,GACpB,0EAAA,GACA,wFAAA;AAAA,IACJ,SAAA,EAAW;AAAA,MACT,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,IAAA,EAAM;AAAA;AACR,GACD,CAAA;AACH;AAEA,eAAsB,4CAA4C,IAAA,EAG/D;AACD,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,IAAA,CAAK,OAAA,EAAS,KAAK,KAAK,CAAA;AAC/D,EAAA,MAAM,QAAA,GAAWlB,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAChD,EAAA,MAAM,KAAA,GAA+B;AAAA,IACnC;AAAA,MACE,IAAA,EAAM,OAAA;AAAA,MACN,IAAI,MAAA,CAAO,OAAA;AAAA,MACX,MAAMkB,uBAAAA,CAAmB;AAAA,QACvB,GAAA,EAAK,eAAA;AAAA,QACL,YAAA,EAAc,OAAA;AAAA,QACd,IAAA,EAAM,CAAC,MAAA,CAAO,KAAA,EAAO,UAAU,IAAI;AAAA,OACpC,CAAA;AAAA,MACD,KAAA,EAAO;AAAA;AACT,GACF;AACA,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,MAAA,EAAQ,EAAE,GAAG,IAAA,EAAM,OAAO,MAAA,CAAO,KAAA,EAAO,iBAAiB,QAAA,EAAS;AAAA,IAClE,KAAA;AAAA,IACA,aAAA,EAAe,0CAAA;AAAA,IACf,WAAW,EAAE,MAAA,EAAQ,OAAO,MAAA,EAAQ,OAAA,EAAS,OAAO,OAAA;AAAQ,GAC7D,CAAA;AACH;AC9QA,IAAM,cAAA,GAAiB,MAAA;AACvB,IAAMG,uBAAAA,GAAyB,OAAA;AAC/B,IAAM,sBAAA,GAAyB,OAAA;AAmB/B,IAAM,aAAA,GAAgBnB,aAAAA,CAAS,CAAC,iDAAiD,CAAC,CAAA;AAMlF,eAAsB,sCAAsC,IAAA,EAWiB;AAC3E,EAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,QAAQ,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAC7E,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,IAAA,CAAK,OAAA,EAAS,KAAK,KAAK,CAAA;AAC/D,EAAA,IAAI,CAAC,MAAA,CAAO,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,MAAA,CAAO,MAAM,CAAA,UAAA,EAAa,IAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AACvG,EAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,EAAA,MAAM,QAAA,GAAWF,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,4BAAA,CAA6B,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AAErE,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CACnB,YAAA,CAAa;AAAA,IACZ,SAAS,MAAA,CAAO,KAAA;AAAA,IAChB,GAAA,EAAK,iBAAA;AAAA,IACL,YAAA,EAAc,eAAA;AAAA,IACd,IAAA,EAAM,CAAC,QAAA,EAAU,MAAM;AAAA,GACxB,CAAA,CACA,KAAA,CAAM,MAAM,KAAK,CAAA;AAEpB,EAAA,MAAM,SAAgC,EAAC;AACvC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,OAAA;AAAA,MACN,IAAI,MAAA,CAAO,KAAA;AAAA,MACX,MAAMkB,uBAAAA,CAAmB;AAAA,QACvB,GAAA,EAAK,aAAA;AAAA,QACL,YAAA,EAAc,OAAA;AAAA,QACd,IAAA,EAAM,CAAC,MAAA,EAAQ,IAAI;AAAA,OACpB,CAAA;AAAA,MACD,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,UAA2B,EAAC;AAClC,EAAA,MAAM,QAAyB,EAAC;AAChC,EAAA,IAAI,WAAA,GAAc,EAAA;AAElB,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,KAAA,EAAO;AAC7B,IAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,MAAA,OAAA,CAAQ,KAAK,0BAA0B,CAAA;AACvC,MAAA,KAAA,CAAM,IAAA;AAAA,QACJI,wBAAA;AAAA,UACE;AAAA,YACE,EAAE,MAAM,SAAA,EAAU;AAAA,YAClB,EAAE,MAAM,SAAA,EAAU;AAAA,YAClB,EAAE,MAAM,SAAA,EAAU;AAAA,YAClB,EAAE,MAAM,MAAA;AAAO,WACjB;AAAA,UACA,CAAC,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,OAAA,EAAS,UAAU,IAAI;AAAA;AAC/C,OACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,CAAC,KAAK,WAAA,EAAa;AACpC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,gCAAA,CAAkC,CAAA;AAAA,IACzE;AACA,IAAA,MAAM,WAAW,4BAAA,CAA6B;AAAA,MAC5C,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,UAAU,IAAA,CAAK;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACpC,SAAS,QAAA,CAAS,KAAA;AAAA,MAClB,GAAA,EAAK,YAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf,CAAA;AACD,IAAA,MAAM,YAAYF,eAAAA,CAAW,IAAA,CAAK,WAAA,EAAa,MAAA,CAAO,GAAG,CAAC,CAAA;AAC1D,IAAA,IAAI,SAAA,KAAc,EAAA,EAAI,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAEnE,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,OAAA,CAAQ,KAAK,iCAAiC,CAAA;AAC9C,QAAA,KAAA,CAAM,IAAA;AAAA,UACJE,wBAAA;AAAA,YACE,CAAC,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,EAAE,IAAA,EAAM,SAAA,EAAW,CAAA;AAAA,YAC9D,CAAC,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,SAAS;AAAA;AACpC,SACF;AACA,QAAA,WAAA,IAAe,SAAA;AAAA,MACjB,CAAA,MAAO;AACL,QAAA,MAAM,mBAAA,CAAoB;AAAA,UACxB,MAAA;AAAA,UACA,KAAA,EAAO,MAAA;AAAA,UACP,OAAO,QAAA,CAAS,KAAA;AAAA,UAChB,KAAA,EAAO,QAAA;AAAA,UACP,OAAA,EAAS,MAAA;AAAA,UACT;AAAA,SACD,CAAA;AACD,QAAA,OAAA,CAAQ,KAAK,0BAA0B,CAAA;AACvC,QAAA,KAAA,CAAM,IAAA;AAAA,UACJA,wBAAA;AAAA,YACE,CAAC,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,EAAE,MAAM,SAAA,EAAU,EAAG,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,YACnF,CAAC,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,QAAA,CAAS,OAAO,SAAS;AAAA;AACpD,SACF;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,OAAA,CAAQ,KAAK,mCAAmC,CAAA;AAChD,QAAA,KAAA,CAAM,IAAA;AAAA,UACJA,wBAAA;AAAA,YACE,CAAC,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,EAAE,IAAA,EAAM,SAAA,EAAW,CAAA;AAAA,YAC9D,CAAC,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,SAAS;AAAA;AACpC,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,KAAK,4BAA4B,CAAA;AACzC,QAAA,KAAA,CAAM,IAAA;AAAA,UACJA,wBAAA;AAAA,YACE,CAAC,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,EAAE,MAAM,SAAA,EAAU,EAAG,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,YACnF,CAAC,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,QAAA,CAAS,OAAO,SAAS;AAAA;AACpD,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,aAAaJ,uBAAAA,CAAmB;AAAA,IACpC,GAAA,EAAK,cAAA;AAAA,IACL,YAAA,EAAc,QAAA;AAAA,IACd,IAAA,EAAM,CAAC,OAAA,EAAS,KAAK;AAAA,GACtB,CAAA;AACD,EAAA,MAAA,CAAO,IAAA,CAAK;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,MAAM,QAAA,GAAwB,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAC/C,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,WAAA,EACE,EAAE,IAAA,KAAS,SAAA,GAAYG,0BAAyB,CAAA,CAAE,IAAA,KAAS,UAAU,cAAA,GAAiB;AAAA,GAC1F,CAAE,CAAA;AACF,EAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,IAAA;AAEhF,EAAA,OAAO,sBAAA,CAAuB;AAAA,IAC5B,OAAA,EAAS;AAAA,MACP,aAAA,EAAe,KAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,eAAA,EAAiB,QAAA;AAAA,MACjB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,uBAAuB,IAAA,CAAK;AAAA,KAC9B;AAAA,IACA,KAAA,EAAO,QAAA;AAAA,IACP,aAAA,EAAe,CAAA,cAAA,EAAiB,QAAA,CAAS,MAAM,qBAAqB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,MAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,IAC9G,eAAA,EAAiB,aAAA;AAAA,IACjB,oBAAoB,KAAA,CAAM,EAAA;AAAA,IAC1B,eAAA,EAAiB,WAAA,GAAc,EAAA,GAAK,WAAA,GAAc,MAAA;AAAA,IAClD,cAAA,EAAgB,CAAC,EAAE,KAAA,EAAM,KAAM;AAC7B,MAAA,MAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACtB,MAAA,OAAO;AAAA,QACL,aAAA,EAAe,KAAK,SAAA,CAAU;AAAA,UAC5B,IAAA,EAAM,YAAA;AAAA,UACN,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,MAAA;AAAA,UACA,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,SAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,EAAA,KAAO,GAAG,MAAM;AAAA,SAC1C,CAAA;AAAA,QACD,GAAA,EAAK,EAAE,IAAA,EAAM,CAAA,YAAA,EAAe,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,OAAA,EAAS,CAAA,EAAG,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAE;AAAA,QAChF,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,CAAA,CAAE,IAAA;AAAK,OACjF;AAAA,IACF;AAAA,GACD,CAAA;AACH;;;ACjOO,IAAM,wBAAA,GAA2C;AAAA,EACtD,EAAA,EAAI,uBAAA;AAAA,EACJ,aAAA,EAAe,KAAA;AAAA,EACf,iBAAiB,GAAA,EAAK;AACpB,IAAA,MAAM,EAAA,GAAK,OAAO,GAAA,CAAI,OAAA,KAAY,WAAW,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA,GAAI,GAAA,CAAI,OAAA;AACvE,IAAA,OAAO,GAAA,CAAI,aAAA,KAAkB,KAAA,IAAS,0BAAA,CAA2B,EAAE,CAAA;AAAA,EACrE,CAAA;AAAA,EACA,iBAAiB,KAAA,EAAO;AACtB,IAAA,OAAO,MAAM,QAAA,KAAa,KAAA,KAAU,MAAM,IAAA,KAAS,QAAA,IAAY,MAAM,IAAA,KAAS,OAAA,CAAA;AAAA,EAChF,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACP;AAAA,MACE,EAAA,EAAI,oBAAA;AAAA,MACJ,UAAA,EAAY,uBAAA;AAAA,MACZ,aAAA,EAAe,KAAA;AAAA,MACf,WAAA,EAAa,yDAAA;AAAA,MACb,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA;AAAA,MACtD,QAAQ;AAAC,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAI,sBAAA;AAAA,MACJ,UAAA,EAAY,uBAAA;AAAA,MACZ,aAAA,EAAe,KAAA;AAAA,MACf,WAAA,EAAa,mFAAA;AAAA,MACb,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA;AAAA,MACtD,QAAQ;AAAC,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAI,mBAAA;AAAA,MACJ,UAAA,EAAY,uBAAA;AAAA,MACZ,aAAA,EAAe,KAAA;AAAA,MACf,WAAA,EAAa,mCAAA;AAAA,MACb,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA;AAAA,MACtD,QAAQ;AAAC,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAI,2BAAA;AAAA,MACJ,UAAA,EAAY,uBAAA;AAAA,MACZ,aAAA,EAAe,KAAA;AAAA,MACf,WAAA,EAAa,6CAAA;AAAA,MACb,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA;AAAA,MACtD,QAAQ;AAAC,KACX;AAAA,IACA;AAAA,MACE,EAAA,EAAI,oBAAA;AAAA,MACJ,UAAA,EAAY,uBAAA;AAAA,MACZ,aAAA,EAAe,KAAA;AAAA,MACf,WAAA,EAAa,mCAAA;AAAA,MACb,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA;AAAA,MACtD,QAAQ;AAAC;AACX;AAEJ;AAEA,sBAAA,CAAuB,wBAAwB,CAAA","file":"index.cjs","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\n\nexport const COMPOUND_V3_PROTOCOL_ID = 'compound-v3'\n\n/** Live Comet deployments. Scroll and Ronin omitted (effectively dead). Testnets omitted. */\nexport const COMPOUND_V3_CHAIN_IDS = [1, 8453, 42161, 10, 137, 5000, 130, 59144] as const\n\nexport type CompoundV3ChainId = (typeof COMPOUND_V3_CHAIN_IDS)[number]\n\nexport const COMPOUND_V3_WRAPPED_NATIVE: Readonly<Record<number, Address>> = {\n 1: getAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),\n 8453: getAddress('0x4200000000000000000000000000000000000006'),\n 42161: getAddress('0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'),\n 10: getAddress('0x4200000000000000000000000000000000000006'),\n 137: getAddress('0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270'),\n 5000: getAddress('0x78c1b0C915c4CD0f08633e2ec3d4961Ab0237669'),\n 130: getAddress('0x4200000000000000000000000000000000000006'),\n 59144: getAddress('0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f'),\n}\n\nexport function isCompoundV3ChainSupported(chainId: number): boolean {\n return (COMPOUND_V3_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function compoundV3WrappedNative(chainId: number): Address | null {\n return COMPOUND_V3_WRAPPED_NATIVE[chainId] ?? null\n}\n\nexport function isNativeAssetAddress(address: string): boolean {\n try {\n return getAddress(address) === zeroAddress\n } catch {\n return false\n }\n}\n\nexport function resolveCompoundV3ActionAsset(args: {\n chainId: number\n asset: string\n isNative?: boolean\n}): { asset: Address; isNative: boolean; nativeWrapped: Address | null } {\n const nativeWrapped = compoundV3WrappedNative(args.chainId)\n const isNative = args.isNative === true || isNativeAssetAddress(args.asset)\n if (isNative) {\n if (!nativeWrapped) {\n throw new Error(`No wrapped native token configured for Compound III on chain ${args.chainId}.`)\n }\n return { asset: nativeWrapped, isNative: true, nativeWrapped }\n }\n return { asset: getAddress(args.asset), isNative: false, nativeWrapped }\n}\n","import { getAddress, type Address } from 'viem'\nimport { COMPOUND_V3_CHAIN_IDS, isCompoundV3ChainSupported } from './support.js'\n\nexport type CompoundV3MarketRecord = {\n chainId: number\n slug: string\n symbol: string\n comet: Address\n rewards: Address\n bulker: Address | null\n /** Known base token when documented; on-chain `baseToken()` wins. */\n baseToken?: Address\n source: 'comet-deployments'\n}\n\n/**\n * Official Comet proxy + Rewards + Bulker from\n * https://github.com/compound-finance/comet/tree/main/deployments\n * (`roots.json`). Always use `comet` (proxy) with CometInterface — never the implementation.\n */\nexport const COMPOUND_V3_MARKETS: readonly CompoundV3MarketRecord[] = [\n // Ethereum\n {\n chainId: 1,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xc3d688B66703497DAA19211EEdff47f25384cdc3'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'usds',\n symbol: 'cUSDSv3',\n comet: getAddress('0x5D409e56D886231aDAf00c8775665AD0f9897b56'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xdC035D45d973E3EC169d2276DDab16f1e407384F'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0x3Afdc9BCA9213A35503b077a6072F3D0d5AB0840'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xdAC17F958D2ee523a2206206994597C13D831ec7'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'wbtc',\n symbol: 'cWBTCv3',\n comet: getAddress('0xe85Dc543813B8c2CFEaAc371517b925a166a9293'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0xA17581A9E3356d9A858b789D68B4d866e593aE94'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0xa397a8C2086C554B531c02E29f3291c9704B00c7'),\n baseToken: getAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),\n source: 'comet-deployments',\n },\n {\n chainId: 1,\n slug: 'wsteth',\n symbol: 'cWstETHv3',\n comet: getAddress('0x3D0bb1ccaB520A66e607822fC55BC921738fAFE3'),\n rewards: getAddress('0x1B0e765F6224C21223AeA2af16c1C46E38885a40'),\n bulker: getAddress('0x2c776041CCFe903071AF44aa147368a9c8EEA518'),\n baseToken: getAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),\n source: 'comet-deployments',\n },\n // Base\n {\n chainId: 8453,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xb125E6687d4313864e53df431d5425969c15Eb2F'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'usdbc',\n symbol: 'cUSDbCv3',\n comet: getAddress('0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'usds',\n symbol: 'cUSDSv3',\n comet: getAddress('0x2c776041CCFe903071AF44aa147368a9c8EEA518'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x820C137fa70C8691f0e44Dc420a5e53c168921Dc'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x46e6b214b524310239732D51387075E0e70970bf'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n {\n chainId: 8453,\n slug: 'aero',\n symbol: 'cAEROv3',\n comet: getAddress('0x784efeB622244d2348d4F2522f8860B96fbEcE89'),\n rewards: getAddress('0x123964802e6ABabBE1Bc9547D72Ef1B69B00A6b1'),\n bulker: getAddress('0x78D0677032A35c63D142a48A2037048871212a8C'),\n baseToken: getAddress('0x940181a94A35A4569E4529A3CDfB74e38FD98631'),\n source: 'comet-deployments',\n },\n // Arbitrum\n {\n chainId: 42161,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xaf88d065e77c8cC2239327C5EDb3A432268e5831'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'usdc.e',\n symbol: 'cUSDC.ev3',\n comet: getAddress('0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0xd98Be00b5D27fc98112BdE293e487f8D4cA57d07'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'),\n source: 'comet-deployments',\n },\n {\n chainId: 42161,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n rewards: getAddress('0x88730d254A2f7e6AC8388c3198aFd694bA9f7fae'),\n bulker: getAddress('0xbdE8F31D2DdDA895264e27DD990faB3DC87b372d'),\n baseToken: getAddress('0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'),\n source: 'comet-deployments',\n },\n // Optimism\n {\n chainId: 10,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x2e44e174f7D53F0212823acC11C01A11d58c5bCB'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85'),\n source: 'comet-deployments',\n },\n {\n chainId: 10,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0x995E394b8B2437aC8Ce61Ee0bC610D617962B214'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x94b008aA00579c1307B0EF2c499aD98a8ce58e58'),\n source: 'comet-deployments',\n },\n {\n chainId: 10,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0xE36A30D249f7761327fd973001A32010b521b6Fd'),\n rewards: getAddress('0x443EA0340cb75a160F31A440722dec7b5bc3C2E9'),\n bulker: getAddress('0xcb3643CC8294B23171272845473dEc49739d4Ba3'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n // Polygon\n {\n chainId: 137,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0xF25212E676D1F7F89Cd72fFEe66158f541246445'),\n rewards: getAddress('0x45939657d1CA34A8FA39A924B71D28Fe8431e581'),\n bulker: getAddress('0x59e242D352ae13166B4987aE5c990C232f7f7CD6'),\n baseToken: getAddress('0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174'),\n source: 'comet-deployments',\n },\n {\n chainId: 137,\n slug: 'usdt',\n symbol: 'cUSDTv3',\n comet: getAddress('0xaeB318360f27748Acb200CE616E389A6C9409a07'),\n rewards: getAddress('0x45939657d1CA34A8FA39A924B71D28Fe8431e581'),\n bulker: getAddress('0x59e242D352ae13166B4987aE5c990C232f7f7CD6'),\n baseToken: getAddress('0xc2132D05D31c914a87C6611C10748AEb04B58e8F'),\n source: 'comet-deployments',\n },\n // Mantle\n {\n chainId: 5000,\n slug: 'usde',\n symbol: 'cUSDev3',\n comet: getAddress('0x606174f62cd968d8e684c645080fa694c1D7786E'),\n rewards: getAddress('0xCd83CbBFCE149d141A5171C3D6a0F0fCCeE225Ab'),\n bulker: getAddress('0x67DFCa85CcEEFA2C5B1dB4DEe3BEa716A28B9baa'),\n source: 'comet-deployments',\n },\n // Unichain\n {\n chainId: 130,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n rewards: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n bulker: getAddress('0x58EbB8Db8b4FdF2dCbbB16E04c2F5b952963B514'),\n baseToken: getAddress('0x078D782b760474a361dDA0AF3839290b0EF57AD6'),\n source: 'comet-deployments',\n },\n {\n chainId: 130,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x6C987dDE50dB1dcDd32Cd4175778C2a291978E2a'),\n rewards: getAddress('0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'),\n bulker: getAddress('0x58EbB8Db8b4FdF2dCbbB16E04c2F5b952963B514'),\n baseToken: getAddress('0x4200000000000000000000000000000000000006'),\n source: 'comet-deployments',\n },\n // Linea\n {\n chainId: 59144,\n slug: 'usdc',\n symbol: 'cUSDCv3',\n comet: getAddress('0x8D38A3d6B3c3B7d96D6536DA7Eef94A9d7dbC991'),\n rewards: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n bulker: getAddress('0x023ee795361B28cDbB94e302983578486A0A5f1B'),\n baseToken: getAddress('0x176211869cA2b568f2A7D4EE941E073a821EE1ff'),\n source: 'comet-deployments',\n },\n {\n chainId: 59144,\n slug: 'weth',\n symbol: 'cWETHv3',\n comet: getAddress('0x60F2058379716A64a7A5d29219397e79bC552194'),\n rewards: getAddress('0x2c7118c4C88B9841FCF839074c26Ae8f035f2921'),\n bulker: getAddress('0x023ee795361B28cDbB94e302983578486A0A5f1B'),\n baseToken: getAddress('0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f'),\n source: 'comet-deployments',\n },\n]\n\nexport function listCompoundV3SupportedChainIds(): number[] {\n return [...COMPOUND_V3_CHAIN_IDS]\n}\n\nexport function listCompoundV3MarketsForChain(chainId: number): CompoundV3MarketRecord[] {\n if (!isCompoundV3ChainSupported(chainId)) return []\n return COMPOUND_V3_MARKETS.filter((m) => m.chainId === chainId)\n}\n\nexport function getCompoundV3MarketByComet(chainId: number, comet: string): CompoundV3MarketRecord | null {\n let normalized: string\n try {\n normalized = getAddress(comet)\n } catch {\n return null\n }\n return COMPOUND_V3_MARKETS.find((m) => m.chainId === chainId && m.comet === normalized) ?? null\n}\n\nexport function requireCompoundV3Market(chainId: number, comet: string): CompoundV3MarketRecord {\n const market = getCompoundV3MarketByComet(chainId, comet)\n if (!market) {\n throw new Error(\n `Unknown Compound III Comet proxy ${comet} on chain ${chainId}. Use ctm_compound_v3_fetch_markets.`,\n )\n }\n return market\n}\n\nexport function listCompoundV3KnownTokenAddresses(chainId: number): Address[] {\n const out = new Set<string>()\n for (const m of listCompoundV3MarketsForChain(chainId)) {\n out.add(m.comet)\n if (m.baseToken) out.add(m.baseToken)\n }\n return [...out] as Address[]\n}\n","import { parseAbi, stringToHex } from 'viem'\n\n/** CometInterface — call on the proxy only. Sourced from compound-js Comet ABI + Comet docs. */\nexport const cometInterfaceAbi = parseAbi([\n 'function supply(address asset, uint256 amount)',\n 'function supplyTo(address dst, address asset, uint256 amount)',\n 'function withdraw(address asset, uint256 amount)',\n 'function withdrawTo(address to, address asset, uint256 amount)',\n 'function allow(address manager, bool isAllowed)',\n 'function hasPermission(address owner, address manager) view returns (bool)',\n 'function balanceOf(address account) view returns (uint256)',\n 'function borrowBalanceOf(address account) view returns (uint256)',\n 'function collateralBalanceOf(address account, address asset) view returns (uint128)',\n 'function baseToken() view returns (address)',\n 'function baseTokenPriceFeed() view returns (address)',\n 'function decimals() view returns (uint8)',\n 'function numAssets() view returns (uint8)',\n 'function getUtilization() view returns (uint256)',\n 'function getSupplyRate(uint256 utilization) view returns (uint64)',\n 'function getBorrowRate(uint256 utilization) view returns (uint64)',\n 'function getPrice(address priceFeed) view returns (uint256)',\n 'function isBorrowCollateralized(address account) view returns (bool)',\n 'function isLiquidatable(address account) view returns (bool)',\n 'function getAssetInfo(uint8 i) view returns ((uint8 offset, address asset, address priceFeed, uint64 scale, uint64 borrowCollateralFactor, uint64 liquidateCollateralFactor, uint64 liquidationFactor, uint128 supplyCap))',\n 'function getAssetInfoByAddress(address asset) view returns ((uint8 offset, address asset, address priceFeed, uint64 scale, uint64 borrowCollateralFactor, uint64 liquidateCollateralFactor, uint64 liquidationFactor, uint128 supplyCap))',\n 'function baseTrackingSupplySpeed() view returns (uint256)',\n 'function baseTrackingBorrowSpeed() view returns (uint256)',\n 'function baseIndexScale() view returns (uint64)',\n 'function trackingIndexScale() view returns (uint256)',\n 'function totalSupply() view returns (uint256)',\n 'function totalBorrow() view returns (uint256)',\n])\n\nexport const cometRewardsAbi = parseAbi([\n 'function getRewardOwed(address comet, address account) view returns ((address token, uint256 owed))',\n 'function claim(address comet, address src, bool shouldAccrue)',\n 'function rewardConfig(address comet) view returns ((address token, uint64 rescaleFactor, bool shouldUpscale))',\n])\n\nexport const cometBulkerAbi = parseAbi([\n 'function invoke(bytes32[] actions, bytes[] data) payable',\n])\n\nexport const erc20ReadAbi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function symbol() view returns (string)',\n 'function name() view returns (string)',\n])\n\nexport const erc20ApproveAbi = parseAbi(['function approve(address spender, uint256 amount) returns (bool)'])\n\nexport const wethAbi = parseAbi(['function deposit() payable', 'function withdraw(uint256 wad)'])\n\n/** Solidity `bytes32 constant ACTION_* = \"ACTION_*\"` (short string). */\nexport function bulkerActionId(name: string): `0x${string}` {\n return stringToHex(name, { size: 32 })\n}\n\nexport const BULKER_ACTION_SUPPLY_ASSET = bulkerActionId('ACTION_SUPPLY_ASSET')\nexport const BULKER_ACTION_SUPPLY_NATIVE_TOKEN = bulkerActionId('ACTION_SUPPLY_NATIVE_TOKEN')\nexport const BULKER_ACTION_WITHDRAW_ASSET = bulkerActionId('ACTION_WITHDRAW_ASSET')\nexport const BULKER_ACTION_WITHDRAW_NATIVE_TOKEN = bulkerActionId('ACTION_WITHDRAW_NATIVE_TOKEN')\nexport const BULKER_ACTION_CLAIM_REWARD = bulkerActionId('ACTION_CLAIM_REWARD')\nexport const BULKER_ACTION_TRANSFER_ASSET = bulkerActionId('ACTION_TRANSFER_ASSET')\n","{\"moveToParentClass\":{\"Comet\":\"Comet\",\"MAINNET_USDC\":\"mainnet_usdc\",\"COMP\":\"COMP\",\"WBTC\":\"WBTC\",\"WETH\":\"WETH\",\"UNI\":\"UNI\",\"LINK\":\"LINK\",\"USDC\":\"USDC\",\"MAINNET_WETH\":\"mainnet_weth\",\"cbETH\":\"cbETH\",\"wstETH\":\"wstETH\",\"POLYGON_USDC\":\"polygon_usdc\",\"WMATIC\":\"WMATIC\",\"MaticX\":\"MaticX\",\"ARBITRUM_USDC\":\"arbitrum_usdc\",\"ARB\":\"ARB\",\"GMX\":\"GMX\",\"BASE_USDBC\":\"base_usdbc\",\"USDbC\":\"USDbC\",\"BASE_WETH\":\"base_weth\",\"GOERLI_USDC\":\"goerli_usdc\",\"GOERLI_WETH\":\"goerli_weth\",\"MUMBAI_USDC\":\"mumbai_usdc\",\"DAI\":\"DAI\",\"GOERLI_ARBITRUM_USDC\":\"goerli_arbitrum_usdc\",\"GOERLI_OPTIMISM_USDC\":\"goerli_optimism_usdc\",\"OP\":\"OP\",\"GOERLI_BASE_USDC\":\"goerli_base_usdc\",\"GOERLI_BASE_WETH\":\"goerli_base_weth\",\"FUJI_USDC\":\"fuji_usdc\",\"WBTC_e\":\"WBTC_e\",\"WAVAX\":\"WAVAX\"},\"address\":{\"mainnet_usdc\":{\"COMP\":{\"contract\":\"0xc00e94Cb662C3520282E6f5717214004A7f26888\",\"priceFeed\":\"0xdbd020CAeF83eFd542f4De03e3cF0C28A4428bd5\"},\"WBTC\":{\"contract\":\"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599\",\"priceFeed\":\"0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c\"},\"WETH\":{\"contract\":\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\"priceFeed\":\"0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419\"},\"UNI\":{\"contract\":\"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984\",\"priceFeed\":\"0x553303d460EE0afB37EdFf9bE42922D8FF63220e\"},\"LINK\":{\"contract\":\"0x514910771AF9Ca656af840dff83E8264EcF986CA\",\"priceFeed\":\"0x2c1d072e956AFFC0D435Cb7AC38EF18d24d9127c\"},\"USDC\":{\"contract\":\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\"priceFeed\":\"0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6\"},\"Comet\":\"0xc3d688B66703497DAA19211EEdff47f25384cdc3\"},\"mainnet_weth\":{\"cbETH\":{\"contract\":\"0xBe9895146f7AF43049ca1c1AE358B0541Ea49704\",\"priceFeed\":\"0x23a982b74a3236A5F2297856d4391B2edBBB5549\"},\"wstETH\":{\"contract\":\"0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0\",\"priceFeed\":\"0x4F67e4d9BD67eFa28236013288737D39AeF48e79\"},\"WETH\":{\"contract\":\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\"priceFeed\":\"0xD72ac1bCE9177CFe7aEb5d0516a38c88a64cE0AB\"},\"Comet\":\"0xA17581A9E3356d9A858b789D68B4d866e593aE94\"},\"polygon_usdc\":{\"WETH\":{\"contract\":\"0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619\",\"priceFeed\":\"0xF9680D99D6C9589e2a93a78A04A279e509205945\"},\"WBTC\":{\"contract\":\"0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6\",\"priceFeed\":\"0xDE31F8bFBD8c84b5360CFACCa3539B938dd78ae6\"},\"WMATIC\":{\"contract\":\"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270\",\"priceFeed\":\"0xAB594600376Ec9fD91F8e885dADF0CE036862dE0\"},\"MaticX\":{\"contract\":\"0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6\",\"priceFeed\":\"0x5d37E4b374E6907de8Fc7fb33EE3b0af403C7403\"},\"USDC\":{\"contract\":\"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\"priceFeed\":\"0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7\"},\"Comet\":\"0xF25212E676D1F7F89Cd72fFEe66158f541246445\"},\"arbitrum_usdc\":{\"ARB\":{\"contract\":\"0x912CE59144191C1204E64559FE8253a0e49E6548\",\"priceFeed\":\"0xb2A824043730FE05F3DA2efaFa1CBbe83fa548D6\"},\"GMX\":{\"contract\":\"0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a\",\"priceFeed\":\"0xDB98056FecFff59D032aB628337A4887110df3dB\"},\"WETH\":{\"contract\":\"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\",\"priceFeed\":\"0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612\"},\"WBTC\":{\"contract\":\"0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f\",\"priceFeed\":\"0xd0C7101eACbB49F3deCcCc166d238410D6D46d57\"},\"USDC\":{\"contract\":\"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\"priceFeed\":\"0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3\"},\"Comet\":\"0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA\"},\"base_usdbc\":{\"cbETH\":{\"contract\":\"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22\",\"priceFeed\":\"0x4687670f5f01716fAA382E2356C103BaD776752C\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70\"},\"USDbC\":{\"contract\":\"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA\",\"priceFeed\":\"0x7e860098F58bBFC8648a4311b374B1D669a2bc6B\"},\"Comet\":\"0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf\"},\"base_weth\":{\"cbETH\":{\"contract\":\"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22\",\"priceFeed\":\"0x59e242D352ae13166B4987aE5c990C232f7f7CD6\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x9f485610E26B9c0140439f88Dc0C7742903Bd1CF\"},\"Comet\":\"0x46e6b214b524310239732D51387075E0e70970bf\"},\"goerli_usdc\":{\"COMP\":{\"contract\":\"0x3587b2F7E0E2D6166d6C14230e7Fe160252B0ba4\",\"priceFeed\":\"0x54a06047087927D9B0fb21c1cf0ebd792764dDB8\"},\"WBTC\":{\"contract\":\"0xAAD4992D949f9214458594dF92B44165Fb84dC19\",\"priceFeed\":\"0xA39434A63A52E749F02807ae27335515BA4b07F7\"},\"WETH\":{\"contract\":\"0x42a71137C09AE83D8d05974960fd607d40033499\",\"priceFeed\":\"0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e\"},\"LINK\":{\"contract\":\"0xaf95Ff5fB592646D86BF240B3CaE0903b6E4dd38\",\"priceFeed\":\"0x48731cF7e84dc94C5f84577882c14Be11a5B7456\"},\"USDC\":{\"contract\":\"0x07865c6E87B9F70255377e024ace6630C1Eaa37F\",\"priceFeed\":\"0xAb5c49580294Aff77670F839ea425f5b78ab3Ae7\"},\"Comet\":\"0x3EE77595A8459e93C2888b13aDB354017B198188\"},\"goerli_weth\":{\"cbETH\":{\"contract\":\"0x2459f06a13ea0997d623224F362519bE71507258\",\"priceFeed\":\"0xb79BbFE63309E036dDFa1BD44513d956BeE55c2a\"},\"wstETH\":{\"contract\":\"0x4942BBAf745f235e525BAff49D31450810EDed5b\",\"priceFeed\":\"0x5608d174a3B828abb4eE8b9B6a6433f2346c3E54\"},\"WETH\":{\"contract\":\"0x42a71137C09AE83D8d05974960fd607d40033499\",\"priceFeed\":\"0x1eb99992A2e3456ed2c8C6eD87E4c029bC679FeF\"},\"Comet\":\"0x9A539EEc489AAA03D588212a164d0abdB5F08F5F\"},\"mumbai_usdc\":{\"DAI\":{\"contract\":\"0x4DAFE12E1293D889221B1980672FE260Ac9dDd28\",\"priceFeed\":\"0x0FCAa9c899EC5A91eBc3D5Dd869De833b06fB046\"},\"WETH\":{\"contract\":\"0xE1e67212B1A4BF629Bdf828e08A3745307537ccE\",\"priceFeed\":\"0x0715A7794a1dc8e42615F059dD6e406A6594651A\"},\"WBTC\":{\"contract\":\"0x4B5A0F4E00bC0d6F16A593Cae27338972614E713\",\"priceFeed\":\"0x007A22900a3B98143368Bd5906f8E17e9867581b\"},\"WMATIC\":{\"contract\":\"0xfec23a9E1DBA805ADCF55E0338Bf5E03488FC7Fb\",\"priceFeed\":\"0xd0D5e3DB44DE05E9F294BB0a3bEEaF030DE24Ada\"},\"USDC\":{\"contract\":\"0xDB3cB4f2688daAB3BFf59C24cC42D4B6285828e9\",\"priceFeed\":\"0x572dDec9087154dC5dfBB1546Bb62713147e0Ab0\"},\"Comet\":\"0xF09F0369aB0a875254fB565E52226c88f10Bc839\"},\"goerli_arbitrum_usdc\":{\"LINK\":{\"contract\":\"0xbb7303602bE1B9149B097aAFb094ffce1860E532\",\"priceFeed\":\"0xd28Ba6CA3bB72bF371b80a2a0a33cBcf9073C954\"},\"WETH\":{\"contract\":\"0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3\",\"priceFeed\":\"0x62CAe0FA2da220f43a51F86Db2EDb36DcA9A5A08\"},\"WBTC\":{\"contract\":\"0x22d5e2dE578677791f6c90e0110Ec629be9d5Fb5\",\"priceFeed\":\"0x6550bc2301936011c1334555e62A87705A81C12C\"},\"USDC\":{\"contract\":\"0x8FB1E3fC51F3b789dED7557E680551d93Ea9d892\",\"priceFeed\":\"0x1692Bdd32F31b831caAc1b0c9fAF68613682813b\"},\"Comet\":\"0x1d573274E19174260c5aCE3f2251598959d24456\"},\"goerli_optimism_usdc\":{\"OP\":{\"contract\":\"0x32719c5e2e35909C8f42167315445e349e749E05\",\"priceFeed\":\"0xE882831E58eec48B7f304482771F67e6b846733D\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x57241A37733983F97C4Ab06448F244A1E0Ca0ba8\"},\"WBTC\":{\"contract\":\"0xe0a592353e81a94Db6E3226fD4A99F881751776a\",\"priceFeed\":\"0xC16679B963CeB52089aD2d95312A5b85E318e9d2\"},\"USDC\":{\"contract\":\"0x7E07E15D2a87A24492740D16f5bdF58c16db0c4E\",\"priceFeed\":\"0x2636B223652d388721A0ED2861792DA9062D8C73\"},\"Comet\":\"0xb8F2f9C84ceD7bBCcc1Db6FB7bb1F19A9a4adfF4\"},\"goerli_base_usdc\":{\"cbETH\":{\"contract\":\"0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2\",\"priceFeed\":\"0xcD2A119bD1F7DF95d706DE6F2057fDD45A0503E2\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0xcD2A119bD1F7DF95d706DE6F2057fDD45A0503E2\"},\"USDC\":{\"contract\":\"0x31D3A7711a74b4Ec970F50c3eaf1ee47ba803A95\",\"priceFeed\":\"0xb85765935B4d9Ab6f841c9a00690Da5F34368bc0\"},\"Comet\":\"0xe78Fc55c884704F9485EDa042fb91BfE16fD55c1\"},\"goerli_base_weth\":{\"cbETH\":{\"contract\":\"0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2\",\"priceFeed\":\"0x5B0156A396BdFc2eb814D945Ac99C40A0F8592B2\"},\"WETH\":{\"contract\":\"0x4200000000000000000000000000000000000006\",\"priceFeed\":\"0x22738A450dDA849BedDFcA219739a5d72dfB3Ec6\"},\"Comet\":\"0xED94f3052638620fE226a9661ead6a39C2a265bE\"},\"fuji_usdc\":{\"WBTC_e\":{\"contract\":\"0xfa78400e01Fc9da830Cb2F13B3e7E18F813414Ff\",\"priceFeed\":\"0x31CF013A08c6Ac228C94551d535d5BAfE19c602a\"},\"WAVAX\":{\"contract\":\"0xA2c25E48269e3f89A60b2CC8e02AAfEeB3BAb761\",\"priceFeed\":\"0x5498BB86BC934c8D34FDA08E81D444153d0D06aD\"},\"USDC\":{\"contract\":\"0x4fed3d02D095f7D92AF161311fA6Ef23dc8dA040\",\"priceFeed\":\"0x7898AcCC83587C3C55116c5230C17a6Cd9C71bad\"},\"Comet\":\"0x59BF4753899C20EA152dEefc6f6A14B2a5CC3021\"}},\"decimals\":{\"mainnet_usdc\":{\"COMP\":18,\"WBTC\":8,\"WETH\":18,\"UNI\":18,\"LINK\":18,\"USDC\":6},\"mainnet_weth\":{\"cbETH\":18,\"wstETH\":18,\"WETH\":18},\"polygon_usdc\":{\"WETH\":18,\"WBTC\":8,\"WMATIC\":18,\"MaticX\":18,\"USDC\":6},\"arbitrum_usdc\":{\"ARB\":18,\"GMX\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"base_usdbc\":{\"cbETH\":18,\"WETH\":18,\"USDbC\":6},\"base_weth\":{\"cbETH\":18,\"WETH\":18},\"goerli_usdc\":{\"COMP\":18,\"WBTC\":8,\"WETH\":18,\"LINK\":18,\"USDC\":6},\"goerli_weth\":{\"cbETH\":18,\"wstETH\":18,\"WETH\":18},\"mumbai_usdc\":{\"DAI\":18,\"WETH\":18,\"WBTC\":8,\"WMATIC\":18,\"USDC\":6},\"goerli_arbitrum_usdc\":{\"LINK\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"goerli_optimism_usdc\":{\"OP\":18,\"WETH\":18,\"WBTC\":8,\"USDC\":6},\"goerli_base_usdc\":{\"cbETH\":18,\"WETH\":18,\"USDC\":6},\"goerli_base_weth\":{\"cbETH\":18,\"WETH\":18},\"fuji_usdc\":{\"WBTC_e\":8,\"WAVAX\":18,\"USDC\":6}},\"collaterals\":{\"mainnet_usdc\":[\"COMP\",\"WBTC\",\"WETH\",\"UNI\",\"LINK\",\"USDC\"],\"mainnet_weth\":[\"cbETH\",\"wstETH\",\"WETH\"],\"polygon_usdc\":[\"WETH\",\"WBTC\",\"WMATIC\",\"MaticX\",\"USDC\"],\"arbitrum_usdc\":[\"ARB\",\"GMX\",\"WETH\",\"WBTC\",\"USDC\"],\"base_usdbc\":[\"cbETH\",\"WETH\",\"USDbC\"],\"base_weth\":[\"cbETH\",\"WETH\"],\"goerli_usdc\":[\"COMP\",\"WBTC\",\"WETH\",\"LINK\",\"USDC\"],\"goerli_weth\":[\"cbETH\",\"wstETH\",\"WETH\"],\"mumbai_usdc\":[\"DAI\",\"WETH\",\"WBTC\",\"WMATIC\",\"USDC\"],\"goerli_arbitrum_usdc\":[\"LINK\",\"WETH\",\"WBTC\",\"USDC\"],\"goerli_optimism_usdc\":[\"OP\",\"WETH\",\"WBTC\",\"USDC\"],\"goerli_base_usdc\":[\"cbETH\",\"WETH\",\"USDC\"],\"goerli_base_weth\":[\"cbETH\",\"WETH\"],\"fuji_usdc\":[\"WBTC_e\",\"WAVAX\",\"USDC\"]},\"base\":{\"mainnet_usdc\":\"USDC\",\"mainnet_weth\":\"WETH\",\"polygon_usdc\":\"USDC\",\"arbitrum_usdc\":\"USDC\",\"base_usdbc\":\"USDbC\",\"base_weth\":\"WETH\",\"goerli_usdc\":\"USDC\",\"goerli_weth\":\"WETH\",\"mumbai_usdc\":\"USDC\",\"goerli_arbitrum_usdc\":\"USDC\",\"goerli_optimism_usdc\":\"USDC\",\"goerli_base_usdc\":\"USDC\",\"goerli_base_weth\":\"WETH\",\"fuji_usdc\":\"USDC\"},\"instanceNetworkMap\":{\"mainnet_usdc\":\"mainnet\",\"mainnet_weth\":\"mainnet\",\"polygon_usdc\":\"matic\",\"arbitrum_usdc\":\"arbitrum\",\"base_usdbc\":\"base\",\"base_weth\":\"base\",\"goerli_usdc\":\"goerli\",\"goerli_weth\":\"goerli\",\"mumbai_usdc\":\"maticmum\",\"goerli_arbitrum_usdc\":\"optimism-arbitrum\",\"goerli_optimism_usdc\":\"optimism-goerli\",\"goerli_base_usdc\":\"base-goerli\",\"goerli_base_weth\":\"base-goerli\",\"fuji_usdc\":\"ava-fuji\"},\"abi\":[{\"inputs\":[],\"name\":\"Absurd\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadAsset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadDiscount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadMinimum\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadPrice\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadSignatory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowCFTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientReserves\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInt104\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInt256\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt104\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt128\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUInt64\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValueS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValueV\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateCFTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NegativeNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoSelfTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotCollateralized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotForSale\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotLiquidatable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SupplyCapExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimestampTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyAssets\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooMuchSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferInFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferOutFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAbsorbed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdValue\",\"type\":\"uint256\"}],\"name\":\"AbsorbCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"basePaidOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdValue\",\"type\":\"uint256\"}],\"name\":\"AbsorbDebt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"}],\"name\":\"BuyCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"supplyPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"transferPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"withdrawPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"absorbPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"buyPaused\",\"type\":\"bool\"}],\"name\":\"PauseAction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SupplyCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawReserves\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"absorber\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"absorb\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"accrueAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"name\":\"allow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"allowBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveThis\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseAccrualScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseBorrowMin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseIndexScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseMinForRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseScale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTokenPriceFeed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"baseTrackingAccrued\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTrackingBorrowSpeed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTrackingSupplySpeed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowKink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateSlopeHigh\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowPerSecondInterestRateSlopeLow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"buyCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"collateralBalanceOf\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extensionDelegate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factorScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"i\",\"type\":\"uint8\"}],\"name\":\"getAssetInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"offset\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"scale\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"borrowCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidateCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidationFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"supplyCap\",\"type\":\"uint128\"}],\"internalType\":\"struct CometCore.AssetInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetInfoByAddress\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"offset\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"scale\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"borrowCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidateCollateralFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidationFactor\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"supplyCap\",\"type\":\"uint128\"}],\"internalType\":\"struct CometCore.AssetInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"utilization\",\"type\":\"uint256\"}],\"name\":\"getBorrowRate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getCollateralReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"utilization\",\"type\":\"uint256\"}],\"name\":\"getSupplyRate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUtilization\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isAbsorbPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isBorrowCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isBuyPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isLiquidatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSupplyPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTransferPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isWithdrawPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidatorPoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"numAbsorbs\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"numAbsorbed\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"approxSpend\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"_reserved\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAssets\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numAssets\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"supplyPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"transferPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"withdrawPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"absorbPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"buyPaused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseGuardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceScale\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseAmount\",\"type\":\"uint256\"}],\"name\":\"quoteCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storeFrontPriceFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supplyFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyKink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateSlopeHigh\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyPerSecondInterestRateSlopeLow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"supplyTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalsBasic\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"baseSupplyIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"baseBorrowIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"trackingSupplyIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"trackingBorrowIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint104\",\"name\":\"totalSupplyBase\",\"type\":\"uint104\"},{\"internalType\":\"uint104\",\"name\":\"totalBorrowBase\",\"type\":\"uint104\"},{\"internalType\":\"uint40\",\"name\":\"lastAccrualTime\",\"type\":\"uint40\"},{\"internalType\":\"uint8\",\"name\":\"pauseFlags\",\"type\":\"uint8\"}],\"internalType\":\"struct CometStorage.TotalsBasic\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"totalsCollateral\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"totalSupplyAsset\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_reserved\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trackingIndexScale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferAssetFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userBasic\",\"outputs\":[{\"internalType\":\"int104\",\"name\":\"principal\",\"type\":\"int104\"},{\"internalType\":\"uint64\",\"name\":\"baseTrackingIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"baseTrackingAccrued\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"assetsIn\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"_reserved\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userCollateral\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"balance\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_reserved\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]}","/**\n * Isolated adapter over official Compound.js artifacts\n * (https://github.com/compound-finance/compound-js).\n *\n * The npm package peers ethers@5 and cannot be a hard runtime dependency next to\n * ethers@6 / viem. We vendor `comet-constants.json` from that repo and treat\n * official comet `deployments/` as the address source of truth.\n */\nimport { getAddress, type Address } from 'viem'\nimport cometConstants from './compound-js-artifacts/comet-constants.json'\n\nexport type CompoundJsInstanceId = string\n\ntype CompoundJsAddressMap = Record<string, Record<string, string | { contract?: string }>>\n\nconst INSTANCE_CHAIN_ID: Readonly<Record<string, number>> = {\n mainnet_usdc: 1,\n mainnet_weth: 1,\n polygon_usdc: 137,\n arbitrum_usdc: 42161,\n base_usdbc: 8453,\n base_weth: 8453,\n}\n\nexport type CompoundJsKnownComet = {\n instanceId: string\n chainId: number\n comet: Address\n baseSymbol: string\n collateralSymbols: string[]\n}\n\nfunction asAddressMap(): CompoundJsAddressMap {\n return cometConstants.address as CompoundJsAddressMap\n}\n\nexport function listCompoundJsCometInstances(): CompoundJsKnownComet[] {\n const address = asAddressMap()\n const base = cometConstants.base as Record<string, string>\n const collaterals = cometConstants.collaterals as Record<string, string[]>\n const out: CompoundJsKnownComet[] = []\n for (const [instanceId, contracts] of Object.entries(address)) {\n if (instanceId.startsWith('goerli_') || instanceId.startsWith('mumbai_') || instanceId.startsWith('fuji_')) {\n continue\n }\n const chainId = INSTANCE_CHAIN_ID[instanceId]\n const cometRaw = contracts.Comet\n if (typeof cometRaw !== 'string' || chainId == null) continue\n out.push({\n instanceId,\n chainId,\n comet: getAddress(cometRaw),\n baseSymbol: base[instanceId] ?? instanceId,\n collateralSymbols: collaterals[instanceId] ?? [],\n })\n }\n return out\n}\n\nexport function compoundJsCometAddress(instanceId: string): Address | null {\n const row = asAddressMap()[instanceId]\n const comet = row?.Comet\n if (typeof comet !== 'string') return null\n return getAddress(comet)\n}\n\nexport function compoundJsCollateralAddresses(instanceId: string): Address[] {\n const row = asAddressMap()[instanceId]\n const names = (cometConstants.collaterals as Record<string, string[]>)[instanceId] ?? []\n const out: Address[] = []\n for (const name of names) {\n const entry = row?.[name]\n const contract = typeof entry === 'string' ? entry : entry?.contract\n if (!contract) continue\n out.push(getAddress(contract))\n }\n return out\n}\n\n/** Cross-check: official deployment proxy should match Compound.js when both list the market. */\nexport function compoundJsAgreesWithOfficial(instanceId: string, officialComet: string): boolean {\n const js = compoundJsCometAddress(instanceId)\n if (!js) return false\n return js === getAddress(officialComet)\n}\n","/** Compound III rates are per-second, scaled by 1e18. */\n\nexport const COMPOUND_V3_SECONDS_PER_YEAR = 365 * 24 * 60 * 60\nexport const COMPOUND_V3_FACTOR_SCALE = 10n ** 18n\n\nexport function compoundV3RatePerSecondToAprDecimal(ratePerSecond: bigint): number {\n if (ratePerSecond <= 0n) return 0\n return (Number(ratePerSecond) / 1e18) * COMPOUND_V3_SECONDS_PER_YEAR\n}\n\nexport function compoundV3AprToPercentLabel(aprDecimal: number): string {\n if (!Number.isFinite(aprDecimal)) return '—'\n const pct = aprDecimal * 100\n if (Math.abs(pct) < 0.001) return '0.00%'\n return `${pct.toFixed(2)}%`\n}\n\nexport function compoundV3UtilizationToDecimal(utilization: bigint): number {\n if (utilization <= 0n) return 0\n return Number(utilization) / 1e18\n}\n\nexport function compoundV3FactorToPercent(factor: bigint): number {\n return Number(factor) / 1e16\n}\n\n/** Comet `getPrice` scale (USD, 8 decimals). */\nexport const COMPOUND_V3_PRICE_SCALE = 1e8\n/** Default tracking index scale when `trackingIndexScale()` is unavailable. */\nexport const COMPOUND_V3_TRACKING_INDEX_SCALE = 1e15\n\n/**\n * Forward COMP (or other reward-token) APR from tracking speed.\n * `trackingSpeed` is tokens/second × trackingIndexScale. Prices are Comet `getPrice` (1e8 USD).\n */\n/** Returns a percent (5 = 5%), or null when unpriced / zero speed. */\nexport function compoundV3TrackingSpeedToRewardAprPercent(args: {\n trackingSpeed: bigint\n trackingIndexScale: bigint\n totalBase: bigint\n baseDecimals: number\n basePrice: bigint\n rewardPrice: bigint\n}): number | null {\n if (args.trackingSpeed <= 0n || args.totalBase <= 0n || args.basePrice <= 0n || args.rewardPrice <= 0n) {\n return null\n }\n const scale = Number(args.trackingIndexScale > 0n ? args.trackingIndexScale : BigInt(COMPOUND_V3_TRACKING_INDEX_SCALE))\n if (!Number.isFinite(scale) || scale <= 0) return null\n const tokensPerYear = (Number(args.trackingSpeed) / scale) * COMPOUND_V3_SECONDS_PER_YEAR\n const rewardUsdPerYear = tokensPerYear * (Number(args.rewardPrice) / COMPOUND_V3_PRICE_SCALE)\n const totalUsd = (Number(args.totalBase) / 10 ** args.baseDecimals) * (Number(args.basePrice) / COMPOUND_V3_PRICE_SCALE)\n if (!Number.isFinite(rewardUsdPerYear) || !Number.isFinite(totalUsd) || totalUsd <= 0) return null\n const pct = (rewardUsdPerYear / totalUsd) * 100\n if (!Number.isFinite(pct) || pct < 0) return null\n return pct\n}\n","/**\n * Optional PaperclipLabs Compound V3 subgraphs (The Graph).\n * Never used as the execution address source — official comet deployments win.\n */\nconst COMPOUND_V3_SUBGRAPH_BY_CHAIN: Readonly<Record<number, string>> = {\n 1: '5nwMCSHaTqG3Kd2gHznbTXEnZ9QNWsssQfbHhDqQSQFp',\n 137: 'AaFtUWKfFdj2x8nnE3RxTSJkHwGHvawH3VWFBykCGzLs',\n 42161: 'Ff7ha9ELmpmg81D6nYxy4t8aGP26dPztqD1LDJNPqjLS',\n 8453: '2hcXhs36pTBDVUmk5K2Zkr6N4UYGwaHuco2a6jyTsijo',\n 10: 'FhHNkfh5z6Z2WCEBxB6V3s8RPxnJfWZ9zAfM5bVvbvbb',\n}\n\nexport type CompoundV3SubgraphMarketHint = {\n id: string\n comet: string\n}\n\nexport function compoundV3SubgraphIdForChain(chainId: number): string | null {\n return COMPOUND_V3_SUBGRAPH_BY_CHAIN[chainId] ?? null\n}\n\nexport async function fetchCompoundV3SubgraphMarkets(args: {\n chainId: number\n apiKey?: string\n}): Promise<CompoundV3SubgraphMarketHint[] | null> {\n const id = compoundV3SubgraphIdForChain(args.chainId)\n const apiKey = (args.apiKey ?? process.env.THE_GRAPH_API_KEY ?? '').trim()\n if (!id || !apiKey) return null\n const url = `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/${id}`\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n query: `query CompoundV3Markets { markets(first: 50) { id } }`,\n }),\n })\n if (!res.ok) return null\n const json = (await res.json()) as { data?: { markets?: Array<{ id: string }> } }\n const markets = json.data?.markets\n if (!markets) return null\n return markets.map((m) => ({ id: m.id, comet: m.id }))\n } catch {\n return null\n }\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","import { createPublicClient, defineChain, formatUnits, getAddress, zeroAddress, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport {\n COMPOUND_V3_TRACKING_INDEX_SCALE,\n compoundV3AprToPercentLabel,\n compoundV3FactorToPercent,\n compoundV3RatePerSecondToAprDecimal,\n compoundV3TrackingSpeedToRewardAprPercent,\n compoundV3UtilizationToDecimal,\n} from './apr.js'\nimport { cometInterfaceAbi, cometRewardsAbi, erc20ReadAbi } from './cometAbi.js'\nimport {\n getCompoundV3MarketByComet,\n listCompoundV3MarketsForChain,\n type CompoundV3MarketRecord,\n} from './markets.js'\nimport { compoundV3WrappedNative, isCompoundV3ChainSupported, isNativeAssetAddress } from './support.js'\nimport { fetchCompoundV3SubgraphMarkets } from './subgraph.js'\n\nexport type CompoundV3AssetInfoRow = {\n asset: string\n symbol: string\n decimals: number\n borrowCollateralFactorPercent: number\n liquidateCollateralFactorPercent: number\n priceRaw: string\n role: 'base' | 'collateral'\n}\n\nexport type CompoundV3MarketSummary = {\n chainId: number\n slug: string\n symbol: string\n comet: string\n rewards: string\n bulker: string | null\n baseToken: string | null\n utilization: number | null\n supplyAprPercent: string | null\n borrowAprPercent: string | null\n supplyRewardAprPercent: string | null\n borrowRewardAprPercent: string | null\n assets: CompoundV3AssetInfoRow[]\n}\n\nexport type CompoundV3AccountSummary = {\n comet: string\n symbol: string\n baseSupplied: string\n baseBorrowed: string\n collaterals: Array<{ asset: string; symbol: string; balance: string }>\n isBorrowCollateralized: boolean\n isLiquidatable: boolean\n rewardToken: string | null\n rewardOwed: string | null\n}\n\nfunction publicClient(rpcUrl: string, chainId: number): PublicClient {\n const chain = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain, transport: defiEvmTransport(rpcUrl) })\n}\n\nasync function readTokenMeta(\n client: PublicClient,\n asset: Address,\n): Promise<{ symbol: string; decimals: number }> {\n const [symbol, decimals] = await Promise.all([\n client.readContract({ address: asset, abi: erc20ReadAbi, functionName: 'symbol' }).catch(() => 'TOKEN'),\n client.readContract({ address: asset, abi: erc20ReadAbi, functionName: 'decimals' }).catch(() => 18),\n ])\n return { symbol: String(symbol), decimals: Number(decimals) }\n}\n\nasync function enrichMarketOnChain(\n client: PublicClient,\n market: CompoundV3MarketRecord,\n): Promise<CompoundV3MarketSummary> {\n const comet = market.comet\n const [baseToken, utilization, numAssets, decimals] = await Promise.all([\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseToken' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getUtilization' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'numAssets' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'decimals' }),\n ])\n const [supplyRate, borrowRate, baseMeta, baseFeed, supplySpeed, borrowSpeed, totalSupply, totalBorrow, trackingScale] =\n await Promise.all([\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getSupplyRate',\n args: [utilization],\n }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getBorrowRate',\n args: [utilization],\n }),\n readTokenMeta(client, getAddress(baseToken)),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTokenPriceFeed' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTrackingSupplySpeed' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseTrackingBorrowSpeed' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'totalSupply' }).catch(() => 0n),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'totalBorrow' }).catch(() => 0n),\n client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'trackingIndexScale' })\n .catch(() => BigInt(COMPOUND_V3_TRACKING_INDEX_SCALE)),\n ])\n const basePrice = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [baseFeed] })\n .catch(() => 0n)\n\n const assets: CompoundV3AssetInfoRow[] = [\n {\n asset: getAddress(baseToken),\n symbol: baseMeta.symbol,\n decimals: Number(decimals) || baseMeta.decimals,\n borrowCollateralFactorPercent: 0,\n liquidateCollateralFactorPercent: 0,\n priceRaw: basePrice.toString(),\n role: 'base',\n },\n ]\n\n const n = Number(numAssets)\n for (let i = 0; i < n; i++) {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfo',\n args: [i],\n })\n const token = getAddress(info.asset)\n const meta = await readTokenMeta(client, token)\n const price = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [info.priceFeed] })\n .catch(() => 0n)\n assets.push({\n asset: token,\n symbol: meta.symbol,\n decimals: meta.decimals,\n borrowCollateralFactorPercent: compoundV3FactorToPercent(info.borrowCollateralFactor),\n liquidateCollateralFactorPercent: compoundV3FactorToPercent(info.liquidateCollateralFactor),\n priceRaw: price.toString(),\n role: 'collateral',\n })\n }\n\n let rewardPrice = 0n\n try {\n const cfg = await client.readContract({\n address: getAddress(market.rewards),\n abi: cometRewardsAbi,\n functionName: 'rewardConfig',\n args: [comet],\n })\n const rewardToken = getAddress(cfg.token)\n const listed = assets.find((a) => a.asset.toLowerCase() === rewardToken.toLowerCase())\n if (listed && listed.priceRaw !== '0') {\n rewardPrice = BigInt(listed.priceRaw)\n } else {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfoByAddress',\n args: [rewardToken],\n })\n rewardPrice = await client\n .readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'getPrice', args: [info.priceFeed] })\n .catch(() => 0n)\n }\n } catch {\n rewardPrice = 0n\n }\n\n const baseDecimals = Number(decimals) || baseMeta.decimals\n const supplyRewardApr = compoundV3TrackingSpeedToRewardAprPercent({\n trackingSpeed: supplySpeed,\n trackingIndexScale: trackingScale,\n totalBase: totalSupply,\n baseDecimals,\n basePrice,\n rewardPrice,\n })\n const borrowRewardApr = compoundV3TrackingSpeedToRewardAprPercent({\n trackingSpeed: borrowSpeed,\n trackingIndexScale: trackingScale,\n totalBase: totalBorrow,\n baseDecimals,\n basePrice,\n rewardPrice,\n })\n\n return {\n chainId: market.chainId,\n slug: market.slug,\n symbol: market.symbol,\n comet: market.comet,\n rewards: market.rewards,\n bulker: market.bulker,\n baseToken: getAddress(baseToken),\n utilization: compoundV3UtilizationToDecimal(utilization),\n supplyAprPercent: compoundV3AprToPercentLabel(compoundV3RatePerSecondToAprDecimal(supplyRate)),\n borrowAprPercent: compoundV3AprToPercentLabel(compoundV3RatePerSecondToAprDecimal(borrowRate)),\n supplyRewardAprPercent: supplyRewardApr == null ? null : compoundV3AprToPercentLabel(supplyRewardApr / 100),\n borrowRewardAprPercent: borrowRewardApr == null ? null : compoundV3AprToPercentLabel(borrowRewardApr / 100),\n assets,\n }\n}\n\nfunction registryMarketRow(market: CompoundV3MarketRecord): CompoundV3MarketSummary {\n return {\n chainId: market.chainId,\n slug: market.slug,\n symbol: market.symbol,\n comet: market.comet,\n rewards: market.rewards,\n bulker: market.bulker,\n baseToken: market.baseToken ?? null,\n utilization: null,\n supplyAprPercent: null,\n borrowAprPercent: null,\n supplyRewardAprPercent: null,\n borrowRewardAprPercent: null,\n assets: market.baseToken\n ? [\n {\n asset: market.baseToken,\n symbol: market.slug.toUpperCase(),\n decimals: 18,\n borrowCollateralFactorPercent: 0,\n liquidateCollateralFactorPercent: 0,\n priceRaw: '0',\n role: 'base',\n },\n ]\n : [],\n }\n}\n\nexport async function compoundV3FetchMarketsSummary(args: {\n chainId: number\n rpcUrl?: string\n}): Promise<{ markets: CompoundV3MarketSummary[]; notes: string }> {\n if (!isCompoundV3ChainSupported(args.chainId)) {\n return { markets: [], notes: `Compound III is not deployed on chain ${args.chainId}.` }\n }\n const registry = listCompoundV3MarketsForChain(args.chainId)\n let subgraphNote = ''\n const subgraph = await fetchCompoundV3SubgraphMarkets({ chainId: args.chainId })\n if (subgraph) {\n subgraphNote = ` Subgraph listed ${subgraph.length} market id(s); official comet deployments are the address source.`\n }\n if (!args.rpcUrl?.trim()) {\n return {\n markets: registry.map(registryMarketRow),\n notes:\n 'Registry from official comet deployments. Pass rpcUrl (MCP server injects it) to enrich APRs, reward APRs, and collaterals.' +\n subgraphNote,\n }\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n const markets: CompoundV3MarketSummary[] = []\n for (const row of registry) {\n try {\n markets.push(await enrichMarketOnChain(client, row))\n } catch {\n markets.push(registryMarketRow(row))\n }\n }\n return {\n markets,\n notes:\n 'Comet proxy addresses from official deployments; base supply/borrow APR and COMP incentive APR from on-chain CometInterface. Incentive APR is extra and variable; null when the reward token has no on-chain price feed.' +\n subgraphNote,\n }\n}\n\nexport async function compoundV3FetchMarketSummary(args: {\n chainId: number\n comet: string\n rpcUrl?: string\n}): Promise<CompoundV3MarketSummary> {\n if (!args.rpcUrl?.trim()) {\n throw new Error('rpcUrl is required for ctm_compound_v3_fetch_market (MCP server injects it from the chain registry).')\n }\n const market = getCompoundV3MarketByComet(args.chainId, args.comet)\n if (!market) {\n throw new Error(`Unknown Compound III Comet ${args.comet} on chain ${args.chainId}.`)\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n return enrichMarketOnChain(client, market)\n}\n\nexport async function compoundV3FetchAccountSummary(args: {\n chainId: number\n comet: string\n account: string\n rpcUrl?: string\n}): Promise<CompoundV3AccountSummary> {\n if (!args.rpcUrl?.trim()) {\n throw new Error(\n 'rpcUrl is required for ctm_compound_v3_fetch_account (MCP server injects it from the chain registry).',\n )\n }\n const market = getCompoundV3MarketByComet(args.chainId, args.comet)\n if (!market) {\n throw new Error(`Unknown Compound III Comet ${args.comet} on chain ${args.chainId}.`)\n }\n const client = publicClient(args.rpcUrl, args.chainId)\n const comet = market.comet\n const account = getAddress(args.account)\n const [baseToken, decimals, supplied, borrowed, numAssets, collateralized, liquidatable] = await Promise.all([\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'baseToken' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'decimals' }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'balanceOf', args: [account] }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'borrowBalanceOf',\n args: [account],\n }),\n client.readContract({ address: comet, abi: cometInterfaceAbi, functionName: 'numAssets' }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'isBorrowCollateralized',\n args: [account],\n }),\n client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'isLiquidatable',\n args: [account],\n }),\n ])\n const baseMeta = await readTokenMeta(client, getAddress(baseToken))\n const dec = Number(decimals) || baseMeta.decimals\n const collaterals: CompoundV3AccountSummary['collaterals'] = []\n const n = Number(numAssets)\n for (let i = 0; i < n; i++) {\n const info = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'getAssetInfo',\n args: [i],\n })\n const token = getAddress(info.asset)\n const bal = await client.readContract({\n address: comet,\n abi: cometInterfaceAbi,\n functionName: 'collateralBalanceOf',\n args: [account, token],\n })\n const meta = await readTokenMeta(client, token)\n collaterals.push({\n asset: token,\n symbol: meta.symbol,\n balance: formatUnits(bal, meta.decimals),\n })\n }\n\n let rewardToken: string | null = null\n let rewardOwed: string | null = null\n try {\n const owed = await client.readContract({\n address: market.rewards,\n abi: cometRewardsAbi,\n functionName: 'getRewardOwed',\n args: [comet, account],\n })\n rewardToken = getAddress(owed.token)\n const rewardMeta = await readTokenMeta(client, getAddress(owed.token))\n rewardOwed = formatUnits(owed.owed, rewardMeta.decimals)\n } catch {\n rewardToken = null\n rewardOwed = null\n }\n\n return {\n comet,\n symbol: market.symbol,\n baseSupplied: formatUnits(supplied, dec),\n baseBorrowed: formatUnits(borrowed, dec),\n collaterals,\n isBorrowCollateralized: Boolean(collateralized),\n isLiquidatable: Boolean(liquidatable),\n rewardToken,\n rewardOwed,\n }\n}\n\nexport type CompoundV3AssetModes = {\n base: boolean\n collateral: boolean\n}\n\nconst chainAssetCache = new Map<number, Map<string, CompoundV3AssetModes>>()\n\nexport function compoundV3KeyForNodeAssetRow(args: {\n contractAddress: string\n chainId: number\n}): string {\n if (isNativeAssetAddress(args.contractAddress)) {\n const wrapped = compoundV3WrappedNative(args.chainId)\n return (wrapped ?? zeroAddress).toLowerCase()\n }\n return getAddress(args.contractAddress).toLowerCase()\n}\n\nexport async function ensureCompoundV3ChainAssetCache(args: {\n chainId: number\n rpcUrl?: string\n}): Promise<Map<string, CompoundV3AssetModes>> {\n const existing = chainAssetCache.get(args.chainId)\n if (existing && existing.size > 0 && !args.rpcUrl) return existing\n\n const map = new Map<string, CompoundV3AssetModes>()\n const add = (address: string, role: keyof CompoundV3AssetModes) => {\n const key = getAddress(address).toLowerCase()\n const cur = map.get(key) ?? { base: false, collateral: false }\n cur[role] = true\n map.set(key, cur)\n }\n\n if (args.rpcUrl?.trim()) {\n try {\n const { markets } = await compoundV3FetchMarketsSummary({ chainId: args.chainId, rpcUrl: args.rpcUrl })\n for (const m of markets) {\n for (const a of m.assets) add(a.asset, a.role === 'base' ? 'base' : 'collateral')\n }\n chainAssetCache.set(args.chainId, map)\n return map\n } catch {\n /* fall through to registry bases */\n }\n }\n\n for (const m of listCompoundV3MarketsForChain(args.chainId)) {\n if (m.baseToken) add(m.baseToken, 'base')\n }\n chainAssetCache.set(args.chainId, map)\n return map\n}\n\nexport function getCompoundV3AssetModesFromCache(\n chainId: number,\n contractAddress: string,\n): CompoundV3AssetModes | null {\n const cache = chainAssetCache.get(chainId)\n if (!cache) return null\n const key = compoundV3KeyForNodeAssetRow({ contractAddress, chainId })\n return cache.get(key) ?? null\n}\n\nexport function listCompoundV3MarketsForAsset(args: {\n chainId: number\n contractAddress: string\n}): CompoundV3MarketRecord[] {\n const key = compoundV3KeyForNodeAssetRow({ contractAddress: args.contractAddress, chainId: args.chainId })\n return listCompoundV3MarketsForChain(args.chainId).filter((m) => {\n if (m.baseToken && m.baseToken.toLowerCase() === key) return true\n const modes = chainAssetCache.get(args.chainId)?.get(key)\n return Boolean(modes?.base || modes?.collateral)\n })\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import { createPublicClient, defineChain, encodeFunctionData, getAddress, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { erc20ApproveAbi, erc20ReadAbi } from './cometAbi.js'\n\nexport type CompoundV3BuildStepKind =\n | 'weth_deposit'\n | 'weth_withdraw'\n | 'approve'\n | 'supply'\n | 'withdraw'\n | 'claim'\n | 'allow'\n | 'bulker_invoke'\n\nexport type CompoundV3BuildStep = {\n kind: CompoundV3BuildStepKind\n to: Address\n data: `0x${string}`\n value: bigint\n}\n\nexport function createCompoundV3PublicClient(rpcUrl: string, chainId: number): PublicClient {\n const chain = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain, transport: defiEvmTransport(rpcUrl) })\n}\n\nexport async function pushApproveIfNeeded(args: {\n client: PublicClient\n steps: CompoundV3BuildStep[]\n token: Address\n owner: Address\n spender: Address\n amountWei: bigint\n}): Promise<void> {\n const current = await args.client.readContract({\n address: args.token,\n abi: erc20ReadAbi,\n functionName: 'allowance',\n args: [getAddress(args.owner), getAddress(args.spender)],\n })\n if (current >= args.amountWei) return\n if (current > 0n) {\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [getAddress(args.spender), 0n],\n }),\n value: 0n,\n })\n }\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [getAddress(args.spender), args.amountWei],\n }),\n value: 0n,\n })\n}\n","import {\n encodeFunctionData,\n getAddress,\n maxUint256,\n parseUnits,\n type Address,\n} from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n cometInterfaceAbi,\n cometRewardsAbi,\n erc20ReadAbi,\n wethAbi,\n} from './cometAbi.js'\nimport { requireCompoundV3Market } from './markets.js'\nimport { resolveCompoundV3ActionAsset } from './support.js'\nimport {\n createCompoundV3PublicClient,\n pushApproveIfNeeded,\n type CompoundV3BuildStep,\n type CompoundV3BuildStepKind,\n} from './txHelpers.js'\n\nconst WETH_DEPOSIT_FALLBACK = 120_000n\nconst WETH_WITHDRAW_FALLBACK = 80_000n\nconst ERC20_APPROVE_FALLBACK = 100_000n\nconst COMET_SUPPLY_FALLBACK = 500_000n\nconst COMET_WITHDRAW_FALLBACK = 600_000n\nconst REWARDS_CLAIM_FALLBACK = 250_000n\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type { CompoundV3BuildStep, CompoundV3BuildStepKind } from './txHelpers.js'\n\ntype CommonBuildArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n comet: Address\n executorAddress: Address\n purposeText: string\n}\n\nfunction fallbackGas(kind: CompoundV3BuildStepKind): bigint {\n if (kind === 'weth_deposit') return WETH_DEPOSIT_FALLBACK\n if (kind === 'weth_withdraw') return WETH_WITHDRAW_FALLBACK\n if (kind === 'approve') return ERC20_APPROVE_FALLBACK\n if (kind === 'withdraw') return COMET_WITHDRAW_FALLBACK\n if (kind === 'claim') return REWARDS_CLAIM_FALLBACK\n return COMET_SUPPLY_FALLBACK\n}\n\nfunction finishBatch(args: {\n common: CommonBuildArgs\n steps: CompoundV3BuildStep[]\n purposeSuffix: string\n extraMeta: Record<string, unknown>\n}) {\n const evmSteps: EvmTxStep[] = args.steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: fallbackGas(s.kind),\n }))\n const first = evmSteps[0]\n if (!first) throw new Error('Compound III batch has no steps.')\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.common.keyGen,\n purposeText: args.common.purposeText,\n chainId: args.common.chainId,\n rpcUrl: args.common.rpcUrl,\n executorAddress: getAddress(args.common.executorAddress),\n chainDetail: args.common.chainDetail,\n useCustomGas: args.common.useCustomGas,\n customGasChainDetails: args.common.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: args.purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n buildBatchMeta: ({ index }) => {\n const s = args.steps[index]!\n return {\n signatureText: JSON.stringify({\n kind: 'CompoundV3',\n step: s.kind,\n to: s.to,\n ...args.extraMeta,\n }),\n evm: { type: `compound_v3_${s.kind}`, version: 1, chainId: String(args.common.chainId) },\n compoundV3: { ...args.extraMeta, step: s.kind, comet: args.common.comet },\n }\n },\n })\n}\n\nasync function resolveAmountWei(args: {\n rpcUrl: string\n chainId: number\n asset: Address\n amountHuman: string\n}): Promise<bigint> {\n if (args.amountHuman.trim().toLowerCase() === 'max') return maxUint256\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n const dec = await client.readContract({ address: args.asset, abi: erc20ReadAbi, functionName: 'decimals' })\n const amountWei = parseUnits(args.amountHuman, Number(dec))\n if (amountWei === 0n) throw new Error('Amount is zero after converting with token decimals.')\n return amountWei\n}\n\n/**\n * Supply base (earn / repay) or collateral. Native ETH always wraps via WETH.deposit\n * when `isNative` / zero address — Bulker is not required.\n */\nexport async function buildEvmMultisignBodyCompoundV3Supply(args: CommonBuildArgs & {\n asset: string\n amountHuman: string\n isNative?: boolean\n isNativeIn?: boolean\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: args.asset,\n isNative: args.isNative ?? args.isNativeIn,\n })\n const amountWei = await resolveAmountWei({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n })\n const executor = getAddress(args.executorAddress)\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n const steps: CompoundV3BuildStep[] = []\n\n if (resolved.isNative) {\n steps.push({\n kind: 'weth_deposit',\n to: resolved.asset,\n data: encodeFunctionData({ abi: wethAbi, functionName: 'deposit', args: [] }),\n value: amountWei,\n })\n }\n\n await pushApproveIfNeeded({\n client,\n steps,\n token: resolved.asset,\n owner: executor,\n spender: market.comet,\n amountWei,\n })\n\n steps.push({\n kind: 'supply',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometInterfaceAbi,\n functionName: 'supply',\n args: [resolved.asset, amountWei],\n }),\n value: 0n,\n })\n\n const n = steps.length\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: resolved.isNative\n ? `Compound III: ${n}-tx batch — wrap native to WETH, approve Comet, supply.`\n : n === 1\n ? 'Compound III: 1-tx — supply (allowance already sufficient).'\n : `Compound III: ${n}-tx batch — approve Comet, then supply.`,\n extraMeta: {\n market: market.symbol,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n isNative: resolved.isNative,\n },\n })\n}\n\nexport async function buildEvmMultisignBodyCompoundV3Repay(\n args: Parameters<typeof buildEvmMultisignBodyCompoundV3Supply>[0],\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n return buildEvmMultisignBodyCompoundV3Supply(args)\n}\n\n/**\n * Withdraw collateral or base. Withdrawing base while undercollateralized is borrow.\n * Native path always unwraps via WETH.withdraw after Comet.withdraw — Bulker is not required.\n */\nexport async function buildEvmMultisignBodyCompoundV3Withdraw(args: CommonBuildArgs & {\n asset: string\n amountHuman: string\n isNative?: boolean\n isNativeIn?: boolean\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: args.asset,\n isNative: args.isNative ?? args.isNativeIn,\n })\n const amountWei = await resolveAmountWei({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n })\n const executor = getAddress(args.executorAddress)\n const steps: CompoundV3BuildStep[] = [\n {\n kind: 'withdraw',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometInterfaceAbi,\n functionName: 'withdraw',\n args: [resolved.asset, amountWei],\n }),\n value: 0n,\n },\n ]\n if (resolved.isNative) {\n if (amountWei === maxUint256) {\n throw new Error('Native ETH unwrap cannot use amount \"max\"; pass an explicit amount to unwrap.')\n }\n steps.push({\n kind: 'weth_withdraw',\n to: resolved.asset,\n data: encodeFunctionData({ abi: wethAbi, functionName: 'withdraw', args: [amountWei] }),\n value: 0n,\n })\n }\n\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: resolved.isNative\n ? 'Compound III: 2-tx batch — withdraw WETH from Comet, unwrap to ETH.'\n : 'Compound III: 1-tx — withdraw (borrow if this is base while undercollateralized).',\n extraMeta: {\n market: market.symbol,\n asset: resolved.asset,\n amountHuman: args.amountHuman,\n isNative: resolved.isNative,\n note: 'Withdraw of base while undercollateralized borrows the base asset.',\n },\n })\n}\n\nexport async function buildEvmMultisignBodyCompoundV3ClaimRewards(args: CommonBuildArgs): Promise<{\n bodyForSign: Record<string, unknown>\n messageToSign: string\n}> {\n const market = requireCompoundV3Market(args.chainId, args.comet)\n const executor = getAddress(args.executorAddress)\n const steps: CompoundV3BuildStep[] = [\n {\n kind: 'claim',\n to: market.rewards,\n data: encodeFunctionData({\n abi: cometRewardsAbi,\n functionName: 'claim',\n args: [market.comet, executor, true],\n }),\n value: 0n,\n },\n ]\n return finishBatch({\n common: { ...args, comet: market.comet, executorAddress: executor },\n steps,\n purposeSuffix: 'Compound III: 1-tx — claim rewards.',\n extraMeta: { market: market.symbol, rewards: market.rewards },\n })\n}\n","import { encodeAbiParameters, encodeFunctionData, getAddress, parseAbi, parseUnits, type Address } from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n BULKER_ACTION_CLAIM_REWARD,\n BULKER_ACTION_SUPPLY_ASSET,\n BULKER_ACTION_SUPPLY_NATIVE_TOKEN,\n BULKER_ACTION_WITHDRAW_ASSET,\n BULKER_ACTION_WITHDRAW_NATIVE_TOKEN,\n cometBulkerAbi,\n cometInterfaceAbi,\n erc20ReadAbi,\n} from './cometAbi.js'\nimport { requireCompoundV3Market } from './markets.js'\nimport { resolveCompoundV3ActionAsset } from './support.js'\nimport {\n createCompoundV3PublicClient,\n pushApproveIfNeeded,\n type CompoundV3BuildStep,\n} from './txHelpers.js'\n\nconst ALLOW_FALLBACK = 80_000n\nconst ERC20_APPROVE_FALLBACK = 100_000n\nconst BULKER_INVOKE_FALLBACK = 900_000n\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type CompoundV3BulkerStepInput = {\n action: 'supply' | 'withdraw' | 'claim'\n asset?: string\n amountHuman?: string\n isNative?: boolean\n}\n\nconst cometAllowAbi = parseAbi(['function allow(address manager, bool isAllowed)'])\n\n/**\n * Combined Bulker.invoke. Native supply/withdraw uses ACTION_*_NATIVE_TOKEN.\n * Requires ERC-20 approve(bulker) and Comet.allow(bulker) when not already set.\n */\nexport async function buildEvmMultisignBodyCompoundV3Bulker(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n comet: Address\n executorAddress: Address\n purposeText: string\n steps: CompoundV3BulkerStepInput[]\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (!args.steps?.length) throw new Error('Bulker requires at least one step.')\n const market = requireCompoundV3Market(args.chainId, args.comet)\n if (!market.bulker) throw new Error(`No Bulker contract for ${market.symbol} on chain ${args.chainId}.`)\n const bulker = market.bulker\n const executor = getAddress(args.executorAddress)\n const client = createCompoundV3PublicClient(args.rpcUrl, args.chainId)\n\n const allowed = await client\n .readContract({\n address: market.comet,\n abi: cometInterfaceAbi,\n functionName: 'hasPermission',\n args: [executor, bulker],\n })\n .catch(() => false)\n\n const prefix: CompoundV3BuildStep[] = []\n if (!allowed) {\n prefix.push({\n kind: 'allow',\n to: market.comet,\n data: encodeFunctionData({\n abi: cometAllowAbi,\n functionName: 'allow',\n args: [bulker, true],\n }),\n value: 0n,\n })\n }\n\n const actions: `0x${string}`[] = []\n const datas: `0x${string}`[] = []\n let nativeValue = 0n\n\n for (const step of args.steps) {\n if (step.action === 'claim') {\n actions.push(BULKER_ACTION_CLAIM_REWARD)\n datas.push(\n encodeAbiParameters(\n [\n { type: 'address' },\n { type: 'address' },\n { type: 'address' },\n { type: 'bool' },\n ],\n [market.comet, market.rewards, executor, true],\n ),\n )\n continue\n }\n if (!step.asset || !step.amountHuman) {\n throw new Error(`Bulker ${step.action} requires asset and amountHuman.`)\n }\n const resolved = resolveCompoundV3ActionAsset({\n chainId: args.chainId,\n asset: step.asset,\n isNative: step.isNative,\n })\n const dec = await client.readContract({\n address: resolved.asset,\n abi: erc20ReadAbi,\n functionName: 'decimals',\n })\n const amountWei = parseUnits(step.amountHuman, Number(dec))\n if (amountWei === 0n) throw new Error('Bulker step amount is zero.')\n\n if (step.action === 'supply') {\n if (resolved.isNative) {\n actions.push(BULKER_ACTION_SUPPLY_NATIVE_TOKEN)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, amountWei],\n ),\n )\n nativeValue += amountWei\n } else {\n await pushApproveIfNeeded({\n client,\n steps: prefix,\n token: resolved.asset,\n owner: executor,\n spender: bulker,\n amountWei,\n })\n actions.push(BULKER_ACTION_SUPPLY_ASSET)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, resolved.asset, amountWei],\n ),\n )\n }\n } else {\n if (resolved.isNative) {\n actions.push(BULKER_ACTION_WITHDRAW_NATIVE_TOKEN)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, amountWei],\n ),\n )\n } else {\n actions.push(BULKER_ACTION_WITHDRAW_ASSET)\n datas.push(\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'address' }, { type: 'address' }, { type: 'uint256' }],\n [market.comet, executor, resolved.asset, amountWei],\n ),\n )\n }\n }\n }\n\n const invokeData = encodeFunctionData({\n abi: cometBulkerAbi,\n functionName: 'invoke',\n args: [actions, datas],\n })\n prefix.push({\n kind: 'bulker_invoke',\n to: bulker,\n data: invokeData,\n value: nativeValue,\n })\n\n const evmSteps: EvmTxStep[] = prefix.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas:\n s.kind === 'approve' ? ERC20_APPROVE_FALLBACK : s.kind === 'allow' ? ALLOW_FALLBACK : BULKER_INVOKE_FALLBACK,\n }))\n const first = evmSteps[0]!\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: `Compound III: ${evmSteps.length}-tx Bulker batch (${args.steps.map((s) => s.action).join(', ')}).`,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n payableValueWei: nativeValue > 0n ? nativeValue : undefined,\n buildBatchMeta: ({ index }) => {\n const s = prefix[index]!\n return {\n signatureText: JSON.stringify({\n kind: 'CompoundV3',\n step: s.kind,\n bulker,\n comet: market.comet,\n actions: args.steps.map((st) => st.action),\n }),\n evm: { type: `compound_v3_${s.kind}`, version: 1, chainId: String(args.chainId) },\n compoundV3: { market: market.symbol, comet: market.comet, bulker, step: s.kind },\n }\n },\n })\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { COMPOUND_V3_PROTOCOL_ID, isCompoundV3ChainSupported } from './support.js'\n\nexport const compoundV3ProtocolModule: ProtocolModule = {\n id: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n const id = typeof ctx.chainId === 'string' ? Number(ctx.chainId) : ctx.chainId\n return ctx.chainCategory === 'evm' && isCompoundV3ChainSupported(id)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'native' || token.kind === 'erc20')\n },\n actions: [\n {\n id: 'compound-v3.supply',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Supply base (earn/repay) or collateral to a Comet proxy',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.withdraw',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw collateral or base (withdraw of base while undercollateralized = borrow)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.repay',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Repay base debt by supplying base',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.claim-rewards',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Claim COMP / reward token from CometRewards',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'compound-v3.bulker',\n protocolId: COMPOUND_V3_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Combined Bulker.invoke (optional)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n ],\n}\n\nregisterProtocolModule(compoundV3ProtocolModule)\n\nexport * from './support.js'\nexport * from './markets.js'\nexport * from './cometAbi.js'\nexport * from './compoundJs.js'\nexport * from './apr.js'\nexport * from './subgraph.js'\nexport * from './reads.js'\nexport * from './multisign.js'\nexport * from './bulkerMultisign.js'\nexport * from './txHelpers.js'\n"]}
|