{"version":3,"sources":["../src/index.ts","../src/actions/read.ts","../src/abi/generated/bonding-curve.ts","../src/abi/generated/buyback-vault.ts","../src/abi/generated/emergency-distributor.ts","../src/abi/generated/emergency-distributor-factory.ts","../src/abi/generated/fee-escrow.ts","../src/abi/generated/graduation-coordinator.ts","../src/abi/generated/holder-aware-launch-forwarder.ts","../src/abi/generated/holder-distributor.ts","../src/abi/generated/holder-distributor-factory.ts","../src/abi/generated/launch-deployer.ts","../src/abi/generated/launch-factory.ts","../src/abi/generated/launch-locker.ts","../src/abi/generated/launcher-token.ts","../src/abi/generated/meme-hook.ts","../src/abi/generated/partner-registry.ts","../src/converters/state.ts","../src/errors.ts","../../core/src/errors.ts","../../core/src/chain.ts","../../core/src/prepared.ts","../../core/src/transaction.ts","../src/math/curve.ts","../src/math/protection.ts","../src/actions/block.ts","../src/actions/approval.ts","../src/actions/buyback.ts","../src/actions/write/prepared.ts","../src/actions/write/shared.ts","../src/actions/config.ts","../src/actions/curve.ts","../src/actions/emergency-exit.ts","../src/math/emergency-exit.ts","../src/actions/fee-escrow.ts","../src/actions/governance.ts","../src/actions/graduation.ts","../src/actions/holder.ts","../src/actions/keeper.ts","../src/actions/partner.ts","../src/events.ts","../src/actions/transaction.ts","../src/actions/write/token.ts","../src/deployment.ts","../src/math/create-params.ts","../src/actions/write/trade.ts","../src/math/fee.ts","../src/math/pricing.ts","../src/math/slippage.ts","../src/chains.ts","../src/client.ts","../src/deployments/arc-mainnet.ts","../src/deployments/arc-testnet.ts","../src/factory-client.ts","../src/verify.ts"],"sourcesContent":["export * from \"./actions\";\nexport * from \"./chains\";\nexport * from \"./client\";\nexport * from \"./converters\";\nexport * from \"./deployment\";\nexport * from \"./deployments\";\nexport * from \"./errors\";\nexport * from \"./events\";\nexport * from \"./factory-client\";\nexport * from \"./math\";\nexport * from \"./types\";\nexport * from \"./verify\";\n","import { type Address, erc20Abi, getAddress } from \"viem\";\n\nimport { bondingCurveAbi, launcherTokenAbi, launchFactoryAbi } from \"../abi/generated\";\nimport {\n  toLaunchpadCurveState,\n  toLaunchpadGraduationRecord,\n  toLaunchpadLaunchRecord,\n} from \"../converters/state\";\nimport { LaunchpadUnknownTokenError } from \"../errors\";\nimport { currentLaunchpadSnipeTaxBps } from \"../math/protection\";\nimport type {\n  LaunchpadActionContext,\n  LaunchpadCurvePendingFees,\n  LaunchpadCurveState,\n  LaunchpadErc20Metadata,\n  LaunchpadGraduationProgress,\n  LaunchpadGraduationRecord,\n  LaunchpadLaunchRecord,\n  LaunchpadReadOptions,\n  LaunchpadTokenInfo,\n  LaunchpadTokenState,\n  LaunchpadTradeAvailability,\n  LaunchpadTradeBlockedReason,\n} from \"../types\";\nimport { blockSelector } from \"./block\";\n\n/** Raised when a read is attempted with an input the factory would reject outright. */\nexport class InvalidLaunchpadReadInputError extends Error {\n  readonly field: string;\n\n  constructor(field: string, message: string) {\n    super(message);\n    this.name = \"InvalidLaunchpadReadInputError\";\n    this.field = field;\n  }\n}\n\n/**\n * Raised when a composite read that must observe one block is asked to use a tag with no stable\n * height. `pending` names a block that does not exist yet, so nothing can be pinned to it.\n */\nexport class UnpinnableBlockTagError extends Error {\n  readonly blockTag: string;\n\n  constructor(blockTag: string) {\n    super(\n      `Block tag \"${blockTag}\" has no stable height, so a same-block read cannot be pinned to it. Pass an explicit blockNumber, or use \"latest\", \"safe\", or \"finalized\".`,\n    );\n    this.name = \"UnpinnableBlockTagError\";\n    this.blockTag = blockTag;\n  }\n}\n\n/**\n * Resolves a concrete height that every part of a composite read can be pinned to.\n *\n * Reads that combine several calls must not each resolve `latest` independently: the chain head can\n * advance between them, silently mixing one block's state with another block's height. That matters\n * more in V2 than it did in V3 — a curve snapshot is assembled from several separate getters rather\n * than one struct read, so an unpinned read can produce reserves that never simultaneously existed.\n */\nexport async function resolvePinnedBlockNumber(\n  context: LaunchpadActionContext,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  if (options?.blockNumber !== undefined) return options.blockNumber;\n  if (options?.blockTag === undefined || options.blockTag === \"latest\") {\n    return context.publicClient.getBlockNumber();\n  }\n  if (options.blockTag === \"pending\") throw new UnpinnableBlockTagError(options.blockTag);\n\n  const block = await context.publicClient.getBlock({ blockTag: options.blockTag });\n  if (block.number === null || block.number === undefined) {\n    throw new UnpinnableBlockTagError(options.blockTag);\n  }\n  return block.number;\n}\n\nfunction assertPositiveAmount(field: string, value: bigint): void {\n  if (value <= 0n) {\n    throw new InvalidLaunchpadReadInputError(field, `${field} must be a positive bigint.`);\n  }\n}\n\n/**\n * True when `token` was launched by this deployment's factory.\n *\n * Frontends that let a user paste an arbitrary address must check this first: unlike V3's\n * `getTokenState`, the V2 record getter does not revert for a stranger address — it returns a\n * zero-filled struct whose `curve` is the zero address.\n */\nexport async function isLaunchpadToken(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<boolean> {\n  const curve = await context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"curveFor\",\n    args: [token],\n    ...blockSelector(options),\n  });\n  return curve !== \"0x0000000000000000000000000000000000000000\";\n}\n\n/**\n * Resolves a launch token's `BondingCurve` address.\n *\n * The single most-used read in V2: the factory no longer holds per-token state or trading entry\n * points, so nearly every other call needs the curve first. Callers making several calls for one\n * token should resolve it once and pass it down rather than re-reading per call.\n */\nexport async function getLaunchpadCurveAddress(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<Address> {\n  const curve = await context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"curveFor\",\n    args: [token],\n    ...blockSelector(options),\n  });\n  if (curve === \"0x0000000000000000000000000000000000000000\") {\n    throw new LaunchpadUnknownTokenError(token);\n  }\n  return getAddress(curve);\n}\n\n/** Reads the launch's immutable economics record. Throws for a token this factory did not launch. */\nexport async function getLaunchpadLaunchRecord(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadLaunchRecord> {\n  const raw = await context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"getLaunchedToken\",\n    args: [token],\n    ...blockSelector(options),\n  });\n  return toLaunchpadLaunchRecord(raw);\n}\n\n/** Reads the two-step graduation record. Available for any launched token, in every status. */\nexport async function getLaunchpadGraduation(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadGraduationRecord> {\n  const [status, sweptAt, tokenAmount, quoteAmount, positionId] =\n    await context.publicClient.readContract({\n      address: context.deployment.contracts.factory,\n      abi: launchFactoryAbi,\n      functionName: \"graduations\",\n      args: [token],\n      ...blockSelector(options),\n    });\n  return toLaunchpadGraduationRecord({ status, sweptAt, tokenAmount, quoteAmount, positionId });\n}\n\n/**\n * Reads a curve's live pricing state at one block.\n *\n * `phantomQuote` and `graduationThreshold` are read from the **curve**, never from the deployment's\n * pinned quote-token economics, even though the two normally agree. Both are immutable per curve,\n * frozen at creation, while governance can move the quote token's economics afterwards with\n * `setQuoteTokenEconomics`. Preferring the pinned value would therefore misprice every curve\n * created before such a change: `reservedTokens` derives from these two, so a stale threshold\n * shifts the graduation boundary and silently corrupts both the sellable supply and the\n * partial-fill point.\n */\nexport async function getLaunchpadCurveState(\n  context: LaunchpadActionContext,\n  input: { readonly curve: Address },\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadCurveState> {\n  const selector = blockSelector(options);\n  const curveContract = { address: input.curve, abi: bondingCurveAbi } as const;\n\n  const [\n    initialSupply,\n    phantomQuote,\n    graduationThreshold,\n    curveFeeBps,\n    creatorTaxBps,\n    snipeTax,\n    trackedTokens,\n    trackedQuote,\n    quoteFeeBalance,\n    creatorTaxBalance,\n    graduated,\n    launchedAt,\n  ] = await Promise.all([\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"initialSupply\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"phantomQuote\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"graduationThreshold\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"curveFeeBps\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"creatorTaxBps\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"snipeTaxConfigSnapshot\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"trackedTokens\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"trackedQuote\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"quoteFeeBalance\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"creatorTaxBalance\",\n      ...selector,\n    }),\n    context.publicClient.readContract({ ...curveContract, functionName: \"graduated\", ...selector }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"launchedAt\",\n      ...selector,\n    }),\n  ]);\n\n  return toLaunchpadCurveState({\n    curve: input.curve,\n    supply: initialSupply,\n    phantomQuote,\n    graduationThreshold,\n    // `curveFeeBps` is a uint256 on chain but is bounded to [0, 10000] at construction, so it is\n    // always safe to narrow here; the math modules take bps as `number` throughout.\n    curveFeeBps: Number(curveFeeBps),\n    creatorTaxBps,\n    snipeTax: { startBps: snipeTax.startBps, durationSeconds: snipeTax.durationSeconds },\n    trackedTokens,\n    trackedQuote,\n    quoteFeeBalance,\n    creatorTaxBalance,\n    graduated,\n    launchedAt,\n  });\n}\n\n/** Reads a launch's record, curve state and graduation status, all pinned to one block. */\nexport async function getLaunchpadTokenState(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadTokenState> {\n  const blockNumber = await resolvePinnedBlockNumber(context, options);\n  const pinned = { blockNumber };\n  const record = await getLaunchpadLaunchRecord(context, token, pinned);\n  const [curveState, graduation] = await Promise.all([\n    getLaunchpadCurveState(context, { curve: record.curve }, pinned),\n    getLaunchpadGraduation(context, token, pinned),\n  ]);\n\n  return Object.freeze({\n    id: { chainId: context.deployment.chainId, address: getAddress(token) },\n    record,\n    curveState,\n    graduation,\n  });\n}\n\n/** Reads the fees a curve has accrued but not yet swept. */\nexport async function getLaunchpadCurvePendingFees(\n  context: LaunchpadActionContext,\n  curve: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadCurvePendingFees> {\n  const selector = blockSelector(options);\n  const curveContract = { address: curve, abi: bondingCurveAbi } as const;\n  const [protocol, creator, creatorTax, buyback] = await Promise.all([\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"pendingProtocol\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"pendingCreator\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"pendingCreatorTax\",\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...curveContract,\n      functionName: \"pendingBuyback\",\n      ...selector,\n    }),\n  ]);\n  return Object.freeze({ protocol, creator, creatorTax, buyback });\n}\n\n/** Reads one partner's unswept balance on a curve, keyed by partner id. */\nexport function getLaunchpadCurvePendingPartnerFee(\n  context: LaunchpadActionContext,\n  curve: Address,\n  partnerId: `0x${string}`,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  return context.publicClient.readContract({\n    address: curve,\n    abi: bondingCurveAbi,\n    functionName: \"pendingPartner\",\n    args: [partnerId],\n    ...blockSelector(options),\n  });\n}\n\n/**\n * Whether an account is exempt from the opening snipe tax on this curve.\n *\n * Must be asked about the **token recipient** of a trade, never the payer: a router submitting on\n * a trader's behalf neither lends nor borrows its own exemption status.\n */\nexport function isLaunchpadTaxExempt(\n  context: LaunchpadActionContext,\n  curve: Address,\n  account: Address,\n  options?: LaunchpadReadOptions,\n): Promise<boolean> {\n  return context.publicClient.readContract({\n    address: curve,\n    abi: bondingCurveAbi,\n    functionName: \"isLaunchTaxExempt\",\n    args: [account],\n    ...blockSelector(options),\n  });\n}\n\n/**\n * The snipe tax a given token recipient would pay right now, straight from the curve.\n *\n * Prefer this over recomputing locally when the exact rate matters: the contract resolves it\n * against `block.timestamp`, and a rate computed off the client clock can differ by a full decay\n * step near a second boundary.\n */\nexport function getLaunchpadCurrentSnipeTaxBps(\n  context: LaunchpadActionContext,\n  curve: Address,\n  tokenRecipient: Address,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  return context.publicClient.readContract({\n    address: curve,\n    abi: bondingCurveAbi,\n    functionName: \"currentSnipeTaxBps\",\n    args: [tokenRecipient],\n    ...blockSelector(options),\n  });\n}\n\n/** On-chain buy quote: tokens received for `netQuoteIn`, already net of fees, capped at the boundary. */\nexport function quoteLaunchpadBuyNet(\n  context: LaunchpadActionContext,\n  curve: Address,\n  netQuoteIn: bigint,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  assertPositiveAmount(\"netQuoteIn\", netQuoteIn);\n  return context.publicClient.readContract({\n    address: curve,\n    abi: bondingCurveAbi,\n    functionName: \"quoteBuyNet\",\n    args: [netQuoteIn],\n    ...blockSelector(options),\n  });\n}\n\n/** On-chain exact-output quote: net quote required to receive exactly `tokenOut`. */\nexport function quoteLaunchpadNetRequiredToBuy(\n  context: LaunchpadActionContext,\n  curve: Address,\n  tokenOut: bigint,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  assertPositiveAmount(\"tokenOut\", tokenOut);\n  return context.publicClient.readContract({\n    address: curve,\n    abi: bondingCurveAbi,\n    functionName: \"quoteNetRequiredToBuy\",\n    args: [tokenOut],\n    ...blockSelector(options),\n  });\n}\n\n/** On-chain sell quote: gross quote the curve gives up for `tokenIn`, before fees. */\nexport function quoteLaunchpadSellGross(\n  context: LaunchpadActionContext,\n  curve: Address,\n  tokenIn: bigint,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  assertPositiveAmount(\"tokenIn\", tokenIn);\n  return context.publicClient.readContract({\n    address: curve,\n    abi: bondingCurveAbi,\n    functionName: \"quoteSellGross\",\n    args: [tokenIn],\n    ...blockSelector(options),\n  });\n}\n\n/** Reads `LauncherToken`'s permanently stored structured info. */\nexport async function getLaunchpadTokenInfo(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadTokenInfo> {\n  const selector = blockSelector(options);\n  const tokenContract = { address: token, abi: launcherTokenAbi } as const;\n  const [name, symbol, logo, description, socials, deployer, curve, tokenInfoHash] =\n    await Promise.all([\n      context.publicClient.readContract({ ...tokenContract, functionName: \"name\", ...selector }),\n      context.publicClient.readContract({ ...tokenContract, functionName: \"symbol\", ...selector }),\n      context.publicClient.readContract({ ...tokenContract, functionName: \"logo\", ...selector }),\n      context.publicClient.readContract({\n        ...tokenContract,\n        functionName: \"description\",\n        ...selector,\n      }),\n      context.publicClient.readContract({ ...tokenContract, functionName: \"socials\", ...selector }),\n      context.publicClient.readContract({\n        ...tokenContract,\n        functionName: \"deployer\",\n        ...selector,\n      }),\n      context.publicClient.readContract({ ...tokenContract, functionName: \"curve\", ...selector }),\n      context.publicClient.readContract({\n        ...tokenContract,\n        functionName: \"tokenInfoHash\",\n        ...selector,\n      }),\n    ]);\n\n  return Object.freeze({\n    name,\n    symbol,\n    logo,\n    description,\n    socials: Object.freeze({\n      twitter: socials.twitter,\n      telegram: socials.telegram,\n      discord: socials.discord,\n      website: socials.website,\n      farcaster: socials.farcaster,\n    }),\n    deployer: getAddress(deployer),\n    curve: getAddress(curve),\n    tokenInfoHash,\n  });\n}\n\n/** Reads name, symbol and decimals for any ERC-20 at one block. */\nexport async function getLaunchpadErc20Metadata(\n  context: LaunchpadActionContext,\n  asset: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadErc20Metadata> {\n  const selector = blockSelector(options);\n  const assetContract = { address: asset, abi: erc20Abi } as const;\n  const [name, symbol, decimals] = await Promise.all([\n    context.publicClient.readContract({ ...assetContract, functionName: \"name\", ...selector }),\n    context.publicClient.readContract({ ...assetContract, functionName: \"symbol\", ...selector }),\n    context.publicClient.readContract({ ...assetContract, functionName: \"decimals\", ...selector }),\n  ]);\n  return Object.freeze({ address: getAddress(asset), name, symbol, decimals });\n}\n\n/**\n * Reads an ERC-20 allowance.\n *\n * The spender differs by operation in V2, and getting it wrong produces an approval that looks\n * right and still reverts: **creation** (`createToken`, and `launchAndBuy` through the forwarder)\n * is pulled by the **factory**, while **trading** (`buyExactIn`/`sellExactIn`) is pulled by the\n * token's own **curve**.\n */\nexport function getErc20Allowance(\n  context: LaunchpadActionContext,\n  asset: Address,\n  owner: Address,\n  spender: Address,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  return context.publicClient.readContract({\n    address: asset,\n    abi: erc20Abi,\n    functionName: \"allowance\",\n    args: [owner, spender],\n    ...blockSelector(options),\n  });\n}\n\n/** Reads an ERC-20 balance. */\nexport function getErc20Balance(\n  context: LaunchpadActionContext,\n  asset: Address,\n  owner: Address,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  return context.publicClient.readContract({\n    address: asset,\n    abi: erc20Abi,\n    functionName: \"balanceOf\",\n    args: [owner],\n    ...blockSelector(options),\n  });\n}\n\n/**\n * Graduation progress on the Token side, matching the contract's own boundary.\n *\n * Reported against initially-sellable supply rather than a quote target, so it saturates at exactly\n * 100% — V3's quote-denominated progress could be overshot by one large buy. Progress can also move\n * backwards, which is correct: a sell returns tokens to the curve.\n *\n * Takes the supply from the curve state rather than as a separate argument, so a caller cannot pass\n * one that disagrees with the reservedTokens the same state was built from.\n */\nexport function getLaunchpadGraduationProgress(\n  curveState: LaunchpadCurveState,\n): LaunchpadGraduationProgress {\n  const initialSellableTokens = curveState.initialSupply - curveState.reservedTokens;\n  const soldTokens = initialSellableTokens - curveState.sellableTokens;\n  const progressBps =\n    initialSellableTokens === 0n ? 10_000 : Number((soldTokens * 10_000n) / initialSellableTokens);\n  return Object.freeze({\n    progressBps,\n    soldTokens,\n    initialSellableTokens,\n    sellableTokens: curveState.sellableTokens,\n  });\n}\n\n/**\n * Derives trade availability from already-read state, so a UI can render the gate and the current\n * rates without duplicating `_requireTradingOpen`'s rules.\n *\n * `snipeTaxBps` is reported for a **non-exempt** recipient. An exempt one always pays zero; resolve\n * that per recipient with {@link isLaunchpadTaxExempt} rather than assuming this value applies.\n */\nexport function toLaunchpadTradeAvailability(\n  state: LaunchpadTokenState,\n  input: { readonly blockNumber: bigint; readonly timestamp: bigint },\n): LaunchpadTradeAvailability {\n  const { curveState, graduation, record } = state;\n\n  const blockedReason = ((): LaunchpadTradeBlockedReason | undefined => {\n    if (graduation.status === \"emergencyExited\") return \"emergencyExited\";\n    if (graduation.status !== \"notGraduated\" || curveState.graduated) return \"graduated\";\n    if (curveState.graduationReady) return \"graduationReady\";\n    return undefined;\n  })();\n\n  const snipeTaxBps = currentLaunchpadSnipeTaxBps({\n    snipeTax: curveState.snipeTax,\n    launchedAt: curveState.launchedAt,\n    now: input.timestamp,\n    isExempt: false,\n  });\n\n  const tradable = blockedReason === undefined;\n  return Object.freeze({\n    status: graduation.status,\n    canBuy: tradable,\n    canSell: tradable,\n    // Curve fee plus creator tax: the two components every trade pays regardless of recipient.\n    baseFeeBps: curveState.curveFeeBps + record.creatorTaxBps,\n    snipeTaxBps,\n    blockNumber: input.blockNumber,\n    timestamp: input.timestamp,\n    ...(blockedReason ? { blockedReason } : {}),\n  });\n}\n","// This file is generated. Do not edit it manually.\nexport const bondingCurveAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"initialization\",\n        type: \"tuple\",\n        internalType: \"struct CurveInitialization\",\n        components: [\n          {\n            name: \"factory\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"graduationCoordinator\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"partnerRegistry\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"feeEscrow\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"buybackVault\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"quoteToken\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"originalCreator\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"creatorFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"supply\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"phantomQuote\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"graduationThreshold\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"curveFeeBps\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"creatorTaxBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"buybackEnabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"feePolicy\",\n            type: \"tuple\",\n            internalType: \"struct FeePolicy\",\n            components: [\n              {\n                name: \"protocolFeeRecipient\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"protocolFeeShareBps\",\n                type: \"uint16\",\n                internalType: \"uint16\",\n              },\n              {\n                name: \"buybackBurnBps\",\n                type: \"uint16\",\n                internalType: \"uint16\",\n              },\n              {\n                name: \"hookFeeBps\",\n                type: \"uint16\",\n                internalType: \"uint16\",\n              },\n              {\n                name: \"maxInternalPriceImpactBps\",\n                type: \"uint16\",\n                internalType: \"uint16\",\n              },\n            ],\n          },\n          {\n            name: \"snipeTax\",\n            type: \"tuple\",\n            internalType: \"struct SnipeTaxConfig\",\n            components: [\n              {\n                name: \"startBps\",\n                type: \"uint16\",\n                internalType: \"uint16\",\n              },\n              {\n                name: \"durationSeconds\",\n                type: \"uint32\",\n                internalType: \"uint32\",\n              },\n            ],\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"buyExactIn\",\n    inputs: [\n      {\n        name: \"quoteInRaw\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"minTokenOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"deadline\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"tokenOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteSpentRaw\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"buyExactIn\",\n    inputs: [\n      {\n        name: \"quoteInRaw\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"minTokenOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"deadline\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"tokenOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteSpentRaw\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"buybackEnabled\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"buybackVault\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"creatorFeeRecipient\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"creatorTaxBalance\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"creatorTaxBps\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"currentSnipeTaxBps\",\n    inputs: [\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"curveFeeBps\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"factory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"feeEscrow\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"feePolicySnapshot\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct FeePolicy\",\n        components: [\n          {\n            name: \"protocolFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"protocolFeeShareBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"buybackBurnBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"hookFeeBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"maxInternalPriceImpactBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"graduate\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"quoteOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"graduated\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"graduationCoordinator\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"graduationReady\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"graduationThreshold\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"initialSupply\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"initializeLaunchTaxExemptions\",\n    inputs: [\n      {\n        name: \"accounts\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"initializeToken\",\n    inputs: [\n      {\n        name: \"token_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"isLaunchTaxExempt\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchTaxExemptionsInitialized\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchedAt\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"originalCreator\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerRegistry\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingBuyback\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingCreator\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingCreatorTax\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingPartner\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingProtocol\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"phantomQuote\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pricingReserves\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"quoteReserve\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenReserve\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"quoteBuyNet\",\n    inputs: [\n      {\n        name: \"netQuoteIn\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"tokenOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"quoteFeeBalance\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"quoteNetRequiredToBuy\",\n    inputs: [\n      {\n        name: \"tokenOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"netQuoteIn\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"quoteSellGross\",\n    inputs: [\n      {\n        name: \"tokenIn\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"grossQuoteOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"quoteToken\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rescueCurveFees\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rescuePartnerFees\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"reservedTokens\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"sellExactIn\",\n    inputs: [\n      {\n        name: \"tokenIn\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"minQuoteOutRaw\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"deadline\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"quoteOutRaw\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sellExactIn\",\n    inputs: [\n      {\n        name: \"tokenIn\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"minQuoteOutRaw\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"deadline\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"quoteOutRaw\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sellableTokens\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setBuybackEnabled\",\n    inputs: [\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setCreatorFeeRecipient\",\n    inputs: [\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snipeTaxConfigSnapshot\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct SnipeTaxConfig\",\n        components: [\n          {\n            name: \"startBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"durationSeconds\",\n            type: \"uint32\",\n            internalType: \"uint32\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"sweepCreator\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sweepFees\",\n    inputs: [\n      {\n        name: \"minBuybackTokensOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sweepPartner\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sweepProtocol\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"token\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"trackedQuote\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"trackedTokens\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"AutoGraduationFailed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"gasRemaining\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackCreatorRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackEnabledUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackLocked\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"locker\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackReleased\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"protocolAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVaultSet\",\n    inputs: [\n      {\n        name: \"buybackVault\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVestRegistered\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideCancelled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideProposed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"proposedRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"effectiveAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expiresAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveBuybackSettled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"executed\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveFeesSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"beneficiary\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveTrade\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"feePayer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"isBuy\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"grossQuoteBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteSpentOrReceivedRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"baseFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"snipeTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DeniedCreatorUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"denied\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyDistributorFactorySet\",\n    inputs: [\n      {\n        name: \"emergencyDistributorFactory\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyExited\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeAllocated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"feeBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorImmediateRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"buybackBudgetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"platformNetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeClaimed\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeePolicyUpdated\",\n    inputs: [\n      {\n        name: \"previousProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeSweepOperatorUpdated\",\n    inputs: [\n      {\n        name: \"previousOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationCoordinatorSet\",\n    inputs: [\n      {\n        name: \"graduationCoordinator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationExecutorSet\",\n    inputs: [\n      {\n        name: \"graduationExecutor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigAdded\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigUpdated\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchDeployerSet\",\n    inputs: [\n      {\n        name: \"launchDeployer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchEnabledUpdated\",\n    inputs: [\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchFeeUpdated\",\n    inputs: [\n      {\n        name: \"previousLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchForwarderSet\",\n    inputs: [\n      {\n        name: \"previousForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchTaxExemptionAdded\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorInitialBuyBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorTaxBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MemeHookSet\",\n    inputs: [\n      {\n        name: \"memeHook\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferStarted\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"pendingController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferred\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerCreated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"controller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"shareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerEnabledUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeClaimed\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerNameUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"newName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerPolicyUpdated\",\n    inputs: [\n      {\n        name: \"defaultPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"maxPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerRecipientUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerShareUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenApprovalUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"approved\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenEconomicsUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"phantomQuote\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint8\",\n        indexed: false,\n        internalType: \"uint8\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxCharged\",\n    inputs: [\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amountRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxSecondsUpdated\",\n    inputs: [\n      {\n        name: \"newSeconds\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxStartBpsUpdated\",\n    inputs: [\n      {\n        name: \"newStartBps\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"TokenCreated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenInfoHash\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"creatorFeeRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"buybackEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"creatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"WhitelistedLauncherUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressInsufficientBalance\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AlreadyGraduated\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AlreadySet\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"CurveOutputExceedsReserve\",\n    inputs: [\n      {\n        name: \"amountOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"reserveOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"CurveTokenNotInitialized\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"CurveTokenValidationFailed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"CurveTradingClosed\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"DuplicateLaunchTaxExemption\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"FailedInnerCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InsufficientQuoteReserve\",\n    inputs: [\n      {\n        name: \"available\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"required\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InternalSwapRequiresOperator\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidAmount\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConfiguration\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidCurveReserves\",\n    inputs: [\n      {\n        name: \"reserveIn\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"reserveOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidDeadline\",\n    inputs: [\n      {\n        name: \"deadline\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"currentTimestamp\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidTokenRecipient\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"LaunchTaxExemptionsNotInitialized\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"MathOverflowedMulDiv\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"MinimumOutputRequired\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NativeQuoteConfigurationForbidden\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotFeeSweepOperator\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"NotReadyToGraduate\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerDisabled\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerNotFound\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerShareTooHigh\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"SafeERC20FailedOperation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"SlippageExceeded\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"minimum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"TokenTransferFailed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"TradeFeeConsumesInput\",\n    inputs: [\n      {\n        name: \"totalFee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"grossQuoteBasis\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"Unauthorized\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"UnexpectedNativeValue\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expected\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"UnexpectedTokenBalanceDelta\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"expected\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroLaunchTaxExemption\",\n    inputs: [\n      {\n        name: \"index\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const buybackVaultAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"factory_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"feeEscrow_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"VESTING_DURATION\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"factory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"feeEscrow\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"lock\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"received\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"registerLaunch\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolFeeShareBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"registered\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"registered\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"releasable\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"release\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"creatorAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"protocolAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"updateCreatorRecipient\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"vest\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct LaunchVest\",\n        components: [\n          {\n            name: \"totalLocked\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"totalReleased\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"vestingStart\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"vestedUnreleased\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"unvestedAmount\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"lastUpdate\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"vestingEnd\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"creatorRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"protocolRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"protocolFeeShareBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"AutoGraduationFailed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"gasRemaining\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackCreatorRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackEnabledUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackLocked\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"locker\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackReleased\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"protocolAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVaultSet\",\n    inputs: [\n      {\n        name: \"buybackVault\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVestRegistered\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideCancelled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideProposed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"proposedRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"effectiveAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expiresAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveBuybackSettled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"executed\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveFeesSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"beneficiary\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveTrade\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"feePayer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"isBuy\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"grossQuoteBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteSpentOrReceivedRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"baseFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"snipeTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DeniedCreatorUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"denied\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyDistributorFactorySet\",\n    inputs: [\n      {\n        name: \"emergencyDistributorFactory\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyExited\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeAllocated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"feeBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorImmediateRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"buybackBudgetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"platformNetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeClaimed\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeePolicyUpdated\",\n    inputs: [\n      {\n        name: \"previousProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeSweepOperatorUpdated\",\n    inputs: [\n      {\n        name: \"previousOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationCoordinatorSet\",\n    inputs: [\n      {\n        name: \"graduationCoordinator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationExecutorSet\",\n    inputs: [\n      {\n        name: \"graduationExecutor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigAdded\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigUpdated\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchDeployerSet\",\n    inputs: [\n      {\n        name: \"launchDeployer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchEnabledUpdated\",\n    inputs: [\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchFeeUpdated\",\n    inputs: [\n      {\n        name: \"previousLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchForwarderSet\",\n    inputs: [\n      {\n        name: \"previousForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchTaxExemptionAdded\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorInitialBuyBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorTaxBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MemeHookSet\",\n    inputs: [\n      {\n        name: \"memeHook\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferStarted\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"pendingController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferred\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerCreated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"controller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"shareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerEnabledUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeClaimed\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerNameUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"newName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerPolicyUpdated\",\n    inputs: [\n      {\n        name: \"defaultPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"maxPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerRecipientUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerShareUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenApprovalUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"approved\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenEconomicsUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"phantomQuote\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint8\",\n        indexed: false,\n        internalType: \"uint8\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxCharged\",\n    inputs: [\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amountRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxSecondsUpdated\",\n    inputs: [\n      {\n        name: \"newSeconds\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxStartBpsUpdated\",\n    inputs: [\n      {\n        name: \"newStartBps\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"TokenCreated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenInfoHash\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"creatorFeeRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"buybackEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"creatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"WhitelistedLauncherUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressInsufficientBalance\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AlreadySet\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"BuybackVestNotRegistered\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ContractRequired\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"FailedInnerCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidAmount\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidBasisPoints\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MathOverflowedMulDiv\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NoVestedTokens\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"NotVestingRecipient\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"SafeERC20FailedOperation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"Unauthorized\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"UnauthorizedBuybackLocker\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"UnexpectedTokenBalanceDelta\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"expected\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const emergencyDistributorAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"coreFactory_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"launchToken_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"orphanedAssetsRecipient_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"activate\",\n    inputs: [\n      {\n        name: \"sweptTokens\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"sweptQuote\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"activated\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"coreFactory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"initialRedeemableSupply\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchToken\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"orphanedAssetsRecipient\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"quoteToken\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"redeem\",\n    inputs: [\n      {\n        name: \"tokenIn\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"quoteOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"releaseOrphanedQuote\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"remainingQuote\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"syncDonatedTokens\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"burned\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"Activated\",\n    inputs: [\n      {\n        name: \"sweptTokens\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"sweptQuote\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"initialRedeemableSupply\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DonatedTokensSynced\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OrphanedQuoteReleased\",\n    inputs: [\n      {\n        name: \"launchToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Redeemed\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenIn\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteOut\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressInsufficientBalance\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AlreadyActivated\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedInnerCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidAmount\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MathOverflowedMulDiv\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotActivated\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"SafeERC20FailedOperation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"SupplyNotZero\",\n    inputs: [\n      {\n        name: \"supply\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"Unauthorized\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"UnexpectedBalanceDelta\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"expected\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const emergencyDistributorFactoryAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"coreFactory_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"orphanedAssetsRecipient_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"coreFactory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"createDistributor\",\n    inputs: [\n      {\n        name: \"launchToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"distributor\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"distributorOf\",\n    inputs: [\n      {\n        name: \"launchToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"distributor\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"orphanedAssetsRecipient\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"predictDistributor\",\n    inputs: [\n      {\n        name: \"launchToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"predicted\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyDistributorCreated\",\n    inputs: [\n      {\n        name: \"launchToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"ContractRequired\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"DistributorAlreadyExists\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidAssetPair\",\n    inputs: [\n      {\n        name: \"launchToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"Unauthorized\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const feeEscrowAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"partnerRegistry_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"balanceOf\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"balanceOfToken\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"claim\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"claim\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"claimPartner\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"claimToken\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"claimToken\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"credit\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"creditPartner\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"creditPartnerToken\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"creditPartnerTokenBatch\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerIds\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"amounts\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"totalAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"creditToken\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerBalance\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerRegistry\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"AutoGraduationFailed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"gasRemaining\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackCreatorRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackEnabledUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackLocked\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"locker\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackReleased\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"protocolAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVaultSet\",\n    inputs: [\n      {\n        name: \"buybackVault\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVestRegistered\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideCancelled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideProposed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"proposedRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"effectiveAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expiresAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveBuybackSettled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"executed\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveFeesSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"beneficiary\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveTrade\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"feePayer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"isBuy\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"grossQuoteBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteSpentOrReceivedRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"baseFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"snipeTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DeniedCreatorUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"denied\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyDistributorFactorySet\",\n    inputs: [\n      {\n        name: \"emergencyDistributorFactory\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyExited\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeAllocated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"feeBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorImmediateRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"buybackBudgetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"platformNetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeClaimed\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeePolicyUpdated\",\n    inputs: [\n      {\n        name: \"previousProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeSweepOperatorUpdated\",\n    inputs: [\n      {\n        name: \"previousOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationCoordinatorSet\",\n    inputs: [\n      {\n        name: \"graduationCoordinator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationExecutorSet\",\n    inputs: [\n      {\n        name: \"graduationExecutor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigAdded\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigUpdated\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchDeployerSet\",\n    inputs: [\n      {\n        name: \"launchDeployer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchEnabledUpdated\",\n    inputs: [\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchFeeUpdated\",\n    inputs: [\n      {\n        name: \"previousLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchForwarderSet\",\n    inputs: [\n      {\n        name: \"previousForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchTaxExemptionAdded\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorInitialBuyBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorTaxBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MemeHookSet\",\n    inputs: [\n      {\n        name: \"memeHook\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferStarted\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"pendingController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferred\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerCreated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"controller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"shareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerEnabledUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeClaimed\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerNameUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"newName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerPolicyUpdated\",\n    inputs: [\n      {\n        name: \"defaultPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"maxPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerRecipientUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerShareUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenApprovalUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"approved\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenEconomicsUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"phantomQuote\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint8\",\n        indexed: false,\n        internalType: \"uint8\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxCharged\",\n    inputs: [\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amountRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxSecondsUpdated\",\n    inputs: [\n      {\n        name: \"newSeconds\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxStartBpsUpdated\",\n    inputs: [\n      {\n        name: \"newStartBps\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"TokenCreated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenInfoHash\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"creatorFeeRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"buybackEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"creatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"WhitelistedLauncherUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressInsufficientBalance\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ContractRequired\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"FailedInnerCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InsufficientClaimable\",\n    inputs: [\n      {\n        name: \"available\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"requested\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidAmount\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConfiguration\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NativeTransferFailed\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"NotPartnerRecipient\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerDisabled\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerNotFound\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"SafeERC20FailedOperation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"TokenTransferFailed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"UnexpectedTokenBalanceDelta\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"expected\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const graduationCoordinatorAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"factory_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"EMERGENCY_EXIT_DELAY\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"createGraduatedPool\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"emergencyDistributorFactory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"emergencyExit\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"factory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"forceSweptGraduation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"graduate\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"graduation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct GraduationRecord\",\n        components: [\n          {\n            name: \"status\",\n            type: \"uint8\",\n            internalType: \"enum GraduationStatus\",\n          },\n          {\n            name: \"sweptAt\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"tokenAmount\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"quoteAmount\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"positionId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setEmergencyDistributorFactory\",\n    inputs: [\n      {\n        name: \"dependency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"status\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint8\",\n        internalType: \"enum GraduationStatus\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"AutoGraduationFailed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"gasRemaining\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackCreatorRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackEnabledUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackLocked\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"locker\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackReleased\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"protocolAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVaultSet\",\n    inputs: [\n      {\n        name: \"buybackVault\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVestRegistered\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideCancelled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideProposed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"proposedRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"effectiveAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expiresAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveBuybackSettled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"executed\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveFeesSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"beneficiary\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveTrade\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"feePayer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"isBuy\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"grossQuoteBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteSpentOrReceivedRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"baseFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"snipeTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DeniedCreatorUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"denied\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyDistributorFactorySet\",\n    inputs: [\n      {\n        name: \"emergencyDistributorFactory\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyExited\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeAllocated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"feeBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorImmediateRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"buybackBudgetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"platformNetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeClaimed\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeePolicyUpdated\",\n    inputs: [\n      {\n        name: \"previousProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeSweepOperatorUpdated\",\n    inputs: [\n      {\n        name: \"previousOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationCoordinatorSet\",\n    inputs: [\n      {\n        name: \"graduationCoordinator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationExecutorSet\",\n    inputs: [\n      {\n        name: \"graduationExecutor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigAdded\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigUpdated\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchDeployerSet\",\n    inputs: [\n      {\n        name: \"launchDeployer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchEnabledUpdated\",\n    inputs: [\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchFeeUpdated\",\n    inputs: [\n      {\n        name: \"previousLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchForwarderSet\",\n    inputs: [\n      {\n        name: \"previousForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchTaxExemptionAdded\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorInitialBuyBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorTaxBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MemeHookSet\",\n    inputs: [\n      {\n        name: \"memeHook\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferStarted\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"pendingController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferred\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerCreated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"controller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"shareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerEnabledUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeClaimed\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerNameUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"newName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerPolicyUpdated\",\n    inputs: [\n      {\n        name: \"defaultPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"maxPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerRecipientUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerShareUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenApprovalUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"approved\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenEconomicsUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"phantomQuote\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint8\",\n        indexed: false,\n        internalType: \"uint8\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxCharged\",\n    inputs: [\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amountRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxSecondsUpdated\",\n    inputs: [\n      {\n        name: \"newSeconds\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxStartBpsUpdated\",\n    inputs: [\n      {\n        name: \"newStartBps\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"TokenCreated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenInfoHash\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"creatorFeeRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"buybackEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"creatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"WhitelistedLauncherUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressInsufficientBalance\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AlreadySet\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ContractRequired\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"DependencyNotConfigured\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"EmergencyExitNotReady\",\n    inputs: [\n      {\n        name: \"availableAt\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"FailedInnerCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"GraduationSeedFeasible\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"GraduationSeedNotFeasible\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConfiguration\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidEmergencyDistributor\",\n    inputs: [\n      {\n        name: \"distributor\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidFactoryBinding\",\n    inputs: [\n      {\n        name: \"dependency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"expected\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"actual\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidGraduationState\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"NotReadyToGraduate\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"SafeERC20FailedOperation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"Unauthorized\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"UnexpectedTokenBalanceDelta\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"expected\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const holderAwareLaunchForwarderAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"factory_\",\n        type: \"address\",\n        internalType: \"contract IHolderAwareForwardedLaunchFactory\",\n      },\n      {\n        name: \"holderDistributorFactory_\",\n        type: \"address\",\n        internalType: \"contract IHolderDistributorFactory\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"factory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IHolderAwareForwardedLaunchFactory\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"holderDistributorFactory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IHolderDistributorFactory\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchAndBuy\",\n    inputs: [\n      {\n        name: \"params\",\n        type: \"tuple\",\n        internalType: \"struct CreateTokenParams\",\n        components: [\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"symbol\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"logo\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"description\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"socials\",\n            type: \"tuple\",\n            internalType: \"struct Socials\",\n            components: [\n              {\n                name: \"twitter\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"telegram\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"discord\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"website\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"farcaster\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n            ],\n          },\n          {\n            name: \"quoteToken\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"launchConfigId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"expectedEconomics\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"launchTaxExemptions\",\n            type: \"address[]\",\n            internalType: \"address[]\",\n          },\n          {\n            name: \"creatorFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"buybackEnabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"creatorTaxBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"creatorInitialBuyQuoteRaw\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"creatorInitialBuyRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"minInitialTokenOut\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"deadline\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"launchWithHolderFeeSharing\",\n    inputs: [\n      {\n        name: \"params\",\n        type: \"tuple\",\n        internalType: \"struct CreateTokenParams\",\n        components: [\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"symbol\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"logo\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"description\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"socials\",\n            type: \"tuple\",\n            internalType: \"struct Socials\",\n            components: [\n              {\n                name: \"twitter\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"telegram\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"discord\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"website\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"farcaster\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n            ],\n          },\n          {\n            name: \"quoteToken\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"launchConfigId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"expectedEconomics\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"launchTaxExemptions\",\n            type: \"address[]\",\n            internalType: \"address[]\",\n          },\n          {\n            name: \"creatorFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"buybackEnabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"creatorTaxBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"creatorInitialBuyQuoteRaw\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"creatorInitialBuyRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"minInitialTokenOut\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"deadline\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n      {\n        name: \"distributorInitializationData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"HolderSharingLaunchCreated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressInsufficientBalance\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ContractRequired\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"DistributorAddressMismatch\",\n    inputs: [\n      {\n        name: \"expected\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"actual\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"DistributorBindingMismatch\",\n    inputs: [\n      {\n        name: \"distributor\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"FailedInnerCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidCreatorFeeRecipient\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"LaunchAddressMismatch\",\n    inputs: [\n      {\n        name: \"expectedToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"actualToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"expectedCurve\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"actualCurve\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"SafeERC20FailedOperation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const holderDistributorAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"initialOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"token_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"feeEscrow_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"revenueHarvester_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"buybackVault_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"additionalSystemAccounts\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"receive\",\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"CLAIM_WINDOW\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"NATIVE_TRANSFER_GAS\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"buybackVault\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"claim\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"coinAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"proof\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"claimMany\",\n    inputs: [\n      {\n        name: \"claims\",\n        type: \"tuple[]\",\n        internalType: \"struct HolderDistributor.FeeClaim[]\",\n        components: [\n          {\n            name: \"epochId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"account\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"quoteAmount\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"coinAmount\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"proof\",\n            type: \"bytes32[]\",\n            internalType: \"bytes32[]\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"epochCount\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"feeEscrow\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getEpoch\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct HolderDistributor.Epoch\",\n        components: [\n          {\n            name: \"root\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"quoteTotal\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"coinTotal\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"quoteClaimed\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"coinClaimed\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"expiresAt\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"rolledOver\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"harvest\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"coinAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasClaimed\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isExcluded\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingOwner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"publishEpoch\",\n    inputs: [\n      {\n        name: \"root\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"quoteTotal\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"coinTotal\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"metadata\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"publisher\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"quoteToken\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"reservedCoin\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"reservedQuote\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"revenueHarvester\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rollOver\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"coinAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setPublisher\",\n    inputs: [\n      {\n        name: \"newPublisher\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"token\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"unallocatedCoin\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"unallocatedQuote\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"Claimed\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"coinAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EpochPublished\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"root\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"quoteTotal\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"coinTotal\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expiresAt\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n      {\n        name: \"metadata\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EpochRolledOver\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"coinAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Harvested\",\n    inputs: [\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"coinAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferStarted\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"pendingOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferred\",\n    inputs: [\n      {\n        name: \"previousOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PublisherUpdated\",\n    inputs: [\n      {\n        name: \"previousPublisher\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newPublisher\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AlreadyClaimed\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AlreadyRolledOver\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ClaimWindowOpen\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expiresAt\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"EpochExpired\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expiresAt\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"EpochNotFound\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ExcludedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"Insolvent\",\n    inputs: [\n      {\n        name: \"asset\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"balance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"reserved\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InsufficientUnallocated\",\n    inputs: [\n      {\n        name: \"requestedQuote\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"availableQuote\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"requestedCoin\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"availableCoin\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConfiguration\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidMerkleProof\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidMerkleRoot\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NativeTransferFailed\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"NoPendingOwner\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotOwner\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotPublisher\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"SafeTokenCallFailed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"TotalsExceeded\",\n    inputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroClaim\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroEpoch\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const holderDistributorFactoryAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"governance\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"publisher_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"launchFactory_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"feeEscrow_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"buybackVault_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteTokens\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"systemAccounts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ADAPTER_VERSION\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"GOVERNANCE_DELAY\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"MAX_SYSTEM_ACCOUNTS\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"activateForwarder\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"activateImplementation\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"allowedQuoteToken\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"authorizedForwarder\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"beacon\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract UpgradeableBeacon\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"bindInitialForwarder\",\n    inputs: [\n      {\n        name: \"forwarder\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"bindings\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"feeEscrow\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"buybackVault\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"cancelImplementation\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createDistributor\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"launchSalt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"launchToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"feeEscrow_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"initializationData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"distributor\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"defaultPublisher\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"disableForwarder\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"distributorForToken\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"feeEscrow\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"forwarderReadyAt\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"implementationReadyAt\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isDistributor\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchFactory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingForwarder\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingImplementation\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingImplementationCodeHash\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingOwner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"predictDistributor\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"launchSalt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"proposeForwarder\",\n    inputs: [\n      {\n        name: \"forwarder\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"proposeImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"proxyInitCodeHash\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"setDefaultPublisher\",\n    inputs: [\n      {\n        name: \"publisher_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setQuoteTokenAllowed\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"allowed\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"systemAccounts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"validateDistributor\",\n    inputs: [\n      {\n        name: \"distributor\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"launchToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"feeEscrow_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"DefaultPublisherUpdated\",\n    inputs: [\n      {\n        name: \"publisher\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DistributorCreated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"launchSalt\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"feeEscrow\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"ForwarderProposed\",\n    inputs: [\n      {\n        name: \"forwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"readyAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"ForwarderUpdated\",\n    inputs: [\n      {\n        name: \"previousForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"ImplementationProposed\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"codeHash\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"readyAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"ImplementationUpdated\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferStarted\",\n    inputs: [\n      {\n        name: \"previousOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferred\",\n    inputs: [\n      {\n        name: \"previousOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenAllowed\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"allowed\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AlreadyRegistered\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"GovernanceDelayPending\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConfiguration\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidForwarderBinding\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidImplementation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitializationData\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"OwnableInvalidOwner\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"OwnableUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"OwnershipRenunciationDisabled\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UnauthorizedForwarder\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const launchDeployerAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"factory_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"curveDeployer\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract CurveLaunchDeployer\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"deployLaunch\",\n    inputs: [\n      {\n        name: \"deployment\",\n        type: \"tuple\",\n        internalType: \"struct LaunchDeployment\",\n        components: [\n          {\n            name: \"curveInitialization\",\n            type: \"tuple\",\n            internalType: \"struct CurveInitialization\",\n            components: [\n              {\n                name: \"factory\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"graduationCoordinator\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"partnerRegistry\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"feeEscrow\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"buybackVault\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"quoteToken\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"originalCreator\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"creatorFeeRecipient\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"supply\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"phantomQuote\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"graduationThreshold\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"curveFeeBps\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"creatorTaxBps\",\n                type: \"uint16\",\n                internalType: \"uint16\",\n              },\n              {\n                name: \"buybackEnabled\",\n                type: \"bool\",\n                internalType: \"bool\",\n              },\n              {\n                name: \"feePolicy\",\n                type: \"tuple\",\n                internalType: \"struct FeePolicy\",\n                components: [\n                  {\n                    name: \"protocolFeeRecipient\",\n                    type: \"address\",\n                    internalType: \"address\",\n                  },\n                  {\n                    name: \"protocolFeeShareBps\",\n                    type: \"uint16\",\n                    internalType: \"uint16\",\n                  },\n                  {\n                    name: \"buybackBurnBps\",\n                    type: \"uint16\",\n                    internalType: \"uint16\",\n                  },\n                  {\n                    name: \"hookFeeBps\",\n                    type: \"uint16\",\n                    internalType: \"uint16\",\n                  },\n                  {\n                    name: \"maxInternalPriceImpactBps\",\n                    type: \"uint16\",\n                    internalType: \"uint16\",\n                  },\n                ],\n              },\n              {\n                name: \"snipeTax\",\n                type: \"tuple\",\n                internalType: \"struct SnipeTaxConfig\",\n                components: [\n                  {\n                    name: \"startBps\",\n                    type: \"uint16\",\n                    internalType: \"uint16\",\n                  },\n                  {\n                    name: \"durationSeconds\",\n                    type: \"uint32\",\n                    internalType: \"uint32\",\n                  },\n                ],\n              },\n            ],\n          },\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"symbol\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"logo\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"description\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"socials\",\n            type: \"tuple\",\n            internalType: \"struct Socials\",\n            components: [\n              {\n                name: \"twitter\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"telegram\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"discord\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"website\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"farcaster\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n            ],\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"factory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"predictLaunchAddresses\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"params\",\n        type: \"tuple\",\n        internalType: \"struct CreateTokenParams\",\n        components: [\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"symbol\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"logo\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"description\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"socials\",\n            type: \"tuple\",\n            internalType: \"struct Socials\",\n            components: [\n              {\n                name: \"twitter\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"telegram\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"discord\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"website\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"farcaster\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n            ],\n          },\n          {\n            name: \"quoteToken\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"launchConfigId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"expectedEconomics\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"launchTaxExemptions\",\n            type: \"address[]\",\n            internalType: \"address[]\",\n          },\n          {\n            name: \"creatorFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"buybackEnabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"creatorTaxBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"creatorInitialBuyQuoteRaw\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"creatorInitialBuyRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"minInitialTokenOut\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"deadline\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"predictLaunchAddresses\",\n    inputs: [\n      {\n        name: \"deployment\",\n        type: \"tuple\",\n        internalType: \"struct LaunchDeployment\",\n        components: [\n          {\n            name: \"curveInitialization\",\n            type: \"tuple\",\n            internalType: \"struct CurveInitialization\",\n            components: [\n              {\n                name: \"factory\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"graduationCoordinator\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"partnerRegistry\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"feeEscrow\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"buybackVault\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"quoteToken\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"originalCreator\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"creatorFeeRecipient\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"supply\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"phantomQuote\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"graduationThreshold\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"curveFeeBps\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"creatorTaxBps\",\n                type: \"uint16\",\n                internalType: \"uint16\",\n              },\n              {\n                name: \"buybackEnabled\",\n                type: \"bool\",\n                internalType: \"bool\",\n              },\n              {\n                name: \"feePolicy\",\n                type: \"tuple\",\n                internalType: \"struct FeePolicy\",\n                components: [\n                  {\n                    name: \"protocolFeeRecipient\",\n                    type: \"address\",\n                    internalType: \"address\",\n                  },\n                  {\n                    name: \"protocolFeeShareBps\",\n                    type: \"uint16\",\n                    internalType: \"uint16\",\n                  },\n                  {\n                    name: \"buybackBurnBps\",\n                    type: \"uint16\",\n                    internalType: \"uint16\",\n                  },\n                  {\n                    name: \"hookFeeBps\",\n                    type: \"uint16\",\n                    internalType: \"uint16\",\n                  },\n                  {\n                    name: \"maxInternalPriceImpactBps\",\n                    type: \"uint16\",\n                    internalType: \"uint16\",\n                  },\n                ],\n              },\n              {\n                name: \"snipeTax\",\n                type: \"tuple\",\n                internalType: \"struct SnipeTaxConfig\",\n                components: [\n                  {\n                    name: \"startBps\",\n                    type: \"uint16\",\n                    internalType: \"uint16\",\n                  },\n                  {\n                    name: \"durationSeconds\",\n                    type: \"uint32\",\n                    internalType: \"uint32\",\n                  },\n                ],\n              },\n            ],\n          },\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"symbol\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"logo\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"description\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"socials\",\n            type: \"tuple\",\n            internalType: \"struct Socials\",\n            components: [\n              {\n                name: \"twitter\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"telegram\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"discord\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"website\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"farcaster\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n            ],\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"tokenDeployer\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract TokenLaunchDeployer\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"error\",\n    name: \"EmptyTokenName\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"EmptyTokenSymbol\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"TokenInfoTooLong\",\n    inputs: [\n      {\n        name: \"indexedField\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"Unauthorized\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const launchFactoryAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"initialOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"launchFeeToken_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"initialFeePolicy\",\n        type: \"tuple\",\n        internalType: \"struct FeePolicy\",\n        components: [\n          {\n            name: \"protocolFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"protocolFeeShareBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"buybackBurnBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"hookFeeBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"maxInternalPriceImpactBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n        ],\n      },\n      {\n        name: \"initialLaunchFee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"initialMaxCreatorTaxBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n      {\n        name: \"initialSnipeTaxConfig\",\n        type: \"tuple\",\n        internalType: \"struct SnipeTaxConfig\",\n        components: [\n          {\n            name: \"startBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"durationSeconds\",\n            type: \"uint32\",\n            internalType: \"uint32\",\n          },\n        ],\n      },\n      {\n        name: \"partnerRegistry_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"feeEscrow_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"initialFeeSweepOperator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"initialMaxCreatorInitialBuyBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"CREATOR_RECIPIENT_OVERRIDE_DELAY\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"CREATOR_RECIPIENT_OVERRIDE_WINDOW\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"EMERGENCY_EXIT_DELAY\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"addLaunchConfig\",\n    inputs: [\n      {\n        name: \"config\",\n        type: \"tuple\",\n        internalType: \"struct LaunchConfig\",\n        components: [\n          {\n            name: \"supply\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"curveFeeBps\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"poolFee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"enabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"approvedQuoteTokens\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"approved\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"buybackVault\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"canLaunch\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"cancelCreatorFeeRecipientOverride\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createGraduatedPool\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createToken\",\n    inputs: [\n      {\n        name: \"params\",\n        type: \"tuple\",\n        internalType: \"struct CreateTokenParams\",\n        components: [\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"symbol\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"logo\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"description\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"socials\",\n            type: \"tuple\",\n            internalType: \"struct Socials\",\n            components: [\n              {\n                name: \"twitter\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"telegram\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"discord\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"website\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"farcaster\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n            ],\n          },\n          {\n            name: \"quoteToken\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"launchConfigId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"expectedEconomics\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"launchTaxExemptions\",\n            type: \"address[]\",\n            internalType: \"address[]\",\n          },\n          {\n            name: \"creatorFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"buybackEnabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"creatorTaxBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"creatorInitialBuyQuoteRaw\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"creatorInitialBuyRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"minInitialTokenOut\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"deadline\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"curveFor\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"curve\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"deniedCreators\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"denied\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"emergencyDistributorFactory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"emergencyExit\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"executeCreatorFeeRecipientOverride\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"feeEscrow\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"feePolicy\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct FeePolicy\",\n        components: [\n          {\n            name: \"protocolFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"protocolFeeShareBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"buybackBurnBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"hookFeeBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"maxInternalPriceImpactBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"feeSweepOperator\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"forceSweptGraduation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getLaunchedToken\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct LaunchedTokenRecord\",\n        components: [\n          {\n            name: \"token\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"curve\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"originalCreator\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"creatorFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"quoteToken\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"launchConfigId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"economicsHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"buybackEnabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"creatorTaxBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"hookFeeBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"protocolFeeShareBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"buybackBurnBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"maxInternalPriceImpactBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"phantomQuote\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"protocolFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"graduate\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"graduationCoordinator\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"graduationExecutor\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"graduations\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"status\",\n        type: \"uint8\",\n        internalType: \"enum GraduationStatus\",\n      },\n      {\n        name: \"sweptAt\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchConfig\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct LaunchConfig\",\n        components: [\n          {\n            name: \"supply\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"curveFeeBps\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"poolFee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"enabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchConfigCount\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchDeployer\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchEnabled\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchFee\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchFeeToken\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchForwarder\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"launchTokenFor\",\n    inputs: [\n      {\n        name: \"params\",\n        type: \"tuple\",\n        internalType: \"struct CreateTokenParams\",\n        components: [\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"symbol\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"logo\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"description\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"socials\",\n            type: \"tuple\",\n            internalType: \"struct Socials\",\n            components: [\n              {\n                name: \"twitter\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"telegram\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"discord\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"website\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n              {\n                name: \"farcaster\",\n                type: \"string\",\n                internalType: \"string\",\n              },\n            ],\n          },\n          {\n            name: \"quoteToken\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"launchConfigId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"expectedEconomics\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"launchTaxExemptions\",\n            type: \"address[]\",\n            internalType: \"address[]\",\n          },\n          {\n            name: \"creatorFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"buybackEnabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"creatorTaxBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"creatorInitialBuyQuoteRaw\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"creatorInitialBuyRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"minInitialTokenOut\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"deadline\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n      {\n        name: \"originalCreator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"maxCreatorInitialBuyBps\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"maxCreatorTaxBps\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"memeHook\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerRegistry\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingCreatorRecipientChanges\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"proposedRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"effectiveAt\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"expiresAt\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingOwner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"proposeCreatorFeeRecipientOverride\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"quoteTokenEconomics\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct QuoteTokenEconomics\",\n        components: [\n          {\n            name: \"phantomQuote\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"graduationThreshold\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"decimals\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"quoteTokenEconomicsConfigured\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"configured\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rescueCurveFees\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rescueHookFees\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rescueHookPartnerFees\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rescuePartnerFees\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setBuybackVault\",\n    inputs: [\n      {\n        name: \"dependency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setDeniedCreator\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"denied\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setEmergencyDistributorFactory\",\n    inputs: [\n      {\n        name: \"dependency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setFeePolicy\",\n    inputs: [\n      {\n        name: \"newPolicy\",\n        type: \"tuple\",\n        internalType: \"struct FeePolicy\",\n        components: [\n          {\n            name: \"protocolFeeRecipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"protocolFeeShareBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"buybackBurnBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"hookFeeBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"maxInternalPriceImpactBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setFeeSweepOperator\",\n    inputs: [\n      {\n        name: \"newOperator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setGraduationCoordinator\",\n    inputs: [\n      {\n        name: \"dependency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setGraduationExecutor\",\n    inputs: [\n      {\n        name: \"dependency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setLaunchDeployer\",\n    inputs: [\n      {\n        name: \"dependency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setLaunchEnabled\",\n    inputs: [\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setLaunchFee\",\n    inputs: [\n      {\n        name: \"newLaunchFee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setLaunchForwarder\",\n    inputs: [\n      {\n        name: \"newForwarder\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setMaxCreatorInitialBuyBps\",\n    inputs: [\n      {\n        name: \"newBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setMaxCreatorTaxBps\",\n    inputs: [\n      {\n        name: \"newMaxCreatorTaxBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setMemeHook\",\n    inputs: [\n      {\n        name: \"dependency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setQuoteTokenApproved\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"approved\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setQuoteTokenEconomics\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"economics\",\n        type: \"tuple\",\n        internalType: \"struct QuoteTokenEconomics\",\n        components: [\n          {\n            name: \"phantomQuote\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"graduationThreshold\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"decimals\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSnipeTaxSeconds\",\n    inputs: [\n      {\n        name: \"newSeconds\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSnipeTaxStartBps\",\n    inputs: [\n      {\n        name: \"newStartBps\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setTokenBuybackEnabled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setWhitelistedLauncher\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snipeTaxConfig\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct SnipeTaxConfig\",\n        components: [\n          {\n            name: \"startBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"durationSeconds\",\n            type: \"uint32\",\n            internalType: \"uint32\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"transferCreatorFeeRecipient\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"updateLaunchConfig\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"config\",\n        type: \"tuple\",\n        internalType: \"struct LaunchConfig\",\n        components: [\n          {\n            name: \"supply\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"curveFeeBps\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"poolFee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"enabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"usedSalt\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"used\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"validateAndResolve\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"config\",\n        type: \"tuple\",\n        internalType: \"struct LaunchConfig\",\n        components: [\n          {\n            name: \"supply\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"curveFeeBps\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"poolFee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"enabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n      {\n        name: \"economics\",\n        type: \"tuple\",\n        internalType: \"struct QuoteTokenEconomics\",\n        components: [\n          {\n            name: \"phantomQuote\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"graduationThreshold\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"decimals\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"whitelistedLaunchers\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"AutoGraduationFailed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"gasRemaining\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackCreatorRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackEnabledUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackLocked\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"locker\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackReleased\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"protocolAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVaultSet\",\n    inputs: [\n      {\n        name: \"buybackVault\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVestRegistered\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideCancelled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideProposed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"proposedRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"effectiveAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expiresAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveBuybackSettled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"executed\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveFeesSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"beneficiary\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveTrade\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"feePayer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"isBuy\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"grossQuoteBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteSpentOrReceivedRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"baseFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"snipeTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DeniedCreatorUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"denied\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyDistributorFactorySet\",\n    inputs: [\n      {\n        name: \"emergencyDistributorFactory\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyExited\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeAllocated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"feeBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorImmediateRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"buybackBudgetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"platformNetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeClaimed\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeePolicyUpdated\",\n    inputs: [\n      {\n        name: \"previousProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeSweepOperatorUpdated\",\n    inputs: [\n      {\n        name: \"previousOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationCoordinatorSet\",\n    inputs: [\n      {\n        name: \"graduationCoordinator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationExecutorSet\",\n    inputs: [\n      {\n        name: \"graduationExecutor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigAdded\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigUpdated\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchDeployerSet\",\n    inputs: [\n      {\n        name: \"launchDeployer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchEnabledUpdated\",\n    inputs: [\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchFeeUpdated\",\n    inputs: [\n      {\n        name: \"previousLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchForwarderSet\",\n    inputs: [\n      {\n        name: \"previousForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchTaxExemptionAdded\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorInitialBuyBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorTaxBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MemeHookSet\",\n    inputs: [\n      {\n        name: \"memeHook\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferStarted\",\n    inputs: [\n      {\n        name: \"previousOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferred\",\n    inputs: [\n      {\n        name: \"previousOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferStarted\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"pendingController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferred\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerCreated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"controller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"shareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerEnabledUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeClaimed\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerNameUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"newName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerPolicyUpdated\",\n    inputs: [\n      {\n        name: \"defaultPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"maxPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerRecipientUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerShareUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenApprovalUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"approved\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenEconomicsUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"phantomQuote\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint8\",\n        indexed: false,\n        internalType: \"uint8\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxCharged\",\n    inputs: [\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amountRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxSecondsUpdated\",\n    inputs: [\n      {\n        name: \"newSeconds\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxStartBpsUpdated\",\n    inputs: [\n      {\n        name: \"newStartBps\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"TokenCreated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenInfoHash\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"creatorFeeRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"buybackEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"creatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"WhitelistedLauncherUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressInsufficientBalance\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AlreadySet\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ContractRequired\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"CreatorDenied\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"CreatorInitialBuyLimitExceeded\",\n    inputs: [\n      {\n        name: \"tokenOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximumTokenOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"CreatorRecipientChangeExpired\",\n    inputs: [\n      {\n        name: \"expiresAt\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"CreatorRecipientTimelockNotElapsed\",\n    inputs: [\n      {\n        name: \"effectiveAt\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"CreatorTaxTooHigh\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"DependencyNotConfigured\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"DuplicateLaunchTaxExemption\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"EconomicsHashMismatch\",\n    inputs: [\n      {\n        name: \"expected\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"actual\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"EmptyTokenName\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"EmptyTokenSymbol\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedInnerCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FeePolicyCombinationTooHigh\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidAmount\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidBasisPoints\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConfiguration\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidCurveReserves\",\n    inputs: [\n      {\n        name: \"reserveIn\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"reserveOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidDeadline\",\n    inputs: [\n      {\n        name: \"deadline\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"currentTimestamp\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidFactoryBinding\",\n    inputs: [\n      {\n        name: \"dependency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"expected\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"actual\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidLaunchForwarder\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidSnipeTaxStartBps\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidSnipeTaxWindow\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"minimum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidTokenRecipient\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"LaunchConfigDisabled\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"LaunchConfigNotFound\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"LaunchConfigurationNotQuotable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"LaunchNotPermitted\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MathOverflowedMulDiv\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NativeQuoteConfigurationForbidden\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NoPendingCreatorRecipientChange\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"NotCreatorFeeRecipient\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"OwnableInvalidOwner\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"OwnableUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"OwnershipRenounceDisabled\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"QuoteTokenDecimalsCallFailed\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"QuoteTokenDecimalsMismatch\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"configured\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"QuoteTokenDecimalsTooLow\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"minimum\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"QuoteTokenEconomicsNotConfigured\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"QuoteTokenHasNoCode\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"QuoteTokenNotApproved\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"SafeERC20FailedOperation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"SaltAlreadyUsed\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"TokenInfoTooLong\",\n    inputs: [\n      {\n        name: \"indexedField\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"TooManyLaunchTaxExemptions\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"Unauthorized\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"UnexpectedTokenBalanceDelta\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"expected\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroLaunchTaxExemption\",\n    inputs: [\n      {\n        name: \"index\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const launchLockerAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"factory_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"positionManager_\",\n        type: \"address\",\n        internalType: \"contract IPositionManager\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"factory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"lockTokenSupply\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"permanentlyLockedSupply\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"positionForToken\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"positionManager\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IPositionManager\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"registerPosition\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expectedPoolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"tokenForPosition\",\n    inputs: [\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"PositionPermanentlyLocked\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"liquidity\",\n        type: \"uint128\",\n        indexed: false,\n        internalType: \"uint128\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"TokenSupplyPermanentlyLocked\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressInsufficientBalance\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ContractRequired\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"FailedInnerCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConfiguration\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"SafeERC20FailedOperation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"Unauthorized\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"UnexpectedTokenBalanceDelta\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"expected\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const launcherTokenAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"name_\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"symbol_\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"logo_\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"description_\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"socials_\",\n        type: \"tuple\",\n        internalType: \"struct Socials\",\n        components: [\n          {\n            name: \"twitter\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"telegram\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"discord\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"website\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"farcaster\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n        ],\n      },\n      {\n        name: \"originalCreator_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"curve_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"supply_\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"allowance\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"spender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"approve\",\n    inputs: [\n      {\n        name: \"spender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"balanceOf\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"burn\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"burnFrom\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"curve\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"decimals\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"deployer\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"description\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"logo\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"name\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"socials\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct Socials\",\n        components: [\n          {\n            name: \"twitter\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"telegram\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"discord\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"website\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"farcaster\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"symbol\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"tokenInfoHash\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"totalSupply\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"transfer\",\n    inputs: [\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"transferFrom\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"Approval\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"spender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Transfer\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"ERC20InsufficientAllowance\",\n    inputs: [\n      {\n        name: \"spender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"allowance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"needed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC20InsufficientBalance\",\n    inputs: [\n      {\n        name: \"sender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"balance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"needed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC20InvalidApprover\",\n    inputs: [\n      {\n        name: \"approver\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC20InvalidReceiver\",\n    inputs: [\n      {\n        name: \"receiver\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC20InvalidSender\",\n    inputs: [\n      {\n        name: \"sender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC20InvalidSpender\",\n    inputs: [\n      {\n        name: \"spender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"EmptyTokenName\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"EmptyTokenSymbol\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidAmount\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"TokenInfoTooLong\",\n    inputs: [\n      {\n        name: \"indexedField\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const memeHookAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"factory_\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"poolManager_\",\n        type: \"address\",\n        internalType: \"contract IPoolManager\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"receive\",\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"REQUIRED_HOOK_FLAGS\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint160\",\n        internalType: \"uint160\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"activatePool\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"afterAddLiquidity\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct ModifyLiquidityParams\",\n        components: [\n          {\n            name: \"tickLower\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"tickUpper\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"liquidityDelta\",\n            type: \"int256\",\n            internalType: \"int256\",\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"BalanceDelta\",\n      },\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"BalanceDelta\",\n      },\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"BalanceDelta\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"afterDonate\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"afterInitialize\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"uint160\",\n        internalType: \"uint160\",\n      },\n      {\n        name: \"\",\n        type: \"int24\",\n        internalType: \"int24\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"afterRemoveLiquidity\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct ModifyLiquidityParams\",\n        components: [\n          {\n            name: \"tickLower\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"tickUpper\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"liquidityDelta\",\n            type: \"int256\",\n            internalType: \"int256\",\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"BalanceDelta\",\n      },\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"BalanceDelta\",\n      },\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"BalanceDelta\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"afterSwap\",\n    inputs: [\n      {\n        name: \"sender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"key\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n      {\n        name: \"params\",\n        type: \"tuple\",\n        internalType: \"struct SwapParams\",\n        components: [\n          {\n            name: \"zeroForOne\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"amountSpecified\",\n            type: \"int256\",\n            internalType: \"int256\",\n          },\n          {\n            name: \"sqrtPriceLimitX96\",\n            type: \"uint160\",\n            internalType: \"uint160\",\n          },\n        ],\n      },\n      {\n        name: \"delta\",\n        type: \"int256\",\n        internalType: \"BalanceDelta\",\n      },\n      {\n        name: \"hookData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"\",\n        type: \"int128\",\n        internalType: \"int128\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"beforeAddLiquidity\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct ModifyLiquidityParams\",\n        components: [\n          {\n            name: \"tickLower\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"tickUpper\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"liquidityDelta\",\n            type: \"int256\",\n            internalType: \"int256\",\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"beforeDonate\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"beforeInitialize\",\n    inputs: [\n      {\n        name: \"sender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"key\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n      {\n        name: \"sqrtPriceX96\",\n        type: \"uint160\",\n        internalType: \"uint160\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"beforeRemoveLiquidity\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct ModifyLiquidityParams\",\n        components: [\n          {\n            name: \"tickLower\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"tickUpper\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"liquidityDelta\",\n            type: \"int256\",\n            internalType: \"int256\",\n          },\n          {\n            name: \"salt\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"beforeSwap\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct SwapParams\",\n        components: [\n          {\n            name: \"zeroForOne\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"amountSpecified\",\n            type: \"int256\",\n            internalType: \"int256\",\n          },\n          {\n            name: \"sqrtPriceLimitX96\",\n            type: \"uint160\",\n            internalType: \"uint160\",\n          },\n        ],\n      },\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"BeforeSwapDelta\",\n      },\n      {\n        name: \"\",\n        type: \"uint24\",\n        internalType: \"uint24\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"beginPoolFeeSweep\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"minConversionQuoteOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"minBuybackTokensOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"currentEpoch\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"executeBuyback\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"minTokensOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"quoteSpent\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokensOut\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"factory\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"finalizePoolFeeSweep\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getHookPermissions\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"permissions\",\n        type: \"tuple\",\n        internalType: \"struct Hooks.Permissions\",\n        components: [\n          {\n            name: \"beforeInitialize\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"afterInitialize\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"beforeAddLiquidity\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"afterAddLiquidity\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"beforeRemoveLiquidity\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"afterRemoveLiquidity\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"beforeSwap\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"afterSwap\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"beforeDonate\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"afterDonate\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"beforeSwapReturnDelta\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"afterSwapReturnDelta\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"afterAddLiquidityReturnDelta\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"afterRemoveLiquidityReturnDelta\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerActive\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerEpoch\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"partnerLaunchInputTotal\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerLaunchInputConsumed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerLaunchInputConsumedRemaining\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerConvertedQuoteTotal\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerConvertedQuoteRemaining\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerDirectQuoteTotal\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerDirectQuoteRemaining\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"activePartnerCount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"settledPartnerCount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"totalLaunchInput\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"totalQuoteOutput\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"settling\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerLaunchInputSettled\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerRegistry\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerSettled\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingBuyback\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"currency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingCreator\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"currency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingCreatorTax\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"currency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingPartnerLaunch\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingPartnerQuote\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingProtocol\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"currency\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"poolConfig\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorFeeRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolFeeRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolFeeShareBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n      {\n        name: \"buybackBurnBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n      {\n        name: \"hookFeeBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n      {\n        name: \"creatorTaxBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n      {\n        name: \"maxInternalPriceImpactBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n      {\n        name: \"tickSpacing\",\n        type: \"int24\",\n        internalType: \"int24\",\n      },\n      {\n        name: \"buybackEnabled\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"status\",\n        type: \"uint8\",\n        internalType: \"enum MemeHook.PoolStatus\",\n      },\n      {\n        name: \"expectedSqrtPriceX96\",\n        type: \"uint160\",\n        internalType: \"uint160\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"poolForToken\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"poolManager\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IPoolManager\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"preparePool\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"tickSpacing\",\n        type: \"int24\",\n        internalType: \"int24\",\n      },\n      {\n        name: \"sqrtPriceX96\",\n        type: \"uint160\",\n        internalType: \"uint160\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"key\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          {\n            name: \"currency0\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"currency1\",\n            type: \"address\",\n            internalType: \"Currency\",\n          },\n          {\n            name: \"fee\",\n            type: \"uint24\",\n            internalType: \"uint24\",\n          },\n          {\n            name: \"tickSpacing\",\n            type: \"int24\",\n            internalType: \"int24\",\n          },\n          {\n            name: \"hooks\",\n            type: \"address\",\n            internalType: \"contract IHooks\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rescuePartnerFees\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rescuePoolFees\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setBuybackEnabled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setCreatorFeeRecipient\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"settlePoolFeeSweepPartners\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerIds\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"settlingEpoch\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"epochPlusOne\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"unlockCallback\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"OfficialPoolActivated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OfficialPoolPrepared\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sqrtPriceX96\",\n        type: \"uint160\",\n        indexed: false,\n        internalType: \"uint160\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeAccrued\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"currency\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeesRescued\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolBuybackSettled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"executed\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolFeeAllocated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"currency\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"hookFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTax\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorImmediate\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"buybackBudget\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"protocolNet\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolFeeCurrencyConverted\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"currencyIn\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amountIn\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteOut\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolFeeSweepBegun\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerLaunchInput\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerConvertedQuote\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerDirectQuote\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"activePartnerCount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"totalLaunchInput\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"totalQuoteOutput\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolFeeSweepFinalized\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolFeeSweepPartnersSettled\",\n    inputs: [\n      {\n        name: \"poolId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"epochId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"count\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolFeesRescued\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolFeesSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"beneficiary\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"currency\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressInsufficientBalance\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AlreadySet\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedInnerCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConfiguration\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"MinimumOutputRequired\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotFeeSweepOperator\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerDisabled\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerNotFound\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerShareTooHigh\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"SafeERC20FailedOperation\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"SlippageExceeded\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"minimum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"Unauthorized\",\n    inputs: [\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","// This file is generated. Do not edit it manually.\nexport const partnerRegistryAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"initialOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"initialPolicy\",\n        type: \"tuple\",\n        internalType: \"struct PartnerPolicy\",\n        components: [\n          {\n            name: \"defaultPartnerShareOfPlatformBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"maxPartnerShareOfPlatformBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptPartnerController\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createPartner\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"controller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"partner\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct PartnerConfig\",\n        components: [\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"controller\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"recipient\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"shareOfPlatformBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"exists\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"enabled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerNonce\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"partnerPolicy\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct PartnerPolicy\",\n        components: [\n          {\n            name: \"defaultPartnerShareOfPlatformBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"maxPartnerShareOfPlatformBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingController\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"controller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingOwner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"proposePartnerController\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newController\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setPartnerEnabled\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setPartnerName\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setPartnerPolicy\",\n    inputs: [\n      {\n        name: \"newPolicy\",\n        type: \"tuple\",\n        internalType: \"struct PartnerPolicy\",\n        components: [\n          {\n            name: \"defaultPartnerShareOfPlatformBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n          {\n            name: \"maxPartnerShareOfPlatformBps\",\n            type: \"uint16\",\n            internalType: \"uint16\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setPartnerRecipient\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setPartnerShare\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newShareBps\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"AutoGraduationFailed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"gasRemaining\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackCreatorRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackEnabledUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackLocked\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"locker\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackReleased\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"protocolAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVaultSet\",\n    inputs: [\n      {\n        name: \"buybackVault\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BuybackVestRegistered\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creatorRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"protocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideCancelled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientOverrideProposed\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"proposedRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"effectiveAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"expiresAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CreatorFeeRecipientUpdated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveBuybackSettled\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"executed\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveFeesSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"beneficiary\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"CurveTrade\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"feePayer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"isBuy\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"grossQuoteBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteSpentOrReceivedRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"baseFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"snipeTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DeniedCreatorUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"denied\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyDistributorFactorySet\",\n    inputs: [\n      {\n        name: \"emergencyDistributorFactory\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"EmergencyExited\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"distributor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeAllocated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"feeBasisRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorImmediateRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"buybackBudgetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"partnerFeeRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"platformNetRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"creatorTaxRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeClaimed\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeePolicyUpdated\",\n    inputs: [\n      {\n        name: \"previousProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newProtocolFeeRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"previousProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newProtocolFeeShareBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBuybackBurnBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newHookFeeBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"previousMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxInternalPriceImpactBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"FeeSweepOperatorUpdated\",\n    inputs: [\n      {\n        name: \"previousOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOperator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationCoordinatorSet\",\n    inputs: [\n      {\n        name: \"graduationCoordinator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationExecutorSet\",\n    inputs: [\n      {\n        name: \"graduationExecutor\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"GraduationSwept\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigAdded\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchConfigUpdated\",\n    inputs: [\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchDeployerSet\",\n    inputs: [\n      {\n        name: \"launchDeployer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchEnabledUpdated\",\n    inputs: [\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchFeeUpdated\",\n    inputs: [\n      {\n        name: \"previousLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newLaunchFee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchForwarderSet\",\n    inputs: [\n      {\n        name: \"previousForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newForwarder\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"LaunchTaxExemptionAdded\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorInitialBuyBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MaxCreatorTaxBpsUpdated\",\n    inputs: [\n      {\n        name: \"previousMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newMaxCreatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"MemeHookSet\",\n    inputs: [\n      {\n        name: \"memeHook\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferStarted\",\n    inputs: [\n      {\n        name: \"previousOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferred\",\n    inputs: [\n      {\n        name: \"previousOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferStarted\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"pendingController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerControllerTransferred\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newController\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerCreated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"controller\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"shareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerEnabledUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"newEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeClaimed\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerFeeCredited\",\n    inputs: [\n      {\n        name: \"payer\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"asset\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerNameUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"newName\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerPolicyUpdated\",\n    inputs: [\n      {\n        name: \"defaultPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"maxPartnerShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerRecipientUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"newRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PartnerShareUpdated\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n      {\n        name: \"newShareOfPlatformBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"PoolGraduated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"positionId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"quoteAmount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenApprovalUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"approved\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"QuoteTokenEconomicsUpdated\",\n    inputs: [\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"phantomQuote\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint8\",\n        indexed: false,\n        internalType: \"uint8\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxCharged\",\n    inputs: [\n      {\n        name: \"tokenRecipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amountRaw\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxSecondsUpdated\",\n    inputs: [\n      {\n        name: \"newSeconds\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SnipeTaxStartBpsUpdated\",\n    inputs: [\n      {\n        name: \"newStartBps\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"TokenCreated\",\n    inputs: [\n      {\n        name: \"token\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"curve\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"quoteToken\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"launchConfigId\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"graduationThreshold\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"tokenInfoHash\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"creatorFeeRecipient\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"buybackEnabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n      {\n        name: \"creatorTaxBps\",\n        type: \"uint16\",\n        indexed: false,\n        internalType: \"uint16\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"WhitelistedLauncherUpdated\",\n    inputs: [\n      {\n        name: \"creator\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"enabled\",\n        type: \"bool\",\n        indexed: false,\n        internalType: \"bool\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"EmptyPartnerName\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidBasisPoints\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConfiguration\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NoPendingPartnerController\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"NotPartnerController\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"OwnableInvalidOwner\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"OwnableUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"OwnershipRenounceDisabled\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerDisabled\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerIdCollision\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerNameTooLong\",\n    inputs: [\n      {\n        name: \"actual\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maximum\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerNotFound\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PartnerOperationUnchanged\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PendingPartnerControllerMismatch\",\n    inputs: [\n      {\n        name: \"partnerId\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"caller\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ZeroAddress\",\n    inputs: [],\n  },\n] as const;\n","import { type Address, getAddress, type Hex } from \"viem\";\n\nimport { launchpadReservedTokens, launchpadSellableTokens } from \"../math/curve\";\nimport type {\n  LaunchpadCurveState,\n  LaunchpadGraduationRecord,\n  LaunchpadGraduationStatus,\n  LaunchpadLaunchRecord,\n} from \"../types\";\n\n/** Raw `LaunchFactory.getLaunchedToken` tuple, as viem returns it (named, never positional). */\nexport interface RawLaunchpadLaunchRecord {\n  readonly token: Address;\n  readonly curve: Address;\n  readonly originalCreator: Address;\n  readonly creatorFeeRecipient: Address;\n  readonly quoteToken: Address;\n  readonly launchConfigId: bigint;\n  readonly economicsHash: Hex;\n  readonly buybackEnabled: boolean;\n  readonly creatorTaxBps: number;\n  readonly hookFeeBps: number;\n  readonly protocolFeeShareBps: number;\n  readonly buybackBurnBps: number;\n  readonly maxInternalPriceImpactBps: number;\n  readonly tickSpacing: number;\n  readonly phantomQuote: bigint;\n  readonly protocolFeeRecipient: Address;\n}\n\nexport class InvalidLaunchpadStateError extends Error {\n  readonly field: string;\n\n  constructor(field: string, message: string) {\n    super(message);\n    this.name = \"InvalidLaunchpadStateError\";\n    this.field = field;\n  }\n}\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\n/**\n * Converts a raw launch record, rejecting the zero-token record the factory returns for an address\n * it never launched.\n *\n * The factory's mapping getter yields a zero-filled struct rather than reverting, so without this\n * check an arbitrary ERC-20 would read back a plausible-looking record whose `curve` is the zero\n * address — and every subsequent call would then target address zero.\n */\nexport function toLaunchpadLaunchRecord(raw: RawLaunchpadLaunchRecord): LaunchpadLaunchRecord {\n  if (raw.token === ZERO_ADDRESS || raw.curve === ZERO_ADDRESS) {\n    throw new InvalidLaunchpadStateError(\n      \"token\",\n      \"This factory has no launch record for that address; check isLaunchpadToken first.\",\n    );\n  }\n  return Object.freeze({\n    token: getAddress(raw.token),\n    curve: getAddress(raw.curve),\n    originalCreator: getAddress(raw.originalCreator),\n    creatorFeeRecipient: getAddress(raw.creatorFeeRecipient),\n    quoteToken: getAddress(raw.quoteToken),\n    launchConfigId: raw.launchConfigId,\n    economicsHash: raw.economicsHash,\n    buybackEnabled: raw.buybackEnabled,\n    creatorTaxBps: raw.creatorTaxBps,\n    hookFeeBps: raw.hookFeeBps,\n    protocolFeeShareBps: raw.protocolFeeShareBps,\n    buybackBurnBps: raw.buybackBurnBps,\n    maxInternalPriceImpactBps: raw.maxInternalPriceImpactBps,\n    tickSpacing: raw.tickSpacing,\n    phantomQuote: raw.phantomQuote,\n    protocolFeeRecipient: getAddress(raw.protocolFeeRecipient),\n  });\n}\n\nconst statusesByOrdinal: readonly LaunchpadGraduationStatus[] = [\n  \"notGraduated\",\n  \"swept\",\n  \"poolCreated\",\n  \"emergencyExited\",\n];\n\n/** Maps `GraduationStatus`'s ordinal onto its stable name. */\nexport function toLaunchpadGraduationStatus(status: number): LaunchpadGraduationStatus {\n  const mapped = statusesByOrdinal[status];\n  if (mapped === undefined) {\n    throw new InvalidLaunchpadStateError(\n      \"status\",\n      `Unknown GraduationStatus ordinal ${status}; this SDK build predates the deployed contract.`,\n    );\n  }\n  return mapped;\n}\n\n/** Converts the five-value `graduations(token)` tuple into a named record. */\nexport function toLaunchpadGraduationRecord(raw: {\n  readonly status: number;\n  readonly sweptAt: bigint;\n  readonly tokenAmount: bigint;\n  readonly quoteAmount: bigint;\n  readonly positionId: bigint;\n}): LaunchpadGraduationRecord {\n  return Object.freeze({\n    status: toLaunchpadGraduationStatus(raw.status),\n    sweptAt: raw.sweptAt,\n    tokenAmount: raw.tokenAmount,\n    quoteAmount: raw.quoteAmount,\n    positionId: raw.positionId,\n  });\n}\n\n/**\n * Assembles a curve state from the slots read off the curve, deriving the pricing reserves and the\n * graduation boundary the same way `BondingCurveState` does.\n *\n * Every input must come from one block: mixing heights produces reserves that never existed.\n */\nexport function toLaunchpadCurveState(input: {\n  readonly curve: Address;\n  readonly supply: bigint;\n  readonly phantomQuote: bigint;\n  readonly graduationThreshold: bigint;\n  readonly curveFeeBps: number;\n  readonly creatorTaxBps: number;\n  readonly snipeTax: { readonly startBps: number; readonly durationSeconds: number };\n  readonly trackedTokens: bigint;\n  readonly trackedQuote: bigint;\n  readonly quoteFeeBalance: bigint;\n  readonly creatorTaxBalance: bigint;\n  readonly graduated: boolean;\n  readonly launchedAt: bigint;\n}): LaunchpadCurveState {\n  const reservedTokens = launchpadReservedTokens(\n    input.supply,\n    input.phantomQuote,\n    input.graduationThreshold,\n  );\n  const quoteReserve =\n    input.phantomQuote + input.trackedQuote - input.quoteFeeBalance - input.creatorTaxBalance;\n  if (quoteReserve < 0n) {\n    throw new InvalidLaunchpadStateError(\n      \"quoteReserve\",\n      \"Pending fee liabilities exceed the curve's tracked quote; the reads were not taken at one block.\",\n    );\n  }\n  const sellableTokens = launchpadSellableTokens({\n    supply: input.supply,\n    phantomQuote: input.phantomQuote,\n    graduationThreshold: input.graduationThreshold,\n    reservedTokens,\n    trackedTokens: input.trackedTokens,\n    trackedQuote: input.trackedQuote,\n    quoteFeeBalance: input.quoteFeeBalance,\n    creatorTaxBalance: input.creatorTaxBalance,\n  });\n\n  return Object.freeze({\n    curve: getAddress(input.curve),\n    initialSupply: input.supply,\n    phantomQuote: input.phantomQuote,\n    graduationThreshold: input.graduationThreshold,\n    curveFeeBps: input.curveFeeBps,\n    creatorTaxBps: input.creatorTaxBps,\n    snipeTax: Object.freeze({\n      startBps: input.snipeTax.startBps,\n      durationSeconds: input.snipeTax.durationSeconds,\n    }),\n    trackedTokens: input.trackedTokens,\n    trackedQuote: input.trackedQuote,\n    quoteFeeBalance: input.quoteFeeBalance,\n    creatorTaxBalance: input.creatorTaxBalance,\n    quoteReserve,\n    tokenReserve: input.trackedTokens,\n    sellableTokens,\n    reservedTokens,\n    // Mirrors RC2's `graduationReady()`, which added the `!graduated` term: a curve that has\n    // already been swept reports false, not true. Without it the SDK and the contract disagree\n    // about the same curve for the rest of its life.\n    graduationReady: !input.graduated && sellableTokens === 0n,\n    graduated: input.graduated,\n    launchedAt: input.launchedAt,\n  });\n}\n","import { type Address, BaseError, ContractFunctionRevertedError } from \"viem\";\nimport { toPeachSdkError } from \"./core\";\n\nimport type { LaunchpadGraduationStatus } from \"./types\";\n\n/** Base class for every stable Launchpad failure, so callers can branch on one instanceof. */\nexport class LaunchpadError extends Error {\n  constructor(message: string, options?: { cause?: unknown }) {\n    super(message, options);\n    this.name = \"LaunchpadError\";\n  }\n}\n\n/**\n * The launch is not in a lifecycle state that permits the attempted operation.\n *\n * Covers `CurveTradingClosed`, `AlreadyGraduated`, `NotReadyToGraduate` and\n * `InvalidGraduationState`. In V2 a curve closes to trading the moment `sellableTokens` hits zero —\n * before anyone calls `graduate` — so \"closed\" and \"graduated\" are genuinely different states and\n * `status` distinguishes them when the SDK knows it.\n */\nexport class LaunchpadPhaseUnavailableError extends LaunchpadError {\n  readonly status?: LaunchpadGraduationStatus;\n\n  constructor(status?: LaunchpadGraduationStatus, options?: { cause?: unknown }) {\n    super(\n      status\n        ? `The launch is in the ${status} state and cannot service this operation.`\n        : \"The launch is not in a state that permits this operation.\",\n      options,\n    );\n    this.name = \"LaunchpadPhaseUnavailableError\";\n    this.status = status;\n  }\n}\n\n/**\n * `CurveTradingClosed`: the curve has sold through to its reserved floor, or has graduated.\n *\n * Not a pause — Production V2 has no pause mechanism at all. Once this fires for a given launch it\n * is permanent: the curve never reopens, and the token trades on its V4 pool instead.\n */\nexport class LaunchpadTradingClosedError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\n      \"Curve trading is closed for this launch; it has reached the graduation boundary and trades on its Uniswap V4 pool from here.\",\n      options,\n    );\n    this.name = \"LaunchpadTradingClosedError\";\n  }\n}\n\n/** `UnknownLaunchToken`-equivalent: the address is not a token this factory launched. */\nexport class LaunchpadUnknownTokenError extends LaunchpadError {\n  readonly token?: Address;\n\n  constructor(token?: Address, options?: { cause?: unknown }) {\n    super(\n      token\n        ? `${token} was not launched by this factory.`\n        : \"That address was not launched by this factory.\",\n      options,\n    );\n    this.name = \"LaunchpadUnknownTokenError\";\n    this.token = token;\n  }\n}\n\n/** `CreatorDenied`: the creator is on the factory's denylist, which outranks public launch. */\nexport class LaunchpadCreatorDeniedError extends LaunchpadError {\n  readonly creator?: Address;\n\n  constructor(creator?: Address, options?: { cause?: unknown }) {\n    super(\n      creator\n        ? `${creator} is on this factory's creator denylist and cannot launch tokens.`\n        : \"This account is on the factory's creator denylist and cannot launch tokens.\",\n      options,\n    );\n    this.name = \"LaunchpadCreatorDeniedError\";\n    this.creator = creator;\n  }\n}\n\n/**\n * `LaunchNotPermitted`: public launch is disabled and the creator is not whitelisted.\n *\n * Distinct from {@link LaunchpadCreatorDeniedError}: this is a gate that is closed for everyone\n * except an allowlist, not a sanction against one account.\n */\nexport class LaunchpadLaunchNotPermittedError extends LaunchpadError {\n  readonly creator?: Address;\n\n  constructor(creator?: Address, options?: { cause?: unknown }) {\n    super(\n      \"Public launch is currently disabled on this factory and this account is not a whitelisted launcher.\",\n      options,\n    );\n    this.name = \"LaunchpadLaunchNotPermittedError\";\n    this.creator = creator;\n  }\n}\n\n/**\n * `EconomicsHashMismatch`: the economics template moved between building the parameters and\n * submitting them.\n *\n * Only reachable when `expectedEconomics` was set to a non-zero value; passing `bytes32(0)` opts\n * out of the check entirely. Recover by re-reading `validateAndResolve` and rebuilding the hash.\n */\nexport class LaunchpadEconomicsHashMismatchError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\n      \"The factory's economics template changed since these parameters were built; re-read the current config and rebuild expectedEconomics.\",\n      options,\n    );\n    this.name = \"LaunchpadEconomicsHashMismatchError\";\n  }\n}\n\n/** The caller is not the account the operation requires (creator, controller, recipient, owner). */\nexport class LaunchpadUnauthorizedError extends LaunchpadError {\n  constructor(message?: string, options?: { cause?: unknown }) {\n    super(message ?? \"The connected account is not authorized to perform this operation.\", options);\n    this.name = \"LaunchpadUnauthorizedError\";\n  }\n}\n\n/** There is nothing to claim, sweep, or release for this beneficiary. */\nexport class LaunchpadNothingToClaimError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\"There is no claimable balance for this beneficiary and asset.\", options);\n    this.name = \"LaunchpadNothingToClaimError\";\n  }\n}\n\n/** A two-step governance action was attempted before its timelock elapsed, or after it expired. */\nexport class LaunchpadGovernanceDelayError extends LaunchpadError {\n  constructor(message?: string, options?: { cause?: unknown }) {\n    super(message ?? \"This governance action is not executable yet, or its window has expired.\", {\n      ...(options ?? {}),\n    });\n    this.name = \"LaunchpadGovernanceDelayError\";\n  }\n}\n\n/** A two-step action was executed or accepted with no matching pending proposal. */\nexport class LaunchpadNoPendingProposalError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\"There is no pending proposal to act on.\", options);\n    this.name = \"LaunchpadNoPendingProposalError\";\n  }\n}\n\n/** `EmergencyExitNotReady`: the seven-day emergency exit delay has not elapsed. */\nexport class LaunchpadEmergencyExitNotReadyError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\n      \"The emergency exit delay has not elapsed yet. There is no expedited path: the wait is a single fixed seven days.\",\n      options,\n    );\n    this.name = \"LaunchpadEmergencyExitNotReadyError\";\n  }\n}\n\n/** Partner registry and partner-attribution failures. */\nexport class LaunchpadPartnerError extends LaunchpadError {\n  constructor(message: string, options?: { cause?: unknown }) {\n    super(message, options);\n    this.name = \"LaunchpadPartnerError\";\n  }\n}\n\n/** The quote moved past the caller's tolerance; re-quote before retrying. */\nexport class LaunchpadSlippageError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\"The trade would exceed the requested slippage tolerance; refresh the quote.\", options);\n    this.name = \"LaunchpadSlippageError\";\n  }\n}\n\n/** The deadline elapsed. The transaction must be rebuilt, never replayed. */\nexport class LaunchpadDeadlineExpiredError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\n      \"The transaction deadline expired; rebuild the transaction with a new deadline.\",\n      options,\n    );\n    this.name = \"LaunchpadDeadlineExpiredError\";\n  }\n}\n\n/** `InvalidAmount`: an amount was rejected outright — zero, or past a bound. */\nexport class LaunchpadInvalidAmountError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\"The contract rejected this amount.\", options);\n    this.name = \"LaunchpadInvalidAmountError\";\n  }\n}\n\n/**\n * `TradeFeeConsumesInput`: curve fee + snipe tax + creator tax add up to at least the gross amount,\n * leaving nothing for the trade itself. Distinct from {@link LaunchpadInvalidAmountError} because\n * the fix is specific — increase the trade size or wait for the snipe tax to decay.\n */\nexport class LaunchpadTradeFeeConsumesInputError extends LaunchpadError {\n  readonly totalFee?: bigint;\n  readonly gross?: bigint;\n\n  constructor(totalFee?: bigint, gross?: bigint, options?: { cause?: unknown }) {\n    super(\n      gross !== undefined\n        ? `Fees (${totalFee}) would consume the entire gross amount (${gross}); increase the trade size or wait for the snipe tax to decay.`\n        : \"Fees would consume the entire trade input; increase the trade size or wait for the snipe tax to decay.\",\n      options,\n    );\n    this.name = \"LaunchpadTradeFeeConsumesInputError\";\n    this.totalFee = totalFee;\n    this.gross = gross;\n  }\n}\n\n/**\n * `InsufficientQuoteReserve`: a sell's net proceeds would exceed the curve's real, non-phantom\n * quote reserve (`trackedQuote - quoteFeeBalance - creatorTaxBalance`).\n *\n * `phantomQuote` lets the curve quote a nonzero price before any real quote has arrived, so a large\n * sell early in a curve's life can be priced above what the curve actually holds.\n */\nexport class LaunchpadInsufficientQuoteReserveError extends LaunchpadError {\n  readonly available?: bigint;\n  readonly requested?: bigint;\n\n  constructor(available?: bigint, requested?: bigint, options?: { cause?: unknown }) {\n    super(\n      requested !== undefined\n        ? `This sell would pay out ${requested}, but the curve's real quote reserve only holds ${available}; sell a smaller amount.`\n        : \"This sell would exceed the curve's real quote reserve; sell a smaller amount.\",\n      options,\n    );\n    this.name = \"LaunchpadInsufficientQuoteReserveError\";\n    this.available = available;\n    this.requested = requested;\n  }\n}\n\n/** The factory rejected the supplied creation parameters. */\nexport class LaunchpadInvalidCreateParamsError extends LaunchpadError {\n  constructor(message?: string, options?: { cause?: unknown }) {\n    super(message ?? \"The factory rejected these token creation parameters.\", options);\n    this.name = \"LaunchpadInvalidCreateParamsError\";\n  }\n}\n\n/**\n * An internal accounting or balance-delta invariant failed. Against a verified deployment this\n * almost always means the asset is not a standard, non-fee-on-transfer ERC-20.\n */\nexport class LaunchpadAccountingInvariantError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\n      \"An internal accounting invariant failed; the asset may not behave like a standard ERC-20.\",\n      options,\n    );\n    this.name = \"LaunchpadAccountingInvariantError\";\n  }\n}\n\n/**\n * A token or native transfer failed.\n *\n * `prepare*` checks balance and allowance ahead of simulation precisely so this does not surface as\n * an unexplained failure, so reaching it means one of the conditions those checks cannot see held\n * instead: the asset takes a fee on transfer, is paused or blacklisting, or the balance moved\n * between preparing and broadcasting.\n */\nexport class LaunchpadTransferFailedError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\n      \"A token transfer failed. Re-check the balance and allowance; a fee-on-transfer, paused, or blacklisting asset cannot be used with the Launchpad.\",\n      options,\n    );\n    this.name = \"LaunchpadTransferFailedError\";\n  }\n}\n\n/**\n * Catch-all for deployment/configuration failures a normal trading UI should never hit.\n *\n * Surfacing these distinctly (rather than falling through to the generic core mapping) makes a\n * misconfigured, half-wired, or tampered deployment visibly different from an ordinary trade\n * failure.\n */\nexport class LaunchpadProtocolConfigurationError extends LaunchpadError {\n  constructor(options?: { cause?: unknown }) {\n    super(\n      \"The Launchpad deployment or an operation's configuration is invalid; this is not a normal trade failure.\",\n      options,\n    );\n    this.name = \"LaunchpadProtocolConfigurationError\";\n  }\n}\n\n/** An ERC-20 approval is required before the operation can succeed. */\nexport class LaunchpadApprovalRequiredError extends LaunchpadError {\n  readonly asset: Address;\n  readonly spender: Address;\n  readonly requiredAmount: bigint;\n\n  constructor(asset: Address, spender: Address, requiredAmount: bigint) {\n    super(`Approve at least ${requiredAmount} of ${asset} for ${spender} before continuing.`);\n    this.name = \"LaunchpadApprovalRequiredError\";\n    this.asset = asset;\n    this.spender = spender;\n    this.requiredAmount = requiredAmount;\n  }\n}\n\n/**\n * The account cannot cover the amount a transfer would move.\n *\n * Checked alongside the allowance during `prepare*`, because the contracts move funds through\n * `SafeERC20`, which collapses every underlying failure into one opaque revert.\n */\nexport class LaunchpadInsufficientBalanceError extends LaunchpadError {\n  readonly asset: Address;\n  readonly owner: Address;\n  readonly requiredAmount: bigint;\n  readonly balance: bigint;\n\n  constructor(asset: Address, owner: Address, requiredAmount: bigint, balance: bigint) {\n    super(\n      `${owner} holds ${balance} of ${asset} but ${requiredAmount} is required for this operation.`,\n    );\n    this.name = \"LaunchpadInsufficientBalanceError\";\n    this.asset = asset;\n    this.owner = owner;\n    this.requiredAmount = requiredAmount;\n    this.balance = balance;\n  }\n}\n\n/** A prepared transaction was sent from a different account than the one it was prepared for. */\nexport class PreparedAccountMismatchError extends LaunchpadError {\n  readonly expectedAccount: Address;\n  readonly actualAccount: Address;\n\n  constructor(expectedAccount: Address, actualAccount: Address) {\n    super(\n      `This transaction was prepared for account ${expectedAccount} but the wallet is now using ${actualAccount}. Prepare it again.`,\n    );\n    this.name = \"PreparedAccountMismatchError\";\n    this.expectedAccount = expectedAccount;\n    this.actualAccount = actualAccount;\n  }\n}\n\n/**\n * The value passed to a send call did not originate from this SDK's prepare pipeline, or belongs to\n * a different deployment. Broadcasting it would skip simulation and the safety checks around it.\n */\nexport class ForgedPreparedTransactionError extends LaunchpadError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"ForgedPreparedTransactionError\";\n  }\n}\n\n/** A write was attempted on a client constructed without a Wallet Client. */\nexport class MissingWalletClientError extends LaunchpadError {\n  constructor() {\n    super(\"A Wallet Client is required for Launchpad write operations.\");\n    this.name = \"MissingWalletClientError\";\n  }\n}\n\n/** The wallet is connected to a different chain than the requested deployment. */\nexport class WrongWalletChainError extends LaunchpadError {\n  readonly expectedChainId: number;\n  readonly actualChainId?: number;\n\n  constructor(expectedChainId: number, actualChainId?: number) {\n    super(\n      `The wallet is connected to chain ${actualChainId ?? \"unknown\"} but this deployment is on chain ${expectedChainId}.`,\n    );\n    this.name = \"WrongWalletChainError\";\n    this.expectedChainId = expectedChainId;\n    this.actualChainId = actualChainId;\n  }\n}\n\nconst configuration = (cause: unknown) => new LaunchpadProtocolConfigurationError({ cause });\nconst unauthorized = (message: string) => (cause: unknown) =>\n  new LaunchpadUnauthorizedError(message, { cause });\nconst partner = (message: string) => (cause: unknown) =>\n  new LaunchpadPartnerError(message, { cause });\nconst createParams = (message: string) => (cause: unknown) =>\n  new LaunchpadInvalidCreateParamsError(message, { cause });\nconst governanceDelay = (message: string) => (cause: unknown) =>\n  new LaunchpadGovernanceDelayError(message, { cause });\n\n/**\n * Every custom error the Production V2 ABIs declare, mapped to a stable SDK error.\n *\n * Deliberately exhaustive over the generated ABIs rather than over the errors seen in practice: an\n * unmapped name falls through to the shared core mapping and loses the distinction entirely, and\n * the coverage test asserts nothing is missing. Errors a normal UI must react to differently each\n * get their own type; the long tail of configuration and wiring faults collapses onto\n * {@link LaunchpadProtocolConfigurationError}, which is itself the useful signal — it means the\n * deployment is wrong, not the trade.\n */\nconst revertNameToError: Readonly<Record<string, (cause: unknown) => LaunchpadError | undefined>> =\n  {\n    // --- Trading: the errors an ordinary trade UI must tell apart ---\n    SlippageExceeded: (cause) => new LaunchpadSlippageError({ cause }),\n    InvalidDeadline: (cause) => new LaunchpadDeadlineExpiredError({ cause }),\n    CurveTradingClosed: (cause) => new LaunchpadTradingClosedError({ cause }),\n    TradeFeeConsumesInput: (cause) =>\n      new LaunchpadTradeFeeConsumesInputError(undefined, undefined, { cause }),\n    InsufficientQuoteReserve: (cause) =>\n      new LaunchpadInsufficientQuoteReserveError(undefined, undefined, { cause }),\n    InvalidAmount: (cause) => new LaunchpadInvalidAmountError({ cause }),\n    MinimumOutputRequired: (cause) => new LaunchpadInvalidAmountError({ cause }),\n    CurveOutputExceedsReserve: (cause) => new LaunchpadInvalidAmountError({ cause }),\n    InvalidTokenRecipient: (cause) => new LaunchpadInvalidAmountError({ cause }),\n\n    // --- Lifecycle ---\n    AlreadyGraduated: (cause) => new LaunchpadPhaseUnavailableError(\"poolCreated\", { cause }),\n    NotReadyToGraduate: (cause) => new LaunchpadPhaseUnavailableError(\"notGraduated\", { cause }),\n    InvalidGraduationState: (cause) => new LaunchpadPhaseUnavailableError(undefined, { cause }),\n    GraduationSeedFeasible: (cause) => new LaunchpadPhaseUnavailableError(undefined, { cause }),\n    GraduationSeedNotFeasible: (cause) => new LaunchpadPhaseUnavailableError(undefined, { cause }),\n    EmergencyExitNotReady: (cause) => new LaunchpadEmergencyExitNotReadyError({ cause }),\n    AlreadyActivated: (cause) => new LaunchpadPhaseUnavailableError(\"emergencyExited\", { cause }),\n    NotActivated: (cause) => new LaunchpadPhaseUnavailableError(undefined, { cause }),\n    CurveTokenNotInitialized: (cause) => new LaunchpadPhaseUnavailableError(undefined, { cause }),\n    LaunchTaxExemptionsNotInitialized: (cause) =>\n      new LaunchpadPhaseUnavailableError(undefined, { cause }),\n\n    // --- Launch gate and creation parameters ---\n    CreatorDenied: (cause) => new LaunchpadCreatorDeniedError(undefined, { cause }),\n    LaunchNotPermitted: (cause) => new LaunchpadLaunchNotPermittedError(undefined, { cause }),\n    EconomicsHashMismatch: (cause) => new LaunchpadEconomicsHashMismatchError({ cause }),\n    EmptyTokenName: createParams(\"The token name must not be empty.\"),\n    EmptyTokenSymbol: createParams(\"The token symbol must not be empty.\"),\n    TokenInfoTooLong: createParams(\"A token info field exceeds its byte limit.\"),\n    SaltAlreadyUsed: createParams(\"This creator has already used that salt; pick another.\"),\n    TooManyLaunchTaxExemptions: createParams(\n      \"At most 32 extra launch tax exemptions may be supplied.\",\n    ),\n    ZeroLaunchTaxExemption: createParams(\"A launch tax exemption must not be the zero address.\"),\n    DuplicateLaunchTaxExemption: createParams(\n      \"A launch tax exemption is listed twice, or duplicates an automatic one (the creator, the fee recipient, or the initial buy recipient).\",\n    ),\n    CreatorTaxTooHigh: createParams(\"The creator tax exceeds the factory's current ceiling.\"),\n    FeePolicyCombinationTooHigh: createParams(\n      \"The curve fee or hook fee plus the creator tax exceeds the 20% combined ceiling.\",\n    ),\n    CreatorInitialBuyLimitExceeded: createParams(\n      \"The creator's initial buy exceeds the permitted share of sellable supply.\",\n    ),\n    LaunchConfigNotFound: createParams(\"No launch config exists with that id.\"),\n    LaunchConfigDisabled: createParams(\"That launch config is disabled.\"),\n    QuoteTokenNotApproved: createParams(\"That quote token is not approved on this factory.\"),\n    QuoteTokenEconomicsNotConfigured: createParams(\n      \"That quote token has no economics configured on this factory.\",\n    ),\n    LaunchConfigurationNotQuotable: createParams(\n      \"That quote token and launch config cannot be combined.\",\n    ),\n\n    // --- Partners ---\n    PartnerNotFound: partner(\"No partner is registered under that id.\"),\n    PartnerDisabled: partner(\"That partner is disabled; its balance is frozen, not forfeited.\"),\n    PartnerShareTooHigh: partner(\"The partner's share exceeds the registry's current maximum.\"),\n    PartnerIdCollision: partner(\"The generated partner id collided; retry.\"),\n    PartnerNameTooLong: partner(\"A partner name may be at most 64 UTF-8 bytes.\"),\n    EmptyPartnerName: partner(\"A partner name must not be empty.\"),\n    PartnerOperationUnchanged: partner(\"That partner update would not change anything.\"),\n    NoPendingPartnerController: (cause) => new LaunchpadNoPendingProposalError({ cause }),\n    PendingPartnerControllerMismatch: (cause) => new LaunchpadNoPendingProposalError({ cause }),\n    NotPartnerController: unauthorized(\"Only the partner's controller may do this.\"),\n    NotPartnerRecipient: unauthorized(\"Only the partner's recipient may do this.\"),\n\n    // --- Claims, sweeps, vesting ---\n    InsufficientClaimable: (cause) => new LaunchpadNothingToClaimError({ cause }),\n    NoVestedTokens: (cause) => new LaunchpadNothingToClaimError({ cause }),\n    NotFeeSweepOperator: unauthorized(\n      \"Only the fee sweep operator may run a sweep that performs an internal swap.\",\n    ),\n    InternalSwapRequiresOperator: unauthorized(\n      \"This sweep would perform an internal buyback swap, which only the fee sweep operator may trigger.\",\n    ),\n    NotCreatorFeeRecipient: unauthorized(\"Only the current creator fee recipient may do this.\"),\n    NotVestingRecipient: unauthorized(\"Only a vesting recipient may release these tokens.\"),\n    UnauthorizedBuybackLocker: unauthorized(\"Only the launch's own curve may lock buyback tokens.\"),\n    BuybackVestNotRegistered: (cause) => new LaunchpadProtocolConfigurationError({ cause }),\n    NoSwapOccurred: (cause) => new LaunchpadInvalidAmountError({ cause }),\n    // RC2 deliberately dropped two errors this map used to carry, and both absences are behaviour\n    // rather than cleanup. `VestedTokensMustBeReleased` is gone because a new buyback lock no longer\n    // requires the previous vest to be claimed first. `InternalPriceImpactExceeded` is gone because\n    // a sweep that hits the internal price-impact ceiling now converts what it can and leaves the\n    // rest pending, instead of reverting the whole batch — so the keeper's retry loop has nothing to\n    // catch, and must read the settled amounts instead.\n\n    // --- Governance timelocks and ownership ---\n    CreatorRecipientTimelockNotElapsed: governanceDelay(\n      \"The creator fee recipient override is still inside its three-day timelock.\",\n    ),\n    CreatorRecipientChangeExpired: governanceDelay(\n      \"The creator fee recipient override expired unexecuted; propose it again.\",\n    ),\n    NoPendingCreatorRecipientChange: (cause) => new LaunchpadNoPendingProposalError({ cause }),\n    OwnableUnauthorizedAccount: unauthorized(\"Only the contract owner may do this.\"),\n    OwnableInvalidOwner: configuration,\n    OwnershipRenounceDisabled: configuration,\n    Unauthorized: unauthorized(\"The caller is not permitted to perform this operation.\"),\n\n    // --- Asset movement ---\n    TokenTransferFailed: (cause) => new LaunchpadTransferFailedError({ cause }),\n    NativeTransferFailed: (cause) => new LaunchpadTransferFailedError({ cause }),\n    SafeERC20FailedOperation: (cause) => new LaunchpadTransferFailedError({ cause }),\n    ERC20InsufficientBalance: (cause) => new LaunchpadTransferFailedError({ cause }),\n    ERC20InsufficientAllowance: (cause) => new LaunchpadTransferFailedError({ cause }),\n    UnexpectedBalanceDelta: (cause) => new LaunchpadAccountingInvariantError({ cause }),\n    UnexpectedTokenBalanceDelta: (cause) => new LaunchpadAccountingInvariantError({ cause }),\n    UnexpectedNativeValue: (cause) => new LaunchpadAccountingInvariantError({ cause }),\n    MathOverflowedMulDiv: (cause) => new LaunchpadAccountingInvariantError({ cause }),\n\n    // --- Configuration, wiring, and constructor-time faults ---\n    AlreadySet: configuration,\n    ContractRequired: configuration,\n    DependencyNotConfigured: configuration,\n    DistributorAlreadyExists: configuration,\n    InvalidAssetPair: configuration,\n    InvalidBasisPoints: configuration,\n    InvalidConfiguration: configuration,\n    InvalidCurveReserves: configuration,\n    InvalidEmergencyDistributor: configuration,\n    InvalidFactoryBinding: configuration,\n    InvalidLaunchForwarder: configuration,\n    // --- Holder Fee Sharing, all from `HolderAwareLaunchForwarder` ---\n    // A caller-supplied recipient on the holder path. The forwarder derives it, so passing one in\n    // — the intuitive move once you know a distributor is involved — is rejected outright.\n    InvalidCreatorFeeRecipient: (cause) =>\n      new LaunchpadInvalidCreateParamsError(\n        \"`launchWithHolderFeeSharing` requires `creatorFeeRecipient` to be the zero address; the forwarder installs the distributor it creates.\",\n        { cause },\n      ),\n    // --- Holder Distributor, from the separately maintained distributor project ---\n    // The holder-facing ones a UI has to explain, rather than merely report.\n    AlreadyClaimed: (cause) => new LaunchpadPhaseUnavailableError(undefined, { cause }),\n    EpochExpired: (cause) => new LaunchpadDeadlineExpiredError({ cause }),\n    ExcludedAccount: (cause) =>\n      new LaunchpadUnauthorizedError(\n        \"This account is excluded from holder revenue — the exclusion set covers the protocol's own system accounts so their balances cannot dilute real holders.\",\n        { cause },\n      ),\n    InvalidMerkleProof: (cause) =>\n      new LaunchpadInvalidCreateParamsError(\n        \"The allocation does not match the epoch's published root. The usual causes are the proof service's own database epoch id used in place of the on-chain one, an amount altered in transit, or a proof fetched for a different account.\",\n        { cause },\n      ),\n    ZeroClaim: (cause) => new LaunchpadInvalidAmountError({ cause }),\n    // Housekeeping and publisher paths.\n    ClaimWindowOpen: (cause) => new LaunchpadPhaseUnavailableError(undefined, { cause }),\n    AlreadyRolledOver: (cause) => new LaunchpadPhaseUnavailableError(undefined, { cause }),\n    EpochNotFound: (cause) => new LaunchpadPhaseUnavailableError(undefined, { cause }),\n    NotPublisher: unauthorized(\"Only the distributor's publisher may publish an epoch.\"),\n    ZeroEpoch: (cause) => new LaunchpadInvalidAmountError({ cause }),\n    TotalsExceeded: (cause) => new LaunchpadProtocolConfigurationError({ cause }),\n    // Publishing an epoch larger than the distributor's free balance. A publisher-side problem —\n    // harvest first, or publish less — not a caller's, and not an ERC-20 balance shortfall.\n    InsufficientUnallocated: (cause) => new LaunchpadProtocolConfigurationError({ cause }),\n    InvalidMerkleRoot: (cause) => new LaunchpadInvalidAmountError({ cause }),\n    // Solvency and integrity. Against a healthy distributor none of these should be reachable.\n    Insolvent: (cause) => new LaunchpadProtocolConfigurationError({ cause }),\n    SafeTokenCallFailed: (cause) => new LaunchpadTransferFailedError({ cause }),\n    NotOwner: unauthorized(\"Only the distributor's owner may do this.\"),\n    NoPendingOwner: (cause) => new LaunchpadProtocolConfigurationError({ cause }),\n    ReentrantCall: (cause) => new LaunchpadProtocolConfigurationError({ cause }),\n    // Distributor factory governance.\n    AlreadyRegistered: (cause) => new LaunchpadPhaseUnavailableError(undefined, { cause }),\n    GovernanceDelayPending: governanceDelay(\n      \"The distributor factory's governance delay has not elapsed.\",\n    ),\n    UnauthorizedForwarder: unauthorized(\n      \"Only the distributor factory's authorized forwarder may create a distributor — which is why a rotation must authorize the new forwarder before the core switches to it.\",\n    ),\n    InvalidForwarderBinding: configuration,\n    InvalidImplementation: configuration,\n    InvalidInitializationData: (cause) =>\n      new LaunchpadInvalidCreateParamsError(\n        \"The distributor factory rejected `distributorInitializationData`; it is adapter-versioned and opaque to this SDK.\",\n        { cause },\n      ),\n    OwnershipRenunciationDisabled: (cause) => new LaunchpadProtocolConfigurationError({ cause }),\n\n    // The next three are the forwarder's own consistency checks, which fire only if the distributor\n    // factory disagrees with itself or with the launch deployer. They are not caller errors: seeing\n    // one means the adapter's prediction, creation and registry have diverged, and the launch was\n    // correctly abandoned rather than half-created.\n    DistributorAddressMismatch: configuration,\n    DistributorBindingMismatch: configuration,\n    LaunchAddressMismatch: configuration,\n    InvalidSnipeTaxStartBps: configuration,\n    InvalidSnipeTaxWindow: configuration,\n    NativeQuoteConfigurationForbidden: configuration,\n    QuoteTokenDecimalsCallFailed: configuration,\n    QuoteTokenDecimalsMismatch: configuration,\n    QuoteTokenDecimalsTooLow: configuration,\n    QuoteTokenHasNoCode: configuration,\n    CurveTokenValidationFailed: configuration,\n    SupplyNotZero: configuration,\n    ZeroAddress: configuration,\n    ReentrancyGuardReentrantCall: configuration,\n    AddressEmptyCode: configuration,\n    AddressInsufficientBalance: configuration,\n    FailedInnerCall: configuration,\n    ERC20InvalidApprover: configuration,\n    ERC20InvalidReceiver: configuration,\n    ERC20InvalidSender: configuration,\n    ERC20InvalidSpender: configuration,\n    FaucetCooldownActive: (cause) => new LaunchpadInvalidAmountError({ cause }),\n  };\n\n/**\n * Every ABI error name this package maps, exported so the coverage test can assert the map is\n * exhaustive against the generated ABIs rather than against a hand-kept list.\n */\nexport const mappedLaunchpadRevertNames: readonly string[] = Object.freeze(\n  Object.keys(revertNameToError).sort(),\n);\n\n/** Extracts the reverted custom-error name from a viem error chain, if present. */\nexport function revertErrorName(error: unknown): string | undefined {\n  if (!(error instanceof BaseError)) return undefined;\n  const reverted = error.walk((cause) => cause instanceof ContractFunctionRevertedError);\n  return reverted instanceof ContractFunctionRevertedError ? reverted.data?.errorName : undefined;\n}\n\n/**\n * Maps a contract failure onto a stable SDK error using the decoded custom-error name, never the\n * message text. Unrecognized failures fall back to the shared core error codes, preserving the\n * original cause and request metadata.\n */\nexport function toLaunchpadError(error: unknown): Error {\n  if (error instanceof LaunchpadError) return error;\n\n  const name = revertErrorName(error);\n  const mapped = name ? revertNameToError[name]?.(error) : undefined;\n  return mapped ?? toPeachSdkError(error);\n}\n","import { UserRejectedRequestError } from \"viem\";\n\nexport type PeachSdkErrorCode =\n  | \"INVALID_AMOUNT\"\n  | \"MISSING_ACCOUNT\"\n  | \"MISSING_CHAIN\"\n  | \"UNSUPPORTED_CHAIN\"\n  | \"USER_REJECTED\"\n  | \"TRANSPORT_ERROR\"\n  | \"CONTRACT_ERROR\"\n  | \"UNKNOWN_ERROR\";\n\n/**\n * Cross-copy brand for shared SDK errors.\n *\n * Every product SDK bundles its own copy of these primitives, so an error thrown by\n * `@masterpeach/launchpad-sdk` is not an `instanceof` the class of the same name exported by\n * `@masterpeach/lending-sdk`. `Symbol.for` resolves through the runtime-wide symbol registry, so\n * each copy brands its errors with the identical key and can recognize the others'.\n */\nconst PEACH_SDK_ERROR_BRAND = Symbol.for(\"masterpeach.sdk-core.PeachSdkError\");\n\n/** Base error carrying a stable machine-readable code and structured diagnostic metadata. */\nexport class PeachSdkError extends Error {\n  readonly code: PeachSdkErrorCode;\n  readonly metadata: Readonly<Record<string, unknown>>;\n\n  constructor(\n    code: PeachSdkErrorCode,\n    message: string,\n    options: { cause?: unknown; metadata?: Readonly<Record<string, unknown>> } = {},\n  ) {\n    super(message, { cause: options.cause });\n    this.name = \"PeachSdkError\";\n    this.code = code;\n    this.metadata = options.metadata ?? {};\n    // Non-enumerable so the brand stays out of structured clones and JSON diagnostics.\n    Object.defineProperty(this, PEACH_SDK_ERROR_BRAND, { value: true });\n  }\n}\n\nexport class UnsupportedChainError extends PeachSdkError {\n  constructor(chainId: number) {\n    super(\"UNSUPPORTED_CHAIN\", `Unsupported chain: ${chainId}`, {\n      metadata: { chainId },\n    });\n    this.name = \"UnsupportedChainError\";\n  }\n}\n\nexport class MissingChainError extends PeachSdkError {\n  constructor() {\n    super(\"MISSING_CHAIN\", \"A chain ID is required for this operation.\");\n    this.name = \"MissingChainError\";\n  }\n}\n\nexport class MissingAccountError extends PeachSdkError {\n  constructor() {\n    super(\"MISSING_ACCOUNT\", \"A wallet account is required for this operation.\");\n    this.name = \"MissingAccountError\";\n  }\n}\n\n/**\n * Recognizes a shared SDK error regardless of which product SDK created it.\n *\n * Prefer this over `instanceof PeachSdkError` whenever an application depends on more than one\n * MasterPeach SDK: each package carries its own copy of the class, so `instanceof` only matches\n * errors that happened to originate from the same package. Pass a `code` to narrow in one step.\n */\nexport function isPeachSdkError(value: unknown): value is PeachSdkError;\nexport function isPeachSdkError<TCode extends PeachSdkErrorCode>(\n  value: unknown,\n  code: TCode,\n): value is PeachSdkError & { readonly code: TCode };\nexport function isPeachSdkError(value: unknown, code?: PeachSdkErrorCode): boolean {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  if ((value as Record<symbol, unknown>)[PEACH_SDK_ERROR_BRAND] !== true) {\n    return false;\n  }\n  return code === undefined || (value as PeachSdkError).code === code;\n}\n\n/** Normalizes wallet rejection and unknown failures at a shared SDK boundary. */\nexport function toPeachSdkError(error: unknown): PeachSdkError {\n  // Brand check rather than `instanceof`, so an error raised by a sibling SDK keeps its code\n  // instead of being flattened into UNKNOWN_ERROR.\n  if (isPeachSdkError(error)) {\n    return error;\n  }\n\n  if (error instanceof UserRejectedRequestError) {\n    return new PeachSdkError(\"USER_REJECTED\", \"The wallet request was rejected.\", {\n      cause: error,\n    });\n  }\n\n  return new PeachSdkError(\"UNKNOWN_ERROR\", \"An unknown SDK error occurred.\", {\n    cause: error,\n  });\n}\n","import type { WalletClient } from \"viem\";\n\nimport { MissingAccountError, UnsupportedChainError } from \"./errors\";\n\nexport type ChainRegistry<T> = Readonly<Record<number, T>>;\n\n/** Resolves a chain-scoped configuration value or throws a stable unsupported-chain error. */\nexport function resolveChainValue<T>(registry: ChainRegistry<T>, chainId: number): T {\n  const value = registry[chainId];\n  if (value === undefined) {\n    throw new UnsupportedChainError(chainId);\n  }\n  return value;\n}\n\n/** Requires a Wallet Client with an attached account before a signing or write operation. */\nexport function requireWalletClient(walletClient: WalletClient | undefined): WalletClient {\n  if (!walletClient?.account) {\n    throw new MissingAccountError();\n  }\n  return walletClient;\n}\n","import type { Account, WalletClient } from \"viem\";\nimport { isAddressEqual } from \"viem\";\nimport { parseAccount } from \"viem/accounts\";\nimport { requireWalletClient } from \"./chain\";\nimport { MissingAccountError } from \"./errors\";\n\n/** Public inspection shape shared by product-specific prepared transaction types. */\nexport interface PreparedTransactionSnapshot<Request extends object, Preview, Context> {\n  readonly request: Readonly<Request>;\n  readonly preview: Preview;\n  readonly context: Context;\n}\n\n/** A module-local provenance store. Its canonical requests are never exposed to consumers. */\nexport interface PreparedTransactionStore {\n  create<Request extends object, Preview, Context>(\n    request: Request,\n    preview: Preview,\n    context: Context,\n  ): PreparedTransactionSnapshot<Request, Preview, Context>;\n  has(value: object): boolean;\n  getCanonical<Request extends object>(value: object): Request | undefined;\n}\n\n/**\n * Copies and freezes plain Viem request data, retaining cycles, symbols, prototypes and functions.\n * Accessor descriptors are preserved without invoking them.\n */\nexport function immutableClone<Value>(value: Value, seen = new WeakMap<object, unknown>()): Value {\n  if (value === null || typeof value !== \"object\") return value;\n\n  const source = value as object;\n  const existing = seen.get(source);\n  if (existing !== undefined) return existing as Value;\n\n  const clone: object = Array.isArray(value)\n    ? []\n    : Object.create(Object.getPrototypeOf(source) as object | null);\n  seen.set(source, clone);\n\n  for (const key of Reflect.ownKeys(source)) {\n    const descriptor = Object.getOwnPropertyDescriptor(source, key);\n    if (!descriptor) continue;\n    if (\"value\" in descriptor) {\n      descriptor.value = immutableClone(descriptor.value, seen);\n      descriptor.writable = false;\n    }\n    descriptor.configurable = false;\n    Object.defineProperty(clone, key, descriptor);\n  }\n\n  return Object.freeze(clone) as Value;\n}\n\n/**\n * Creates an isolated prepared-request registry for one product module.\n *\n * Sharing the factory removes duplicated security logic without sharing registry state: a value\n * prepared by one SDK can never become valid in another SDK's store.\n */\nexport function createPreparedTransactionStore(): PreparedTransactionStore {\n  const canonicalRequests = new WeakMap<object, object>();\n\n  return Object.freeze({\n    create<Request extends object, Preview, Context>(\n      request: Request,\n      preview: Preview,\n      context: Context,\n    ): PreparedTransactionSnapshot<Request, Preview, Context> {\n      const canonicalRequest = immutableClone(request);\n      const prepared = Object.freeze({\n        request: immutableClone(request),\n        preview,\n        context,\n      });\n      canonicalRequests.set(prepared, canonicalRequest);\n      return prepared;\n    },\n    has: (value: object) => canonicalRequests.has(value),\n    getCanonical: <Request extends object>(value: object) =>\n      canonicalRequests.get(value) as Request | undefined,\n  });\n}\n\n/**\n * Resolves the wallet's live account after proving its current chain.\n *\n * Product SDKs provide their own chain-mismatch error factory so this shared state-transition\n * check does not erase protocol-specific error contracts.\n */\nexport async function resolveLiveWalletAccount(\n  walletClient: WalletClient | undefined,\n  expectedChainId: number,\n  chainMismatch: (expectedChainId: number, actualChainId: number) => Error,\n): Promise<Account> {\n  const client = requireWalletClient(walletClient);\n  const actualChainId = await client.getChainId();\n  if (actualChainId !== expectedChainId) {\n    throw chainMismatch(expectedChainId, actualChainId);\n  }\n\n  const [liveAddress] = await client.getAddresses();\n  if (!liveAddress) throw new MissingAccountError();\n\n  const configuredAccount = client.account;\n  if (!configuredAccount) throw new MissingAccountError();\n  return isAddressEqual(configuredAccount.address, liveAddress)\n    ? configuredAccount\n    : parseAccount(liveAddress);\n}\n","import type { Hash, TransactionReceipt } from \"viem\";\n\nexport type SdkTransactionStatus = \"pending\" | \"confirmed\" | \"reverted\";\n\n/** Framework-neutral transaction result shared by product SDK packages. */\nexport interface SdkTransactionResult {\n  readonly hash: Hash;\n  readonly status: SdkTransactionStatus;\n  readonly receipt?: TransactionReceipt;\n}\n\n/** Converts a Viem receipt into the stable shared transaction result shape. */\nexport function transactionResultFromReceipt(receipt: TransactionReceipt): SdkTransactionResult {\n  return {\n    hash: receipt.transactionHash,\n    status: receipt.status === \"success\" ? \"confirmed\" : \"reverted\",\n    receipt,\n  };\n}\n","import { LaunchpadInvalidAmountError, LaunchpadProtocolConfigurationError } from \"../errors\";\n\n/**\n * `BondingCurveMath.getAmountOut`. Constant-product output for `amountIn` against `(reserveIn,\n * reserveOut)`, floored — the trader never receives more than the curve actually owes.\n *\n * Direction-agnostic: a buy calls this with `(quoteReserve, tokenReserve)`, a sell with\n * `(tokenReserve, quoteReserve)`. Neither side is ever converted through a fixed-point scale —\n * unlike V3's `CurveMath`, Production V2 prices entirely in each side's own raw units.\n */\nexport function curveGetAmountOut(amountIn: bigint, reserveIn: bigint, reserveOut: bigint): bigint {\n  if (amountIn <= 0n) throw new LaunchpadInvalidAmountError();\n  if (reserveIn <= 0n || reserveOut <= 0n) throw new LaunchpadProtocolConfigurationError();\n  return (amountIn * reserveOut) / (reserveIn + amountIn);\n}\n\n/**\n * `BondingCurveMath.getAmountIn`. Smallest `amountIn` whose forward quote is at least `amountOut`,\n * ceiled — the trader must never pay less than the curve requires for that output.\n *\n * `getAmountOut` and `getAmountIn` are each other's exact algebraic inverse (both derive from the\n * same `k = reserveIn * reserveOut` relation), so — unlike V3's sell direction — no bisection search\n * is needed for either side of Production V2's curve.\n */\nexport function curveGetAmountIn(amountOut: bigint, reserveIn: bigint, reserveOut: bigint): bigint {\n  if (amountOut <= 0n) throw new LaunchpadInvalidAmountError();\n  if (reserveIn <= 0n || reserveOut <= 0n) throw new LaunchpadProtocolConfigurationError();\n  // `CurveOutputExceedsReserve`: a constant-product pool can approach but never reach `reserveOut`\n  // for a finite `amountIn`, so a request at or above it has no answer.\n  if (amountOut >= reserveOut) throw new LaunchpadInvalidAmountError();\n  const denominator = reserveOut - amountOut;\n  const numerator = reserveIn * amountOut;\n  const quotient = numerator / denominator;\n  return numerator % denominator === 0n ? quotient : quotient + 1n;\n}\n\n/**\n * `BondingCurveMath.reservedTokens`. The floor of `trackedTokens` a curve may never sell through —\n * the Token-side graduation boundary, fixed for the curve's lifetime at construction.\n *\n * Larger `phantomQuote` relative to `graduationThreshold` reserves a larger fraction of `supply`:\n * the phantom quote is virtual liquidity the curve prices against from block zero, so a curve that\n * leans on more of it must hold back more real tokens to keep the same price path solvent down to\n * the reserved floor.\n */\nexport function launchpadReservedTokens(\n  supply: bigint,\n  phantomQuote: bigint,\n  graduationThreshold: bigint,\n): bigint {\n  if (supply <= 0n || phantomQuote <= 0n || graduationThreshold <= 0n) {\n    throw new LaunchpadProtocolConfigurationError();\n  }\n  return (supply * phantomQuote) / (phantomQuote + graduationThreshold);\n}\n\n/**\n * The curve constants fixed at construction (`CurveInitialization`) and never touched by a trade.\n * Kept separate from {@link LaunchpadCurveLiveState} because `reservedTokens` is derived once from\n * these and then reused every call, rather than recomputed per trade.\n */\nexport interface LaunchpadCurveConstants {\n  readonly supply: bigint;\n  readonly phantomQuote: bigint;\n  readonly graduationThreshold: bigint;\n}\n\n/** The four `BondingCurveState` storage slots a trade actually mutates. */\nexport interface LaunchpadCurveLiveState {\n  /** Tokens still held by the curve; decreases on a buy, increases on a sell. Not circulating supply — it also excludes tokens the curve has already swept out as fees. */\n  readonly trackedTokens: bigint;\n  /** Net quote the curve has taken in from trades, before subtracting pending fees. Only trades and fee sweeps move it — a forced ERC-20 donation to the curve's balance is not tracked. */\n  readonly trackedQuote: bigint;\n  /** Curve fee and snipe tax collected but not yet swept out to `pendingProtocol`/`pendingCreator`/`pendingPartner`. */\n  readonly quoteFeeBalance: bigint;\n  /** Creator tax collected but not yet swept to `pendingCreatorTax`. Subset of `quoteFeeBalance`'s role, tracked separately because creator tax is never split with the platform. */\n  readonly creatorTaxBalance: bigint;\n}\n\n/**\n * `IBondingCurveState`'s complete pricing-relevant state: the immutable constants plus the four\n * live slots, with `reservedTokens` already derived. Build it with {@link launchpadCurveState}\n * rather than by hand — constructing a state with an inconsistent `reservedTokens` would price\n * against a boundary the real curve never had.\n */\nexport interface LaunchpadCurveMathState extends LaunchpadCurveConstants, LaunchpadCurveLiveState {\n  readonly reservedTokens: bigint;\n}\n\n/**\n * Builds and validates a {@link LaunchpadCurveMathState} from live chain reads.\n *\n * Mirrors the checks `BondingCurveState`'s constructor and every trade path implicitly rely on:\n * `reservedTokens` is in `(0, supply)`, and `phantomQuote + trackedQuote` is enough to cover\n * `quoteFeeBalance + creatorTaxBalance` — a violation of either is not a pricing edge case, it means\n * the four live fields were not read from the same block or the deployment constants are wrong, and\n * {@link curvePricingReserves} would otherwise underflow into a negative `bigint` where Solidity\n * would have reverted.\n */\nexport function launchpadCurveState(\n  constants: LaunchpadCurveConstants,\n  live: LaunchpadCurveLiveState,\n): Readonly<LaunchpadCurveMathState> {\n  const reservedTokens = launchpadReservedTokens(\n    constants.supply,\n    constants.phantomQuote,\n    constants.graduationThreshold,\n  );\n  if (reservedTokens <= 0n || reservedTokens >= constants.supply) {\n    throw new LaunchpadProtocolConfigurationError();\n  }\n  if (\n    live.trackedTokens < 0n ||\n    live.trackedQuote < 0n ||\n    live.quoteFeeBalance < 0n ||\n    live.creatorTaxBalance < 0n\n  ) {\n    throw new LaunchpadProtocolConfigurationError();\n  }\n  if (constants.phantomQuote + live.trackedQuote < live.quoteFeeBalance + live.creatorTaxBalance) {\n    throw new LaunchpadProtocolConfigurationError();\n  }\n\n  return Object.freeze({\n    supply: constants.supply,\n    phantomQuote: constants.phantomQuote,\n    graduationThreshold: constants.graduationThreshold,\n    reservedTokens,\n    trackedTokens: live.trackedTokens,\n    trackedQuote: live.trackedQuote,\n    quoteFeeBalance: live.quoteFeeBalance,\n    creatorTaxBalance: live.creatorTaxBalance,\n  });\n}\n\n/** The `(quoteReserve, tokenReserve)` pair every quote is priced against. */\nexport interface LaunchpadCurveReserves {\n  readonly quoteReserve: bigint;\n  readonly tokenReserve: bigint;\n}\n\n/**\n * `BondingCurveState.pricingReserves`. `quoteReserve` nets pending fees and creator tax out of the\n * curve's tracked quote — they have already been earned, not principal available to price against —\n * and adds back `phantomQuote`, the virtual liquidity the curve prices against even when no real\n * quote has arrived yet. `tokenReserve` is `trackedTokens` unchanged.\n */\nexport function curvePricingReserves(state: LaunchpadCurveMathState): LaunchpadCurveReserves {\n  return {\n    quoteReserve:\n      state.phantomQuote + state.trackedQuote - state.quoteFeeBalance - state.creatorTaxBalance,\n    tokenReserve: state.trackedTokens,\n  };\n}\n\n/**\n * `BondingCurveState.sellableTokens`. Tokens the curve will still sell before hitting the\n * graduation boundary; `0` once `trackedTokens` has drained to `reservedTokens`.\n */\nexport function launchpadSellableTokens(state: LaunchpadCurveMathState): bigint {\n  return state.trackedTokens > state.reservedTokens\n    ? state.trackedTokens - state.reservedTokens\n    : 0n;\n}\n\n/**\n * `BondingCurveState.quoteBuyNet`. Tokens received for `netQuoteIn` — quote **after** curve fee,\n * snipe tax, and creator tax have already been taken out — capped to {@link launchpadSellableTokens}.\n *\n * The cap silently truncates rather than throwing: the contract's own view function does the same,\n * because a UI polling a live quote should see \"this now buys the rest of the curve\", not an error,\n * as the remaining supply shrinks toward the trader's request.\n */\nexport function curveQuoteBuyNet(state: LaunchpadCurveMathState, netQuoteIn: bigint): bigint {\n  const { quoteReserve, tokenReserve } = curvePricingReserves(state);\n  const tokenOut = curveGetAmountOut(netQuoteIn, quoteReserve, tokenReserve);\n  const available = launchpadSellableTokens(state);\n  return tokenOut > available ? available : tokenOut;\n}\n\n/** `BondingCurveState.quoteSellGross`. Quote the curve gives up for `tokenIn`, before fee and tax. */\nexport function curveQuoteSellGross(state: LaunchpadCurveMathState, tokenIn: bigint): bigint {\n  const { quoteReserve, tokenReserve } = curvePricingReserves(state);\n  return curveGetAmountOut(tokenIn, tokenReserve, quoteReserve);\n}\n\n/**\n * `BondingCurveState.quoteNetRequiredToBuy`. Net quote (after fee/tax) required to receive exactly\n * `tokenOut`.\n *\n * Throws {@link LaunchpadProtocolConfigurationError}, not {@link LaunchpadInvalidAmountError}, when\n * `tokenOut` exceeds {@link launchpadSellableTokens} — that is the exact revert selector the\n * contract's own `quoteNetRequiredToBuy` uses for this case (`InvalidConfiguration`, not\n * `InvalidAmount`), so a caller pattern-matching on-chain revert data must see the same one here.\n */\nexport function curveQuoteNetRequiredToBuy(\n  state: LaunchpadCurveMathState,\n  tokenOut: bigint,\n): bigint {\n  const available = launchpadSellableTokens(state);\n  if (tokenOut > available) throw new LaunchpadProtocolConfigurationError();\n  const { quoteReserve, tokenReserve } = curvePricingReserves(state);\n  return curveGetAmountIn(tokenOut, quoteReserve, tokenReserve);\n}\n\n/**\n * `BondingCurve.graduationReady`, restricted to the pricing-state half of that check.\n *\n * The contract requires two more things before it reports ready, neither of which is part of the\n * pricing state: `token != address(0)` (the curve's `LauncherToken` has been wired up) and, since\n * RC2, `!graduated`. Check both separately — `getLaunchpadCurveState` already folds them in, so\n * prefer `curveState.graduationReady` over calling this directly on a hand-built state.\n */\nexport function launchpadGraduationReady(state: LaunchpadCurveMathState): boolean {\n  return launchpadSellableTokens(state) === 0n;\n}\n","import type { LaunchpadSnipeTaxConfig } from \"../deployment\";\n\n/**\n * `SnipeTax.DECAY_SHIFT_RANGE`. The tax halves, at minimum, every `durationSeconds /\n * DECAY_SHIFT_RANGE` seconds — a right shift by 1 bit per that many seconds elapsed, not a linear\n * ramp. `startBps` is capped at `BPS` (10,000) deployment-wide, so a shift of 14 always reaches 0\n * before `elapsedSeconds` can reach `durationSeconds` from below.\n */\nexport const SNIPE_TAX_DECAY_SHIFT_RANGE = 14;\n\n/**\n * `SnipeTax.currentBps`. The opening snipe tax, decaying from `startBps` to `0` by\n * `elapsedSeconds === durationSeconds`.\n *\n * A right-shift decay rather than V3's discrete per-block ladder: Production V2 has no block-offset\n * concept in its fee schedule at all, so this is not a replacement for `tradeFeeBpsAt` — the\n * six-step ladder, its permanent post-ladder floor, and the \"creation block charges 100%\" trading\n * gate are all gone. This can reach exactly `0` bps while the curve is still open, unlike V3 where\n * the base fee always applied.\n */\nexport function snipeTaxCurrentBps(\n  startBps: number,\n  durationSeconds: number,\n  elapsedSeconds: bigint,\n): number {\n  if (elapsedSeconds < 0n) {\n    throw new RangeError(\"elapsedSeconds must not be negative.\");\n  }\n  if (startBps === 0 || elapsedSeconds >= BigInt(durationSeconds)) return 0;\n  // Order matters: the `elapsedSeconds >= durationSeconds` check above always short-circuits before\n  // this division, exactly as in `SnipeTax.sol` — so `durationSeconds === 0` never reaches it either\n  // (elapsedSeconds, being non-negative, already satisfies `>= 0`).\n  const decayShift = Number(\n    (BigInt(SNIPE_TAX_DECAY_SHIFT_RANGE) * elapsedSeconds) / BigInt(durationSeconds),\n  );\n  return startBps >> decayShift;\n}\n\n/**\n * `BondingCurve.currentSnipeTaxBps`. Combines the decay curve with the curve's per-token exemption\n * set — the two are checked together on chain, in this order, so a caller cannot get a different\n * answer by evaluating them separately in the other order (an exempt but non-zero-`startBps`\n * recipient must read `0`, never the undecayed `startBps`).\n *\n * `isExempt` must come from the curve's own `isLaunchTaxExempt(tokenRecipient)`, keyed on the\n * **token recipient**, not the transaction sender or payer — a router or relayer submitting on a\n * trader's behalf must not cause the trader to inherit the router's exemption or lack of one. See\n * `docs/PRODUCTION_FRONTEND_INTEGRATION.md` section 3 and section 6.2 of the contract design doc.\n */\nexport function currentLaunchpadSnipeTaxBps(params: {\n  readonly snipeTax: LaunchpadSnipeTaxConfig;\n  readonly launchedAt: bigint;\n  readonly now: bigint;\n  readonly isExempt: boolean;\n}): number {\n  if (params.isExempt) return 0;\n  const elapsedSeconds = params.now - params.launchedAt;\n  return snipeTaxCurrentBps(\n    params.snipeTax.startBps,\n    params.snipeTax.durationSeconds,\n    elapsedSeconds,\n  );\n}\n","import type { LaunchpadReadOptions } from \"../types\";\n\n/**\n * Narrows read options to the block selector viem accepts, omitting absent keys entirely.\n *\n * Internal to `actions/`: deliberately not re-exported from `actions/index.ts`, because it shapes\n * a viem argument rather than expressing anything a consumer needs. Consumers pin reads with\n * `resolvePinnedBlockNumber` instead.\n */\nexport function blockSelector(options: LaunchpadReadOptions = {}) {\n  if (options.blockNumber !== undefined) return { blockNumber: options.blockNumber };\n  if (options.blockTag !== undefined) return { blockTag: options.blockTag };\n  return {};\n}\n","import type { Address } from \"viem\";\n\nimport type { LaunchpadActionContext, LaunchpadReadOptions } from \"../types\";\n\nimport { getErc20Allowance } from \"./read\";\n\n/** Allowance status for one asset/spender pair, resolved at a single block. */\nexport interface LaunchpadApprovalStatus {\n  readonly asset: Address;\n  readonly owner: Address;\n  readonly spender: Address;\n  readonly allowance: bigint;\n  readonly requiredAmount: bigint;\n  readonly sufficient: boolean;\n  /** Exactly the shortfall, so a caller can approve the precise amount still needed. */\n  readonly missingAmount: bigint;\n}\n\n/**\n * Resolves whether an exact-amount approval is still required.\n *\n * The spender for creation, buy, and sell is always the factory — never a pool and never a future\n * DEX router. For a buy, `requiredAmount` should be the quote's `quoteSpent` rather than the user's\n * typed input, because a graduating buy spends less than requested.\n */\nexport async function getLaunchpadApprovalStatus(\n  context: LaunchpadActionContext,\n  input: {\n    readonly asset: Address;\n    readonly owner: Address;\n    readonly requiredAmount: bigint;\n    readonly spender?: Address;\n  },\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadApprovalStatus> {\n  if (input.requiredAmount < 0n) {\n    throw new RangeError(\"requiredAmount must not be negative.\");\n  }\n\n  const spender = input.spender ?? context.deployment.contracts.factory;\n  const allowance = await getErc20Allowance(context, input.asset, input.owner, spender, options);\n  const sufficient = allowance >= input.requiredAmount;\n\n  return Object.freeze({\n    asset: input.asset,\n    owner: input.owner,\n    spender,\n    allowance,\n    requiredAmount: input.requiredAmount,\n    sufficient,\n    missingAmount: sufficient ? 0n : input.requiredAmount - allowance,\n  });\n}\n","import { type Address, getAddress } from \"viem\";\n\nimport { buybackVaultAbi, launchFactoryAbi } from \"../abi/generated\";\nimport type {\n  LaunchpadActionContext,\n  LaunchpadBuybackVest,\n  LaunchpadReadOptions,\n  LaunchpadWriteActionContext,\n} from \"../types\";\nimport { blockSelector } from \"./block\";\nimport {\n  launchpadPreparedContext,\n  type PreparedLaunchpadTransaction,\n  toPreparedLaunchpadTransaction,\n} from \"./write/prepared\";\nimport { requireLaunchpadWriteAccount, simulateLaunchpadWrite } from \"./write/shared\";\n\n/**\n * Reads a launch's buyback vesting state.\n *\n * The clock is a single weighted average over everything ever locked, not a set of per-deposit\n * tranches: each new deposit pushes `vestingEnd` further out for the whole balance. So a launch\n * with steady buyback flow never fully vests while the flow continues, and `vestingEnd` is a\n * moving target rather than a date to count down to.\n */\nexport async function getLaunchpadBuybackVest(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadBuybackVest> {\n  const raw = await context.publicClient.readContract({\n    address: context.deployment.contracts.buybackVault,\n    abi: buybackVaultAbi,\n    functionName: \"vest\",\n    args: [token],\n    ...blockSelector(options),\n  });\n  return Object.freeze({\n    token: getAddress(token),\n    totalLocked: raw.totalLocked,\n    totalReleased: raw.totalReleased,\n    vestingStart: raw.vestingStart,\n    vestedUnreleased: raw.vestedUnreleased,\n    unvestedAmount: raw.unvestedAmount,\n    lastUpdate: raw.lastUpdate,\n    vestingEnd: raw.vestingEnd,\n    creatorRecipient: getAddress(raw.creatorRecipient),\n    protocolRecipient: getAddress(raw.protocolRecipient),\n    protocolFeeShareBps: raw.protocolFeeShareBps,\n  });\n}\n\n/** Tokens releasable from the vault right now. */\nexport function getLaunchpadBuybackReleasable(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  return context.publicClient.readContract({\n    address: context.deployment.contracts.buybackVault,\n    abi: buybackVaultAbi,\n    functionName: \"releasable\",\n    args: [token],\n    ...blockSelector(options),\n  });\n}\n\n/** The vault's fixed vesting horizon for a fresh deposit. */\nexport function getLaunchpadBuybackVestingDuration(\n  context: LaunchpadActionContext,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  return context.publicClient.readContract({\n    address: context.deployment.contracts.buybackVault,\n    abi: buybackVaultAbi,\n    functionName: \"VESTING_DURATION\",\n    ...blockSelector(options),\n  });\n}\n\nexport interface BuybackReleasePreview {\n  readonly token: Address;\n  readonly releasable: bigint;\n  readonly creatorRecipient: Address;\n  readonly protocolRecipient: Address;\n}\n\n/**\n * Prepares a release of vested buyback tokens.\n *\n * The release is split between the creator recipient and the protocol recipient by the launch's\n * snapshotted `protocolFeeShareBps`, and it pays both regardless of who calls — the caller is only\n * the trigger, never the beneficiary.\n */\nexport async function prepareLaunchpadBuybackRelease(\n  context: LaunchpadWriteActionContext,\n  token: Address,\n): Promise<PreparedLaunchpadTransaction<BuybackReleasePreview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const [releasable, vest] = await Promise.all([\n    getLaunchpadBuybackReleasable(context, token),\n    getLaunchpadBuybackVest(context, token),\n  ]);\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.buybackVault,\n    abi: buybackVaultAbi,\n    functionName: \"release\",\n    args: [token],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({\n      token: getAddress(token),\n      releasable,\n      creatorRecipient: vest.creatorRecipient,\n      protocolRecipient: vest.protocolRecipient,\n    }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * Prepares a change to a launch's buyback switch.\n *\n * The permission is deliberately asymmetric and enforced in the factory, not just the UI: the\n * current creator fee recipient may turn buyback **on or off**, while the protocol owner may only\n * turn it **off**. Either way the change applies only to fees produced afterwards — anything\n * already earmarked, pending, mid-sweep, or in the vault is never retroactively rerouted.\n */\nexport async function prepareLaunchpadSetBuybackEnabled(\n  context: LaunchpadWriteActionContext,\n  input: { readonly token: Address; readonly enabled: boolean },\n): Promise<PreparedLaunchpadTransaction<{ readonly token: Address; readonly enabled: boolean }>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"setTokenBuybackEnabled\",\n    args: [input.token, input.enabled],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ token: getAddress(input.token), enabled: input.enabled }),\n    launchpadPreparedContext(context, account),\n  );\n}\n","import { type Account, type Address, type Hash, isAddressEqual } from \"viem\";\nimport { createPreparedTransactionStore, requireWalletClient } from \"../../core\";\nimport {\n  ForgedPreparedTransactionError,\n  PreparedAccountMismatchError,\n  toLaunchpadError,\n} from \"../../errors\";\nimport type { LaunchpadWriteActionContext } from \"../../types\";\nimport { requireLaunchpadWriteAccount } from \"./shared\";\n\n// The compile-time brand prevents object literals; the module-private store below supplies the\n// runtime provenance that TypeScript erases and retains a canonical request separate from the\n// public inspection snapshot.\ndeclare const preparedLaunchpadTransactionBrand: unique symbol;\nconst preparedTransactions = createPreparedTransactionStore();\n\nexport interface PreparedLaunchpadTransactionContext {\n  readonly chainId: number;\n  readonly account: Address;\n  readonly factory: Address;\n}\n\nexport interface PreparedLaunchpadTransaction<Preview> {\n  readonly [preparedLaunchpadTransactionBrand]: true;\n  /** Frozen inspection copy; send uses the store's separate canonical simulation request. */\n  readonly request: Readonly<Record<string, unknown>>;\n  readonly preview: Preview;\n  readonly context: PreparedLaunchpadTransactionContext;\n}\n\nexport function toPreparedLaunchpadTransaction<Preview>(\n  request: Record<string, unknown>,\n  preview: Preview,\n  context: PreparedLaunchpadTransactionContext,\n): PreparedLaunchpadTransaction<Preview> {\n  return preparedTransactions.create(\n    request,\n    preview,\n    context,\n  ) as unknown as PreparedLaunchpadTransaction<Preview>;\n}\n\nexport function launchpadPreparedContext(\n  context: LaunchpadWriteActionContext,\n  account: Account,\n): PreparedLaunchpadTransactionContext {\n  return Object.freeze({\n    chainId: context.deployment.chainId,\n    account: account.address,\n    factory: context.deployment.contracts.factory,\n  });\n}\n\nasync function assertPreparedStillValid(\n  context: LaunchpadWriteActionContext,\n  prepared: PreparedLaunchpadTransaction<unknown>,\n): Promise<void> {\n  if (\n    prepared === null ||\n    typeof prepared !== \"object\" ||\n    typeof prepared.request !== \"object\" ||\n    prepared.request === null ||\n    typeof prepared.context !== \"object\" ||\n    prepared.context === null\n  ) {\n    throw new ForgedPreparedTransactionError(\n      \"The prepared transaction is malformed; obtain it from a prepare* call.\",\n    );\n  }\n  if (!preparedTransactions.has(prepared)) {\n    throw new ForgedPreparedTransactionError(\n      \"The prepared transaction did not originate from this SDK process; obtain it from a prepare* call.\",\n    );\n  }\n  if (prepared.context.chainId !== context.deployment.chainId) {\n    throw new ForgedPreparedTransactionError(\n      `The prepared transaction targets chain ${prepared.context.chainId} but this client is bound to chain ${context.deployment.chainId}.`,\n    );\n  }\n  if (!isAddressEqual(prepared.context.factory, context.deployment.contracts.factory)) {\n    throw new ForgedPreparedTransactionError(\n      `The prepared transaction targets factory ${prepared.context.factory} but this client is bound to ${context.deployment.contracts.factory}.`,\n    );\n  }\n  const account = await requireLaunchpadWriteAccount(context);\n  if (!isAddressEqual(account.address, prepared.context.account)) {\n    throw new PreparedAccountMismatchError(prepared.context.account, account.address);\n  }\n}\n\nexport async function sendPreparedLaunchpadTransaction(\n  context: LaunchpadWriteActionContext,\n  prepared: PreparedLaunchpadTransaction<unknown>,\n): Promise<Hash> {\n  await assertPreparedStillValid(context, prepared);\n  const walletClient = requireWalletClient(context.walletClient);\n  const request = preparedTransactions.getCanonical<Record<string, unknown>>(prepared);\n  if (!request) {\n    throw new ForgedPreparedTransactionError(\n      \"The prepared transaction has no canonical simulated request; prepare it again.\",\n    );\n  }\n  try {\n    return await walletClient.writeContract(request as never);\n  } catch (error) {\n    throw toLaunchpadError(error);\n  }\n}\n","import type { Account, Address } from \"viem\";\nimport { resolveLiveWalletAccount } from \"../../core\";\nimport {\n  LaunchpadApprovalRequiredError,\n  LaunchpadInsufficientBalanceError,\n  toLaunchpadError,\n  WrongWalletChainError,\n} from \"../../errors\";\nimport type { LaunchpadWriteActionContext } from \"../../types\";\nimport { getLaunchpadApprovalStatus } from \"../approval\";\nimport { getErc20Balance } from \"../read\";\n\nexport function requireLaunchpadWriteAccount(\n  context: LaunchpadWriteActionContext,\n): Promise<Account> {\n  // The configured account is only a construction-time snapshot. The shared resolver reads both\n  // the live chain and eth_accounts on every write so an account/network switch cannot reuse it.\n  return resolveLiveWalletAccount(\n    context.walletClient,\n    context.deployment.chainId,\n    (expected, actual) => new WrongWalletChainError(expected, actual),\n  );\n}\n\nexport async function simulateLaunchpadWrite(\n  context: LaunchpadWriteActionContext,\n  parameters: Record<string, unknown>,\n): Promise<{ request: Record<string, unknown>; result: unknown }> {\n  try {\n    const { request, result } = await context.publicClient.simulateContract(parameters as never);\n    return { request: request as unknown as Record<string, unknown>, result };\n  } catch (error) {\n    throw toLaunchpadError(error);\n  }\n}\n\n/**\n * Multiplier applied to a transaction that may attempt an automatic graduation.\n *\n * RC2 graduates a launch by calling back into the factory from inside the trade, wrapped in a\n * `try`. That interacts badly with gas estimation: `eth_estimateGas` searches for the smallest\n * limit under which the transaction *succeeds*, and the transaction succeeds whether or not the\n * inner call runs out of gas — so the estimate settles on a value that excludes the graduation\n * entirely. Executing at that limit, EIP-150's 63/64 rule leaves the inner call short and it\n * reverts with out-of-gas every single time.\n *\n * Measured on an Arc Testnet fork: a boundary buy estimates at ~436k, an independent `graduate`\n * costs ~250k, and 1.25x is already enough for the inner call to complete. 2x keeps a wide margin\n * for a launch whose graduation is more expensive, and costs nothing when unused — unspent gas is\n * refunded, and the fork run actually consumed *less* (441k) when graduation succeeded than when\n * the doomed attempt burned its entire 63/64 allowance (469k).\n */\nconst AUTO_GRADUATION_GAS_MULTIPLIER = 2n;\n\n/**\n * Re-estimates a write and returns a request with enough headroom for RC2's in-transaction\n * graduation attempt.\n *\n * Only call this for a write that can actually trigger one — a buy that empties the curve, or a\n * creation whose initial buy does. Estimation failures are swallowed on purpose: the caller has\n * already simulated successfully, so a failure here means the node would not estimate, and the\n * right outcome is the unmodified request (the wallet estimates as before, and graduation stays\n * best-effort) rather than a broken prepare.\n */\nexport async function withAutoGraduationGasHeadroom(\n  context: LaunchpadWriteActionContext,\n  request: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n  if (request.gas !== undefined) return request;\n  try {\n    const estimate = await context.publicClient.estimateContractGas(request as never);\n    return { ...request, gas: estimate * AUTO_GRADUATION_GAS_MULTIPLIER };\n  } catch {\n    return request;\n  }\n}\n\nexport async function assertLaunchpadCanSpend(\n  context: LaunchpadWriteActionContext,\n  input: {\n    readonly asset: Address;\n    readonly owner: Address;\n    readonly requiredAmount: bigint;\n    /**\n     * Contract that will pull the funds. Defaults to the factory, which is right for every curve\n     * write; the emergency-exit vault pulls its own redemptions, so that path passes it explicitly.\n     */\n    readonly spender?: Address;\n  },\n): Promise<void> {\n  // Read both prerequisites before simulation but report balance first. SafeTransferLib collapses\n  // insufficient balance and allowance into TransferFailed(), while the two failures require\n  // different user actions; approving assets the account does not hold only defers the failure.\n  const [balance, approval] = await Promise.all([\n    getErc20Balance(context, input.asset, input.owner),\n    getLaunchpadApprovalStatus(context, {\n      asset: input.asset,\n      owner: input.owner,\n      requiredAmount: input.requiredAmount,\n      ...(input.spender === undefined ? {} : { spender: input.spender }),\n    }),\n  ]);\n  if (balance < input.requiredAmount) {\n    throw new LaunchpadInsufficientBalanceError(\n      input.asset,\n      input.owner,\n      input.requiredAmount,\n      balance,\n    );\n  }\n  if (!approval.sufficient) {\n    throw new LaunchpadApprovalRequiredError(\n      approval.asset,\n      approval.spender,\n      approval.requiredAmount,\n    );\n  }\n}\n","import { type Address, getAddress, type Hex } from \"viem\";\n\nimport { launchFactoryAbi } from \"../abi/generated\";\nimport type { LaunchpadFeePolicy, LaunchpadLaunchConfig, LaunchpadQuoteToken } from \"../deployment\";\nimport type { LaunchpadActionContext, LaunchpadReadOptions } from \"../types\";\nimport { blockSelector } from \"./block\";\n\n/**\n * Resolves the launch config and quote-token economics a creation would use, straight from the\n * factory.\n *\n * **Two arguments, not three.** `PRODUCTION_FRONTEND_INTEGRATION.md` documents this as\n * `validateAndResolve(quoteToken, launchConfigId, creatorTaxBps)`, but neither the ABI nor\n * `LaunchConfiguration.sol` has a third parameter — the creator tax is validated separately by\n * `_validateCreatorTaxCombination`. Calling it the documented way fails to encode.\n *\n * Reverts when the pairing is unusable (quote token unapproved, economics unconfigured, config\n * missing or disabled), so it doubles as the pre-flight check for a creation form.\n */\nexport async function validateAndResolveLaunchConfig(\n  context: LaunchpadActionContext,\n  input: { readonly quoteToken: Address; readonly launchConfigId: bigint },\n  options?: LaunchpadReadOptions,\n): Promise<{\n  readonly launchConfig: Omit<LaunchpadLaunchConfig, \"id\">;\n  readonly quoteTokenEconomics: Pick<\n    LaunchpadQuoteToken,\n    \"phantomQuote\" | \"graduationThreshold\" | \"decimals\"\n  >;\n}> {\n  const [config, economics] = await context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"validateAndResolve\",\n    args: [input.quoteToken, input.launchConfigId],\n    ...blockSelector(options),\n  });\n  return Object.freeze({\n    launchConfig: Object.freeze({\n      supply: config.supply,\n      curveFeeBps: config.curveFeeBps,\n      poolFee: config.poolFee,\n      tickSpacing: config.tickSpacing,\n      enabled: config.enabled,\n    }),\n    quoteTokenEconomics: Object.freeze({\n      phantomQuote: economics.phantomQuote,\n      graduationThreshold: economics.graduationThreshold,\n      decimals: economics.decimals,\n    }),\n  });\n}\n\n/** Reads one launch config template by id. */\nexport async function getLaunchpadLaunchConfig(\n  context: LaunchpadActionContext,\n  launchConfigId: bigint,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadLaunchConfig> {\n  const config = await context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"launchConfig\",\n    args: [launchConfigId],\n    ...blockSelector(options),\n  });\n  return Object.freeze({\n    id: launchConfigId,\n    supply: config.supply,\n    curveFeeBps: config.curveFeeBps,\n    poolFee: config.poolFee,\n    tickSpacing: config.tickSpacing,\n    enabled: config.enabled,\n  });\n}\n\n/** How many launch config templates exist. Ids are the indices `[0, count)`. */\nexport function getLaunchpadLaunchConfigCount(\n  context: LaunchpadActionContext,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  return context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"launchConfigCount\",\n    ...blockSelector(options),\n  });\n}\n\n/** Reads every launch config template, in id order. */\nexport async function getLaunchpadLaunchConfigs(\n  context: LaunchpadActionContext,\n  options?: LaunchpadReadOptions,\n): Promise<readonly LaunchpadLaunchConfig[]> {\n  const count = await getLaunchpadLaunchConfigCount(context, options);\n  const configs = await Promise.all(\n    Array.from({ length: Number(count) }, (_, index) =>\n      getLaunchpadLaunchConfig(context, BigInt(index), options),\n    ),\n  );\n  return Object.freeze(configs);\n}\n\n/** Reads a quote token's approval flag and curve economics. */\nexport async function getLaunchpadQuoteTokenEconomics(\n  context: LaunchpadActionContext,\n  quoteToken: Address,\n  options?: LaunchpadReadOptions,\n): Promise<{\n  readonly approved: boolean;\n  readonly phantomQuote: bigint;\n  readonly graduationThreshold: bigint;\n  readonly decimals: number;\n}> {\n  const selector = blockSelector(options);\n  const factory = { address: context.deployment.contracts.factory, abi: launchFactoryAbi } as const;\n  const [approved, economics] = await Promise.all([\n    context.publicClient.readContract({\n      ...factory,\n      functionName: \"approvedQuoteTokens\",\n      args: [quoteToken],\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...factory,\n      functionName: \"quoteTokenEconomics\",\n      args: [quoteToken],\n      ...selector,\n    }),\n  ]);\n  return Object.freeze({\n    approved,\n    phantomQuote: economics.phantomQuote,\n    graduationThreshold: economics.graduationThreshold,\n    decimals: economics.decimals,\n  });\n}\n\n/** Reads the factory's current fee policy. Mutable governance state, not a per-launch snapshot. */\nexport async function getLaunchpadFeePolicy(\n  context: LaunchpadActionContext,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadFeePolicy> {\n  const policy = await context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"feePolicy\",\n    ...blockSelector(options),\n  });\n  return Object.freeze({\n    protocolFeeRecipient: getAddress(policy.protocolFeeRecipient),\n    protocolFeeShareBps: policy.protocolFeeShareBps,\n    buybackBurnBps: policy.buybackBurnBps,\n    hookFeeBps: policy.hookFeeBps,\n    maxInternalPriceImpactBps: policy.maxInternalPriceImpactBps,\n  });\n}\n\n/** Reads the factory's current snipe tax configuration for **new** launches. */\nexport async function getLaunchpadSnipeTaxConfig(\n  context: LaunchpadActionContext,\n  options?: LaunchpadReadOptions,\n): Promise<{ readonly startBps: number; readonly durationSeconds: number }> {\n  const config = await context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"snipeTaxConfig\",\n    ...blockSelector(options),\n  });\n  return Object.freeze({ startBps: config.startBps, durationSeconds: config.durationSeconds });\n}\n\n/** Whether an account may launch right now, accounting for the denylist, gate and whitelist. */\nexport function canLaunchpadCreatorLaunch(\n  context: LaunchpadActionContext,\n  creator: Address,\n  options?: LaunchpadReadOptions,\n): Promise<boolean> {\n  return context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"canLaunch\",\n    args: [creator],\n    ...blockSelector(options),\n  });\n}\n\n/** The three inputs behind {@link canLaunchpadCreatorLaunch}, for explaining a refusal. */\nexport interface LaunchpadLaunchGate {\n  readonly canLaunch: boolean;\n  readonly launchEnabled: boolean;\n  readonly whitelisted: boolean;\n  readonly denied: boolean;\n}\n\n/**\n * Reads the full launch gate for one creator.\n *\n * The denylist takes precedence over everything: a denied creator cannot launch even with public\n * launch enabled and even if also whitelisted.\n */\nexport async function getLaunchpadLaunchGate(\n  context: LaunchpadActionContext,\n  creator: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadLaunchGate> {\n  const selector = blockSelector(options);\n  const factory = { address: context.deployment.contracts.factory, abi: launchFactoryAbi } as const;\n  const [canLaunch, launchEnabled, whitelisted, denied] = await Promise.all([\n    context.publicClient.readContract({\n      ...factory,\n      functionName: \"canLaunch\",\n      args: [creator],\n      ...selector,\n    }),\n    context.publicClient.readContract({ ...factory, functionName: \"launchEnabled\", ...selector }),\n    context.publicClient.readContract({\n      ...factory,\n      functionName: \"whitelistedLaunchers\",\n      args: [creator],\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...factory,\n      functionName: \"deniedCreators\",\n      args: [creator],\n      ...selector,\n    }),\n  ]);\n  return Object.freeze({ canLaunch, launchEnabled, whitelisted, denied });\n}\n\n/** Whether a creator has already consumed a CREATE2 salt. Salts are single-use per creator. */\nexport function isLaunchpadSaltUsed(\n  context: LaunchpadActionContext,\n  input: { readonly creator: Address; readonly salt: Hex },\n  options?: LaunchpadReadOptions,\n): Promise<boolean> {\n  return context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"usedSalt\",\n    args: [input.creator, input.salt],\n    ...blockSelector(options),\n  });\n}\n\n/** A pending governance override of a launch's creator fee recipient. */\nexport interface LaunchpadPendingCreatorRecipientChange {\n  readonly proposedRecipient: Address;\n  /** Executable from this timestamp (three days after proposal). */\n  readonly effectiveAt: bigint;\n  /** Expires here (three days after {@link effectiveAt}); after this it must be proposed again. */\n  readonly expiresAt: bigint;\n  readonly pending: boolean;\n}\n\n/** Reads any pending creator-fee-recipient override for a launch. */\nexport async function getLaunchpadPendingCreatorRecipientChange(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadPendingCreatorRecipientChange> {\n  const [proposedRecipient, effectiveAt, expiresAt] = await context.publicClient.readContract({\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"pendingCreatorRecipientChanges\",\n    args: [token],\n    ...blockSelector(options),\n  });\n  return Object.freeze({\n    proposedRecipient: getAddress(proposedRecipient),\n    effectiveAt,\n    expiresAt,\n    pending: proposedRecipient !== \"0x0000000000000000000000000000000000000000\",\n  });\n}\n","import type { Address } from \"viem\";\n\nimport { curveGetAmountIn, curveGetAmountOut } from \"../math/curve\";\nimport type {\n  LaunchpadActionContext,\n  LaunchpadCurveState,\n  LaunchpadGraduationProgress,\n  LaunchpadGraduationStatus,\n  LaunchpadReadOptions,\n} from \"../types\";\nimport {\n  getLaunchpadGraduationProgress,\n  getLaunchpadTokenState,\n  resolvePinnedBlockNumber,\n} from \"./read\";\n\n/** Curve progress for a token screen, resolved at one pinned block. */\nexport interface LaunchpadCurveProgress extends LaunchpadGraduationProgress {\n  readonly blockNumber: bigint;\n  readonly status: LaunchpadGraduationStatus;\n}\n\n/**\n * Reads how far a curve is from graduating.\n *\n * Measured on the **Token** side — sold against initially-sellable supply — because that is the\n * contract's own boundary. V3 measured a quote reserve against a target, which one large buy could\n * overshoot; this saturates at exactly 100% and reaches it at the same instant the curve closes.\n */\nexport async function getLaunchpadCurveProgress(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadCurveProgress> {\n  const blockNumber = await resolvePinnedBlockNumber(context, options);\n  const state = await getLaunchpadTokenState(context, token, { blockNumber });\n  const progress = getLaunchpadGraduationProgress(state.curveState);\n  return Object.freeze({ ...progress, blockNumber, status: state.graduation.status });\n}\n\n/**\n * The curve's marginal price, as raw quote units per one whole (1e18) token.\n *\n * A marginal price, never an executable one: any real trade moves along the curve, so a\n * `minTokenOut` must come from a quote rather than from multiplying by this. The contracts expose\n * no spot-price getter of their own — this is derived from `pricingReserves`.\n */\nexport function launchpadSpotPrice(curveState: LaunchpadCurveState): bigint {\n  if (curveState.tokenReserve === 0n) return 0n;\n  return (curveState.quoteReserve * 10n ** 18n) / curveState.tokenReserve;\n}\n\n/** Net quote required to buy exactly `tokenOut`, computed locally from curve state. */\nexport function launchpadNetRequiredToBuy(\n  curveState: LaunchpadCurveState,\n  tokenOut: bigint,\n): bigint {\n  return curveGetAmountIn(tokenOut, curveState.quoteReserve, curveState.tokenReserve);\n}\n\n/** Tokens `netQuoteIn` buys, before the sellable cap, computed locally from curve state. */\nexport function launchpadTokensForNetQuote(\n  curveState: LaunchpadCurveState,\n  netQuoteIn: bigint,\n): bigint {\n  const out = curveGetAmountOut(netQuoteIn, curveState.quoteReserve, curveState.tokenReserve);\n  return out > curveState.sellableTokens ? curveState.sellableTokens : out;\n}\n","import { type Address, erc20Abi, getAddress } from \"viem\";\n\nimport {\n  emergencyDistributorAbi,\n  emergencyDistributorFactoryAbi,\n  launchFactoryAbi,\n} from \"../abi/generated\";\nimport { launchpadEmergencyRedeemQuoteOut } from \"../math/emergency-exit\";\nimport type {\n  LaunchpadActionContext,\n  LaunchpadEmergencyExitState,\n  LaunchpadGraduationRecord,\n  LaunchpadReadOptions,\n  LaunchpadWriteActionContext,\n} from \"../types\";\nimport { blockSelector } from \"./block\";\nimport {\n  launchpadPreparedContext,\n  type PreparedLaunchpadTransaction,\n  toPreparedLaunchpadTransaction,\n} from \"./write/prepared\";\nimport {\n  assertLaunchpadCanSpend,\n  requireLaunchpadWriteAccount,\n  simulateLaunchpadWrite,\n} from \"./write/shared\";\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\n/**\n * The distributor address for a launch, whether or not it has been deployed yet.\n *\n * Deployment is CREATE2-deterministic per `(launchToken, quoteToken)`, so the address can be shown\n * before an exit is triggered. `deployed` distinguishes a prediction from a live contract.\n */\nexport async function getLaunchpadEmergencyDistributorAddress(\n  context: LaunchpadActionContext,\n  input: { readonly launchToken: Address; readonly quoteToken: Address },\n  options?: LaunchpadReadOptions,\n): Promise<{ readonly distributor: Address; readonly deployed: boolean }> {\n  const factory = context.deployment.contracts.emergencyDistributorFactory;\n  const selector = blockSelector(options);\n  const [existing, predicted] = await Promise.all([\n    context.publicClient.readContract({\n      address: factory,\n      abi: emergencyDistributorFactoryAbi,\n      functionName: \"distributorOf\",\n      args: [input.launchToken],\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      address: factory,\n      abi: emergencyDistributorFactoryAbi,\n      functionName: \"predictDistributor\",\n      args: [input.launchToken, input.quoteToken],\n      ...selector,\n    }),\n  ]);\n  return existing === ZERO_ADDRESS\n    ? { distributor: getAddress(predicted), deployed: false }\n    : { distributor: getAddress(existing), deployed: true };\n}\n\n/** Reads a deployed distributor's redemption state. */\nexport async function getLaunchpadEmergencyExitState(\n  context: LaunchpadActionContext,\n  distributor: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadEmergencyExitState> {\n  const selector = blockSelector(options);\n  const contract = { address: distributor, abi: emergencyDistributorAbi } as const;\n  const [launchToken, quoteToken, activated, initialRedeemableSupply, remainingQuote] =\n    await Promise.all([\n      context.publicClient.readContract({ ...contract, functionName: \"launchToken\", ...selector }),\n      context.publicClient.readContract({ ...contract, functionName: \"quoteToken\", ...selector }),\n      context.publicClient.readContract({ ...contract, functionName: \"activated\", ...selector }),\n      context.publicClient.readContract({\n        ...contract,\n        functionName: \"initialRedeemableSupply\",\n        ...selector,\n      }),\n      context.publicClient.readContract({\n        ...contract,\n        functionName: \"remainingQuote\",\n        ...selector,\n      }),\n    ]);\n  return Object.freeze({\n    distributor: getAddress(distributor),\n    launchToken: getAddress(launchToken),\n    quoteToken: getAddress(quoteToken),\n    activated,\n    initialRedeemableSupply,\n    remainingQuote,\n  });\n}\n\n/** What a redemption would pay out, quoted against the token's live total supply. */\nexport interface EmergencyRedeemQuote {\n  readonly tokenIn: bigint;\n  readonly quoteOut: bigint;\n  /** The live `totalSupply()` used as the denominator; **not** a snapshot. */\n  readonly supply: bigint;\n  readonly remainingQuote: bigint;\n  /** True when `tokenIn` is the entire remaining supply, which sweeps the whole remaining quote. */\n  readonly isFinalRedemption: boolean;\n}\n\n/**\n * Quotes an emergency redemption.\n *\n * The denominator is the launch token's **live** `totalSupply()`, re-read on every redemption\n * rather than frozen at activation — a V3 exit divided by a fixed snapshot instead. The practical\n * consequence is that a holder who burns their tokens without redeeming does not forfeit their\n * share into a void: it is redistributed across everyone who remains, so each surviving holder's\n * payout per token rises. Quotes therefore drift with other people's behaviour and should be\n * re-read immediately before submitting.\n */\nexport async function quoteLaunchpadEmergencyRedeem(\n  context: LaunchpadActionContext,\n  input: { readonly distributor: Address; readonly tokenIn: bigint },\n  options?: LaunchpadReadOptions,\n): Promise<EmergencyRedeemQuote> {\n  const state = await getLaunchpadEmergencyExitState(context, input.distributor, options);\n  const supply = await context.publicClient.readContract({\n    address: state.launchToken,\n    abi: erc20Abi,\n    functionName: \"totalSupply\",\n    ...blockSelector(options),\n  });\n  const quoteOut = launchpadEmergencyRedeemQuoteOut({\n    tokenIn: input.tokenIn,\n    supply,\n    remainingQuote: state.remainingQuote,\n  });\n  return Object.freeze({\n    tokenIn: input.tokenIn,\n    quoteOut,\n    supply,\n    remainingQuote: state.remainingQuote,\n    isFinalRedemption: input.tokenIn === supply,\n  });\n}\n\n/** Prepares an emergency redemption, burning `tokenIn` for a pro-rata share of the remaining quote. */\nexport async function prepareLaunchpadEmergencyRedeem(\n  context: LaunchpadWriteActionContext,\n  input: {\n    readonly distributor: Address;\n    readonly tokenIn: bigint;\n    readonly recipient?: Address;\n  },\n): Promise<PreparedLaunchpadTransaction<EmergencyRedeemQuote>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const recipient = input.recipient ?? account.address;\n  const quote = await quoteLaunchpadEmergencyRedeem(context, input);\n  const state = await getLaunchpadEmergencyExitState(context, input.distributor);\n\n  await assertLaunchpadCanSpend(context, {\n    asset: state.launchToken,\n    owner: account.address,\n    requiredAmount: input.tokenIn,\n    spender: input.distributor,\n  });\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: input.distributor,\n    abi: emergencyDistributorAbi,\n    functionName: \"redeem\",\n    args: [input.tokenIn, recipient],\n  });\n  return toPreparedLaunchpadTransaction(request, quote, launchpadPreparedContext(context, account));\n}\n\n/** `GraduationCoordinator.EMERGENCY_EXIT_DELAY`: seven days, measured from the sweep. */\nexport const LAUNCHPAD_EMERGENCY_EXIT_DELAY_SECONDS = 7n * 24n * 60n * 60n;\n\n/**\n * When a launch's emergency exit becomes callable, or `undefined` while it cannot.\n *\n * The exit is narrower than \"a stuck launch\": it requires the launch to already be `swept`, and the\n * clock runs from `sweptAt`, not from creation. It exists for the one gap the two-step graduation\n * opens — assets have left the curve but `createGraduatedPool` keeps failing — so a launch still\n * trading on its curve has nothing to exit from.\n */\nexport function launchpadEmergencyExitAvailableAt(\n  graduation: Pick<LaunchpadGraduationRecord, \"status\" | \"sweptAt\">,\n): bigint | undefined {\n  if (graduation.status !== \"swept\") return undefined;\n  return graduation.sweptAt + LAUNCHPAD_EMERGENCY_EXIT_DELAY_SECONDS;\n}\n\n/**\n * Prepares `emergencyExit`, which is **owner-only** — unlike both graduation steps.\n *\n * Worth stating plainly, because the surrounding lifecycle is permissionless and the name suggests\n * an escape hatch anyone can pull: `LaunchFactory.emergencyExit` is `onlyOwner`. A stranded holder\n * cannot trigger their own exit; they can only redeem once governance has. Verified on a fork —\n * the same call from an ordinary account reverts.\n *\n * Requires the launch to be in `swept` and seven days to have passed since `sweptAt` — see\n * {@link launchpadEmergencyExitAvailableAt}. There is one path and one delay: V3's guarded\n * one-hour fast track no longer exists.\n */\nexport async function prepareLaunchpadEmergencyExit(\n  context: LaunchpadWriteActionContext,\n  token: Address,\n): Promise<PreparedLaunchpadTransaction<{ readonly token: Address }>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"emergencyExit\",\n    args: [token],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ token: getAddress(token) }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * Prepares `syncDonatedTokens`, folding tokens sent directly to the distributor into the burn\n * accounting. Permissionless housekeeping — it pays the caller nothing.\n */\nexport async function prepareLaunchpadSyncDonatedTokens(\n  context: LaunchpadWriteActionContext,\n  distributor: Address,\n): Promise<PreparedLaunchpadTransaction<{ readonly distributor: Address }>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: distributor,\n    abi: emergencyDistributorAbi,\n    functionName: \"syncDonatedTokens\",\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ distributor: getAddress(distributor) }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * Prepares `releaseOrphanedQuote`, sweeping quote left behind once no redeemable supply remains,\n * to the factory's configured orphaned-assets recipient. Permissionless.\n */\nexport async function prepareLaunchpadReleaseOrphanedQuote(\n  context: LaunchpadWriteActionContext,\n  distributor: Address,\n): Promise<PreparedLaunchpadTransaction<{ readonly distributor: Address }>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: distributor,\n    abi: emergencyDistributorAbi,\n    functionName: \"releaseOrphanedQuote\",\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ distributor: getAddress(distributor) }),\n    launchpadPreparedContext(context, account),\n  );\n}\n","import { LaunchpadInvalidAmountError } from \"../errors\";\n\n/**\n * `EmergencyDistributor.redeem`'s payout.\n *\n * `quoteOut = floor(tokenIn * remainingQuote / supply)`, where `supply` is the launch token's\n * **live** `totalSupply()` at redemption time — not a snapshot taken at activation, which is what\n * V3 used. Two consequences follow, and both are intentional protocol behaviour rather than\n * rounding artefacts:\n *\n * - A holder who burns tokens without redeeming permanently increases everyone else's payout per\n *   token, because the denominator shrinks while `remainingQuote` does not.\n * - The last holder to redeem takes the entire remaining quote, since `tokenIn === supply` makes\n *   the division exact. This is how the contract avoids stranding dust, and why\n *   {@link launchpadIsFinalRedemption} is worth surfacing in a UI.\n */\nexport function launchpadEmergencyRedeemQuoteOut(input: {\n  readonly tokenIn: bigint;\n  readonly supply: bigint;\n  readonly remainingQuote: bigint;\n}): bigint {\n  const { tokenIn, supply, remainingQuote } = input;\n  if (tokenIn <= 0n) throw new LaunchpadInvalidAmountError();\n  if (supply <= 0n || tokenIn > supply) throw new LaunchpadInvalidAmountError();\n  if (remainingQuote < 0n) throw new LaunchpadInvalidAmountError();\n  return (tokenIn * remainingQuote) / supply;\n}\n\n/** True when this redemption consumes the entire remaining supply, and so the entire remaining quote. */\nexport function launchpadIsFinalRedemption(tokenIn: bigint, supply: bigint): boolean {\n  return tokenIn > 0n && tokenIn === supply;\n}\n","import type { Address, Hex } from \"viem\";\n\nimport { feeEscrowAbi } from \"../abi/generated\";\nimport type {\n  LaunchpadActionContext,\n  LaunchpadFeeEscrowBalance,\n  LaunchpadPartnerEscrowBalance,\n  LaunchpadReadOptions,\n  LaunchpadWriteActionContext,\n} from \"../types\";\nimport { blockSelector } from \"./block\";\nimport {\n  launchpadPreparedContext,\n  type PreparedLaunchpadTransaction,\n  toPreparedLaunchpadTransaction,\n} from \"./write/prepared\";\nimport { requireLaunchpadWriteAccount, simulateLaunchpadWrite } from \"./write/shared\";\n\n/**\n * Reads a recipient's claimable balance for one asset.\n *\n * **The escrow keys balances by `(recipient, asset)` and nothing else.** It does not record which\n * launch a credit came from, so a recipient reused across several launches — a creator who has\n * launched more than one token, or a holder distributor serving several — accumulates one\n * indistinguishable pool per asset that the chain cannot attribute back. Anything needing\n * per-launch attribution has to reconstruct it off-chain from `CurveFeesSwept`/`FeeCredited`\n * events, or use a distinct recipient address per launch.\n */\nexport async function getLaunchpadClaimableBalance(\n  context: LaunchpadActionContext,\n  input: { readonly recipient: Address; readonly asset: Address },\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadFeeEscrowBalance> {\n  const amount = await context.publicClient.readContract({\n    address: context.deployment.contracts.feeEscrow,\n    abi: feeEscrowAbi,\n    functionName: \"balanceOfToken\",\n    args: [input.recipient, input.asset],\n    ...blockSelector(options),\n  });\n  return Object.freeze({ asset: input.asset, recipient: input.recipient, amount });\n}\n\n/** Reads a partner's claimable balance, keyed by `(partnerId, asset)` rather than by recipient. */\nexport async function getLaunchpadPartnerClaimableBalance(\n  context: LaunchpadActionContext,\n  input: { readonly partnerId: Hex; readonly asset: Address },\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadPartnerEscrowBalance> {\n  const amount = await context.publicClient.readContract({\n    address: context.deployment.contracts.feeEscrow,\n    abi: feeEscrowAbi,\n    functionName: \"partnerBalance\",\n    args: [input.partnerId, input.asset],\n    ...blockSelector(options),\n  });\n  return Object.freeze({ partnerId: input.partnerId, asset: input.asset, amount });\n}\n\n/** What a claim will move. */\nexport interface ClaimPreview {\n  readonly asset: Address;\n  readonly amount: bigint;\n  readonly recipient: Address;\n  readonly partnerId?: Hex;\n}\n\n/**\n * Prepares a claim of the caller's own escrow balance for one asset.\n *\n * Self-service: only the recipient can claim their own balance, and there is no \"claim on behalf\n * of\" path. Omit `amount` to sweep the whole balance.\n */\nexport async function prepareLaunchpadClaim(\n  context: LaunchpadWriteActionContext,\n  input: { readonly asset: Address; readonly amount?: bigint },\n): Promise<PreparedLaunchpadTransaction<ClaimPreview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const balance = await getLaunchpadClaimableBalance(context, {\n    recipient: account.address,\n    asset: input.asset,\n  });\n  const amount = input.amount ?? balance.amount;\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.feeEscrow,\n    abi: feeEscrowAbi,\n    functionName: \"claimToken\",\n    args: input.amount === undefined ? [input.asset] : [input.asset, input.amount],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ asset: input.asset, amount, recipient: account.address }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * Prepares a partner claim.\n *\n * Only the partner's **current** recipient in the registry may call this, and the balance stays\n * attached to the `partnerId` rather than to any address — so rotating the recipient hands the\n * entire unclaimed balance to the new one, and the old one immediately loses access. A disabled\n * partner cannot claim at all; the balance is frozen, not forfeited, and becomes claimable again\n * on re-enable.\n */\nexport async function prepareLaunchpadPartnerClaim(\n  context: LaunchpadWriteActionContext,\n  input: { readonly partnerId: Hex; readonly asset: Address },\n): Promise<PreparedLaunchpadTransaction<ClaimPreview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const balance = await getLaunchpadPartnerClaimableBalance(context, input);\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.feeEscrow,\n    abi: feeEscrowAbi,\n    functionName: \"claimPartner\",\n    args: [input.partnerId, input.asset],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({\n      asset: input.asset,\n      amount: balance.amount,\n      recipient: account.address,\n      partnerId: input.partnerId,\n    }),\n    launchpadPreparedContext(context, account),\n  );\n}\n","import { type Address, getAddress, type Hex } from \"viem\";\n\nimport { launchFactoryAbi, partnerRegistryAbi } from \"../abi/generated\";\nimport type { LaunchpadWriteActionContext } from \"../types\";\nimport {\n  launchpadPreparedContext,\n  type PreparedLaunchpadTransaction,\n  toPreparedLaunchpadTransaction,\n} from \"./write/prepared\";\nimport { requireLaunchpadWriteAccount, simulateLaunchpadWrite } from \"./write/shared\";\n\n/**\n * Governance and admin writes.\n *\n * V3's AccessControl role matrix is gone: Production V2 uses `Ownable2Step` with a single owner per\n * contract, plus a few purpose-built two-step flows (the creator recipient override, the partner\n * controller handover). There is no `grantRole`/`revokeRole`/`hasRole` surface to wrap any more,\n * and no pause to toggle.\n */\n\nasync function prepareFactoryWrite<Preview>(\n  context: LaunchpadWriteActionContext,\n  call: { readonly functionName: string; readonly args: readonly unknown[] },\n  preview: Preview,\n): Promise<PreparedLaunchpadTransaction<Preview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: call.functionName,\n    args: call.args,\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    preview,\n    launchpadPreparedContext(context, account),\n  );\n}\n\nasync function preparePartnerRegistryWrite<Preview>(\n  context: LaunchpadWriteActionContext,\n  call: { readonly functionName: string; readonly args: readonly unknown[] },\n  preview: Preview,\n): Promise<PreparedLaunchpadTransaction<Preview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.partnerRegistry,\n    abi: partnerRegistryAbi,\n    functionName: call.functionName,\n    args: call.args,\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    preview,\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/** Owner-only: add or remove a creator from the denylist, which outranks every other launch gate. */\nexport function prepareLaunchpadSetDeniedCreator(\n  context: LaunchpadWriteActionContext,\n  input: { readonly creator: Address; readonly denied: boolean },\n) {\n  return prepareFactoryWrite(\n    context,\n    { functionName: \"setDeniedCreator\", args: [input.creator, input.denied] },\n    Object.freeze({ creator: getAddress(input.creator), denied: input.denied }),\n  );\n}\n\n/** Owner-only: allow a specific creator to launch while public launch is disabled. */\nexport function prepareLaunchpadSetWhitelistedLauncher(\n  context: LaunchpadWriteActionContext,\n  input: { readonly creator: Address; readonly enabled: boolean },\n) {\n  return prepareFactoryWrite(\n    context,\n    { functionName: \"setWhitelistedLauncher\", args: [input.creator, input.enabled] },\n    Object.freeze({ creator: getAddress(input.creator), enabled: input.enabled }),\n  );\n}\n\n/** Owner-only: open or close public launch for everyone not on the denylist. */\nexport function prepareLaunchpadSetLaunchEnabled(\n  context: LaunchpadWriteActionContext,\n  enabled: boolean,\n) {\n  return prepareFactoryWrite(\n    context,\n    { functionName: \"setLaunchEnabled\", args: [enabled] },\n    Object.freeze({ enabled }),\n  );\n}\n\n/**\n * Hands a launch's creator fee recipient to a new address, immediately.\n *\n * Callable by the **current** recipient, with no delay — the timelocked path is the governance\n * override below, which exists for the case where the recipient cannot or will not act. Moving the\n * recipient also moves the buyback on/off authority, since that permission follows the recipient\n * rather than the original creator.\n *\n * This applies to a Holder Fee Sharing launch too, and it is the reason such a launch must not be\n * described as irreversible. Nothing on chain pins the distributor in place: the current recipient\n * can transfer fees away from it, and governance can override it on the usual delay. What is\n * immutable is the registry entry — assets already inside the distributor stay there, and\n * `distributorForToken` keeps answering, but future fees follow the recipient.\n */\nexport function prepareLaunchpadTransferCreatorFeeRecipient(\n  context: LaunchpadWriteActionContext,\n  input: { readonly token: Address; readonly newRecipient: Address },\n) {\n  return prepareFactoryWrite(\n    context,\n    { functionName: \"transferCreatorFeeRecipient\", args: [input.token, input.newRecipient] },\n    Object.freeze({\n      token: getAddress(input.token),\n      newRecipient: getAddress(input.newRecipient),\n    }),\n  );\n}\n\n/**\n * Owner-only step one of the creator-recipient override: propose a replacement.\n *\n * Two windows follow, both three days. The proposal cannot execute until the first elapses, and it\n * expires once the second does — so an override left unexecuted for six days must be proposed\n * again rather than simply executed late.\n */\nexport function prepareLaunchpadProposeCreatorFeeRecipientOverride(\n  context: LaunchpadWriteActionContext,\n  input: { readonly token: Address; readonly newRecipient: Address },\n) {\n  return prepareFactoryWrite(\n    context,\n    {\n      functionName: \"proposeCreatorFeeRecipientOverride\",\n      args: [input.token, input.newRecipient],\n    },\n    Object.freeze({\n      token: getAddress(input.token),\n      newRecipient: getAddress(input.newRecipient),\n    }),\n  );\n}\n\n/** Owner-only step two: execute a matured override, inside its three-day execution window. */\nexport function prepareLaunchpadExecuteCreatorFeeRecipientOverride(\n  context: LaunchpadWriteActionContext,\n  token: Address,\n) {\n  return prepareFactoryWrite(\n    context,\n    { functionName: \"executeCreatorFeeRecipientOverride\", args: [token] },\n    Object.freeze({ token: getAddress(token) }),\n  );\n}\n\n/** Owner-only: withdraw a pending override before it executes. */\nexport function prepareLaunchpadCancelCreatorFeeRecipientOverride(\n  context: LaunchpadWriteActionContext,\n  token: Address,\n) {\n  return prepareFactoryWrite(\n    context,\n    { functionName: \"cancelCreatorFeeRecipientOverride\", args: [token] },\n    Object.freeze({ token: getAddress(token) }),\n  );\n}\n\n/**\n * Owner-only emergency settlement of a curve's recorded fee liabilities, paying recipients\n * directly instead of routing through the escrow.\n *\n * Settles only what is already recorded — it does not recompute or reallocate any share.\n */\nexport function prepareLaunchpadRescueCurveFees(\n  context: LaunchpadWriteActionContext,\n  token: Address,\n) {\n  return prepareFactoryWrite(\n    context,\n    { functionName: \"rescueCurveFees\", args: [token] },\n    Object.freeze({ token: getAddress(token) }),\n  );\n}\n\n/**\n * Owner-only emergency settlement of one partner's recorded liability on a curve.\n *\n * Requires the partner to be registered **and enabled**: a disabled partner's balance stays frozen\n * and cannot be rescued out, which is deliberate rather than an oversight.\n */\nexport function prepareLaunchpadRescuePartnerFees(\n  context: LaunchpadWriteActionContext,\n  input: { readonly token: Address; readonly partnerId: Hex },\n) {\n  return prepareFactoryWrite(\n    context,\n    { functionName: \"rescuePartnerFees\", args: [input.token, input.partnerId] },\n    Object.freeze({ token: getAddress(input.token), partnerId: input.partnerId }),\n  );\n}\n\n/**\n * Owner-only recovery of a graduated pool's stuck hook fees, added in RC2.\n *\n * Distinct from {@link prepareLaunchpadRescueCurveFees}, which settles the pre-graduation curve:\n * this one settles the `MemeHook`'s pending protocol and creator balances for a pool whose ordinary\n * sweep cannot make progress. It is a governance path, not a keeper task — RC2's sweeps already\n * settle partially rather than reverting, so reaching for this in normal operation papers over a\n * problem instead of draining it.\n */\nexport function prepareLaunchpadRescueHookFees(\n  context: LaunchpadWriteActionContext,\n  token: Address,\n) {\n  return prepareFactoryWrite(\n    context,\n    { functionName: \"rescueHookFees\", args: [token] },\n    Object.freeze({ token: getAddress(token) }),\n  );\n}\n\n/**\n * Owner-only recovery of one partner's hook fees, added in RC2.\n *\n * Three constraints are easy to get wrong, and all three revert as a bare `InvalidConfiguration`:\n *\n * - `epochId` must be the hook's **`currentEpoch`** — the one still accruing, not the one being\n *   settled. This is not a rescue for a stuck settlement; it pulls a partner out of the epoch that\n *   has yet to be swept and pays them directly, which also clears their `partnerActive` flag and\n *   decrements `activePartnerCount` for that epoch. Read it from\n *   `getLaunchpadPoolSweepState(...).currentEpoch`, never from `settlingEpochId`.\n * - `asset` must be the launch token or the pool's quote token; anything else reverts.\n * - The partner must be registered **and enabled**, and must actually be owed a non-zero amount.\n */\nexport function prepareLaunchpadRescueHookPartnerFees(\n  context: LaunchpadWriteActionContext,\n  input: {\n    readonly token: Address;\n    readonly epochId: bigint;\n    readonly partnerId: Hex;\n    readonly asset: Address;\n  },\n) {\n  return prepareFactoryWrite(\n    context,\n    {\n      functionName: \"rescueHookPartnerFees\",\n      args: [input.token, input.epochId, input.partnerId, input.asset],\n    },\n    Object.freeze({\n      token: getAddress(input.token),\n      epochId: input.epochId,\n      partnerId: input.partnerId,\n      asset: getAddress(input.asset),\n    }),\n  );\n}\n\n/** Owner-only: adjust the snipe tax applied to **future** launches. Existing curves keep their snapshot. */\nexport function prepareLaunchpadSetSnipeTax(\n  context: LaunchpadWriteActionContext,\n  input: { readonly startBps?: number; readonly durationSeconds?: number },\n) {\n  if (input.startBps !== undefined && input.durationSeconds !== undefined) {\n    throw new RangeError(\n      \"setSnipeTaxStartBps and setSnipeTaxSeconds are separate calls; prepare them one at a time.\",\n    );\n  }\n  if (input.startBps !== undefined) {\n    return prepareFactoryWrite(\n      context,\n      { functionName: \"setSnipeTaxStartBps\", args: [BigInt(input.startBps)] },\n      Object.freeze({ startBps: input.startBps }),\n    );\n  }\n  if (input.durationSeconds !== undefined) {\n    return prepareFactoryWrite(\n      context,\n      { functionName: \"setSnipeTaxSeconds\", args: [BigInt(input.durationSeconds)] },\n      Object.freeze({ durationSeconds: input.durationSeconds }),\n    );\n  }\n  throw new RangeError(\"Pass either startBps or durationSeconds.\");\n}\n\n/** Owner-only: create a partner. The id is derived from a monotonic nonce and returned by the call. */\nexport function prepareLaunchpadCreatePartner(\n  context: LaunchpadWriteActionContext,\n  input: { readonly name: string; readonly controller: Address; readonly recipient: Address },\n) {\n  return preparePartnerRegistryWrite(\n    context,\n    { functionName: \"createPartner\", args: [input.name, input.controller, input.recipient] },\n    Object.freeze({\n      name: input.name,\n      controller: getAddress(input.controller),\n      recipient: getAddress(input.recipient),\n    }),\n  );\n}\n\n/** Owner-only: change a partner's share of the platform fee bucket. */\nexport function prepareLaunchpadSetPartnerShare(\n  context: LaunchpadWriteActionContext,\n  input: { readonly partnerId: Hex; readonly shareOfPlatformBps: number },\n) {\n  return preparePartnerRegistryWrite(\n    context,\n    { functionName: \"setPartnerShare\", args: [input.partnerId, input.shareOfPlatformBps] },\n    Object.freeze({\n      partnerId: input.partnerId,\n      shareOfPlatformBps: input.shareOfPlatformBps,\n    }),\n  );\n}\n\n/**\n * Owner-only: enable or disable a partner.\n *\n * Disabling stops future accrual and freezes claiming, but never reassigns or forfeits an existing\n * balance — it becomes claimable again on re-enable. It also clears any pending controller\n * handover.\n */\nexport function prepareLaunchpadSetPartnerEnabled(\n  context: LaunchpadWriteActionContext,\n  input: { readonly partnerId: Hex; readonly enabled: boolean },\n) {\n  return preparePartnerRegistryWrite(\n    context,\n    { functionName: \"setPartnerEnabled\", args: [input.partnerId, input.enabled] },\n    Object.freeze({ partnerId: input.partnerId, enabled: input.enabled }),\n  );\n}\n\n/** Owner-only: rename a partner. Display only; the id remains the sole identity. */\nexport function prepareLaunchpadSetPartnerName(\n  context: LaunchpadWriteActionContext,\n  input: { readonly partnerId: Hex; readonly name: string },\n) {\n  return preparePartnerRegistryWrite(\n    context,\n    { functionName: \"setPartnerName\", args: [input.partnerId, input.name] },\n    Object.freeze({ partnerId: input.partnerId, name: input.name }),\n  );\n}\n\n/** Controller-only: point a partner's payouts at a new recipient. Moves the unclaimed balance with it. */\nexport function prepareLaunchpadSetPartnerRecipient(\n  context: LaunchpadWriteActionContext,\n  input: { readonly partnerId: Hex; readonly recipient: Address },\n) {\n  return preparePartnerRegistryWrite(\n    context,\n    { functionName: \"setPartnerRecipient\", args: [input.partnerId, input.recipient] },\n    Object.freeze({ partnerId: input.partnerId, recipient: getAddress(input.recipient) }),\n  );\n}\n\n/** Controller-only step one of the controller handover. */\nexport function prepareLaunchpadProposePartnerController(\n  context: LaunchpadWriteActionContext,\n  input: { readonly partnerId: Hex; readonly newController: Address },\n) {\n  return preparePartnerRegistryWrite(\n    context,\n    { functionName: \"proposePartnerController\", args: [input.partnerId, input.newController] },\n    Object.freeze({\n      partnerId: input.partnerId,\n      newController: getAddress(input.newController),\n    }),\n  );\n}\n\n/** Step two: the proposed controller accepts. Blocked while the partner is disabled. */\nexport function prepareLaunchpadAcceptPartnerController(\n  context: LaunchpadWriteActionContext,\n  partnerId: Hex,\n) {\n  return preparePartnerRegistryWrite(\n    context,\n    { functionName: \"acceptPartnerController\", args: [partnerId] },\n    Object.freeze({ partnerId }),\n  );\n}\n","import type { Address } from \"viem\";\n\nimport { graduationCoordinatorAbi, launchFactoryAbi, memeHookAbi } from \"../abi/generated\";\nimport { toLaunchpadGraduationRecord } from \"../converters/state\";\nimport { LaunchpadPhaseUnavailableError } from \"../errors\";\nimport type {\n  LaunchpadActionContext,\n  LaunchpadGraduationRecord,\n  LaunchpadReadOptions,\n  LaunchpadWriteActionContext,\n} from \"../types\";\nimport { blockSelector } from \"./block\";\nimport { getLaunchpadGraduation } from \"./read\";\nimport {\n  launchpadPreparedContext,\n  type PreparedLaunchpadTransaction,\n  toPreparedLaunchpadTransaction,\n} from \"./write/prepared\";\nimport { requireLaunchpadWriteAccount, simulateLaunchpadWrite } from \"./write/shared\";\n\n/**\n * Reads the graduation record from the coordinator rather than the factory.\n *\n * The two agree — the factory's `graduations` getter delegates — but the coordinator is where the\n * state machine and its events actually live, so an indexer following graduation must watch the\n * coordinator's address and not the factory's.\n */\nexport async function getLaunchpadGraduationFromCoordinator(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadGraduationRecord> {\n  const raw = await context.publicClient.readContract({\n    address: context.deployment.contracts.graduationCoordinator,\n    abi: graduationCoordinatorAbi,\n    functionName: \"graduation\",\n    args: [token],\n    ...blockSelector(options),\n  });\n  return toLaunchpadGraduationRecord({\n    status: raw.status,\n    sweptAt: raw.sweptAt,\n    tokenAmount: raw.tokenAmount,\n    quoteAmount: raw.quoteAmount,\n    positionId: raw.positionId,\n  });\n}\n\n/** The V4 pool id the hook assigned a graduated token, or `bytes32(0)` before the pool exists. */\nexport function getLaunchpadPoolId(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<`0x${string}`> {\n  return context.publicClient.readContract({\n    address: context.deployment.contracts.memeHook,\n    abi: memeHookAbi,\n    functionName: \"poolForToken\",\n    args: [token],\n    ...blockSelector(options),\n  });\n}\n\n/** What the caller is about to advance, and where it will land. */\nexport interface GraduationStepPreview {\n  readonly token: Address;\n  readonly step: \"graduate\" | \"createGraduatedPool\";\n  readonly statusBefore: LaunchpadGraduationRecord[\"status\"];\n}\n\n/**\n * Whether a first-step graduation failure should be treated as success.\n *\n * RC2 graduates automatically at the end of the buy that empties the curve, so between a keeper\n * reading `NotGraduated` and its own `graduate` landing, someone else's trade may already have done\n * the work. The revert that follows is `InvalidGraduationState`, which the SDK surfaces as a\n * {@link LaunchpadPhaseUnavailableError} — indistinguishable, from the error alone, from a genuine\n * \"not ready yet\". Resolve it by re-reading the status: `swept` or `poolCreated` means the intent\n * was satisfied and the keeper should neither alert nor retry step one.\n */\nexport function launchpadGraduateIsIdempotentSuccess(\n  status: LaunchpadGraduationRecord[\"status\"],\n): boolean {\n  return status === \"swept\" || status === \"poolCreated\";\n}\n\n/**\n * Prepares step one of graduation: sweeping the curve's assets to the executor.\n *\n * Permissionless — any address may call it once `sellableTokens` reaches zero, so a keeper, the\n * creator, or the last buyer can all drive it. On success the launch moves to `swept`, which is a\n * resting state, not a transient one: step two can be attempted later, repeatedly, without\n * re-running this.\n *\n * Refuses up front when the launch has already advanced, rather than building a transaction that is\n * certain to revert. Under RC2 that is the common case, not a rare race: a buy that clears the last\n * sellable token graduates the launch inside the same transaction, so a launch can move from\n * `NotGraduated` to `Swept` with nobody having called this at all. The thrown\n * {@link LaunchpadPhaseUnavailableError} carries the observed status; see\n * {@link launchpadGraduateIsIdempotentSuccess} for the keeper-side reading of it.\n */\nexport async function prepareLaunchpadGraduate(\n  context: LaunchpadWriteActionContext,\n  token: Address,\n): Promise<PreparedLaunchpadTransaction<GraduationStepPreview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const before = await getLaunchpadGraduation(context, token);\n  if (before.status !== \"notGraduated\") throw new LaunchpadPhaseUnavailableError(before.status);\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"graduate\",\n    args: [token],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ token, step: \"graduate\" as const, statusBefore: before.status }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * Prepares step two: creating the Uniswap V4 pool and minting the graduation position.\n *\n * Also permissionless, and **retryable** — this is the substantive difference from V3's\n * all-or-nothing `migrate`. A failure here leaves the launch at `swept` with its assets safe in the\n * executor rather than stranding them, so the call can simply be made again once whatever blocked\n * it (a seed feasibility check, a transient pool condition) clears.\n */\nexport async function prepareLaunchpadCreateGraduatedPool(\n  context: LaunchpadWriteActionContext,\n  token: Address,\n): Promise<PreparedLaunchpadTransaction<GraduationStepPreview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const before = await getLaunchpadGraduation(context, token);\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"createGraduatedPool\",\n    args: [token],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ token, step: \"createGraduatedPool\" as const, statusBefore: before.status }),\n    launchpadPreparedContext(context, account),\n  );\n}\n","import { type Address, encodeAbiParameters, getAddress, type Hex, keccak256 } from \"viem\";\n\nimport { holderDistributorAbi, holderDistributorFactoryAbi } from \"../abi/generated\";\nimport type { LaunchpadDeployment } from \"../deployment\";\nimport { LaunchpadInvalidAmountError, LaunchpadProtocolConfigurationError } from \"../errors\";\nimport type {\n  LaunchpadActionContext,\n  LaunchpadReadOptions,\n  LaunchpadWriteActionContext,\n} from \"../types\";\nimport { blockSelector } from \"./block\";\nimport {\n  launchpadPreparedContext,\n  type PreparedLaunchpadTransaction,\n  toPreparedLaunchpadTransaction,\n} from \"./write/prepared\";\nimport { requireLaunchpadWriteAccount, simulateLaunchpadWrite } from \"./write/shared\";\n\n/**\n * Reads the deployment's holder distributor factory, or throws if this deployment has none.\n *\n * Holder Fee Sharing is an optional integration, so a deployment without the factory is complete\n * rather than broken — but a caller reaching for these actions on such a deployment has made a\n * configuration mistake, and should hear about it before a call lands on the zero address.\n */\nfunction requireFactory(deployment: LaunchpadDeployment): Address {\n  const factory = deployment.contracts.holderDistributorFactory;\n  if (factory === undefined) throw new LaunchpadProtocolConfigurationError();\n  return factory;\n}\n\n/** One published epoch of holder revenue, as `HolderDistributor.getEpoch` returns it. */\nexport interface LaunchpadHolderEpoch {\n  readonly epochId: bigint;\n  /** Merkle root over `(account, quoteAmount, coinAmount)` leaves. */\n  readonly root: Hex;\n  readonly quoteTotal: bigint;\n  readonly coinTotal: bigint;\n  readonly quoteClaimed: bigint;\n  readonly coinClaimed: bigint;\n  /** Unix seconds. Claiming reverts at or after this; rolling over reverts before it. */\n  readonly expiresAt: bigint;\n  readonly rolledOver: boolean;\n  /** Derived: the window has passed, so this epoch can no longer be claimed. */\n  readonly expired: boolean;\n  /** Derived: past the window and not yet swept back into the unallocated pool. */\n  readonly rollOverReady: boolean;\n}\n\n/** A distributor's immutable bindings and live balances. */\nexport interface LaunchpadHolderDistributorState {\n  readonly distributor: Address;\n  /** The launch token, distributed as the **coin** side of every allocation. */\n  readonly token: Address;\n  /** The quote asset, or the zero address when quote revenue is the native gas token. */\n  readonly quoteToken: Address;\n  readonly feeEscrow: Address;\n  readonly buybackVault: Address;\n  /** Who may publish epochs. Distinct from `owner`, which may replace the publisher. */\n  readonly publisher: Address;\n  readonly owner: Address;\n  readonly epochCount: bigint;\n  /** Seconds a published epoch stays claimable. `90 days` on the current deployment. */\n  readonly claimWindowSeconds: bigint;\n  /** Held for published-but-unclaimed allocations; not available to a new epoch. */\n  readonly reservedQuote: bigint;\n  readonly reservedCoin: bigint;\n  /** Free balance a future epoch can allocate — harvested revenue plus expired rollovers. */\n  readonly unallocatedQuote: bigint;\n  readonly unallocatedCoin: bigint;\n}\n\n/** Reads a distributor's bindings and balances in one pinned batch. */\nexport async function getLaunchpadHolderDistributorState(\n  context: LaunchpadActionContext,\n  distributor: Address,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadHolderDistributorState> {\n  const selector = blockSelector(options);\n  const at = { address: distributor, abi: holderDistributorAbi } as const;\n  const [\n    token,\n    quoteToken,\n    feeEscrow,\n    buybackVault,\n    publisher,\n    owner,\n    epochCount,\n    claimWindowSeconds,\n    reservedQuote,\n    reservedCoin,\n    unallocatedQuote,\n    unallocatedCoin,\n  ] = await Promise.all([\n    context.publicClient.readContract({ ...at, functionName: \"token\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"quoteToken\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"feeEscrow\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"buybackVault\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"publisher\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"owner\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"epochCount\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"CLAIM_WINDOW\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"reservedQuote\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"reservedCoin\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"unallocatedQuote\", ...selector }),\n    context.publicClient.readContract({ ...at, functionName: \"unallocatedCoin\", ...selector }),\n  ]);\n  return Object.freeze({\n    distributor: getAddress(distributor),\n    token: getAddress(token),\n    quoteToken: getAddress(quoteToken),\n    feeEscrow: getAddress(feeEscrow),\n    buybackVault: getAddress(buybackVault),\n    publisher: getAddress(publisher),\n    owner: getAddress(owner),\n    epochCount,\n    claimWindowSeconds: BigInt(claimWindowSeconds),\n    reservedQuote,\n    reservedCoin,\n    unallocatedQuote,\n    unallocatedCoin,\n  });\n}\n\n/**\n * Reads one epoch.\n *\n * Reverts with the distributor's own `EpochNotFound` for an id at or beyond `epochCount` — there is\n * no zero-filled struct to mistake for a real epoch, so bound the id against\n * {@link getLaunchpadHolderDistributorState}'s `epochCount` rather than probing.\n *\n * `now` decides the derived `expired` / `rollOverReady` flags; pass the block timestamp you are\n * reading against rather than wall-clock time, or the two can disagree with the chain at the\n * boundary.\n */\nexport async function getLaunchpadHolderEpoch(\n  context: LaunchpadActionContext,\n  input: { readonly distributor: Address; readonly epochId: bigint; readonly now?: bigint },\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadHolderEpoch> {\n  const epoch = await context.publicClient.readContract({\n    address: input.distributor,\n    abi: holderDistributorAbi,\n    functionName: \"getEpoch\",\n    args: [input.epochId],\n    ...blockSelector(options),\n  });\n  const now = input.now ?? (await context.publicClient.getBlock()).timestamp;\n  const expiresAt = BigInt(epoch.expiresAt);\n  const expired = epoch.rolledOver || now > expiresAt;\n  return Object.freeze({\n    epochId: input.epochId,\n    root: epoch.root,\n    quoteTotal: epoch.quoteTotal,\n    coinTotal: epoch.coinTotal,\n    quoteClaimed: epoch.quoteClaimed,\n    coinClaimed: epoch.coinClaimed,\n    expiresAt,\n    rolledOver: epoch.rolledOver,\n    expired,\n    rollOverReady: !epoch.rolledOver && now > expiresAt,\n  });\n}\n\n/** Whether an account has already claimed a given epoch. Claiming twice reverts. */\nexport function hasLaunchpadHolderClaimed(\n  context: LaunchpadActionContext,\n  input: { readonly distributor: Address; readonly epochId: bigint; readonly account: Address },\n  options?: LaunchpadReadOptions,\n): Promise<boolean> {\n  return context.publicClient.readContract({\n    address: input.distributor,\n    abi: holderDistributorAbi,\n    functionName: \"hasClaimed\",\n    args: [input.epochId, input.account],\n    ...blockSelector(options),\n  });\n}\n\n/**\n * Whether an account is excluded from claiming holder revenue.\n *\n * The set is fixed when the distributor is created: the zero address, the distributor itself, the\n * launch token and quote token contracts, the launch factory, the beacon and its implementation,\n * the authorized forwarder, and whatever system accounts the distributor factory was deployed with.\n *\n * Note what is **not** in it — the launch's own curve, whose address the factory cannot know in\n * advance. Keeping curve-held balances out of an allocation is the off-chain snapshot's job; this\n * check only rejects a claim, and only for the addresses above.\n */\nexport function isLaunchpadHolderExcluded(\n  context: LaunchpadActionContext,\n  input: { readonly distributor: Address; readonly account: Address },\n  options?: LaunchpadReadOptions,\n): Promise<boolean> {\n  return context.publicClient.readContract({\n    address: input.distributor,\n    abi: holderDistributorAbi,\n    functionName: \"isExcluded\",\n    args: [input.account],\n    ...blockSelector(options),\n  });\n}\n\n/** One holder allocation, as the proof service publishes it. */\nexport interface LaunchpadHolderAllocation {\n  /**\n   * The **on-chain** epoch id.\n   *\n   * The proof service also carries database identifiers for its own routing, and they are not the\n   * same number. Only this one may be sent to the contract — its API response names it\n   * `onchain_epoch_id` for exactly that reason.\n   */\n  readonly epochId: bigint;\n  readonly account: Address;\n  /** Quote-asset share. Either side may be zero, but not both — the contract rejects a zero claim. */\n  readonly quoteAmount: bigint;\n  /** Launch-token share. */\n  readonly coinAmount: bigint;\n  readonly proof: readonly Hex[];\n}\n\n/**\n * Computes the Merkle leaf for an allocation.\n *\n * OpenZeppelin `StandardMerkleTree` over `[address, uint256, uint256]`, which double-hashes:\n * `keccak256(bytes.concat(keccak256(abi.encode(account, quoteAmount, coinAmount))))`. The second\n * hash is not decoration — it is what makes an internal node impossible to pass off as a leaf.\n */\nexport function launchpadHolderLeaf(\n  allocation: Pick<LaunchpadHolderAllocation, \"account\" | \"quoteAmount\" | \"coinAmount\">,\n): Hex {\n  return keccak256(\n    keccak256(\n      encodeAbiParameters(\n        [{ type: \"address\" }, { type: \"uint256\" }, { type: \"uint256\" }],\n        [allocation.account, allocation.quoteAmount, allocation.coinAmount],\n      ),\n    ),\n  );\n}\n\n/**\n * Recomputes an allocation's Merkle root from its proof.\n *\n * Sorted-pair hashing, matching the contract's `_verify`. Compare the result against the epoch's\n * published `root` to confirm an allocation before spending gas on it.\n */\nexport function launchpadHolderProofRoot(allocation: LaunchpadHolderAllocation): Hex {\n  let computed = launchpadHolderLeaf(allocation);\n  for (const sibling of allocation.proof) {\n    computed =\n      computed.toLowerCase() <= sibling.toLowerCase()\n        ? keccak256(`0x${computed.slice(2)}${sibling.slice(2)}`)\n        : keccak256(`0x${sibling.slice(2)}${computed.slice(2)}`);\n  }\n  return computed;\n}\n\n/**\n * Checks an allocation against an epoch's published root, locally.\n *\n * Worth doing before every claim. The contract's `InvalidMerkleProof` says only that something did\n * not line up, and the likeliest causes are silent ones: the proof service's database epoch id used\n * in place of the on-chain one, an amount rounded or reformatted in transit, or a proof fetched for\n * a different account. Recomputing the root locally separates \"this allocation is wrong\" from \"this\n * epoch is wrong\" before a transaction is built.\n */\nexport function launchpadHolderAllocationMatchesRoot(\n  allocation: LaunchpadHolderAllocation,\n  root: Hex,\n): boolean {\n  return launchpadHolderProofRoot(allocation).toLowerCase() === root.toLowerCase();\n}\n\n/**\n * Prepares a holder claim.\n *\n * Anyone may submit it — the payout goes to `allocation.account`, not to the sender — so a product\n * can sponsor claims for its users. Both amounts being zero is rejected by the contract; so is a\n * second claim of the same epoch by the same account, an excluded account, and an epoch past its\n * window.\n *\n * The proof comes from the distributor project's proof service, and its `epochId` must be the\n * on-chain one. Validate the allocation against the epoch root first — see\n * {@link launchpadHolderAllocationMatchesRoot}.\n */\nexport async function prepareLaunchpadHolderClaim(\n  context: LaunchpadWriteActionContext,\n  input: { readonly distributor: Address; readonly allocation: LaunchpadHolderAllocation },\n): Promise<PreparedLaunchpadTransaction<LaunchpadHolderAllocation>> {\n  const { allocation } = input;\n  if (allocation.quoteAmount === 0n && allocation.coinAmount === 0n) {\n    throw new LaunchpadInvalidAmountError();\n  }\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: input.distributor,\n    abi: holderDistributorAbi,\n    functionName: \"claim\",\n    args: [\n      allocation.epochId,\n      allocation.account,\n      allocation.quoteAmount,\n      allocation.coinAmount,\n      [...allocation.proof],\n    ],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ ...allocation, account: getAddress(allocation.account) }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * Prepares several claims in one transaction.\n *\n * All-or-nothing: the contract loops under a single reentrancy guard, so one bad allocation reverts\n * the batch. Validate every allocation locally first, and expect the epochs to differ — a holder\n * with several unclaimed epochs is the case this exists for.\n */\nexport async function prepareLaunchpadHolderClaimMany(\n  context: LaunchpadWriteActionContext,\n  input: {\n    readonly distributor: Address;\n    readonly allocations: readonly LaunchpadHolderAllocation[];\n  },\n): Promise<PreparedLaunchpadTransaction<readonly LaunchpadHolderAllocation[]>> {\n  if (input.allocations.length === 0) throw new LaunchpadInvalidAmountError();\n  if (input.allocations.some((a) => a.quoteAmount === 0n && a.coinAmount === 0n)) {\n    throw new LaunchpadInvalidAmountError();\n  }\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: input.distributor,\n    abi: holderDistributorAbi,\n    functionName: \"claimMany\",\n    args: [\n      input.allocations.map((a) => ({\n        epochId: a.epochId,\n        account: a.account,\n        quoteAmount: a.quoteAmount,\n        coinAmount: a.coinAmount,\n        proof: [...a.proof],\n      })),\n    ],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze([...input.allocations]),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/** What a harvest or roll-over is expected to move, from simulating it. */\nexport interface LaunchpadHolderSweepPreview {\n  readonly distributor: Address;\n  readonly quoteAmount: bigint;\n  readonly coinAmount: bigint;\n}\n\n/**\n * Prepares `harvest`, pulling everything owed to this distributor into it.\n *\n * Permissionless, and a prerequisite for publishing: nothing counts towards `unallocatedQuote` /\n * `unallocatedCoin` until it has been harvested. It moves nothing to holders by itself.\n *\n * It gathers from three places, not just the escrow — worth knowing, because the third is where\n * buyback revenue eventually turns up:\n *\n * 1. the revenue harvester, if the distributor was configured with one;\n * 2. **`BuybackVault.release`**, whenever the launch has vested buyback tokens waiting. Buyback\n *    spends part of the creator's gross on the launch token and vests it over five years, so that\n *    share reaches holders here, later and as the coin side — not as quote at trade time;\n * 3. `FeeEscrow`, for both the quote asset and the launch token.\n *\n * The preview reports what the simulation says will arrive on each side. Zero on both is normal and\n * not an error: it means there was nothing to collect yet.\n */\nexport async function prepareLaunchpadHolderHarvest(\n  context: LaunchpadWriteActionContext,\n  distributor: Address,\n): Promise<PreparedLaunchpadTransaction<LaunchpadHolderSweepPreview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request, result } = await simulateLaunchpadWrite(context, {\n    account,\n    address: distributor,\n    abi: holderDistributorAbi,\n    functionName: \"harvest\",\n  });\n  const [quoteAmount, coinAmount] = result as readonly [bigint, bigint];\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ distributor: getAddress(distributor), quoteAmount, coinAmount }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * Prepares `rollOver`, returning an expired epoch's unclaimed remainder to the unallocated pool.\n *\n * Permissionless, and only after the claim window has closed — calling early reverts with\n * `ClaimWindowOpen` rather than doing nothing. The recovered amount funds a later epoch instead of\n * being stranded, so this is ordinary housekeeping, not a recovery path.\n */\nexport async function prepareLaunchpadHolderRollOver(\n  context: LaunchpadWriteActionContext,\n  input: { readonly distributor: Address; readonly epochId: bigint },\n): Promise<\n  PreparedLaunchpadTransaction<LaunchpadHolderSweepPreview & { readonly epochId: bigint }>\n> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request, result } = await simulateLaunchpadWrite(context, {\n    account,\n    address: input.distributor,\n    abi: holderDistributorAbi,\n    functionName: \"rollOver\",\n    args: [input.epochId],\n  });\n  const [quoteAmount, coinAmount] = result as readonly [bigint, bigint];\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({\n      distributor: getAddress(input.distributor),\n      epochId: input.epochId,\n      quoteAmount,\n      coinAmount,\n    }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * The distributor factory's own view of a launch token's binding.\n *\n * Use it to confirm an address really is the official distributor for a token before showing it as\n * one — a launch may nominate any `creatorFeeRecipient` it likes, and only the registry can tell\n * the difference.\n */\nexport async function getLaunchpadHolderBinding(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<{ readonly distributor: Address; readonly registered: boolean }> {\n  const factory = requireFactory(context.deployment);\n  const selector = blockSelector(options);\n  const distributor = await context.publicClient.readContract({\n    address: factory,\n    abi: holderDistributorFactoryAbi,\n    functionName: \"distributorForToken\",\n    args: [token],\n    ...selector,\n  });\n  if (distributor === \"0x0000000000000000000000000000000000000000\") {\n    return Object.freeze({ distributor, registered: false });\n  }\n  const registered = await context.publicClient.readContract({\n    address: factory,\n    abi: holderDistributorFactoryAbi,\n    functionName: \"isDistributor\",\n    args: [distributor],\n    ...selector,\n  });\n  return Object.freeze({ distributor: getAddress(distributor), registered });\n}\n\n/**\n * The distributor factory's adapter revision, read from the chain.\n *\n * `createDistributor` demands `initializationData` be exactly `abi.encode(ADAPTER_VERSION)` — 32\n * bytes, matching value — and rejects anything else with `InvalidInitializationData`. Reading it\n * rather than assuming means a factory upgraded to a later adapter fails loudly at the check\n * instead of silently at creation.\n */\nexport function getLaunchpadHolderAdapterVersion(\n  context: LaunchpadActionContext,\n  options?: LaunchpadReadOptions,\n): Promise<bigint> {\n  return context.publicClient.readContract({\n    address: requireFactory(context.deployment),\n    abi: holderDistributorFactoryAbi,\n    functionName: \"ADAPTER_VERSION\",\n    ...blockSelector(options),\n  });\n}\n\n/**\n * Whether the distributor factory will distribute revenue in this quote asset.\n *\n * Its own allowlist, separate from the launch factory's `approvedQuoteTokens`: an asset can be\n * perfectly good for trading and still not be one this distributor project supports. Creation\n * rejects a disallowed asset with a bare `InvalidConfiguration`, which says nothing about which of\n * that function's several conditions failed — so check first when offering the holder-sharing\n * option for a given quote token.\n */\nexport function isLaunchpadHolderQuoteTokenAllowed(\n  context: LaunchpadActionContext,\n  quoteToken: Address,\n  options?: LaunchpadReadOptions,\n): Promise<boolean> {\n  return context.publicClient.readContract({\n    address: requireFactory(context.deployment),\n    abi: holderDistributorFactoryAbi,\n    functionName: \"allowedQuoteToken\",\n    args: [quoteToken],\n    ...blockSelector(options),\n  });\n}\n","import type { Address, Hex } from \"viem\";\n\nimport { bondingCurveAbi, memeHookAbi } from \"../abi/generated\";\nimport { LaunchpadInvalidAmountError } from \"../errors\";\nimport type {\n  LaunchpadActionContext,\n  LaunchpadReadOptions,\n  LaunchpadWriteActionContext,\n} from \"../types\";\nimport { blockSelector } from \"./block\";\nimport {\n  launchpadPreparedContext,\n  type PreparedLaunchpadTransaction,\n  toPreparedLaunchpadTransaction,\n} from \"./write/prepared\";\nimport { requireLaunchpadWriteAccount, simulateLaunchpadWrite } from \"./write/shared\";\n\n/**\n * Prepares the full curve sweep: protocol, creator, and the buyback settlement in one call.\n *\n * Permission is conditional rather than fixed. The fee sweep operator may always call it; the\n * launch's current creator fee recipient may too, but **only while there is no pending buyback** —\n * settling one performs an internal swap against the curve, which is restricted to the operator.\n * That is why `minBuybackTokensOut` is required whenever a buyback is pending: it is the slippage\n * floor for that swap.\n *\n * A buyback that cannot execute (price impact over the ceiling, or the reserved boundary in the\n * way) is not an error — the budget folds back into the creator's bucket and the sweep proceeds.\n *\n * **This does not touch partner balances.** It settles the protocol, creator and buyback buckets\n * only; each partner's accrual stays on the curve until `sweepPartner` is called for that specific\n * id ({@link prepareLaunchpadSweepBucket} with `bucket: \"partner\"`). A keeper that runs only this\n * leaves partner balances stranded indefinitely, with nothing failing to signal it.\n */\nexport async function prepareLaunchpadSweepFees(\n  context: LaunchpadWriteActionContext,\n  input: { readonly curve: Address; readonly minBuybackTokensOut?: bigint },\n): Promise<PreparedLaunchpadTransaction<{ readonly curve: Address }>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: input.curve,\n    abi: bondingCurveAbi,\n    functionName: \"sweepFees\",\n    args: [input.minBuybackTokensOut ?? 0n],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ curve: input.curve }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/** Prepares a single-bucket curve sweep, none of which perform an internal swap. */\nexport async function prepareLaunchpadSweepBucket(\n  context: LaunchpadWriteActionContext,\n  input:\n    | { readonly curve: Address; readonly bucket: \"protocol\" | \"creator\" }\n    | { readonly curve: Address; readonly bucket: \"partner\"; readonly partnerId: Hex },\n): Promise<PreparedLaunchpadTransaction<{ readonly curve: Address; readonly bucket: string }>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const call =\n    input.bucket === \"partner\"\n      ? { functionName: \"sweepPartner\" as const, args: [input.partnerId] as const }\n      : input.bucket === \"protocol\"\n        ? { functionName: \"sweepProtocol\" as const, args: [] as const }\n        : { functionName: \"sweepCreator\" as const, args: [] as const };\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: input.curve,\n    abi: bondingCurveAbi,\n    ...call,\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ curve: input.curve, bucket: input.bucket }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/** A V4 pool's fee-sweep epoch state, which drives the paged settlement loop. */\nexport interface LaunchpadPoolSweepState {\n  readonly poolId: Hex;\n  /** Epoch new swaps accrue into. */\n  readonly currentEpoch: bigint;\n  /**\n   * Epoch currently being settled, already decoded.\n   *\n   * The hook stores this **one-based** (`mapping(bytes32 => uint256 epochPlusOne)`), using zero to\n   * mean \"no sweep open\". Passing the raw slot through as an epoch id is off by one, and every\n   * `settlePoolFeeSweepPartners` / `finalizePoolFeeSweep` built from it reverts with\n   * `InvalidConfiguration`. This field is the real epoch id, or `undefined` when nothing is\n   * settling.\n   */\n  readonly settlingEpochId?: bigint;\n  /** Whether a sweep is open. `beginPoolFeeSweep` reverts while it is true. */\n  readonly isSettling: boolean;\n  /** The hook's raw one-based slot, exposed for parity with on-chain debugging. */\n  readonly settlingEpochRaw: bigint;\n}\n\n/** Reads a graduated pool's epoch cursors, decoding the one-based settling slot. */\nexport async function getLaunchpadPoolSweepState(\n  context: LaunchpadActionContext,\n  poolId: Hex,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadPoolSweepState> {\n  const selector = blockSelector(options);\n  const hook = { address: context.deployment.contracts.memeHook, abi: memeHookAbi } as const;\n  const [currentEpoch, settlingEpoch] = await Promise.all([\n    context.publicClient.readContract({\n      ...hook,\n      functionName: \"currentEpoch\",\n      args: [poolId],\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...hook,\n      functionName: \"settlingEpoch\",\n      args: [poolId],\n      ...selector,\n    }),\n  ]);\n  return Object.freeze({\n    poolId,\n    currentEpoch,\n    ...(settlingEpoch === 0n ? {} : { settlingEpochId: settlingEpoch - 1n }),\n    isSettling: settlingEpoch !== 0n,\n    settlingEpochRaw: settlingEpoch,\n  });\n}\n\n/**\n * One epoch's partner sweep accounting, which RC2 made necessary rather than merely useful.\n *\n * Before RC2 a sweep that hit the internal price-impact ceiling reverted the whole batch, so a\n * keeper only had to retry. RC2 converts what it can and leaves the rest: `launchInputConsumed` can\n * be less than `launchInputTotal`, the unconsumed partner remainder rolls into the next epoch, and\n * ordinary unconsumed balances stay in the hook's pending ledger. Progress therefore has to be read\n * rather than inferred from a transaction succeeding.\n */\nexport interface LaunchpadPartnerEpochAccounting {\n  readonly poolId: Hex;\n  readonly epochId: bigint;\n  /** Launch tokens attributed to partners when the epoch closed. */\n  readonly partnerLaunchInputTotal: bigint;\n  /** How much of that was actually converted this round. Less than the total after a partial fill. */\n  readonly partnerLaunchInputConsumed: bigint;\n  /** Consumed input not yet handed to a partner by the paging loop. */\n  readonly partnerLaunchInputConsumedRemaining: bigint;\n  /** Consumed input already settled out to partners, from the RC2 `partnerLaunchInputSettled` getter. */\n  readonly partnerLaunchInputSettled: bigint;\n  readonly partnerConvertedQuoteTotal: bigint;\n  readonly partnerConvertedQuoteRemaining: bigint;\n  readonly partnerDirectQuoteTotal: bigint;\n  readonly partnerDirectQuoteRemaining: bigint;\n  readonly activePartnerCount: bigint;\n  readonly settledPartnerCount: bigint;\n  /** Total launch-token input consumed by the whole sweep, partners and non-partners alike. */\n  readonly totalLaunchInput: bigint;\n  readonly totalQuoteOutput: bigint;\n  /** Whether this epoch is the one currently being settled. */\n  readonly settling: boolean;\n  /**\n   * Whether `finalizePoolFeeSweep` would succeed for this epoch.\n   *\n   * The hook checks five separate conditions, not just the partner count: every active partner\n   * settled, the settled launch input matching the epoch's total, and all three remainders\n   * (`partnerLaunchInputConsumedRemaining`, `partnerConvertedQuoteRemaining`,\n   * `partnerDirectQuoteRemaining`) drained to zero. Finalizing on the count alone reverts with\n   * `InvalidConfiguration`.\n   *\n   * The sweep must also still be the open one — `getLaunchpadPoolSweepState(...).settlingEpochId`\n   * has to equal this epoch, which this read cannot see on its own.\n   */\n  readonly finalizeReady: boolean;\n  /** Every active partner has been paged through. One of the five conditions behind {@link finalizeReady}. */\n  readonly allPartnersSettled: boolean;\n}\n\n/**\n * Reads the full settlement state of one epoch, including RC2's `partnerLaunchInputSettled`.\n *\n * This is the read a keeper loop should drive off: `allPartnersSettled` says whether finalizing can\n * succeed, and the consumed-versus-total figures say whether a partial conversion left work behind.\n */\nexport async function getLaunchpadPartnerEpochAccounting(\n  context: LaunchpadActionContext,\n  input: { readonly poolId: Hex; readonly epochId: bigint },\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadPartnerEpochAccounting> {\n  const selector = blockSelector(options);\n  const hook = { address: context.deployment.contracts.memeHook, abi: memeHookAbi } as const;\n  const args = [input.poolId, input.epochId] as const;\n  const [epoch, settled] = await Promise.all([\n    context.publicClient.readContract({\n      ...hook,\n      functionName: \"partnerEpoch\",\n      args,\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...hook,\n      functionName: \"partnerLaunchInputSettled\",\n      args,\n      ...selector,\n    }),\n  ]);\n  const [\n    partnerLaunchInputTotal,\n    partnerLaunchInputConsumed,\n    partnerLaunchInputConsumedRemaining,\n    partnerConvertedQuoteTotal,\n    partnerConvertedQuoteRemaining,\n    partnerDirectQuoteTotal,\n    partnerDirectQuoteRemaining,\n    activePartnerCount,\n    settledPartnerCount,\n    totalLaunchInput,\n    totalQuoteOutput,\n    settling,\n  ] = epoch;\n  return Object.freeze({\n    poolId: input.poolId,\n    epochId: input.epochId,\n    partnerLaunchInputTotal,\n    partnerLaunchInputConsumed,\n    partnerLaunchInputConsumedRemaining,\n    partnerLaunchInputSettled: settled,\n    partnerConvertedQuoteTotal,\n    partnerConvertedQuoteRemaining,\n    partnerDirectQuoteTotal,\n    partnerDirectQuoteRemaining,\n    activePartnerCount,\n    settledPartnerCount,\n    totalLaunchInput,\n    totalQuoteOutput,\n    settling,\n    allPartnersSettled: settledPartnerCount === activePartnerCount,\n    finalizeReady:\n      settledPartnerCount === activePartnerCount &&\n      settled === partnerLaunchInputTotal &&\n      partnerLaunchInputConsumedRemaining === 0n &&\n      partnerConvertedQuoteRemaining === 0n &&\n      partnerDirectQuoteRemaining === 0n,\n  });\n}\n\n/** Whether a partner accrued in, and has been settled for, a given epoch. */\nexport async function getLaunchpadPartnerEpochStatus(\n  context: LaunchpadActionContext,\n  input: { readonly poolId: Hex; readonly epochId: bigint; readonly partnerId: Hex },\n  options?: LaunchpadReadOptions,\n): Promise<{ readonly active: boolean; readonly settled: boolean }> {\n  const selector = blockSelector(options);\n  const hook = { address: context.deployment.contracts.memeHook, abi: memeHookAbi } as const;\n  const args = [input.poolId, input.epochId, input.partnerId] as const;\n  const [active, settled] = await Promise.all([\n    context.publicClient.readContract({\n      ...hook,\n      functionName: \"partnerActive\",\n      args,\n      ...selector,\n    }),\n    context.publicClient.readContract({\n      ...hook,\n      functionName: \"partnerSettled\",\n      args,\n      ...selector,\n    }),\n  ]);\n  return Object.freeze({ active, settled });\n}\n\n/**\n * Prepares step one of a V4 pool fee sweep.\n *\n * Note the argument asymmetry, which is easy to get wrong: this step takes the **token**, while\n * `settlePoolFeeSweepPartners` and `finalizePoolFeeSweep` take the **poolId**. Resolve the pool id\n * with `getLaunchpadPoolId` before continuing the sequence.\n *\n * Only one epoch may be settling at a time — swaps keep accruing into the next epoch meanwhile, but\n * a second sweep cannot start until this one is finalized. Check\n * `getLaunchpadPoolSweepState(...).isSettling` first rather than discovering it as an\n * `InvalidConfiguration`.\n *\n * **Neither minimum may be zero when its leg has work to do.** The hook rejects the entire sweep\n * with `MinimumOutputRequired` if `minConversionQuoteOut` is zero while there is launch-token input\n * to convert, or if `minBuybackTokensOut` is zero while a buyback is pending — and a buyback is\n * pending on any pool whose creator has it enabled, which is the default. Passing zero as a\n * \"no opinion on slippage\" placeholder is the natural mistake and stops the sweep outright.\n */\nexport async function prepareLaunchpadBeginPoolFeeSweep(\n  context: LaunchpadWriteActionContext,\n  input: {\n    readonly token: Address;\n    readonly minConversionQuoteOut: bigint;\n    readonly minBuybackTokensOut: bigint;\n  },\n): Promise<PreparedLaunchpadTransaction<{ readonly token: Address }>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.memeHook,\n    abi: memeHookAbi,\n    functionName: \"beginPoolFeeSweep\",\n    args: [input.token, input.minConversionQuoteOut, input.minBuybackTokensOut],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ token: input.token }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * Prepares one page of partner settlement.\n *\n * The active partner set for an epoch is rebuilt off-chain from `PartnerFeeAccrued` events, keyed\n * `(poolId, epochId, partnerId)`; `partnerActive`/`partnerSettled` are the on-chain check. There is\n * **no protocol limit** on partner count or page size — any batch ceiling is the caller's own gas\n * budget, and code must not assume a fixed 32 or 64.\n */\nexport async function prepareLaunchpadSettlePoolFeeSweepPartners(\n  context: LaunchpadWriteActionContext,\n  input: { readonly poolId: Hex; readonly epochId: bigint; readonly partnerIds: readonly Hex[] },\n): Promise<PreparedLaunchpadTransaction<{ readonly poolId: Hex; readonly count: number }>> {\n  // Both of these revert on chain as `InvalidConfiguration` / `AlreadySet`, which say nothing about\n  // which page was malformed. An empty page is rejected outright by the hook, and a partner\n  // repeated within a page settles once and then trips the already-settled guard, wasting the whole\n  // batch's gas — worth catching before the simulation, since a paging loop assembles these ids\n  // from off-chain event replay where duplicates are easy to introduce.\n  if (input.partnerIds.length === 0) throw new LaunchpadInvalidAmountError();\n  if (new Set(input.partnerIds.map((id) => id.toLowerCase())).size !== input.partnerIds.length) {\n    throw new LaunchpadInvalidAmountError();\n  }\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.memeHook,\n    abi: memeHookAbi,\n    functionName: \"settlePoolFeeSweepPartners\",\n    args: [input.poolId, input.epochId, [...input.partnerIds]],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ poolId: input.poolId, count: input.partnerIds.length }),\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/** Prepares the final step, closing the epoch. Only valid once every active partner is settled. */\nexport async function prepareLaunchpadFinalizePoolFeeSweep(\n  context: LaunchpadWriteActionContext,\n  input: { readonly poolId: Hex; readonly epochId: bigint },\n): Promise<PreparedLaunchpadTransaction<{ readonly poolId: Hex; readonly epochId: bigint }>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.memeHook,\n    abi: memeHookAbi,\n    functionName: \"finalizePoolFeeSweep\",\n    args: [input.poolId, input.epochId],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ poolId: input.poolId, epochId: input.epochId }),\n    launchpadPreparedContext(context, account),\n  );\n}\n","import { type Address, encodeAbiParameters, getAddress, type Hex } from \"viem\";\n\nimport { partnerRegistryAbi } from \"../abi/generated\";\nimport type {\n  LaunchpadActionContext,\n  LaunchpadPartnerConfig,\n  LaunchpadPartnerPolicySnapshot,\n  LaunchpadReadOptions,\n} from \"../types\";\nimport { blockSelector } from \"./block\";\n\n/** `bytes32(0)`: the reserved \"no partner on this trade\" id, which can never be registered. */\nexport const NO_PARTNER_ID = `0x${\"0\".repeat(64)}` as Hex;\n\n/** Reads one partner's registry entry. */\nexport async function getLaunchpadPartner(\n  context: LaunchpadActionContext,\n  partnerId: Hex,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadPartnerConfig> {\n  const raw = await context.publicClient.readContract({\n    address: context.deployment.contracts.partnerRegistry,\n    abi: partnerRegistryAbi,\n    functionName: \"partner\",\n    args: [partnerId],\n    ...blockSelector(options),\n  });\n  return Object.freeze({\n    partnerId,\n    name: raw.name,\n    controller: getAddress(raw.controller),\n    recipient: getAddress(raw.recipient),\n    shareOfPlatformBps: raw.shareOfPlatformBps,\n    exists: raw.exists,\n    enabled: raw.enabled,\n  });\n}\n\n/** Reads the registry-wide default and maximum partner share. */\nexport async function getLaunchpadPartnerPolicy(\n  context: LaunchpadActionContext,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadPartnerPolicySnapshot> {\n  const raw = await context.publicClient.readContract({\n    address: context.deployment.contracts.partnerRegistry,\n    abi: partnerRegistryAbi,\n    functionName: \"partnerPolicy\",\n    ...blockSelector(options),\n  });\n  return Object.freeze({\n    defaultPartnerShareOfPlatformBps: raw.defaultPartnerShareOfPlatformBps,\n    maxPartnerShareOfPlatformBps: raw.maxPartnerShareOfPlatformBps,\n  });\n}\n\n/** Whether a partner id can be attached to a trade, and what it would earn if so. */\nexport interface LaunchpadPartnerUsability {\n  readonly partnerId: Hex;\n  /** A trade carrying this id will not revert. True for the zero id and for any registered id. */\n  readonly usable: boolean;\n  /**\n   * A trade carrying this id will actually accrue a partner fee. False for a disabled partner.\n   *\n   * Disabling is forward-looking only: it stops new accrual and blocks the partner's own claims,\n   * but it does not block settling epochs they already accrued in. A keeper must keep paging a\n   * disabled partner through historical settlement, or those epochs never finalize.\n   */\n  readonly earning: boolean;\n  readonly shareOfPlatformBps: number;\n  readonly reason?: \"notRegistered\" | \"disabled\";\n}\n\n/**\n * Resolves what attaching `partnerId` to a trade would do.\n *\n * The three outcomes are genuinely different and a UI should not collapse them. The zero id trades\n * normally with no attribution. A **registered but disabled** id also trades normally and is still\n * recorded in the event — it simply earns nothing, and the fee stays with the platform. An\n * **unregistered non-zero** id reverts the whole trade, which is the case worth catching before\n * sending.\n */\nexport async function getLaunchpadPartnerUsability(\n  context: LaunchpadActionContext,\n  partnerId: Hex,\n  options?: LaunchpadReadOptions,\n): Promise<LaunchpadPartnerUsability> {\n  if (partnerId === NO_PARTNER_ID) {\n    return Object.freeze({ partnerId, usable: true, earning: false, shareOfPlatformBps: 0 });\n  }\n  const partner = await getLaunchpadPartner(context, partnerId, options);\n  if (!partner.exists) {\n    return Object.freeze({\n      partnerId,\n      usable: false,\n      earning: false,\n      shareOfPlatformBps: 0,\n      reason: \"notRegistered\" as const,\n    });\n  }\n  if (!partner.enabled) {\n    return Object.freeze({\n      partnerId,\n      usable: true,\n      earning: false,\n      shareOfPlatformBps: partner.shareOfPlatformBps,\n      reason: \"disabled\" as const,\n    });\n  }\n  return Object.freeze({\n    partnerId,\n    usable: true,\n    earning: true,\n    shareOfPlatformBps: partner.shareOfPlatformBps,\n  });\n}\n\n/**\n * Encodes a partner id as Uniswap V4 `hookData` for a swap on a graduated pool.\n *\n * The frozen ABI is exactly `abi.encode(bytes32)` and empty bytes for no partner. The hook\n * validates the length strictly: anything else — a packed encoding, a padded blob, a zero-length\n * value that is not truly empty — reverts the swap rather than being ignored.\n */\nexport function encodeLaunchpadPartnerHookData(partnerId?: Hex): Hex {\n  if (partnerId === undefined || partnerId === NO_PARTNER_ID) return \"0x\";\n  return encodeAbiParameters([{ type: \"bytes32\" }], [partnerId]);\n}\n\n/**\n * Reads the controller a partner has proposed but not yet handed over to.\n *\n * The handover is propose/accept in two steps, and a partner being disabled clears any pending\n * proposal outright rather than parking it.\n */\nexport function getLaunchpadPendingPartnerController(\n  context: LaunchpadActionContext,\n  partnerId: Hex,\n  options?: LaunchpadReadOptions,\n): Promise<Address> {\n  return context.publicClient.readContract({\n    address: context.deployment.contracts.partnerRegistry,\n    abi: partnerRegistryAbi,\n    functionName: \"pendingController\",\n    args: [partnerId],\n    ...blockSelector(options),\n  });\n}\n","import {\n  type Abi,\n  type Address,\n  decodeEventLog,\n  getAddress,\n  type Hex,\n  isAddressEqual,\n  type Log,\n  type TransactionReceipt,\n} from \"viem\";\n\nimport {\n  bondingCurveAbi,\n  buybackVaultAbi,\n  emergencyDistributorAbi,\n  emergencyDistributorFactoryAbi,\n  feeEscrowAbi,\n  graduationCoordinatorAbi,\n  holderAwareLaunchForwarderAbi,\n  holderDistributorAbi,\n  holderDistributorFactoryAbi,\n  launchFactoryAbi,\n  launchLockerAbi,\n  memeHookAbi,\n  partnerRegistryAbi,\n} from \"./abi/generated\";\nimport type { LaunchpadDeployment } from \"./deployment\";\n\n/** `LaunchFactory.TokenCreated`. The only authority on a new launch's token and curve addresses. */\nexport interface LaunchpadTokenCreatedEvent {\n  readonly token: Address;\n  readonly curve: Address;\n  readonly creator: Address;\n  readonly quoteToken: Address;\n  readonly launchConfigId: bigint;\n  readonly graduationThreshold: bigint;\n  readonly tokenInfoHash: Hex;\n  readonly creatorFeeRecipient: Address;\n  readonly buybackEnabled: boolean;\n  readonly creatorTaxBps: number;\n}\n\n/**\n * `BondingCurve.CurveTrade`, direction-normalized.\n *\n * `quoteSpentOrReceived` swaps meaning by direction, which is the easiest thing here to account\n * wrong: on a buy it is what the payer actually spent (already net of any boundary refund), and on\n * a sell it is what the recipient received after fees. `grossQuoteBasis` is the amount all three\n * fee components were charged against, and is the right field to sum for volume in both\n * directions.\n *\n * `feePayer` and `tokenRecipient` are deliberately separate: the snipe tax is resolved against the\n * **recipient**, so a router paying on someone's behalf does not lend or borrow its exemption.\n */\nexport interface LaunchpadTradeEvent {\n  readonly token: Address;\n  /** The curve that emitted this. Cross-check against `curveFor(token)` before trusting a log from an unrecognized address. */\n  readonly curve: Address;\n  readonly feePayer: Address;\n  readonly tokenRecipient: Address;\n  /** `bytes32(0)` for no partner. A non-zero id here does **not** imply the partner earned a fee — a disabled partner is recorded but paid nothing. */\n  readonly partnerId: Hex;\n  readonly side: \"buy\" | \"sell\";\n  readonly tokenAmount: bigint;\n  readonly grossQuoteBasis: bigint;\n  readonly quoteSpentOrReceived: bigint;\n  readonly baseFee: bigint;\n  readonly snipeTax: bigint;\n  readonly creatorTax: bigint;\n}\n\n/** `BondingCurve.FeeAllocated`: how one trade's fee basis was split across the buckets. */\nexport interface LaunchpadFeeAllocatedEvent {\n  readonly token: Address;\n  readonly curve: Address;\n  readonly partnerId: Hex;\n  readonly feeBasis: bigint;\n  readonly creatorImmediate: bigint;\n  readonly buybackBudget: bigint;\n  readonly partnerFee: bigint;\n  readonly platformNet: bigint;\n  readonly creatorTax: bigint;\n}\n\n/** `BondingCurve.SnipeTaxCharged`, keyed on the token recipient the tax was resolved against. */\nexport interface LaunchpadSnipeTaxChargedEvent {\n  readonly curve: Address;\n  readonly tokenRecipient: Address;\n  readonly amount: bigint;\n}\n\n/** `BondingCurve.CurveFeesSwept`: a bucket left the curve for the escrow. */\nexport interface LaunchpadCurveFeesSweptEvent {\n  readonly token: Address;\n  readonly curve: Address;\n  readonly beneficiary: Address;\n  /** `bytes32(0)` unless this was a partner sweep. */\n  readonly partnerId: Hex;\n  readonly asset: Address;\n  readonly amount: bigint;\n}\n\n/**\n * `BondingCurve.CurveBuybackSettled`.\n *\n * `executed: false` is not a failure — the budget folds back into the creator's bucket when the\n * internal swap would breach the price-impact ceiling or the reserved boundary.\n */\nexport interface LaunchpadBuybackSettledEvent {\n  readonly token: Address;\n  readonly curve: Address;\n  readonly quoteAmount: bigint;\n  readonly tokenAmount: bigint;\n  readonly executed: boolean;\n}\n\n/** Graduation lifecycle, from the coordinator. Both steps are permissionless and separately retryable. */\nexport interface LaunchpadGraduationEvent {\n  readonly token: Address;\n  readonly kind: \"swept\" | \"poolCreated\" | \"emergencyExited\";\n  readonly tokenAmount: bigint;\n  readonly quoteAmount: bigint;\n  /** Present on `poolCreated`: the V4 position NFT minted for the graduated liquidity. */\n  readonly positionId?: bigint;\n  /** Present on `emergencyExited`: the distributor holding the redeemable quote. */\n  readonly distributor?: Address;\n  readonly quoteToken?: Address;\n}\n\n/** `FeeEscrow` credit and claim events, for both plain recipients and partners. */\nexport interface LaunchpadFeeEscrowEvent {\n  readonly kind: \"credited\" | \"claimed\";\n  readonly beneficiary: \"recipient\" | \"partner\";\n  /** Set when `beneficiary` is `\"recipient\"`, or on a partner **claim** (the paid-out recipient). */\n  readonly recipient?: Address;\n  /** Set when `beneficiary` is `\"partner\"`. */\n  readonly partnerId?: Hex;\n  /** Set on a credit: whoever funded it. Credits are permissionless. */\n  readonly payer?: Address;\n  readonly asset: Address;\n  readonly amount: bigint;\n}\n\n/** `BuybackVault` lock and release events. */\nexport interface LaunchpadBuybackVaultEvent {\n  readonly kind: \"locked\" | \"released\";\n  readonly token: Address;\n  readonly amount?: bigint;\n  readonly creatorAmount?: bigint;\n  readonly protocolAmount?: bigint;\n}\n\n/** `EmergencyDistributor` lifecycle, emitted by the per-launch distributor. */\nexport interface LaunchpadEmergencyDistributorEvent {\n  readonly kind:\n    | \"created\"\n    | \"activated\"\n    | \"redeemed\"\n    | \"donatedTokensSynced\"\n    | \"orphanedQuoteReleased\";\n  /** The distributor that emitted this; the only identifier `activated` and `redeemed` carry. */\n  readonly distributor: Address;\n  readonly launchToken?: Address;\n  readonly quoteToken?: Address;\n  readonly account?: Address;\n  readonly recipient?: Address;\n  readonly tokenIn?: bigint;\n  readonly quoteOut?: bigint;\n  readonly sweptTokens?: bigint;\n  readonly sweptQuote?: bigint;\n  readonly initialRedeemableSupply?: bigint;\n  readonly amount?: bigint;\n}\n\n/** `MemeHook` V4 pool fee and partner-epoch events. */\nexport interface LaunchpadPoolFeeEvent {\n  readonly kind:\n    | \"allocated\"\n    | \"partnerAccrued\"\n    | \"sweepBegun\"\n    | \"partnersSettled\"\n    | \"sweepFinalized\"\n    | \"currencyConverted\"\n    | \"feesRescued\"\n    | \"partnerFeesRescued\";\n  readonly poolId?: Hex;\n  readonly token?: Address;\n  readonly partnerId?: Hex;\n  readonly epochId?: bigint;\n  readonly amount?: bigint;\n  /** Asset the rescue moved. Set on the two RC2 rescue kinds. */\n  readonly asset?: Address;\n  /** Set on `feesRescued`, which settles the protocol and creator sides in one call. */\n  readonly protocolAmount?: bigint;\n  readonly creatorAmount?: bigint;\n}\n\n/**\n * A Holder Fee Sharing launch, reported from both sides of the atomic creation.\n *\n * The forwarder emits `HolderSharingLaunchCreated` and the distributor factory emits\n * `DistributorCreated` in the same transaction. They are kept as separate entries rather than\n * merged, because reconciling them is the point: a launch that carries only one of the two is not\n * an official holder-sharing launch, and the migration guide is explicit that a mismatch must be\n * flagged rather than quietly accepted.\n */\nexport interface LaunchpadHolderSharingEvent {\n  readonly source: \"forwarder\" | \"distributorFactory\";\n  readonly creator: Address;\n  readonly token: Address;\n  readonly distributor: Address;\n  /** Present on the forwarder's event. */\n  readonly curve?: Address;\n  /** Present on the factory's event, along with the two below. */\n  readonly launchSalt?: Hex;\n  readonly quoteToken?: Address;\n  readonly feeEscrow?: Address;\n}\n\n/**\n * A Holder Distributor's own lifecycle, emitted by the per-launch distributor.\n *\n * Reported with the emitting address, like the other per-launch contracts: the parser cannot know a\n * distributor's address up front, so confirm it against `distributorForToken(token)` before\n * trusting a log from an arbitrary third-party receipt.\n */\nexport interface LaunchpadHolderDistributorEvent {\n  readonly kind: \"epochPublished\" | \"claimed\" | \"rolledOver\" | \"harvested\";\n  readonly distributor: Address;\n  readonly epochId?: bigint;\n  readonly account?: Address;\n  /** Merkle root, on `epochPublished`. */\n  readonly root?: Hex;\n  /** Opaque publisher metadata, on `epochPublished`. */\n  readonly metadata?: Hex;\n  readonly expiresAt?: bigint;\n  /** Quote-side amount: totals on publish, the claimed or rolled-over amount otherwise. */\n  readonly quoteAmount?: bigint;\n  /** Launch-token side of the same. */\n  readonly coinAmount?: bigint;\n}\n\n/**\n * An automatic graduation attempt that reverted, added in RC2.\n *\n * **This does not mean the transaction failed.** RC2 tries to graduate a launch as soon as a buy\n * (or a creation's initial buy) empties the sellable supply. That attempt is wrapped in a `try`, so\n * when it reverts the trade still succeeds and only this event is emitted. Treating it as a failed\n * purchase is the mistake it exists to make visible; the launch simply stays `NotGraduated` and the\n * ordinary permissionless `graduate(token)` path picks it up.\n */\nexport interface LaunchpadAutoGraduationFailedEvent {\n  readonly token: Address;\n  /** Gas remaining when the attempt gave up; useful for telling an out-of-gas retry from a real revert. */\n  readonly gasRemaining: bigint;\n  /** Contract that emitted it — the factory after an initial buy, otherwise the launch's own curve. */\n  readonly emitter: Address;\n}\n\n/** Per-launch configuration changes the factory records after creation. */\nexport interface LaunchpadLaunchConfigEvent {\n  readonly kind: \"creatorFeeRecipientUpdated\" | \"buybackEnabledUpdated\" | \"launchTaxExemptionAdded\";\n  readonly token: Address;\n  readonly previousRecipient?: Address;\n  readonly newRecipient?: Address;\n  readonly enabled?: boolean;\n  readonly caller?: Address;\n  readonly account?: Address;\n}\n\n/** Everything this SDK understands from one receipt, grouped by concern. */\nexport interface LaunchpadReceiptEvents {\n  readonly tokenCreated: readonly LaunchpadTokenCreatedEvent[];\n  readonly trades: readonly LaunchpadTradeEvent[];\n  readonly feeAllocations: readonly LaunchpadFeeAllocatedEvent[];\n  readonly snipeTaxCharges: readonly LaunchpadSnipeTaxChargedEvent[];\n  readonly curveFeesSwept: readonly LaunchpadCurveFeesSweptEvent[];\n  readonly buybackSettlements: readonly LaunchpadBuybackSettledEvent[];\n  readonly graduation: readonly LaunchpadGraduationEvent[];\n  readonly feeEscrow: readonly LaunchpadFeeEscrowEvent[];\n  readonly buybackVault: readonly LaunchpadBuybackVaultEvent[];\n  readonly emergencyDistributor: readonly LaunchpadEmergencyDistributorEvent[];\n  readonly poolFees: readonly LaunchpadPoolFeeEvent[];\n  /** RC2 auto-graduation attempts that reverted without failing their transaction. */\n  readonly autoGraduationFailures: readonly LaunchpadAutoGraduationFailedEvent[];\n  /** Both halves of a Holder Fee Sharing creation; reconcile them before trusting either. */\n  readonly holderSharing: readonly LaunchpadHolderSharingEvent[];\n  /** Epoch and claim activity on a per-launch Holder Distributor. */\n  readonly holderDistributor: readonly LaunchpadHolderDistributorEvent[];\n  readonly launchConfig: readonly LaunchpadLaunchConfigEvent[];\n  /** Tokens locked permanently in the `LaunchLocker` to hold the graduation price. */\n  readonly permanentLocks: readonly { readonly token: Address; readonly amount: bigint }[];\n}\n\nfunction decodeFrom<const TAbi extends Abi>(abi: TAbi, log: Log) {\n  try {\n    // Keeps the ABI's literal type so `eventName` narrows to the contract's own event union;\n    // widening to `Abi` here would collapse it to `undefined` and defeat every switch below.\n    return decodeEventLog({ abi, data: log.data, topics: log.topics });\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Decodes every Launchpad event in a receipt.\n *\n * Logs from the deployment's singleton contracts are routed strictly by `log.address`, matching the\n * indexer spec's rule that source must never be inferred from the topic alone — several contracts\n * share the same `ILaunchpadEvents` declarations, so an event name does not identify its emitter.\n *\n * Per-launch contracts are the exception, and necessarily so: a `BondingCurve` and an\n * `EmergencyDistributor` live at addresses derived per launch, which a receipt parser cannot know\n * up front. Their logs are decoded from any address that is not one of the singletons, and the\n * emitting address is reported on every such event (`curve` / `distributor`) so a consumer can\n * confirm it against `curveFor(token)` or `predictDistributor(...)` before trusting it. For a\n * receipt from a transaction this SDK prepared that is a formality; for an arbitrary third-party\n * receipt it is not, and should be checked.\n */\nexport function parseLaunchpadReceiptEvents(\n  deployment: LaunchpadDeployment,\n  receipt: TransactionReceipt,\n): LaunchpadReceiptEvents {\n  const contracts = deployment.contracts;\n  const tokenCreated: LaunchpadTokenCreatedEvent[] = [];\n  const trades: LaunchpadTradeEvent[] = [];\n  const feeAllocations: LaunchpadFeeAllocatedEvent[] = [];\n  const snipeTaxCharges: LaunchpadSnipeTaxChargedEvent[] = [];\n  const curveFeesSwept: LaunchpadCurveFeesSweptEvent[] = [];\n  const buybackSettlements: LaunchpadBuybackSettledEvent[] = [];\n  const graduation: LaunchpadGraduationEvent[] = [];\n  const feeEscrow: LaunchpadFeeEscrowEvent[] = [];\n  const buybackVault: LaunchpadBuybackVaultEvent[] = [];\n  const emergencyDistributor: LaunchpadEmergencyDistributorEvent[] = [];\n  const poolFees: LaunchpadPoolFeeEvent[] = [];\n  const autoGraduationFailures: LaunchpadAutoGraduationFailedEvent[] = [];\n  const holderSharing: LaunchpadHolderSharingEvent[] = [];\n  const holderDistributor: LaunchpadHolderDistributorEvent[] = [];\n  const launchConfig: LaunchpadLaunchConfigEvent[] = [];\n  const permanentLocks: { token: Address; amount: bigint }[] = [];\n\n  const singletons: readonly Address[] = [\n    contracts.factory,\n    contracts.graduationCoordinator,\n    contracts.memeHook,\n    contracts.partnerRegistry,\n    contracts.feeEscrow,\n    contracts.buybackVault,\n    contracts.launchLocker,\n    contracts.emergencyDistributorFactory,\n    // The forwarder emits only on the holder path, but it must still be treated as a singleton, or\n    // its logs would fall through to the per-launch decoders below. The retired one is listed for\n    // the same reason: it emits nothing today, but a historical receipt should not be able to have\n    // its logs mistaken for a curve's.\n    contracts.launchForwarder,\n    ...(contracts.legacyLaunchForwarder === undefined ? [] : [contracts.legacyLaunchForwarder]),\n    ...(contracts.holderDistributorFactory === undefined\n      ? []\n      : [contracts.holderDistributorFactory]),\n  ];\n\n  for (const log of receipt.logs) {\n    const from = (target: Address) => isAddressEqual(log.address, target);\n\n    if (from(contracts.launchForwarder)) {\n      const decoded = decodeFrom(holderAwareLaunchForwarderAbi, log);\n      if (decoded?.eventName === \"HolderSharingLaunchCreated\") {\n        const args = decoded.args as unknown as Record<string, unknown>;\n        holderSharing.push(\n          Object.freeze({\n            source: \"forwarder\" as const,\n            creator: getAddress(args.creator as Address),\n            token: getAddress(args.token as Address),\n            distributor: getAddress(args.distributor as Address),\n            curve: getAddress(args.curve as Address),\n          }),\n        );\n      }\n      continue;\n    }\n\n    if (\n      contracts.holderDistributorFactory !== undefined &&\n      from(contracts.holderDistributorFactory)\n    ) {\n      const decoded = decodeFrom(holderDistributorFactoryAbi, log);\n      if (decoded?.eventName === \"DistributorCreated\") {\n        const args = decoded.args as unknown as Record<string, unknown>;\n        holderSharing.push(\n          Object.freeze({\n            source: \"distributorFactory\" as const,\n            creator: getAddress(args.creator as Address),\n            token: getAddress(args.token as Address),\n            distributor: getAddress(args.distributor as Address),\n            launchSalt: args.launchSalt as Hex,\n            quoteToken: getAddress(args.quoteToken as Address),\n            feeEscrow: getAddress(args.feeEscrow as Address),\n          }),\n        );\n      }\n      continue;\n    }\n\n    if (from(contracts.factory)) {\n      const decoded = decodeFrom(launchFactoryAbi, log);\n      if (!decoded) continue;\n      const args = decoded.args as unknown as Record<string, unknown>;\n      switch (decoded.eventName) {\n        case \"TokenCreated\":\n          tokenCreated.push(\n            Object.freeze({\n              token: getAddress(args.token as Address),\n              curve: getAddress(args.curve as Address),\n              creator: getAddress(args.creator as Address),\n              quoteToken: getAddress(args.quoteToken as Address),\n              launchConfigId: args.launchConfigId as bigint,\n              graduationThreshold: args.graduationThreshold as bigint,\n              tokenInfoHash: args.tokenInfoHash as Hex,\n              creatorFeeRecipient: getAddress(args.creatorFeeRecipient as Address),\n              buybackEnabled: args.buybackEnabled as boolean,\n              creatorTaxBps: Number(args.creatorTaxBps),\n            }),\n          );\n          break;\n        case \"CreatorFeeRecipientUpdated\":\n          launchConfig.push(\n            Object.freeze({\n              kind: \"creatorFeeRecipientUpdated\" as const,\n              token: getAddress(args.token as Address),\n              previousRecipient: getAddress(args.previousRecipient as Address),\n              newRecipient: getAddress(args.newRecipient as Address),\n            }),\n          );\n          break;\n        case \"BuybackEnabledUpdated\":\n          launchConfig.push(\n            Object.freeze({\n              kind: \"buybackEnabledUpdated\" as const,\n              token: getAddress(args.token as Address),\n              enabled: args.enabled as boolean,\n              caller: getAddress(args.caller as Address),\n            }),\n          );\n          break;\n        case \"AutoGraduationFailed\":\n          // Emitted by the factory when the initial buy inside a creation cleared the curve but the\n          // follow-on graduation reverted. The creation itself still succeeded.\n          autoGraduationFailures.push(\n            Object.freeze({\n              token: getAddress(args.token as Address),\n              gasRemaining: args.gasRemaining as bigint,\n              emitter: getAddress(log.address),\n            }),\n          );\n          break;\n        default:\n          break;\n      }\n      continue;\n    }\n\n    if (from(contracts.graduationCoordinator)) {\n      const decoded = decodeFrom(graduationCoordinatorAbi, log);\n      if (!decoded) continue;\n      const args = decoded.args as unknown as Record<string, unknown>;\n      switch (decoded.eventName) {\n        case \"GraduationSwept\":\n          graduation.push(\n            Object.freeze({\n              token: getAddress(args.token as Address),\n              kind: \"swept\" as const,\n              tokenAmount: args.tokenAmount as bigint,\n              quoteAmount: args.quoteAmount as bigint,\n              quoteToken: getAddress(args.quoteToken as Address),\n            }),\n          );\n          break;\n        case \"PoolGraduated\":\n          graduation.push(\n            Object.freeze({\n              token: getAddress(args.token as Address),\n              kind: \"poolCreated\" as const,\n              tokenAmount: args.tokenAmount as bigint,\n              quoteAmount: args.quoteAmount as bigint,\n              positionId: args.positionId as bigint,\n            }),\n          );\n          break;\n        case \"EmergencyExited\":\n          graduation.push(\n            Object.freeze({\n              token: getAddress(args.token as Address),\n              kind: \"emergencyExited\" as const,\n              tokenAmount: args.tokenAmount as bigint,\n              quoteAmount: args.quoteAmount as bigint,\n              distributor: getAddress(args.distributor as Address),\n              quoteToken: getAddress(args.quoteToken as Address),\n            }),\n          );\n          break;\n        default:\n          break;\n      }\n      continue;\n    }\n\n    if (from(contracts.feeEscrow)) {\n      const decoded = decodeFrom(feeEscrowAbi, log);\n      if (!decoded) continue;\n      const args = decoded.args as unknown as Record<string, unknown>;\n      switch (decoded.eventName) {\n        case \"FeeCredited\":\n          feeEscrow.push(\n            Object.freeze({\n              kind: \"credited\" as const,\n              beneficiary: \"recipient\" as const,\n              recipient: getAddress(args.recipient as Address),\n              payer: getAddress(args.payer as Address),\n              asset: getAddress(args.asset as Address),\n              amount: args.amount as bigint,\n            }),\n          );\n          break;\n        case \"FeeClaimed\":\n          feeEscrow.push(\n            Object.freeze({\n              kind: \"claimed\" as const,\n              beneficiary: \"recipient\" as const,\n              recipient: getAddress(args.recipient as Address),\n              asset: getAddress(args.asset as Address),\n              amount: args.amount as bigint,\n            }),\n          );\n          break;\n        case \"PartnerFeeCredited\":\n          feeEscrow.push(\n            Object.freeze({\n              kind: \"credited\" as const,\n              beneficiary: \"partner\" as const,\n              partnerId: args.partnerId as Hex,\n              payer: getAddress(args.payer as Address),\n              asset: getAddress(args.asset as Address),\n              amount: args.amount as bigint,\n            }),\n          );\n          break;\n        case \"PartnerFeeClaimed\":\n          feeEscrow.push(\n            Object.freeze({\n              kind: \"claimed\" as const,\n              beneficiary: \"partner\" as const,\n              partnerId: args.partnerId as Hex,\n              recipient: getAddress(args.recipient as Address),\n              asset: getAddress(args.asset as Address),\n              amount: args.amount as bigint,\n            }),\n          );\n          break;\n        default:\n          break;\n      }\n      continue;\n    }\n\n    if (from(contracts.buybackVault)) {\n      const decoded = decodeFrom(buybackVaultAbi, log);\n      if (!decoded) continue;\n      const args = decoded.args as unknown as Record<string, unknown>;\n      if (decoded.eventName === \"BuybackLocked\") {\n        buybackVault.push(\n          Object.freeze({\n            kind: \"locked\" as const,\n            token: getAddress(args.token as Address),\n            amount: args.amount as bigint,\n          }),\n        );\n      } else if (decoded.eventName === \"BuybackReleased\") {\n        buybackVault.push(\n          Object.freeze({\n            kind: \"released\" as const,\n            token: getAddress(args.token as Address),\n            creatorAmount: args.creatorAmount as bigint,\n            protocolAmount: args.protocolAmount as bigint,\n          }),\n        );\n      }\n      continue;\n    }\n\n    if (from(contracts.launchLocker)) {\n      const decoded = decodeFrom(launchLockerAbi, log);\n      if (!decoded) continue;\n      const args = decoded.args as unknown as Record<string, unknown>;\n      if (decoded.eventName === \"TokenSupplyPermanentlyLocked\") {\n        permanentLocks.push({\n          token: getAddress(args.token as Address),\n          amount: args.amount as bigint,\n        });\n      }\n      continue;\n    }\n\n    if (from(contracts.memeHook)) {\n      const decoded = decodeFrom(memeHookAbi, log);\n      if (!decoded) continue;\n      const args = decoded.args as unknown as Record<string, unknown>;\n      const base = {\n        ...(args.poolId === undefined ? {} : { poolId: args.poolId as Hex }),\n        ...(args.token === undefined ? {} : { token: getAddress(args.token as Address) }),\n        ...(args.partnerId === undefined ? {} : { partnerId: args.partnerId as Hex }),\n        ...(args.epochId === undefined ? {} : { epochId: args.epochId as bigint }),\n      };\n      switch (decoded.eventName) {\n        case \"PoolFeeAllocated\":\n          poolFees.push(Object.freeze({ kind: \"allocated\" as const, ...base }));\n          break;\n        case \"PartnerFeeAccrued\":\n          poolFees.push(\n            Object.freeze({\n              kind: \"partnerAccrued\" as const,\n              ...base,\n              ...(args.amount === undefined ? {} : { amount: args.amount as bigint }),\n            }),\n          );\n          break;\n        case \"PoolFeeSweepBegun\":\n          poolFees.push(Object.freeze({ kind: \"sweepBegun\" as const, ...base }));\n          break;\n        case \"PoolFeeSweepPartnersSettled\":\n          poolFees.push(Object.freeze({ kind: \"partnersSettled\" as const, ...base }));\n          break;\n        case \"PoolFeeSweepFinalized\":\n          poolFees.push(Object.freeze({ kind: \"sweepFinalized\" as const, ...base }));\n          break;\n        case \"PoolFeeCurrencyConverted\":\n          poolFees.push(Object.freeze({ kind: \"currencyConverted\" as const, ...base }));\n          break;\n        case \"PoolFeesRescued\":\n          poolFees.push(\n            Object.freeze({\n              kind: \"feesRescued\" as const,\n              ...base,\n              asset: getAddress(args.asset as Address),\n              protocolAmount: args.protocolAmount as bigint,\n              creatorAmount: args.creatorAmount as bigint,\n            }),\n          );\n          break;\n        case \"PartnerFeesRescued\":\n          poolFees.push(\n            Object.freeze({\n              kind: \"partnerFeesRescued\" as const,\n              ...base,\n              asset: getAddress(args.asset as Address),\n              amount: args.amount as bigint,\n            }),\n          );\n          break;\n        default:\n          break;\n      }\n      continue;\n    }\n\n    if (from(contracts.emergencyDistributorFactory)) {\n      const decoded = decodeFrom(emergencyDistributorFactoryAbi, log);\n      if (!decoded) continue;\n      const args = decoded.args as unknown as Record<string, unknown>;\n      if (decoded.eventName === \"EmergencyDistributorCreated\") {\n        emergencyDistributor.push(\n          Object.freeze({\n            kind: \"created\" as const,\n            distributor: getAddress(args.distributor as Address),\n            launchToken: getAddress(args.launchToken as Address),\n            quoteToken: getAddress(args.quoteToken as Address),\n          }),\n        );\n      }\n      continue;\n    }\n\n    if (from(contracts.partnerRegistry)) {\n      // Decoded for completeness of the address filter; partner registry changes are governance\n      // actions with no per-transaction detail a trade receipt consumer needs.\n      decodeFrom(partnerRegistryAbi, log);\n      continue;\n    }\n\n    // Not a singleton: this is a per-launch contract, whose address cannot be known up front. Try\n    // the curve first, then the emergency distributor. The emitting address is carried through so\n    // the caller can verify it.\n    if (singletons.some((address) => isAddressEqual(log.address, address))) continue;\n\n    const curveDecoded = decodeFrom(bondingCurveAbi, log);\n    if (curveDecoded) {\n      const args = curveDecoded.args as unknown as Record<string, unknown>;\n      const curve = getAddress(log.address);\n      switch (curveDecoded.eventName) {\n        case \"CurveTrade\":\n          trades.push(\n            Object.freeze({\n              token: getAddress(args.token as Address),\n              curve,\n              feePayer: getAddress(args.feePayer as Address),\n              tokenRecipient: getAddress(args.tokenRecipient as Address),\n              partnerId: args.partnerId as Hex,\n              side: (args.isBuy as boolean) ? (\"buy\" as const) : (\"sell\" as const),\n              tokenAmount: args.tokenAmount as bigint,\n              grossQuoteBasis: args.grossQuoteBasisRaw as bigint,\n              quoteSpentOrReceived: args.quoteSpentOrReceivedRaw as bigint,\n              baseFee: args.baseFeeRaw as bigint,\n              snipeTax: args.snipeTaxRaw as bigint,\n              creatorTax: args.creatorTaxRaw as bigint,\n            }),\n          );\n          continue;\n        case \"FeeAllocated\":\n          feeAllocations.push(\n            Object.freeze({\n              token: getAddress(args.token as Address),\n              curve,\n              partnerId: args.partnerId as Hex,\n              feeBasis: args.feeBasisRaw as bigint,\n              creatorImmediate: args.creatorImmediateRaw as bigint,\n              buybackBudget: args.buybackBudgetRaw as bigint,\n              partnerFee: args.partnerFeeRaw as bigint,\n              platformNet: args.platformNetRaw as bigint,\n              creatorTax: args.creatorTaxRaw as bigint,\n            }),\n          );\n          continue;\n        case \"SnipeTaxCharged\":\n          snipeTaxCharges.push(\n            Object.freeze({\n              curve,\n              tokenRecipient: getAddress(args.tokenRecipient as Address),\n              amount: args.amountRaw as bigint,\n            }),\n          );\n          continue;\n        case \"CurveFeesSwept\":\n          curveFeesSwept.push(\n            Object.freeze({\n              token: getAddress(args.token as Address),\n              curve,\n              beneficiary: getAddress(args.beneficiary as Address),\n              partnerId: args.partnerId as Hex,\n              asset: getAddress(args.asset as Address),\n              amount: args.amount as bigint,\n            }),\n          );\n          continue;\n        case \"CurveBuybackSettled\":\n          buybackSettlements.push(\n            Object.freeze({\n              token: getAddress(args.token as Address),\n              curve,\n              quoteAmount: args.quoteAmount as bigint,\n              tokenAmount: args.tokenAmount as bigint,\n              executed: args.executed as boolean,\n            }),\n          );\n          continue;\n        case \"LaunchTaxExemptionAdded\":\n          launchConfig.push(\n            Object.freeze({\n              kind: \"launchTaxExemptionAdded\" as const,\n              token: getAddress(args.token as Address),\n              account: getAddress(args.account as Address),\n            }),\n          );\n          continue;\n        case \"AutoGraduationFailed\":\n          // The curve's own attempt, made at the end of a buy that emptied the sellable supply. The\n          // buy in this same receipt succeeded regardless.\n          autoGraduationFailures.push(\n            Object.freeze({\n              token: getAddress(args.token as Address),\n              gasRemaining: args.gasRemaining as bigint,\n              emitter: getAddress(log.address),\n            }),\n          );\n          continue;\n        default:\n          break;\n      }\n    }\n\n    const holderDecoded = decodeFrom(holderDistributorAbi, log);\n    if (holderDecoded) {\n      const args = holderDecoded.args as unknown as Record<string, unknown>;\n      const distributor = getAddress(log.address);\n      switch (holderDecoded.eventName) {\n        case \"EpochPublished\":\n          holderDistributor.push(\n            Object.freeze({\n              kind: \"epochPublished\" as const,\n              distributor,\n              epochId: args.epochId as bigint,\n              root: args.root as Hex,\n              quoteAmount: args.quoteTotal as bigint,\n              coinAmount: args.coinTotal as bigint,\n              expiresAt: BigInt(args.expiresAt as bigint),\n              metadata: args.metadata as Hex,\n            }),\n          );\n          continue;\n        case \"Claimed\":\n          holderDistributor.push(\n            Object.freeze({\n              kind: \"claimed\" as const,\n              distributor,\n              epochId: args.epochId as bigint,\n              account: getAddress(args.account as Address),\n              quoteAmount: args.quoteAmount as bigint,\n              coinAmount: args.coinAmount as bigint,\n            }),\n          );\n          continue;\n        case \"EpochRolledOver\":\n          holderDistributor.push(\n            Object.freeze({\n              kind: \"rolledOver\" as const,\n              distributor,\n              epochId: args.epochId as bigint,\n              quoteAmount: args.quoteAmount as bigint,\n              coinAmount: args.coinAmount as bigint,\n            }),\n          );\n          continue;\n        case \"Harvested\":\n          holderDistributor.push(\n            Object.freeze({\n              kind: \"harvested\" as const,\n              distributor,\n              quoteAmount: args.quoteAmount as bigint,\n              coinAmount: args.coinAmount as bigint,\n            }),\n          );\n          continue;\n        default:\n          break;\n      }\n    }\n\n    const distributorDecoded = decodeFrom(emergencyDistributorAbi, log);\n    if (distributorDecoded) {\n      const args = distributorDecoded.args as unknown as Record<string, unknown>;\n      const distributor = getAddress(log.address);\n      switch (distributorDecoded.eventName) {\n        case \"Activated\":\n          emergencyDistributor.push(\n            Object.freeze({\n              kind: \"activated\" as const,\n              distributor,\n              sweptTokens: args.sweptTokens as bigint,\n              sweptQuote: args.sweptQuote as bigint,\n              initialRedeemableSupply: args.initialRedeemableSupply as bigint,\n            }),\n          );\n          break;\n        case \"Redeemed\":\n          emergencyDistributor.push(\n            Object.freeze({\n              kind: \"redeemed\" as const,\n              distributor,\n              account: getAddress(args.account as Address),\n              recipient: getAddress(args.recipient as Address),\n              tokenIn: args.tokenIn as bigint,\n              quoteOut: args.quoteOut as bigint,\n            }),\n          );\n          break;\n        case \"DonatedTokensSynced\":\n          emergencyDistributor.push(\n            Object.freeze({\n              kind: \"donatedTokensSynced\" as const,\n              distributor,\n              amount: args.amount as bigint,\n            }),\n          );\n          break;\n        case \"OrphanedQuoteReleased\":\n          emergencyDistributor.push(\n            Object.freeze({\n              kind: \"orphanedQuoteReleased\" as const,\n              distributor,\n              launchToken: getAddress(args.launchToken as Address),\n              quoteToken: getAddress(args.quoteToken as Address),\n              recipient: getAddress(args.recipient as Address),\n              amount: args.amount as bigint,\n            }),\n          );\n          break;\n        default:\n          break;\n      }\n    }\n  }\n\n  return Object.freeze({\n    tokenCreated: Object.freeze(tokenCreated),\n    trades: Object.freeze(trades),\n    feeAllocations: Object.freeze(feeAllocations),\n    snipeTaxCharges: Object.freeze(snipeTaxCharges),\n    curveFeesSwept: Object.freeze(curveFeesSwept),\n    buybackSettlements: Object.freeze(buybackSettlements),\n    graduation: Object.freeze(graduation),\n    feeEscrow: Object.freeze(feeEscrow),\n    buybackVault: Object.freeze(buybackVault),\n    emergencyDistributor: Object.freeze(emergencyDistributor),\n    poolFees: Object.freeze(poolFees),\n    autoGraduationFailures: Object.freeze(autoGraduationFailures),\n    holderSharing: Object.freeze(holderSharing),\n    holderDistributor: Object.freeze(holderDistributor),\n    launchConfig: Object.freeze(launchConfig),\n    permanentLocks: Object.freeze(permanentLocks),\n  });\n}\n\n/**\n * Resolves the token and curve addresses a creation produced.\n *\n * `TokenCreated` is the only authority: `predictLaunchAddresses` is a preview that says nothing\n * about whether the launch actually happened, and the curve address is not derivable from the\n * token address alone.\n */\nexport function createdLaunchAddresses(\n  deployment: LaunchpadDeployment,\n  receipt: TransactionReceipt,\n): { readonly token: Address; readonly curve: Address } | undefined {\n  const created = parseLaunchpadReceiptEvents(deployment, receipt).tokenCreated[0];\n  return created ? { token: created.token, curve: created.curve } : undefined;\n}\n","import type { Hash } from \"viem\";\nimport { type SdkTransactionResult, transactionResultFromReceipt } from \"../core\";\nimport { type LaunchpadReceiptEvents, parseLaunchpadReceiptEvents } from \"../events\";\nimport type { LaunchpadActionContext } from \"../types\";\n\n/** Confirmed transaction plus the Launchpad events decoded from its receipt. */\nexport interface LaunchpadTransactionResult extends SdkTransactionResult {\n  readonly events: LaunchpadReceiptEvents;\n}\n\n/**\n * Waits for a transaction and decodes its Launchpad events.\n *\n * A reverted receipt is reported as `status: \"reverted\"` rather than thrown, so a caller can tell\n * \"the chain rejected this\" apart from \"the request never landed\". Events are still parsed, which\n * is empty for a revert.\n */\nexport async function waitForLaunchpadTransaction(\n  context: LaunchpadActionContext,\n  hash: Hash,\n  options: { readonly confirmations?: number } = {},\n): Promise<LaunchpadTransactionResult> {\n  const receipt = await context.publicClient.waitForTransactionReceipt({\n    hash,\n    ...(options.confirmations === undefined ? {} : { confirmations: options.confirmations }),\n  });\n\n  return Object.freeze({\n    ...transactionResultFromReceipt(receipt),\n    events: parseLaunchpadReceiptEvents(context.deployment, receipt),\n  });\n}\n","import { type Address, encodeAbiParameters, getAddress, type Hex, keccak256 } from \"viem\";\n\nimport {\n  holderAwareLaunchForwarderAbi,\n  holderDistributorFactoryAbi,\n  launchDeployerAbi,\n  launchFactoryAbi,\n} from \"../../abi/generated\";\nimport type { LaunchpadDeployment } from \"../../deployment\";\nimport { findLaunchpadLaunchConfig, findLaunchpadQuoteToken } from \"../../deployment\";\nimport { LaunchpadProtocolConfigurationError } from \"../../errors\";\nimport {\n  assertLaunchpadCreateParams,\n  type LaunchpadCreateTokenParams,\n  LaunchpadInvalidCreateParamsDetailError,\n  launchpadInitialBuyTokenOut,\n} from \"../../math/create-params\";\nimport { launchpadReservedTokens } from \"../../math/curve\";\nimport type {\n  LaunchpadActionContext,\n  LaunchpadReadOptions,\n  LaunchpadWriteActionContext,\n  PredictedLaunchpadToken,\n} from \"../../types\";\nimport { blockSelector } from \"../block\";\nimport {\n  launchpadPreparedContext,\n  type PreparedLaunchpadTransaction,\n  toPreparedLaunchpadTransaction,\n} from \"./prepared\";\nimport {\n  assertLaunchpadCanSpend,\n  requireLaunchpadWriteAccount,\n  simulateLaunchpadWrite,\n  withAutoGraduationGasHeadroom,\n} from \"./shared\";\n\n/**\n * `EconomicsHash.hash`'s ten-field preimage, in the library's exact order.\n *\n * Order and encoding are load-bearing: the contract uses `abi.encode` (not packed) over exactly\n * these ten values in this sequence, and a single transposition yields a hash that fails every\n * guarded creation with `EconomicsHashMismatch`.\n */\nconst economicsHashComponents = [\n  { name: \"phantomQuote\", type: \"uint256\" },\n  { name: \"graduationThreshold\", type: \"uint256\" },\n  { name: \"supply\", type: \"uint256\" },\n  { name: \"curveFeeBps\", type: \"uint256\" },\n  { name: \"poolFee\", type: \"uint24\" },\n  { name: \"tickSpacing\", type: \"int24\" },\n  { name: \"protocolFeeShareBps\", type: \"uint16\" },\n  { name: \"buybackBurnBps\", type: \"uint16\" },\n  { name: \"hookFeeBps\", type: \"uint16\" },\n  { name: \"maxInternalPriceImpactBps\", type: \"uint16\" },\n] as const;\n\n/** The ten values `expectedEconomics` commits to, drawn from the three governed config layers. */\nexport interface LaunchpadEconomicsCommitment {\n  readonly phantomQuote: bigint;\n  readonly graduationThreshold: bigint;\n  readonly supply: bigint;\n  readonly curveFeeBps: bigint;\n  readonly poolFee: number;\n  readonly tickSpacing: number;\n  readonly protocolFeeShareBps: number;\n  readonly buybackBurnBps: number;\n  readonly hookFeeBps: number;\n  readonly maxInternalPriceImpactBps: number;\n}\n\n/**\n * Reproduces `EconomicsHash.hash` for `expectedEconomics`.\n *\n * Passing the result commits the creation to one exact economics template: if governance changes\n * any of the ten values between building the transaction and mining it, the creation reverts\n * instead of launching against terms the creator never saw. Passing `bytes32(0)` instead — see\n * {@link UNCHECKED_ECONOMICS} — opts out of that protection entirely, which the contract explicitly\n * allows.\n */\nexport function launchpadEconomicsHash(commitment: LaunchpadEconomicsCommitment): Hex {\n  return keccak256(\n    encodeAbiParameters(economicsHashComponents, [\n      commitment.phantomQuote,\n      commitment.graduationThreshold,\n      commitment.supply,\n      commitment.curveFeeBps,\n      commitment.poolFee,\n      commitment.tickSpacing,\n      commitment.protocolFeeShareBps,\n      commitment.buybackBurnBps,\n      commitment.hookFeeBps,\n      commitment.maxInternalPriceImpactBps,\n    ]),\n  );\n}\n\n/** Opt out of the economics-change guard. The contract skips the check entirely for `bytes32(0)`. */\nexport const UNCHECKED_ECONOMICS = `0x${\"0\".repeat(64)}` as Hex;\n\n/**\n * Builds `expectedEconomics` from the deployment's own pinned config layers.\n *\n * Convenience over {@link launchpadEconomicsHash} for the common case; a caller that has just read\n * `validateAndResolve` and `feePolicy()` live should hash those values instead, since this uses the\n * pinned copies.\n */\nexport function launchpadEconomicsHashFromDeployment(\n  context: Pick<LaunchpadWriteActionContext, \"deployment\">,\n  input: { readonly quoteToken: Address; readonly launchConfigId: bigint },\n): Hex {\n  const economics = context.deployment.economics;\n  const quoteToken = findLaunchpadQuoteToken(economics, input.quoteToken);\n  const launchConfig = findLaunchpadLaunchConfig(economics, input.launchConfigId);\n  if (!quoteToken || !launchConfig) throw new LaunchpadProtocolConfigurationError();\n\n  return launchpadEconomicsHash({\n    phantomQuote: quoteToken.phantomQuote,\n    graduationThreshold: quoteToken.graduationThreshold,\n    supply: launchConfig.supply,\n    curveFeeBps: launchConfig.curveFeeBps,\n    poolFee: launchConfig.poolFee,\n    tickSpacing: launchConfig.tickSpacing,\n    protocolFeeShareBps: economics.feePolicy.protocolFeeShareBps,\n    buybackBurnBps: economics.feePolicy.buybackBurnBps,\n    hookFeeBps: economics.feePolicy.hookFeeBps,\n    maxInternalPriceImpactBps: economics.feePolicy.maxInternalPriceImpactBps,\n  });\n}\n\nfunction toContractParams(params: LaunchpadCreateTokenParams) {\n  return {\n    name: params.name,\n    symbol: params.symbol,\n    logo: params.logo,\n    description: params.description,\n    socials: {\n      twitter: params.socials.twitter,\n      telegram: params.socials.telegram,\n      discord: params.socials.discord,\n      website: params.socials.website,\n      farcaster: params.socials.farcaster,\n    },\n    quoteToken: params.quoteToken,\n    launchConfigId: params.launchConfigId,\n    expectedEconomics: params.expectedEconomics,\n    launchTaxExemptions: [...params.launchTaxExemptions],\n    creatorFeeRecipient: params.creatorFeeRecipient,\n    buybackEnabled: params.buybackEnabled,\n    creatorTaxBps: params.creatorTaxBps,\n    creatorInitialBuyQuoteRaw: params.creatorInitialBuyQuoteRaw,\n    creatorInitialBuyRecipient: params.creatorInitialBuyRecipient,\n    minInitialTokenOut: params.minInitialTokenOut,\n    deadline: params.deadline,\n    salt: params.salt,\n  } as const;\n}\n\nfunction validationContext(\n  context: LaunchpadWriteActionContext,\n  params: LaunchpadCreateTokenParams,\n  creator: Address,\n) {\n  const economics = context.deployment.economics;\n  const quoteToken = findLaunchpadQuoteToken(economics, params.quoteToken);\n  const launchConfig = findLaunchpadLaunchConfig(economics, params.launchConfigId);\n  if (!quoteToken || !launchConfig) throw new LaunchpadProtocolConfigurationError();\n\n  return {\n    creator,\n    launchConfig: { supply: launchConfig.supply, curveFeeBps: launchConfig.curveFeeBps },\n    quoteTokenEconomics: {\n      phantomQuote: quoteToken.phantomQuote,\n      graduationThreshold: quoteToken.graduationThreshold,\n    },\n    hookFeeBps: economics.feePolicy.hookFeeBps,\n    maxCreatorTaxBps: economics.maxCreatorTaxBps,\n    maxCreatorInitialBuyBps: economics.maxCreatorInitialBuyBps,\n  };\n}\n\n/** What a creation will produce, previewed before it is sent. */\nexport interface CreateTokenPreview {\n  readonly creator: Address;\n  readonly quoteToken: Address;\n  readonly launchConfigId: bigint;\n  readonly salt: Hex;\n  /** Quote the factory will pull for the atomic initial buy; `0` when there is none. */\n  readonly initialBuyQuoteRaw: bigint;\n  /** Tokens that initial buy is expected to yield, priced against the fresh curve. */\n  readonly initialBuyTokenOut: bigint;\n  /** Launch fee the factory will pull, in `launchFeeToken`. Currently `0` on every deployment. */\n  readonly launchFeeRaw: bigint;\n  /** Predicted addresses, when the deployer was consulted. Confirm against `TokenCreated`. */\n  readonly predicted?: PredictedLaunchpadToken;\n  /**\n   * The initial buy takes the whole initially sellable supply, so RC2 graduates the launch inside\n   * this same creation. When true, do not expect the new launch to be `notGraduated` — read\n   * `getGraduation` from the receipt's state rather than assuming.\n   */\n  readonly graduatesOnCreate: boolean;\n}\n\n/**\n * Predicts the CREATE2 addresses a creation will produce, without sending anything.\n *\n * A salt is single-use per creator, so a prediction is invalidated by any launch that consumes the\n * same salt — check `factory.usedSalt(creator, salt)` before relying on one. The prediction is also\n * only a preview: `TokenCreated` remains the sole authority that a launch happened.\n */\nexport async function predictLaunchpadAddresses(\n  context: LaunchpadWriteActionContext,\n  params: LaunchpadCreateTokenParams,\n  creator: Address,\n): Promise<PredictedLaunchpadToken> {\n  const [token, curve] = await context.publicClient.readContract({\n    address: context.deployment.contracts.launchDeployer,\n    abi: launchDeployerAbi,\n    functionName: \"predictLaunchAddresses\",\n    args: [creator, toContractParams(params)],\n  });\n  return Object.freeze({ token, curve, creator, salt: params.salt });\n}\n\nasync function buildCreatePreview(\n  context: LaunchpadWriteActionContext,\n  params: LaunchpadCreateTokenParams,\n  creator: Address,\n): Promise<CreateTokenPreview> {\n  const validation = validationContext(context, params, creator);\n  assertLaunchpadCreateParams(params, validation);\n\n  const initialBuyTokenOut =\n    params.creatorInitialBuyQuoteRaw > 0n\n      ? (launchpadInitialBuyTokenOut(\n          params.creatorInitialBuyQuoteRaw,\n          validation.launchConfig.curveFeeBps,\n          params.creatorTaxBps,\n          validation.launchConfig.supply,\n          validation.quoteTokenEconomics.phantomQuote,\n          validation.quoteTokenEconomics.graduationThreshold,\n        ) ?? 0n)\n      : 0n;\n\n  // `launchpadInitialBuyTokenOut` clamps at the initially sellable supply, so hitting that ceiling\n  // is exactly the condition under which the factory tries to graduate before the call returns.\n  const initialSellable =\n    validation.launchConfig.supply -\n    launchpadReservedTokens(\n      validation.launchConfig.supply,\n      validation.quoteTokenEconomics.phantomQuote,\n      validation.quoteTokenEconomics.graduationThreshold,\n    );\n\n  const predicted = await predictLaunchpadAddresses(context, params, creator);\n\n  return Object.freeze({\n    creator,\n    quoteToken: params.quoteToken,\n    launchConfigId: params.launchConfigId,\n    salt: params.salt,\n    initialBuyQuoteRaw: params.creatorInitialBuyQuoteRaw,\n    initialBuyTokenOut,\n    launchFeeRaw: context.deployment.economics.launchFeeRaw,\n    predicted,\n    graduatesOnCreate: initialBuyTokenOut > 0n && initialBuyTokenOut >= initialSellable,\n  });\n}\n\n/**\n * Returns the contract the creator must approve for a given creation entry point.\n *\n * The two entry points genuinely differ, and RC2 changed which is which. `createToken` is pulled by\n * the **factory**. `launchAndBuy` is pulled by the **forwarder**: RC2 made the forwarder collect the\n * exact quote and launch-fee amounts from its caller, approve the factory for the duration of the\n * call, then revoke that approval and refund any residue. Under RC1 the forwarder was a pure\n * pass-through and the factory was the spender for both paths, so an integration carried over from\n * RC1 approves the wrong contract and reverts on an allowance the user believes they granted.\n */\nexport function launchpadCreationSpender(\n  deployment: LaunchpadWriteActionContext[\"deployment\"],\n  entryPoint: \"createToken\" | \"launchAndBuy\",\n): Address {\n  return entryPoint === \"launchAndBuy\"\n    ? deployment.contracts.launchForwarder\n    : deployment.contracts.factory;\n}\n\n/**\n * Checks the creator can cover what the entry point's spender will pull.\n *\n * When the launch fee and the quote token are the same asset the two pulls are separate\n * `transferFrom` calls against one allowance, so they are summed here rather than checked\n * independently.\n */\nasync function assertCreatorCanFund(\n  context: LaunchpadWriteActionContext,\n  params: LaunchpadCreateTokenParams,\n  creator: Address,\n  entryPoint: \"createToken\" | \"launchAndBuy\",\n): Promise<void> {\n  const spender = launchpadCreationSpender(context.deployment, entryPoint);\n  const launchFeeRaw = context.deployment.economics.launchFeeRaw;\n  const launchFeeToken = context.deployment.economics.launchFeeToken;\n  const sameAsset = launchFeeToken.toLowerCase() === params.quoteToken.toLowerCase();\n\n  if (params.creatorInitialBuyQuoteRaw > 0n) {\n    await assertLaunchpadCanSpend(context, {\n      asset: params.quoteToken,\n      owner: creator,\n      requiredAmount: params.creatorInitialBuyQuoteRaw + (sameAsset ? launchFeeRaw : 0n),\n      spender,\n    });\n  }\n  if (launchFeeRaw > 0n && !(sameAsset && params.creatorInitialBuyQuoteRaw > 0n)) {\n    await assertLaunchpadCanSpend(context, {\n      asset: launchFeeToken,\n      owner: creator,\n      requiredAmount: launchFeeRaw,\n      spender,\n    });\n  }\n}\n\n/**\n * Prepares a direct `LaunchFactory.createToken`.\n *\n * The connected account becomes the launch's permanent `originalCreator`, is automatically exempt\n * from the snipe tax, and is the account the factory pulls the launch fee and initial buy from.\n */\nexport async function prepareCreateToken(\n  context: LaunchpadWriteActionContext,\n  params: LaunchpadCreateTokenParams,\n): Promise<PreparedLaunchpadTransaction<CreateTokenPreview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const preview = await buildCreatePreview(context, params, account.address);\n  await assertCreatorCanFund(context, params, account.address, \"createToken\");\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.factory,\n    abi: launchFactoryAbi,\n    functionName: \"createToken\",\n    args: [toContractParams(params)],\n  });\n  const funded = preview.graduatesOnCreate\n    ? await withAutoGraduationGasHeadroom(context, request)\n    : request;\n  return toPreparedLaunchpadTransaction(\n    funded,\n    preview,\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * Prepares an atomic launch-and-buy through the official forwarder.\n *\n * The forwarder preserves creator identity: it calls `launchTokenFor(params, msg.sender)`, so the\n * account that calls the forwarder — not the forwarder itself — becomes `originalCreator`.\n *\n * **The allowance goes to the forwarder, not the factory.** RC2 made the forwarder pull the exact\n * quote and launch-fee amounts from its caller, hold a temporary factory approval only for the\n * duration of the call, revoke it, and refund anything unspent. This is the reverse of RC1, where\n * the forwarder was a pass-through and the factory pulled directly from the creator. Use\n * {@link launchpadCreationSpender} rather than hard-coding either address.\n *\n * Encoded against the `HolderAwareLaunchForwarder` ABI, which the 2026-09-07 rotation made the\n * active one. `launchAndBuy(CreateTokenParams)` kept its exact signature across that rotation, so\n * the same calldata would still be valid for the retired forwarder — but that one can no longer\n * reach the factory's trusted entry point, so there is nothing to point it at.\n */\nexport async function prepareLaunchAndBuy(\n  context: LaunchpadWriteActionContext,\n  params: LaunchpadCreateTokenParams,\n): Promise<PreparedLaunchpadTransaction<CreateTokenPreview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const preview = await buildCreatePreview(context, params, account.address);\n  await assertCreatorCanFund(context, params, account.address, \"launchAndBuy\");\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.launchForwarder,\n    abi: holderAwareLaunchForwarderAbi,\n    functionName: \"launchAndBuy\",\n    args: [toContractParams(params)],\n  });\n  const funded = preview.graduatesOnCreate\n    ? await withAutoGraduationGasHeadroom(context, request)\n    : request;\n  return toPreparedLaunchpadTransaction(\n    funded,\n    preview,\n    launchpadPreparedContext(context, account),\n  );\n}\n\n/**\n * Initialization payload for Adapter v1 of the Holder Distributor, `abi.encode(uint256(1))`.\n *\n * The bytes are opaque to this SDK on purpose: the distributor project owns their meaning behind\n * the `IHolderDistributorFactory` boundary, and a future adapter will define its own encoding. This\n * constant exists so the current version is not hand-encoded at every call site, not to suggest the\n * SDK understands the payload.\n */\n/** The zero address `launchWithHolderFeeSharing` demands in `creatorFeeRecipient`. */\nconst HOLDER_SHARING_RECIPIENT_PLACEHOLDER = \"0x0000000000000000000000000000000000000000\";\n\nexport const HOLDER_DISTRIBUTOR_ADAPTER_V1_INIT_DATA: Hex = encodeAbiParameters(\n  [{ type: \"uint256\" }],\n  [1n],\n);\n\n/**\n * Encodes the initialization payload for a given adapter version.\n *\n * The factory checks `initializationData` is exactly 32 bytes decoding to its own\n * `ADAPTER_VERSION`, so this is the whole payload for every version of the current adapter shape.\n * Pair it with `getLaunchpadHolderAdapterVersion` rather than pinning a number, and a factory\n * upgraded to a later adapter keeps working.\n */\nexport function launchpadHolderInitializationData(adapterVersion: bigint): Hex {\n  return encodeAbiParameters([{ type: \"uint256\" }], [adapterVersion]);\n}\n\n/** What a holder-sharing creation will produce, on top of the ordinary creation preview. */\nexport interface HolderSharingCreateTokenPreview extends CreateTokenPreview {\n  /**\n   * The distributor the forwarder will create and install as `creatorFeeRecipient`.\n   *\n   * Derived from `(creator, salt)` alone — deliberately not from the launch token, which cannot be\n   * known first because the token address depends on this distributor through\n   * `creatorFeeRecipient`. Safe to show before signing, but reconcile against the receipt's\n   * `HolderSharingLaunchCreated` afterwards.\n   */\n  readonly distributor: Address;\n  /** The initialization payload forwarded to the distributor factory, unchanged. */\n  readonly distributorInitializationData: Hex;\n}\n\n/**\n * Reads the deployment's holder distributor factory, or throws if this deployment has none.\n *\n * Holder Fee Sharing is an optional integration, so a deployment without the factory is complete\n * rather than broken — but a caller reaching for these actions on such a deployment has made a\n * configuration mistake, and should hear about it before a call lands on the zero address.\n */\nfunction requireHolderDistributorFactory(deployment: LaunchpadDeployment): Address {\n  const factory = deployment.contracts.holderDistributorFactory;\n  if (factory === undefined) throw new LaunchpadProtocolConfigurationError();\n  return factory;\n}\n\n/**\n * Predicts the distributor a holder-sharing launch by `creator` with `salt` will produce.\n *\n * Note what it is *not* keyed by: the launch token. The distributor has to be predictable before\n * the token exists, because it becomes the token's `creatorFeeRecipient` and therefore feeds into\n * the token's own CREATE2 address. Salts are single-use per creator, so this prediction is\n * invalidated by any launch that consumes the same one.\n */\nexport function predictLaunchpadHolderDistributor(\n  context: LaunchpadActionContext,\n  input: { readonly creator: Address; readonly salt: Hex },\n  options?: LaunchpadReadOptions,\n): Promise<Address> {\n  return context.publicClient.readContract({\n    address: requireHolderDistributorFactory(context.deployment),\n    abi: holderDistributorFactoryAbi,\n    functionName: \"predictDistributor\",\n    args: [input.creator, input.salt],\n    ...blockSelector(options),\n  });\n}\n\n/** The distributor registered for a launch token, or the zero address for an ordinary launch. */\nexport function getLaunchpadHolderDistributor(\n  context: LaunchpadActionContext,\n  token: Address,\n  options?: LaunchpadReadOptions,\n): Promise<Address> {\n  return context.publicClient.readContract({\n    address: requireHolderDistributorFactory(context.deployment),\n    abi: holderDistributorFactoryAbi,\n    functionName: \"distributorForToken\",\n    args: [token],\n    ...blockSelector(options),\n  });\n}\n\n/**\n * Whether the registry recognises an address as one of its own distributors.\n *\n * Worth checking before labelling anything in a UI as an official holder distributor: any launch\n * may nominate an arbitrary `creatorFeeRecipient`, and one that merely looks like a distributor is\n * not one.\n */\nexport function isLaunchpadHolderDistributor(\n  context: LaunchpadActionContext,\n  distributor: Address,\n  options?: LaunchpadReadOptions,\n): Promise<boolean> {\n  return context.publicClient.readContract({\n    address: requireHolderDistributorFactory(context.deployment),\n    abi: holderDistributorFactoryAbi,\n    functionName: \"isDistributor\",\n    args: [distributor],\n    ...blockSelector(options),\n  });\n}\n\n/**\n * Prepares an atomic Holder Fee Sharing launch through `launchWithHolderFeeSharing`.\n *\n * One transaction creates the per-launch distributor, installs it as the launch's\n * `creatorFeeRecipient`, creates the token and curve, and verifies every binding. Any failure among\n * those reverts the whole thing, so there is no partially created launch to clean up.\n *\n * **`creatorFeeRecipient` must be the zero address.** The forwarder derives the recipient itself\n * and rejects a caller-supplied one outright — predicting the distributor and passing it in, the\n * intuitive thing to try, is exactly what `InvalidCreatorFeeRecipient` is there to stop. The SDK\n * refuses before simulating so the mistake is legible.\n *\n * The allowance goes to the forwarder, as with {@link prepareLaunchAndBuy}.\n *\n * Requires a deployment with a holder distributor factory; without one this throws before touching\n * the network, since Holder Fee Sharing is an optional integration rather than part of the core.\n */\nexport async function prepareLaunchWithHolderFeeSharing(\n  context: LaunchpadWriteActionContext,\n  params: LaunchpadCreateTokenParams,\n  options?: { readonly distributorInitializationData?: Hex },\n): Promise<PreparedLaunchpadTransaction<HolderSharingCreateTokenPreview>> {\n  requireHolderDistributorFactory(context.deployment);\n  if (params.creatorFeeRecipient !== HOLDER_SHARING_RECIPIENT_PLACEHOLDER) {\n    throw new LaunchpadInvalidCreateParamsDetailError([\n      {\n        rule: \"holderSharingRequiresZeroCreatorFeeRecipient\",\n        recipient: params.creatorFeeRecipient,\n      },\n    ]);\n  }\n\n  const account = await requireLaunchpadWriteAccount(context);\n  // Default to whatever adapter the factory actually runs, rather than the version that was current\n  // when this was written — the factory rejects a mismatch outright, and an upgrade should not need\n  // an SDK release to keep creation working.\n  const distributorInitializationData =\n    options?.distributorInitializationData ??\n    launchpadHolderInitializationData(\n      await context.publicClient.readContract({\n        address: requireHolderDistributorFactory(context.deployment),\n        abi: holderDistributorFactoryAbi,\n        functionName: \"ADAPTER_VERSION\",\n      }),\n    );\n\n  // Order matters, and not for performance. The forwarder overwrites `creatorFeeRecipient` with\n  // the distributor *before* predicting the launch addresses, and the token's CREATE2 salt commits\n  // to the whole parameter struct — so predicting against the caller's zero recipient would return\n  // an address the transaction never produces. Resolve the distributor first, then preview the\n  // parameters the factory will actually see.\n  const distributor = getAddress(\n    await predictLaunchpadHolderDistributor(context, {\n      creator: account.address,\n      salt: params.salt,\n    }),\n  );\n  const base = await buildCreatePreview(\n    context,\n    { ...params, creatorFeeRecipient: distributor },\n    account.address,\n  );\n  await assertCreatorCanFund(context, params, account.address, \"launchAndBuy\");\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: context.deployment.contracts.launchForwarder,\n    abi: holderAwareLaunchForwarderAbi,\n    functionName: \"launchWithHolderFeeSharing\",\n    args: [toContractParams(params), distributorInitializationData],\n  });\n  const funded = base.graduatesOnCreate\n    ? await withAutoGraduationGasHeadroom(context, request)\n    : request;\n  return toPreparedLaunchpadTransaction(\n    funded,\n    Object.freeze({ ...base, distributor, distributorInitializationData }),\n    launchpadPreparedContext(context, account),\n  );\n}\n","import { type Address, getAddress, type Hex, isAddress, isAddressEqual, zeroAddress } from \"viem\";\n// Re-exported from the `./core` subpath only, never from the root entry point: an application\n// installing more than one MasterPeach SDK would otherwise see this name twice.\nimport { UnsupportedChainError } from \"./core\";\n\n/**\n * Addresses of a single, version-scoped Launchpad Production V2 deployment. Every field is scoped\n * to one `chainId + factory`; a factory redeployment is a new deployment, never an in-place upgrade.\n *\n * Unlike V3, one factory now supports many quote tokens and launch configs (see\n * {@link LaunchpadEconomics}), so per-quote-token and per-config addresses do not exist here — the\n * factory is still the single per-chain entry point, it just no longer implies a fixed economics.\n *\n * Slot names track the contract repository's `deployment-manifest.json` `addresses` object key for\n * key (`contracts/production/release/<name>/deployment-manifest.json`).\n */\nexport interface LaunchpadContracts {\n  readonly factory: Address;\n  /** CREATE2 deployer for the per-token pair of `LauncherToken` + `BondingCurve`. `factory.launchDeployer()`. */\n  readonly launchDeployer: Address;\n  /**\n   * Trusted forwarder for atomic creation, and the spender for both of its funding legs.\n   * `factory.launchForwarder()`.\n   *\n   * Since 2026-09-07 this is the `HolderAwareLaunchForwarder`, which serves ordinary\n   * `launchAndBuy` and the new `launchWithHolderFeeSharing` from one address. Rotating it is a\n   * governed operation on the factory, so read it from the deployment record rather than pinning a\n   * literal — {@link legacyLaunchForwarder} exists precisely because one rotation has happened\n   * already.\n   */\n  readonly launchForwarder: Address;\n  /**\n   * The forwarder this deployment rotated away from, kept only so historical receipts still decode.\n   *\n   * It can no longer reach `factory.launchTokenFor`, so it is not an alternative entry point — an\n   * indexer should treat logs from it as history and never as a live source.\n   */\n  readonly legacyLaunchForwarder?: Address;\n  /**\n   * Factory for the per-launch Holder Fee Sharing distributors.\n   *\n   * Maintained as a separate project behind the `IHolderDistributorFactory` adapter boundary, so\n   * the SDK binds only to that interface. Verified against\n   * `holderDistributorFactory.authorizedForwarder()`, which must name the same forwarder the launch\n   * factory trusts — a one-sided rotation leaves exactly one of the two creation paths broken.\n   */\n  readonly holderDistributorFactory?: Address;\n  /** Owner/Controller-governed partner identities and their platform fee share. `factory.partnerRegistry()`. */\n  readonly partnerRegistry: Address;\n  /** Permissionless-credit, self-serve-claim ledger every swept fee lands in. `factory.feeEscrow()`. */\n  readonly feeEscrow: Address;\n  /** Five-year weighted-average vesting vault for the optional creator buyback. `factory.buybackVault()`. */\n  readonly buybackVault: Address;\n  /** Uniswap V4 hook owning the graduated pool's swap fee split and partner epoch sweeps. `factory.memeHook()`. */\n  readonly memeHook: Address;\n  /** Owns the `NotGraduated -> Swept -> PoolCreated` state machine. `factory.graduationCoordinator()`. */\n  readonly graduationCoordinator: Address;\n  /** Builds the V4 pool and mints the graduation position; invoked by the coordinator. `factory.graduationExecutor()`. */\n  readonly graduationExecutor: Address;\n  /** Permanent owner of the graduation position NFT and of any locked excess token supply. */\n  readonly launchLocker: Address;\n  /** Deploys one `EmergencyDistributor` per launch via CREATE2. `factory.emergencyDistributorFactory()`. */\n  readonly emergencyDistributorFactory: Address;\n  /**\n   * Terminal owner of assets no distributor can pay out. Verified against\n   * `emergencyDistributorFactory.orphanedAssetsRecipient()`, which is where it actually lives — the\n   * factory refuses to graduate at all while it is unset, so a deployment missing it is broken\n   * rather than merely incomplete.\n   */\n  readonly orphanedAssetsVault: Address;\n  /** Uniswap V4 singleton. Verified against `MemeHook.poolManager()`. */\n  readonly v4PoolManager: Address;\n  readonly v4PositionManager: Address;\n  readonly permit2: Address;\n}\n\n/**\n * One quote token a factory accepts, plus the curve economics it graduates against. Distinct from\n * V3, where a factory fixed exactly one quote token: here `approvedQuoteTokens`/`quoteTokenEconomics`\n * on the factory hold an arbitrary set, and `LaunchpadEconomics.quoteTokens` pins the ones this SDK\n * deployment knows about. A quote token absent from this list can still be approved on chain; the\n * SDK simply cannot quote or validate launches against it until the deployment record is updated.\n */\nexport interface LaunchpadQuoteToken {\n  readonly address: Address;\n  /** Display symbol only; never used for equality checks. */\n  readonly symbol: string;\n  /** `factory.quoteTokenEconomics(address).decimals`. */\n  readonly decimals: number;\n  /** Virtual quote reserve added to `trackedQuote` for pricing. `quoteTokenEconomics(address).phantomQuote`. */\n  readonly phantomQuote: bigint;\n  /** Net quote reserve at which a curve against this quote token graduates. `.graduationThreshold`. */\n  readonly graduationThreshold: bigint;\n  /** `factory.approvedQuoteTokens(address)` at the time this record was pinned; re-checked live by `verify`. */\n  readonly approved: boolean;\n  /** Manifest-only annotation (e.g. tUSDG); the contract has no concept of \"test\" quote tokens. */\n  readonly testOnly?: boolean;\n}\n\n/**\n * One template a creator can launch against: total supply, curve fee, and the graduation pool's\n * Uniswap V4 fee tier and tick spacing. `factory.launchConfig(id)`; `id` is the array index\n * `factory.validateAndResolve` and `CreateTokenParams.launchConfigId` both key off.\n */\nexport interface LaunchpadLaunchConfig {\n  readonly id: bigint;\n  readonly supply: bigint;\n  readonly curveFeeBps: bigint;\n  readonly poolFee: number;\n  readonly tickSpacing: number;\n  readonly enabled: boolean;\n}\n\n/**\n * Governance-owned split of platform fee revenue and the creator buyback carve-out.\n * `factory.feePolicy()`. Mutable on chain (`setFeePolicy`) without a redeployment, so\n * {@link verifyLaunchpadDeployment} re-reads it live rather than trusting only the pinned copy —\n * the pinned copy exists so pure math needs no RPC round trip for the common case.\n */\nexport interface LaunchpadFeePolicy {\n  readonly protocolFeeRecipient: Address;\n  readonly protocolFeeShareBps: number;\n  /** Share of the *creator* fee bucket redirected to the buyback vault when a launch opts in. Field name tracks the contract's `buybackBurnBps`, despite the tokens being vested, not burned. */\n  readonly buybackBurnBps: number;\n  readonly hookFeeBps: number;\n  readonly maxInternalPriceImpactBps: number;\n}\n\n/** Default and ceiling partner share of the platform fee bucket. `partnerRegistry.partnerPolicy()`. */\nexport interface LaunchpadPartnerPolicy {\n  readonly defaultPartnerShareOfPlatformBps: number;\n  readonly maxPartnerShareOfPlatformBps: number;\n}\n\n/** Seconds-based snipe tax decay. `factory.snipeTaxConfig()`; see `SnipeTax.sol` for the shift formula. */\nexport interface LaunchpadSnipeTaxConfig {\n  readonly startBps: number;\n  readonly durationSeconds: number;\n}\n\n/**\n * Every deployment-scoped economics value the SDK needs, pinned from the deployment manifest.\n *\n * V3 fixed one quote token and one set of curve constants per factory; Production V2 factors\n * economics into three independently governed layers instead — quote tokens, launch configs, and a\n * single current fee policy — which a launch combines at creation time into an immutable snapshot\n * (`BondingCurve.feePolicySnapshot()`). This type mirrors the *current* layers, not any one launch's\n * frozen snapshot.\n *\n * Deliberately **absent**: `partnerPolicy` and `feePolicy` share bps are governance state a launch\n * only snapshots at creation — later governance changes do not retroactively apply to existing\n * curves, and the *default* partner share is even less binding since `createPartner` can set an\n * arbitrary share up to the max. They are pinned here anyway (unlike V3's referrer share) because\n * every currently-open action in this deployment's known lifecycle needs a value to validate new\n * launches against; `verify` re-reads both live.\n */\nexport interface LaunchpadEconomics {\n  readonly quoteTokens: readonly LaunchpadQuoteToken[];\n  readonly launchConfigs: readonly LaunchpadLaunchConfig[];\n  readonly feePolicy: LaunchpadFeePolicy;\n  readonly partnerPolicy: LaunchpadPartnerPolicy;\n  readonly snipeTax: LaunchpadSnipeTaxConfig;\n  /** Flat fee a creator pays to launch, in `launchFeeToken` raw units. `factory.launchFee()`; currently `0`. */\n  readonly launchFeeRaw: bigint;\n  /** `factory.launchFeeToken()`. Independent of `quoteTokens` — a launch can charge its fee in a token it will never trade against. */\n  readonly launchFeeToken: Address;\n  /** Ceiling on a creator's atomic first buy, in bps of the launch config's `supply`. `factory.maxCreatorInitialBuyBps()`. */\n  readonly maxCreatorInitialBuyBps: number;\n  /** Ceiling a creator's `creatorTaxBps` choice at launch may not exceed. `factory.maxCreatorTaxBps()`. */\n  readonly maxCreatorTaxBps: number;\n}\n\n/**\n * A Launchpad protocol deployment traceable to an exact contract revision. The runtime code hash\n * and the source/artifact commits let {@link verifyLaunchpadDeployment} prove the registered\n * addresses match on-chain state before any read or write is trusted.\n */\nexport interface LaunchpadDeployment {\n  readonly chainId: number;\n  readonly contractVersion: string;\n  readonly contracts: LaunchpadContracts;\n  readonly economics: LaunchpadEconomics;\n  readonly deploymentBlock: bigint;\n  /**\n   * Commit the bundled ABI artifacts were exported at.\n   *\n   * Distinct from {@link LaunchpadDeployment.sourceCommit} on purpose — the ABI generator can be\n   * rerun against a later commit than the one described by an unrelated economics change, though in\n   * practice the two are usually the same commit for this deployment.\n   */\n  readonly artifactCommit: string;\n  /** Commit of the Solidity sources the deployed bytecode was built from. */\n  readonly sourceCommit: string;\n  readonly factoryRuntimeCodeHash: Hex;\n}\n\nexport type LaunchpadDeploymentRegistry = Readonly<Record<number, LaunchpadDeployment>>;\n\nconst gitCommitPattern = /^[0-9a-f]{40}$/;\nconst bytes32Pattern = /^0x[0-9a-f]{64}$/;\n\nconst requiredContractFields = [\n  \"factory\",\n  \"launchDeployer\",\n  \"launchForwarder\",\n  \"partnerRegistry\",\n  \"feeEscrow\",\n  \"buybackVault\",\n  \"memeHook\",\n  \"graduationCoordinator\",\n  \"graduationExecutor\",\n  \"launchLocker\",\n  \"emergencyDistributorFactory\",\n  \"orphanedAssetsVault\",\n  \"v4PoolManager\",\n  \"v4PositionManager\",\n  \"permit2\",\n] as const satisfies readonly (keyof LaunchpadContracts)[];\n\n/**\n * Raised when supplied deployment material fails structural validation. Mirrors the plain-`Error`\n * shape of `InvalidLendingDomainError`; chain resolution reuses the shared `UnsupportedChainError`\n * instead.\n */\nexport class InvalidLaunchpadDeploymentError extends Error {\n  readonly field: string;\n\n  constructor(field: string, message: string) {\n    super(message);\n    this.name = \"InvalidLaunchpadDeploymentError\";\n    this.field = field;\n  }\n}\n\nfunction invalid(field: string, message: string): never {\n  throw new InvalidLaunchpadDeploymentError(field, message);\n}\n\nfunction normalizeAddress(field: string, address: Address): Address {\n  if (typeof address !== \"string\" || !isAddress(address) || isAddressEqual(address, zeroAddress)) {\n    return invalid(field, `${field} must be a non-zero EVM address.`);\n  }\n  return getAddress(address);\n}\n\n/**\n * Slots a deployment may omit.\n *\n * `legacyLaunchForwarder` only exists once a rotation has happened, and `holderDistributorFactory`\n * only where Holder Fee Sharing is wired up — a deployment without it is complete, not broken, so\n * neither belongs in {@link requiredContractFields}. Both are still checksum-normalized and\n * rejected as the zero address when present.\n */\nconst optionalContractFields = [\n  \"legacyLaunchForwarder\",\n  \"holderDistributorFactory\",\n] as const satisfies readonly (keyof LaunchpadContracts)[];\n\nfunction normalizeContracts(input: LaunchpadContracts): Readonly<LaunchpadContracts> {\n  const normalized: Record<string, Address> = {};\n  for (const field of requiredContractFields) {\n    normalized[field] = normalizeAddress(`contracts.${field}`, input[field] as Address);\n  }\n  for (const field of optionalContractFields) {\n    const value = input[field];\n    if (value !== undefined) normalized[field] = normalizeAddress(`contracts.${field}`, value);\n  }\n  if (\n    normalized.legacyLaunchForwarder !== undefined &&\n    normalized.legacyLaunchForwarder === normalized.launchForwarder\n  ) {\n    invalid(\n      \"contracts.legacyLaunchForwarder\",\n      \"contracts.legacyLaunchForwarder must not equal the active launchForwarder.\",\n    );\n  }\n  return Object.freeze(normalized) as Readonly<LaunchpadContracts>;\n}\n\nfunction bps(field: string, value: number, maximum = 10_000): number {\n  if (!Number.isSafeInteger(value) || value < 0 || value > maximum) {\n    invalid(field, `${field} must be an integer in [0, ${maximum}].`);\n  }\n  return value;\n}\n\n/**\n * The ceilings RC2's configuration validators enforce on chain.\n *\n * These are contract constants, not governance-tunable settings, so a pinned value above one of\n * them cannot describe a real deployment — it is a transcription error, and catching it while\n * defining the record beats discovering it when a call reverts. RC2 tightened all four: the\n * protocol share from 10000, the hook fee from 2000, the curve fee from 10000, and the price-impact\n * ceiling from inclusive to exclusive.\n */\nconst MAX_PROTOCOL_FEE_SHARE_BPS = 5_000;\nconst MAX_HOOK_FEE_BPS = 1_000;\nconst MAX_CURVE_FEE_BPS = 1_000n;\n/** `uint256(uint128(type(int128).max))`, the supply ceiling a V4 pool's liquidity delta can carry. */\nconst MAX_LAUNCH_SUPPLY = (1n << 127n) - 1n;\nconst MIN_LAUNCH_SUPPLY = 10n ** 18n;\n\nfunction positiveBigint(field: string, value: bigint): bigint {\n  if (typeof value !== \"bigint\" || value <= 0n) {\n    invalid(field, `${field} must be a positive bigint.`);\n  }\n  return value;\n}\n\nfunction nonNegativeBigint(field: string, value: bigint): bigint {\n  if (typeof value !== \"bigint\" || value < 0n) {\n    invalid(field, `${field} must be a non-negative bigint.`);\n  }\n  return value;\n}\n\nfunction normalizeQuoteToken(\n  field: string,\n  input: LaunchpadQuoteToken,\n): Readonly<LaunchpadQuoteToken> {\n  if (input.symbol.trim().length === 0) {\n    invalid(`${field}.symbol`, `${field}.symbol must not be empty.`);\n  }\n  // The factory rejects a native-sentinel or non-contract quote token outright\n  // (`LaunchConfiguration.sol`), so a manifest claiming decimals outside ERC20's practical range\n  // describes a token that cannot exist as configured.\n  if (!Number.isSafeInteger(input.decimals) || input.decimals < 0 || input.decimals > 30) {\n    invalid(`${field}.decimals`, `${field}.decimals must be an integer in [0, 30].`);\n  }\n  return Object.freeze({\n    address: normalizeAddress(`${field}.address`, input.address),\n    symbol: input.symbol,\n    decimals: input.decimals,\n    phantomQuote: positiveBigint(`${field}.phantomQuote`, input.phantomQuote),\n    graduationThreshold: positiveBigint(`${field}.graduationThreshold`, input.graduationThreshold),\n    approved: input.approved,\n    ...(input.testOnly !== undefined ? { testOnly: input.testOnly } : {}),\n  });\n}\n\nfunction normalizeLaunchConfig(\n  field: string,\n  input: LaunchpadLaunchConfig,\n): Readonly<LaunchpadLaunchConfig> {\n  if (typeof input.id !== \"bigint\" || input.id < 0n) {\n    invalid(`${field}.id`, `${field}.id must be a non-negative bigint.`);\n  }\n  if (!Number.isSafeInteger(input.poolFee) || input.poolFee < 0 || input.poolFee > 1_000_000) {\n    invalid(`${field}.poolFee`, `${field}.poolFee must be a uint24 pips value.`);\n  }\n  if (!Number.isSafeInteger(input.tickSpacing) || input.tickSpacing <= 0) {\n    invalid(`${field}.tickSpacing`, `${field}.tickSpacing must be a positive integer.`);\n  }\n  return Object.freeze({\n    id: input.id,\n    supply: (() => {\n      const supply = positiveBigint(`${field}.supply`, input.supply);\n      if (supply < MIN_LAUNCH_SUPPLY || supply > MAX_LAUNCH_SUPPLY) {\n        invalid(\n          `${field}.supply`,\n          `${field}.supply must be a bigint in [1e18, uint128(type(int128).max)].`,\n        );\n      }\n      return supply;\n    })(),\n    curveFeeBps: (() => {\n      if (\n        typeof input.curveFeeBps !== \"bigint\" ||\n        input.curveFeeBps < 0n ||\n        input.curveFeeBps > MAX_CURVE_FEE_BPS\n      ) {\n        invalid(\n          `${field}.curveFeeBps`,\n          `${field}.curveFeeBps must be a bigint in [0, ${MAX_CURVE_FEE_BPS}].`,\n        );\n      }\n      return input.curveFeeBps;\n    })(),\n    poolFee: input.poolFee,\n    tickSpacing: input.tickSpacing,\n    enabled: input.enabled,\n  });\n}\n\nfunction normalizeFeePolicy(input: LaunchpadFeePolicy): Readonly<LaunchpadFeePolicy> {\n  return Object.freeze({\n    protocolFeeRecipient: normalizeAddress(\n      \"economics.feePolicy.protocolFeeRecipient\",\n      input.protocolFeeRecipient,\n    ),\n    protocolFeeShareBps: bps(\n      \"economics.feePolicy.protocolFeeShareBps\",\n      input.protocolFeeShareBps,\n      MAX_PROTOCOL_FEE_SHARE_BPS,\n    ),\n    buybackBurnBps: bps(\"economics.feePolicy.buybackBurnBps\", input.buybackBurnBps),\n    hookFeeBps: bps(\"economics.feePolicy.hookFeeBps\", input.hookFeeBps, MAX_HOOK_FEE_BPS),\n    maxInternalPriceImpactBps: (() => {\n      // Exclusive on both ends: zero disables conversion entirely and 10000 would allow a swap to\n      // take the whole reserve, so the validator rejects both.\n      const value = bps(\n        \"economics.feePolicy.maxInternalPriceImpactBps\",\n        input.maxInternalPriceImpactBps,\n      );\n      if (value === 0 || value >= 10_000) {\n        invalid(\n          \"economics.feePolicy.maxInternalPriceImpactBps\",\n          \"economics.feePolicy.maxInternalPriceImpactBps must be an integer in (0, 10000).\",\n        );\n      }\n      return value;\n    })(),\n  });\n}\n\nfunction normalizePartnerPolicy(input: LaunchpadPartnerPolicy): Readonly<LaunchpadPartnerPolicy> {\n  const defaultShare = bps(\n    \"economics.partnerPolicy.defaultPartnerShareOfPlatformBps\",\n    input.defaultPartnerShareOfPlatformBps,\n  );\n  const maxShare = bps(\n    \"economics.partnerPolicy.maxPartnerShareOfPlatformBps\",\n    input.maxPartnerShareOfPlatformBps,\n  );\n  if (defaultShare > maxShare) {\n    invalid(\n      \"economics.partnerPolicy.defaultPartnerShareOfPlatformBps\",\n      \"economics.partnerPolicy.defaultPartnerShareOfPlatformBps must not exceed maxPartnerShareOfPlatformBps.\",\n    );\n  }\n  return Object.freeze({\n    defaultPartnerShareOfPlatformBps: defaultShare,\n    maxPartnerShareOfPlatformBps: maxShare,\n  });\n}\n\nfunction normalizeSnipeTax(input: LaunchpadSnipeTaxConfig): Readonly<LaunchpadSnipeTaxConfig> {\n  bps(\"economics.snipeTax.startBps\", input.startBps);\n  if (!Number.isSafeInteger(input.durationSeconds) || input.durationSeconds < 0) {\n    invalid(\n      \"economics.snipeTax.durationSeconds\",\n      \"economics.snipeTax.durationSeconds must be a non-negative integer.\",\n    );\n  }\n  return Object.freeze({ startBps: input.startBps, durationSeconds: input.durationSeconds });\n}\n\nfunction normalizeEconomics(input: LaunchpadEconomics): Readonly<LaunchpadEconomics> {\n  if (input.quoteTokens.length === 0) {\n    invalid(\"economics.quoteTokens\", \"economics.quoteTokens must not be empty.\");\n  }\n  const seenQuoteTokens = new Set<Address>();\n  const quoteTokens = input.quoteTokens.map((quoteToken, index) => {\n    const normalized = normalizeQuoteToken(`economics.quoteTokens[${index}]`, quoteToken);\n    if (seenQuoteTokens.has(normalized.address)) {\n      invalid(\n        `economics.quoteTokens[${index}]`,\n        `Duplicate quote token address: ${normalized.address}.`,\n      );\n    }\n    seenQuoteTokens.add(normalized.address);\n    return normalized;\n  });\n\n  if (input.launchConfigs.length === 0) {\n    invalid(\"economics.launchConfigs\", \"economics.launchConfigs must not be empty.\");\n  }\n  const seenLaunchConfigIds = new Set<bigint>();\n  const launchConfigs = input.launchConfigs.map((launchConfig, index) => {\n    const normalized = normalizeLaunchConfig(`economics.launchConfigs[${index}]`, launchConfig);\n    if (seenLaunchConfigIds.has(normalized.id)) {\n      invalid(`economics.launchConfigs[${index}]`, `Duplicate launch config id: ${normalized.id}.`);\n    }\n    seenLaunchConfigIds.add(normalized.id);\n    return normalized;\n  });\n\n  // A defensive check on `protocolFeeShareBps + hookFeeBps` used to live here, back when each was\n  // only bounded by 10000 individually. RC2's own ceilings (5000 and 1000) cap the sum at 6000, so\n  // it became unreachable and was removed rather than left as dead code.\n  const feePolicy = normalizeFeePolicy(input.feePolicy);\n\n  return Object.freeze({\n    quoteTokens: Object.freeze(quoteTokens),\n    launchConfigs: Object.freeze(launchConfigs),\n    feePolicy,\n    partnerPolicy: normalizePartnerPolicy(input.partnerPolicy),\n    snipeTax: normalizeSnipeTax(input.snipeTax),\n    launchFeeRaw: nonNegativeBigint(\"economics.launchFeeRaw\", input.launchFeeRaw),\n    launchFeeToken: normalizeAddress(\"economics.launchFeeToken\", input.launchFeeToken),\n    maxCreatorInitialBuyBps: bps(\n      \"economics.maxCreatorInitialBuyBps\",\n      input.maxCreatorInitialBuyBps,\n    ),\n    maxCreatorTaxBps: bps(\"economics.maxCreatorTaxBps\", input.maxCreatorTaxBps),\n  });\n}\n\n/** Validates, normalizes, and deep-freezes a caller-supplied Launchpad deployment. */\nexport function defineLaunchpadDeployment(\n  input: LaunchpadDeployment,\n): Readonly<LaunchpadDeployment> {\n  if (!Number.isSafeInteger(input.chainId) || input.chainId <= 0) {\n    invalid(\"chainId\", \"chainId must be a positive safe integer.\");\n  }\n  if (input.contractVersion.trim().length === 0) {\n    invalid(\"contractVersion\", \"contractVersion must not be empty.\");\n  }\n  if (typeof input.deploymentBlock !== \"bigint\" || input.deploymentBlock <= 0n) {\n    invalid(\"deploymentBlock\", \"deploymentBlock must be a positive bigint.\");\n  }\n  if (!gitCommitPattern.test(input.artifactCommit)) {\n    invalid(\"artifactCommit\", \"artifactCommit must be a lowercase 40-character Git commit.\");\n  }\n  if (!gitCommitPattern.test(input.sourceCommit)) {\n    invalid(\"sourceCommit\", \"sourceCommit must be a lowercase 40-character Git commit.\");\n  }\n  if (!bytes32Pattern.test(input.factoryRuntimeCodeHash)) {\n    invalid(\n      \"factoryRuntimeCodeHash\",\n      \"factoryRuntimeCodeHash must be a lowercase 32-byte hex hash (0x + 64 hex chars).\",\n    );\n  }\n\n  const contracts = normalizeContracts(input.contracts);\n  const economics = normalizeEconomics(input.economics);\n\n  return Object.freeze({\n    chainId: input.chainId,\n    contractVersion: input.contractVersion,\n    contracts,\n    economics,\n    deploymentBlock: input.deploymentBlock,\n    artifactCommit: input.artifactCommit,\n    sourceCommit: input.sourceCommit,\n    factoryRuntimeCodeHash: input.factoryRuntimeCodeHash,\n  });\n}\n\n/**\n * Validates and freezes a chainId-keyed deployment registry, rejecting any entry whose key does\n * not match its own `chainId`.\n */\nexport function defineLaunchpadDeploymentRegistry(\n  input: Readonly<Record<number, LaunchpadDeployment>>,\n): LaunchpadDeploymentRegistry {\n  const entries = Object.entries(input).map(([key, deployment]) => {\n    const defined = defineLaunchpadDeployment(deployment);\n    if (Number(key) !== defined.chainId) {\n      invalid(\n        `registry[${key}]`,\n        `Registry key ${key} does not match deployment chainId ${defined.chainId}.`,\n      );\n    }\n    return [defined.chainId, defined] as const;\n  });\n  return Object.freeze(Object.fromEntries(entries));\n}\n\n/**\n * Built-in registry of production Launchpad deployments. It stays empty until a deployment has\n * passed RPC bytecode and binding verification; testnet material is exported separately as an\n * explicitly named development configuration.\n */\nexport const launchpadDeploymentRegistry: LaunchpadDeploymentRegistry =\n  defineLaunchpadDeploymentRegistry({});\n\n/** Resolves a verified deployment or throws {@link UnsupportedChainError}. */\nexport function resolveLaunchpadDeployment(\n  registry: LaunchpadDeploymentRegistry,\n  chainId: number,\n): Readonly<LaunchpadDeployment> {\n  const deployment = registry[chainId];\n  if (deployment === undefined) throw new UnsupportedChainError(chainId);\n  return deployment;\n}\n\n/** Looks up a pinned quote token by address within a deployment's economics, or `undefined`. */\nexport function findLaunchpadQuoteToken(\n  economics: Readonly<LaunchpadEconomics>,\n  quoteToken: Address,\n): Readonly<LaunchpadQuoteToken> | undefined {\n  return economics.quoteTokens.find((candidate) => isAddressEqual(candidate.address, quoteToken));\n}\n\n/** Looks up a pinned launch config by id within a deployment's economics, or `undefined`. */\nexport function findLaunchpadLaunchConfig(\n  economics: Readonly<LaunchpadEconomics>,\n  launchConfigId: bigint,\n): Readonly<LaunchpadLaunchConfig> | undefined {\n  return economics.launchConfigs.find((candidate) => candidate.id === launchConfigId);\n}\n","import type { Address, Hex } from \"viem\";\n\nimport { LaunchpadError } from \"../errors\";\nimport { curveGetAmountOut, launchpadReservedTokens } from \"./curve\";\n\nconst BPS = 10_000;\n\n/** `LaunchConstants` byte ceilings, measured on UTF-8 bytes rather than UTF-16 code units. */\nexport const MAX_NAME_BYTES = 64;\nexport const MAX_SYMBOL_BYTES = 16;\nexport const MAX_LOGO_BYTES = 512;\nexport const MAX_DESCRIPTION_BYTES = 2_048;\nexport const MAX_SOCIAL_BYTES = 256;\n/** `LaunchConstants.MAX_EXTRA_LAUNCH_TAX_EXEMPTIONS`, on top of the automatic ones. */\nexport const MAX_EXTRA_LAUNCH_TAX_EXEMPTIONS = 32;\n/** `LaunchPolicyConfiguration.MAX_COMBINED_BASE_AND_CREATOR_TAX_BPS`. */\nexport const MAX_COMBINED_BASE_AND_CREATOR_TAX_BPS = 2_000;\n\n/** `Socials`, in the struct's own field order. */\nexport interface LaunchpadSocials {\n  readonly twitter: string;\n  readonly telegram: string;\n  readonly discord: string;\n  readonly website: string;\n  readonly farcaster: string;\n}\n\n/**\n * `CreateTokenParams`, field for field.\n *\n * Defined here rather than in `types/` because this module is what enforces the struct's rules; the\n * domain-types rewrite should re-export this rather than restate it, so the validation and the\n * shape can never drift apart.\n */\nexport interface LaunchpadCreateTokenParams {\n  readonly name: string;\n  readonly symbol: string;\n  readonly logo: string;\n  readonly description: string;\n  readonly socials: LaunchpadSocials;\n  readonly quoteToken: Address;\n  readonly launchConfigId: bigint;\n  readonly expectedEconomics: Hex;\n  readonly launchTaxExemptions: readonly Address[];\n  readonly creatorFeeRecipient: Address;\n  readonly buybackEnabled: boolean;\n  readonly creatorTaxBps: number;\n  readonly creatorInitialBuyQuoteRaw: bigint;\n  readonly creatorInitialBuyRecipient: Address;\n  readonly minInitialTokenOut: bigint;\n  readonly deadline: bigint;\n  readonly salt: Hex;\n}\n\n/** The `TokenInfo` field names the contract tags `TokenInfoTooLong` with. */\nexport type LaunchpadTokenInfoField =\n  | \"name\"\n  | \"symbol\"\n  | \"logo\"\n  | \"description\"\n  | \"twitter\"\n  | \"telegram\"\n  | \"discord\"\n  | \"website\"\n  | \"farcaster\";\n\n/**\n * One creation rule the parameters break, carrying the same detail the matching contract revert\n * carries so a creation form can point at the offending field.\n */\nexport type LaunchpadCreateParamsViolation =\n  | { readonly rule: \"emptyName\" }\n  | { readonly rule: \"emptySymbol\" }\n  | {\n      readonly rule: \"tokenInfoTooLong\";\n      readonly field: LaunchpadTokenInfoField;\n      readonly length: number;\n      readonly maximum: number;\n    }\n  | { readonly rule: \"deadlineExpired\"; readonly deadline: bigint; readonly now: bigint }\n  | { readonly rule: \"zeroInitialBuyRecipient\" }\n  | { readonly rule: \"initialBuyRecipientMustBeCreator\"; readonly recipient: Address }\n  | {\n      readonly rule: \"tooManyLaunchTaxExemptions\";\n      readonly count: number;\n      readonly maximum: number;\n    }\n  | { readonly rule: \"zeroLaunchTaxExemption\"; readonly index: number }\n  | { readonly rule: \"duplicateLaunchTaxExemption\"; readonly account: Address }\n  | { readonly rule: \"creatorTaxTooHigh\"; readonly creatorTaxBps: number; readonly maximum: number }\n  | {\n      readonly rule: \"feeCombinationTooHigh\";\n      readonly against: \"curveFee\" | \"hookFee\";\n      readonly combined: number;\n      readonly maximum: number;\n    }\n  | { readonly rule: \"initialBuyFeesConsumeInput\" }\n  | {\n      readonly rule: \"creatorInitialBuyLimitExceeded\";\n      readonly tokenOut: bigint;\n      readonly maximum: bigint;\n    }\n  /**\n   * Only reachable through `launchWithHolderFeeSharing`, which derives the recipient itself and\n   * rejects a caller-supplied one. Not a rule about the parameters in isolation: an ordinary launch\n   * may name any recipient it likes.\n   */\n  | { readonly rule: \"holderSharingRequiresZeroCreatorFeeRecipient\"; readonly recipient: Address };\n\n/** Raised when the factory would reject a creation, listing every rule broken. */\nexport class LaunchpadInvalidCreateParamsDetailError extends LaunchpadError {\n  readonly violations: readonly LaunchpadCreateParamsViolation[];\n\n  constructor(violations: readonly LaunchpadCreateParamsViolation[]) {\n    super(\n      `The factory would reject these creation parameters: ${violations.map((violation) => violation.rule).join(\", \")}. Inspect \\`violations\\` for the offending field and bound of each.`,\n    );\n    this.name = \"LaunchpadInvalidCreateParamsDetailError\";\n    this.violations = Object.freeze([...violations]);\n  }\n}\n\n/** Everything outside `params` the creation rules are checked against. */\nexport interface LaunchpadCreateParamsContext {\n  /** The account that will appear as `creator` — the transaction sender for `createToken`, or the `originalCreator` argument for a `LaunchForwarder` launch. */\n  readonly creator: Address;\n  /** The resolved `LaunchConfig` for `params.launchConfigId`. */\n  readonly launchConfig: { readonly supply: bigint; readonly curveFeeBps: bigint };\n  /** The resolved `QuoteTokenEconomics` for `params.quoteToken`. */\n  readonly quoteTokenEconomics: {\n    readonly phantomQuote: bigint;\n    readonly graduationThreshold: bigint;\n  };\n  /** `factory.feePolicy().hookFeeBps`, which shares the combined-tax ceiling with the curve fee. */\n  readonly hookFeeBps: number;\n  /** `factory.maxCreatorTaxBps()`. */\n  readonly maxCreatorTaxBps: number;\n  /** `factory.maxCreatorInitialBuyBps()`. */\n  readonly maxCreatorInitialBuyBps: number;\n  /** Chain time to check `params.deadline` against. Omit to skip the deadline rule. */\n  readonly now?: bigint;\n}\n\nfunction utf8ByteLength(value: string): number {\n  return new TextEncoder().encode(value).length;\n}\n\nfunction sameAddress(left: Address, right: Address): boolean {\n  return left.toLowerCase() === right.toLowerCase();\n}\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\nfunction isZeroAddress(value: Address): boolean {\n  return value.toLowerCase() === ZERO_ADDRESS;\n}\n\n/**\n * The launch tax exemption set the factory builds, in `_buildExemptions`' own order.\n *\n * The creator is always exempt; the creator fee recipient and the initial buy recipient are added\n * only when they differ from what is already in the set (and the latter only when there actually is\n * an initial buy). Callers rarely need this directly — it exists because the duplicate rule is\n * checked against the *whole* set, so passing the creator's own address in\n * `launchTaxExemptions` is a revert, not a no-op.\n */\nexport function launchpadLaunchTaxExemptions(\n  params: Pick<\n    LaunchpadCreateTokenParams,\n    | \"launchTaxExemptions\"\n    | \"creatorFeeRecipient\"\n    | \"creatorInitialBuyQuoteRaw\"\n    | \"creatorInitialBuyRecipient\"\n  >,\n  creator: Address,\n): readonly Address[] {\n  const recipient = isZeroAddress(params.creatorFeeRecipient)\n    ? creator\n    : params.creatorFeeRecipient;\n  const exemptions: Address[] = [creator];\n  if (!sameAddress(recipient, creator)) exemptions.push(recipient);\n  if (\n    params.creatorInitialBuyQuoteRaw !== 0n &&\n    !sameAddress(params.creatorInitialBuyRecipient, creator) &&\n    !sameAddress(params.creatorInitialBuyRecipient, recipient)\n  ) {\n    exemptions.push(params.creatorInitialBuyRecipient);\n  }\n  return Object.freeze([...exemptions, ...params.launchTaxExemptions]);\n}\n\n/**\n * Tokens a creator's atomic initial buy would receive, priced against the *fresh* curve.\n *\n * Mirrors `_validateInitialBuy`, which quotes against `(phantomQuote, supply)` rather than any live\n * reserve — at creation the curve has not traded yet, so those are the reserves. The buy pays the\n * curve fee and creator tax but never a snipe tax, because the creator is exempt by construction.\n *\n * Returns `undefined` when the fees would consume the whole input, which the factory rejects.\n */\nexport function launchpadInitialBuyTokenOut(\n  quoteInRaw: bigint,\n  curveFeeBps: bigint,\n  creatorTaxBps: number,\n  supply: bigint,\n  phantomQuote: bigint,\n  graduationThreshold: bigint,\n): bigint | undefined {\n  const baseFee = (quoteInRaw * curveFeeBps) / BigInt(BPS);\n  const creatorTax = (quoteInRaw * BigInt(creatorTaxBps)) / BigInt(BPS);\n  const totalFee = baseFee + creatorTax;\n  if (totalFee >= quoteInRaw) return undefined;\n\n  const tokenOut = curveGetAmountOut(quoteInRaw - totalFee, phantomQuote, supply);\n  const initialSellable =\n    supply - launchpadReservedTokens(supply, phantomQuote, graduationThreshold);\n  return tokenOut > initialSellable ? initialSellable : tokenOut;\n}\n\n/**\n * Lists every creation rule `params` breaks, or an empty array when the factory would accept them.\n *\n * Only the rules that are a pure function of the parameters and the resolved config live here. The\n * ones that depend on live chain state — `deniedCreators`, `launchEnabled`/`whitelistedLaunchers`,\n * `usedSalt`, the dependency wiring, `expectedEconomics` matching the current template, and the\n * quote token's approval — stay with the action layer, which has to read them anyway.\n *\n * Every rule is collected rather than thrown on first failure, so a creation form can mark all of\n * its bad fields in one pass instead of one revert per round trip. Byte lengths are UTF-8, matching\n * `bytes(...).length` on chain: a name of emoji or CJK text can pass a naive `.length <= 64` check\n * and still revert.\n */\nexport function launchpadCreateParamsViolations(\n  params: LaunchpadCreateTokenParams,\n  context: LaunchpadCreateParamsContext,\n): readonly LaunchpadCreateParamsViolation[] {\n  const violations: LaunchpadCreateParamsViolation[] = [];\n\n  const checkLength = (field: LaunchpadTokenInfoField, value: string, maximum: number) => {\n    const length = utf8ByteLength(value);\n    if (length > maximum) violations.push({ rule: \"tokenInfoTooLong\", field, length, maximum });\n  };\n\n  if (utf8ByteLength(params.name) === 0) violations.push({ rule: \"emptyName\" });\n  if (utf8ByteLength(params.symbol) === 0) violations.push({ rule: \"emptySymbol\" });\n  checkLength(\"name\", params.name, MAX_NAME_BYTES);\n  checkLength(\"symbol\", params.symbol, MAX_SYMBOL_BYTES);\n  checkLength(\"logo\", params.logo, MAX_LOGO_BYTES);\n  checkLength(\"description\", params.description, MAX_DESCRIPTION_BYTES);\n  checkLength(\"twitter\", params.socials.twitter, MAX_SOCIAL_BYTES);\n  checkLength(\"telegram\", params.socials.telegram, MAX_SOCIAL_BYTES);\n  checkLength(\"discord\", params.socials.discord, MAX_SOCIAL_BYTES);\n  checkLength(\"website\", params.socials.website, MAX_SOCIAL_BYTES);\n  checkLength(\"farcaster\", params.socials.farcaster, MAX_SOCIAL_BYTES);\n\n  if (context.now !== undefined && context.now > params.deadline) {\n    violations.push({ rule: \"deadlineExpired\", deadline: params.deadline, now: context.now });\n  }\n\n  if (isZeroAddress(params.creatorInitialBuyRecipient)) {\n    violations.push({ rule: \"zeroInitialBuyRecipient\" });\n  } else if (\n    params.creatorInitialBuyQuoteRaw === 0n &&\n    !sameAddress(params.creatorInitialBuyRecipient, context.creator)\n  ) {\n    // Without an initial buy there is nothing to send anywhere, so the factory insists the field is\n    // just the creator rather than a misleading address that will never receive anything.\n    violations.push({\n      rule: \"initialBuyRecipientMustBeCreator\",\n      recipient: params.creatorInitialBuyRecipient,\n    });\n  }\n\n  if (params.launchTaxExemptions.length > MAX_EXTRA_LAUNCH_TAX_EXEMPTIONS) {\n    violations.push({\n      rule: \"tooManyLaunchTaxExemptions\",\n      count: params.launchTaxExemptions.length,\n      maximum: MAX_EXTRA_LAUNCH_TAX_EXEMPTIONS,\n    });\n  }\n  params.launchTaxExemptions.forEach((account, index) => {\n    if (isZeroAddress(account)) violations.push({ rule: \"zeroLaunchTaxExemption\", index });\n  });\n  // Duplicates are checked against the automatic exemptions too, so listing the creator (or a\n  // recipient that is already exempt) is a revert rather than a redundant entry.\n  const seen = new Set<string>();\n  for (const account of launchpadLaunchTaxExemptions(params, context.creator)) {\n    const key = account.toLowerCase();\n    if (seen.has(key)) {\n      if (!isZeroAddress(account))\n        violations.push({ rule: \"duplicateLaunchTaxExemption\", account });\n      continue;\n    }\n    seen.add(key);\n  }\n\n  if (params.creatorTaxBps > context.maxCreatorTaxBps) {\n    violations.push({\n      rule: \"creatorTaxTooHigh\",\n      creatorTaxBps: params.creatorTaxBps,\n      maximum: context.maxCreatorTaxBps,\n    });\n  }\n  const curveCombined = Number(context.launchConfig.curveFeeBps) + params.creatorTaxBps;\n  if (curveCombined > MAX_COMBINED_BASE_AND_CREATOR_TAX_BPS) {\n    violations.push({\n      rule: \"feeCombinationTooHigh\",\n      against: \"curveFee\",\n      combined: curveCombined,\n      maximum: MAX_COMBINED_BASE_AND_CREATOR_TAX_BPS,\n    });\n  }\n  const hookCombined = context.hookFeeBps + params.creatorTaxBps;\n  if (hookCombined > MAX_COMBINED_BASE_AND_CREATOR_TAX_BPS) {\n    violations.push({\n      rule: \"feeCombinationTooHigh\",\n      against: \"hookFee\",\n      combined: hookCombined,\n      maximum: MAX_COMBINED_BASE_AND_CREATOR_TAX_BPS,\n    });\n  }\n\n  if (params.creatorInitialBuyQuoteRaw > 0n) {\n    const tokenOut = launchpadInitialBuyTokenOut(\n      params.creatorInitialBuyQuoteRaw,\n      context.launchConfig.curveFeeBps,\n      params.creatorTaxBps,\n      context.launchConfig.supply,\n      context.quoteTokenEconomics.phantomQuote,\n      context.quoteTokenEconomics.graduationThreshold,\n    );\n    if (tokenOut === undefined) {\n      violations.push({ rule: \"initialBuyFeesConsumeInput\" });\n    } else {\n      const initialSellable =\n        context.launchConfig.supply -\n        launchpadReservedTokens(\n          context.launchConfig.supply,\n          context.quoteTokenEconomics.phantomQuote,\n          context.quoteTokenEconomics.graduationThreshold,\n        );\n      const maximum = (initialSellable * BigInt(context.maxCreatorInitialBuyBps)) / BigInt(BPS);\n      if (tokenOut > maximum) {\n        violations.push({ rule: \"creatorInitialBuyLimitExceeded\", tokenOut, maximum });\n      }\n    }\n  }\n\n  return Object.freeze(violations);\n}\n\n/** Throws {@link LaunchpadInvalidCreateParamsDetailError} when the factory would reject `params`. */\nexport function assertLaunchpadCreateParams(\n  params: LaunchpadCreateTokenParams,\n  context: LaunchpadCreateParamsContext,\n): void {\n  const violations = launchpadCreateParamsViolations(params, context);\n  if (violations.length > 0) throw new LaunchpadInvalidCreateParamsDetailError(violations);\n}\n","import { type Address, erc20Abi, type Hex } from \"viem\";\n\nimport { bondingCurveAbi } from \"../../abi/generated\";\nimport { LaunchpadTradingClosedError } from \"../../errors\";\nimport { launchpadCurveState } from \"../../math/curve\";\nimport { simulateLaunchpadBuyExactIn, simulateLaunchpadSellExactIn } from \"../../math/pricing\";\nimport { applySlippageToMinimumOut } from \"../../math/slippage\";\nimport type {\n  BuyQuote,\n  LaunchpadCurveState,\n  LaunchpadWriteActionContext,\n  SellQuote,\n  Slippage,\n} from \"../../types\";\nimport {\n  getLaunchpadCurrentSnipeTaxBps,\n  getLaunchpadCurveState,\n  getLaunchpadLaunchRecord,\n} from \"../read\";\nimport {\n  launchpadPreparedContext,\n  type PreparedLaunchpadTransaction,\n  toPreparedLaunchpadTransaction,\n} from \"./prepared\";\nimport {\n  assertLaunchpadCanSpend,\n  requireLaunchpadWriteAccount,\n  simulateLaunchpadWrite,\n  withAutoGraduationGasHeadroom,\n} from \"./shared\";\n\nconst ZERO_PARTNER_ID = `0x${\"0\".repeat(64)}` as Hex;\n\n/** Everything a trade needs about its launch, resolved once so a trade costs one round of reads. */\ninterface ResolvedTradeTarget {\n  readonly curve: Address;\n  readonly quoteToken: Address;\n  readonly curveState: LaunchpadCurveState;\n}\n\nasync function resolveTradeTarget(\n  context: LaunchpadWriteActionContext,\n  token: Address,\n): Promise<ResolvedTradeTarget> {\n  const record = await getLaunchpadLaunchRecord(context, token);\n  const curveState = await getLaunchpadCurveState(context, { curve: record.curve });\n\n  // Mirror `_requireTradingOpen`'s closed-curve gate before pricing anything. Without it the local\n  // simulation reaches the boundary branch with nothing left to sell and reports a bare\n  // \"invalid amount\", when the real reason — and what the chain would revert with — is that this\n  // curve has sold through to its reserved floor and is closed for good. The state is already\n  // loaded here, so the check costs nothing.\n  if (curveState.graduated || curveState.sellableTokens === 0n) {\n    throw new LaunchpadTradingClosedError();\n  }\n\n  return { curve: record.curve, quoteToken: record.quoteToken, curveState };\n}\n\nfunction toCurveMathState(state: LaunchpadCurveState) {\n  return launchpadCurveState(\n    {\n      supply: state.initialSupply,\n      phantomQuote: state.phantomQuote,\n      graduationThreshold: state.graduationThreshold,\n    },\n    {\n      trackedTokens: state.trackedTokens,\n      trackedQuote: state.trackedQuote,\n      quoteFeeBalance: state.quoteFeeBalance,\n      creatorTaxBalance: state.creatorTaxBalance,\n    },\n  );\n}\n\n/** Quotes a buy locally against freshly read curve state, including the boundary partial fill. */\nexport async function quoteLaunchpadBuy(\n  context: LaunchpadWriteActionContext,\n  input: {\n    readonly token: Address;\n    readonly quoteInRaw: bigint;\n    readonly tokenRecipient: Address;\n    readonly minTokenOut?: bigint;\n  },\n): Promise<BuyQuote & { readonly target: ResolvedTradeTarget }> {\n  const target = await resolveTradeTarget(context, input.token);\n  // Resolved on chain rather than locally: the contract evaluates the decay against\n  // `block.timestamp`, and a rate computed off the client clock can be a whole step out near a\n  // second boundary. It is also the only way to honour the recipient's exemption.\n  const snipeTaxBps = await getLaunchpadCurrentSnipeTaxBps(\n    context,\n    target.curve,\n    input.tokenRecipient,\n  );\n\n  const simulation = simulateLaunchpadBuyExactIn(\n    toCurveMathState(target.curveState),\n    {\n      curveFeeBps: target.curveState.curveFeeBps,\n      creatorTaxBps: target.curveState.creatorTaxBps,\n    },\n    {\n      quoteInRaw: input.quoteInRaw,\n      snipeTaxBps: Number(snipeTaxBps),\n      minTokenOut: input.minTokenOut ?? 0n,\n    },\n  );\n\n  return Object.freeze({\n    tokenOut: simulation.tokenOut,\n    quoteSpent: simulation.quoteSpent,\n    refund: simulation.refund,\n    netQuoteIn: simulation.fees.net,\n    baseFee: simulation.fees.baseFee,\n    snipeTax: simulation.fees.snipeTax,\n    creatorTax: simulation.fees.creatorTax,\n    totalFee: simulation.fees.totalFee,\n    snipeTaxBps: Number(snipeTaxBps),\n    isPartialFill: simulation.isPartialFill,\n    target,\n  });\n}\n\n/**\n * Prepares a curve buy.\n *\n * Two V2-specific traps this handles for the caller. The allowance goes to the **curve**, not the\n * factory — the curve pulls the quote itself. And the snipe tax is resolved against\n * `tokenRecipient`, so a UI buying on someone else's behalf must pass the real recipient or it will\n * quote the wrong rate and set a `minTokenOut` the trade cannot meet.\n *\n * The allowance is checked against `quoteSpent`, which on a buy that reaches the graduation\n * boundary is below the offered amount — approving the offer would over-approve, and the curve\n * refunds the difference atomically anyway.\n */\nexport async function prepareLaunchpadBuy(\n  context: LaunchpadWriteActionContext,\n  input: {\n    readonly token: Address;\n    readonly quoteInRaw: bigint;\n    readonly slippage: Slippage;\n    readonly deadline: bigint;\n    /** Defaults to the connected account. Determines the snipe tax, so pass it explicitly when buying for someone else. */\n    readonly tokenRecipient?: Address;\n    /** `bytes32(0)` for no attribution. A non-zero id must exist on chain or the trade reverts. */\n    readonly partnerId?: Hex;\n  },\n): Promise<PreparedLaunchpadTransaction<BuyQuote>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const tokenRecipient = input.tokenRecipient ?? account.address;\n  const partnerId = input.partnerId ?? ZERO_PARTNER_ID;\n\n  const { target, ...quote } = await quoteLaunchpadBuy(context, {\n    token: input.token,\n    quoteInRaw: input.quoteInRaw,\n    tokenRecipient,\n  });\n  const minTokenOut = applySlippageToMinimumOut(quote.tokenOut, input.slippage);\n\n  await assertLaunchpadCanSpend(context, {\n    asset: target.quoteToken,\n    owner: account.address,\n    requiredAmount: quote.quoteSpent,\n    spender: target.curve,\n  });\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: target.curve,\n    abi: bondingCurveAbi,\n    functionName: \"buyExactIn\",\n    args: [input.quoteInRaw, tokenRecipient, minTokenOut, input.deadline, partnerId],\n  });\n  // A partial fill takes the last sellable token, so RC2 will attempt to graduate the launch from\n  // inside this trade. Left on a bare estimate that attempt runs out of gas without fail — see\n  // `withAutoGraduationGasHeadroom`.\n  const funded = quote.isPartialFill\n    ? await withAutoGraduationGasHeadroom(context, request)\n    : request;\n  return toPreparedLaunchpadTransaction(funded, quote, launchpadPreparedContext(context, account));\n}\n\n/** Quotes a sell locally against freshly read curve state. */\nexport async function quoteLaunchpadSell(\n  context: LaunchpadWriteActionContext,\n  input: { readonly token: Address; readonly tokenIn: bigint },\n): Promise<SellQuote & { readonly target: ResolvedTradeTarget }> {\n  const target = await resolveTradeTarget(context, input.token);\n  const simulation = simulateLaunchpadSellExactIn(\n    toCurveMathState(target.curveState),\n    {\n      curveFeeBps: target.curveState.curveFeeBps,\n      creatorTaxBps: target.curveState.creatorTaxBps,\n    },\n    { tokenIn: input.tokenIn, minQuoteOutRaw: 0n },\n  );\n\n  return Object.freeze({\n    tokenIn: input.tokenIn,\n    grossQuoteOut: simulation.grossQuoteOut,\n    netQuoteOut: simulation.quoteOut,\n    baseFee: simulation.fees.baseFee,\n    creatorTax: simulation.fees.creatorTax,\n    totalFee: simulation.fees.totalFee,\n    target,\n  });\n}\n\n/**\n * Prepares a curve sell.\n *\n * `minQuoteOutRaw` is compared on chain against the seller's **net** proceeds, not the curve's\n * gross output, so the floor is derived from the net — deriving it from the gross would set a bound\n * the trade can never clear. A sell never pays snipe tax.\n */\nexport async function prepareLaunchpadSell(\n  context: LaunchpadWriteActionContext,\n  input: {\n    readonly token: Address;\n    readonly tokenIn: bigint;\n    readonly slippage: Slippage;\n    readonly deadline: bigint;\n    /** Defaults to the connected account. */\n    readonly quoteRecipient?: Address;\n    readonly partnerId?: Hex;\n  },\n): Promise<PreparedLaunchpadTransaction<SellQuote>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  const quoteRecipient = input.quoteRecipient ?? account.address;\n  const partnerId = input.partnerId ?? ZERO_PARTNER_ID;\n\n  const { target, ...quote } = await quoteLaunchpadSell(context, {\n    token: input.token,\n    tokenIn: input.tokenIn,\n  });\n  const minQuoteOut = applySlippageToMinimumOut(quote.netQuoteOut, input.slippage);\n\n  // The curve pulls the launch token from the seller, so the token — not the quote asset — is what\n  // needs the allowance here, and the curve is the spender.\n  await assertLaunchpadCanSpend(context, {\n    asset: input.token,\n    owner: account.address,\n    requiredAmount: input.tokenIn,\n    spender: target.curve,\n  });\n\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: target.curve,\n    abi: bondingCurveAbi,\n    functionName: \"sellExactIn\",\n    args: [input.tokenIn, quoteRecipient, minQuoteOut, input.deadline, partnerId],\n  });\n  return toPreparedLaunchpadTransaction(request, quote, launchpadPreparedContext(context, account));\n}\n\n/** What an ERC-20 approval will grant. */\nexport interface ApprovalPreview {\n  readonly asset: Address;\n  readonly spender: Address;\n  readonly amount: bigint;\n}\n\n/**\n * Prepares an ERC-20 approval.\n *\n * `spender` has no safe default in V2 and is therefore required: trading is pulled by the token's\n * own **curve**, while creation (including the forwarder path) is pulled by the **factory**.\n * Defaulting to either one would silently produce a working approval for one flow and a reverting\n * one for the other.\n */\nexport async function prepareApproveErc20(\n  context: LaunchpadWriteActionContext,\n  input: { readonly asset: Address; readonly spender: Address; readonly amount: bigint },\n): Promise<PreparedLaunchpadTransaction<ApprovalPreview>> {\n  const account = await requireLaunchpadWriteAccount(context);\n  if (input.amount < 0n) throw new RangeError(\"Approval amount must not be negative.\");\n  const { request } = await simulateLaunchpadWrite(context, {\n    account,\n    address: input.asset,\n    abi: erc20Abi,\n    functionName: \"approve\",\n    args: [input.spender, input.amount],\n  });\n  return toPreparedLaunchpadTransaction(\n    request,\n    Object.freeze({ asset: input.asset, spender: input.spender, amount: input.amount }),\n    launchpadPreparedContext(context, account),\n  );\n}\n","import {\n  LaunchpadInvalidAmountError,\n  LaunchpadPartnerError,\n  LaunchpadProtocolConfigurationError,\n  LaunchpadTradeFeeConsumesInputError,\n} from \"../errors\";\n\nconst BPS = 10_000n;\n\nfunction requireBps(value: number): bigint {\n  if (!Number.isSafeInteger(value) || value < 0 || value > 10_000) {\n    throw new LaunchpadProtocolConfigurationError();\n  }\n  return BigInt(value);\n}\n\n/** `BondingCurve._feesFromGross`'s three-way split, in raw quote units. */\nexport interface LaunchpadTradeFeeBreakdown {\n  /** What the trader pays (buy) or the curve gives up before fees (sell). */\n  readonly gross: bigint;\n  /** Curve fee: `curveFeeBps` of `gross`. Always charged, split between platform and creator. */\n  readonly baseFee: bigint;\n  /** Opening snipe tax: `snipeTaxBps` of `gross`. Only ever non-zero on a buy — sells always pass `snipeTaxBps: 0`. Also split between platform and creator. */\n  readonly snipeTax: bigint;\n  /** Creator tax: `creatorTaxBps` of `gross`. 100% the creator's; never split with the platform or a partner. */\n  readonly creatorTax: bigint;\n  /** `baseFee + snipeTax + creatorTax`. */\n  readonly totalFee: bigint;\n  /** `gross - totalFee`: what reaches the curve reserve (buy) or the trader (sell). */\n  readonly net: bigint;\n}\n\n/**\n * `BondingCurve._feesFromGross`.\n *\n * A buy passes the live `currentSnipeTaxBps(tokenRecipient)` (see `math/protection.ts`); a sell\n * always passes `snipeTaxBps: 0` — the contract has no anti-sniper surcharge on the sell side.\n * `curveFeeBps` and `creatorTaxBps` are the curve's own immutable constants, fixed at creation.\n *\n * Throws {@link LaunchpadTradeFeeConsumesInputError} once fees would consume the entire input —\n * the contract's `totalFee >= gross` check, which V3 had no equivalent of (its worst case still\n * left `net = 0` and reverted with a *different* reason, `ZeroNetTrade`; this reverts before ever\n * computing a net amount).\n */\nexport function feesFromGross(input: {\n  readonly gross: bigint;\n  readonly curveFeeBps: number;\n  readonly snipeTaxBps: number;\n  readonly creatorTaxBps: number;\n}): LaunchpadTradeFeeBreakdown {\n  const { gross } = input;\n  if (gross <= 0n) throw new LaunchpadInvalidAmountError();\n\n  const curveFeeBps = requireBps(input.curveFeeBps);\n  const snipeTaxBps = requireBps(input.snipeTaxBps);\n  const creatorTaxBps = requireBps(input.creatorTaxBps);\n\n  const baseFee = (gross * curveFeeBps) / BPS;\n  const snipeTax = (gross * snipeTaxBps) / BPS;\n  const creatorTax = (gross * creatorTaxBps) / BPS;\n  const totalFee = baseFee + snipeTax + creatorTax;\n  if (totalFee >= gross) throw new LaunchpadTradeFeeConsumesInputError(totalFee, gross);\n\n  return Object.freeze({\n    gross,\n    baseFee,\n    snipeTax,\n    creatorTax,\n    totalFee,\n    net: gross - totalFee,\n  });\n}\n\n/** `BondingCurve.FeeAllocation`, plus the pass-through `creatorTax` the event also carries. */\nexport interface LaunchpadFeeAllocation {\n  /** Added to `pendingProtocol`. */\n  readonly platformNet: bigint;\n  /** Added to `pendingCreator` alongside `creatorTax` (the contract sums them into one pending bucket, even though only `creatorTax` also separately accrues to `pendingCreatorTax`). */\n  readonly creatorImmediate: bigint;\n  /** Carve-out of `creatorImmediate`'s pre-split gross, added to `pendingBuyback` instead of `pendingCreator` when the launch has buyback enabled. */\n  readonly buybackBudget: bigint;\n  /** Added to `pendingPartner[partnerId]`. Zero when no partner is attributed or the attributed partner is disabled. */\n  readonly partnerFee: bigint;\n  /** Passed through unchanged from {@link feesFromGross}; 100% creator's, never split. */\n  readonly creatorTax: bigint;\n}\n\n/**\n * `BondingCurve._allocateFees`.\n *\n * The one detail easy to get wrong from the percentages alone: **`partnerFee` is cut only from\n * `baseFee`'s platform share, never from `snipeTax`'s.** The contract computes\n * `basePlatformGross` and `snipePlatformGross` separately, sums them into `platformGross`, but then\n * takes the partner's cut from `basePlatformGross` alone — so a partner's effective share of the\n * *combined* platform take shrinks whenever the snipe tax is non-zero, rather than staying a fixed\n * fraction of it.\n *\n * `creatorTax` never enters this split at all: it bypasses `protocolFeeShareBps` and\n * `buybackBurnBps` entirely and is added to `creatorImmediate` as a flat pass-through, matching the\n * contract's `pendingCreator += allocation.creatorImmediate + creatorTax`.\n *\n * Throws {@link LaunchpadPartnerError} for `partnerShareBps > maxPartnerShareOfPlatformBps` — the\n * contract's `PartnerShareTooHigh`. This is a governance-drift guard, not a per-trade one: it fires\n * only if `PartnerRegistry.partnerPolicy()`'s cap was lowered after a partner's own share was set\n * above the new cap, since `createPartner`/`setPartnerShare` already enforce the cap at write time.\n */\nexport function allocateLaunchpadFees(input: {\n  readonly baseFee: bigint;\n  readonly snipeTax: bigint;\n  readonly creatorTax: bigint;\n  readonly protocolFeeShareBps: number;\n  readonly partnerShareBps: number;\n  readonly maxPartnerShareOfPlatformBps: number;\n  readonly buybackEnabled: boolean;\n  readonly buybackBurnBps: number;\n}): LaunchpadFeeAllocation {\n  if (input.baseFee < 0n || input.snipeTax < 0n || input.creatorTax < 0n) {\n    throw new LaunchpadInvalidAmountError();\n  }\n  const protocolFeeShareBps = requireBps(input.protocolFeeShareBps);\n  const partnerShareBps = requireBps(input.partnerShareBps);\n  const maxPartnerShareOfPlatformBps = requireBps(input.maxPartnerShareOfPlatformBps);\n  const buybackBurnBps = requireBps(input.buybackBurnBps);\n\n  if (partnerShareBps > maxPartnerShareOfPlatformBps) {\n    throw new LaunchpadPartnerError(\n      `Partner share ${input.partnerShareBps}bps exceeds the current policy maximum of ${input.maxPartnerShareOfPlatformBps}bps.`,\n    );\n  }\n\n  const basePlatformGross = (input.baseFee * protocolFeeShareBps) / BPS;\n  const snipePlatformGross = (input.snipeTax * protocolFeeShareBps) / BPS;\n  const platformGross = basePlatformGross + snipePlatformGross;\n  const creatorGross = input.baseFee - basePlatformGross + (input.snipeTax - snipePlatformGross);\n\n  // Partner fee is cut from `basePlatformGross` only — see the doc comment above.\n  const partnerFee = (basePlatformGross * partnerShareBps) / BPS;\n  const platformNet = platformGross - partnerFee;\n  const buybackBudget = input.buybackEnabled ? (creatorGross * buybackBurnBps) / BPS : 0n;\n  const creatorImmediate = creatorGross - buybackBudget;\n\n  return Object.freeze({\n    platformNet,\n    creatorImmediate,\n    buybackBudget,\n    partnerFee,\n    creatorTax: input.creatorTax,\n  });\n}\n","import {\n  LaunchpadInsufficientQuoteReserveError,\n  LaunchpadInvalidAmountError,\n  LaunchpadSlippageError,\n  LaunchpadTradeFeeConsumesInputError,\n} from \"../errors\";\nimport {\n  curveGetAmountIn,\n  curveGetAmountOut,\n  curvePricingReserves,\n  curveQuoteSellGross,\n  type LaunchpadCurveMathState,\n  launchpadSellableTokens,\n} from \"./curve\";\nimport { feesFromGross, type LaunchpadTradeFeeBreakdown } from \"./fee\";\n\nconst BPS = 10_000n;\n\nfunction ceilDiv(numerator: bigint, denominator: bigint): bigint {\n  const quotient = numerator / denominator;\n  return numerator % denominator === 0n ? quotient : quotient + 1n;\n}\n\n/** The curve's own immutable fee constants, needed on every trade quote. */\nexport interface LaunchpadCurveFeeConfig {\n  readonly curveFeeBps: number;\n  readonly creatorTaxBps: number;\n}\n\n/** Full local reproduction of `BondingCurve._buyExactIn`'s pricing and fee math. */\nexport interface LaunchpadBuySimulation {\n  /** Tokens the trade actually receives; equals {@link launchpadSellableTokens} when {@link isPartialFill}. */\n  readonly tokenOut: bigint;\n  /**\n   * Gross quote actually spent — at most `quoteInRaw`, and usually strictly less when\n   * {@link isPartialFill}. Not *always* less: RC2 clamps the boundary spend to the offer, so an\n   * offer that exactly covers the final fill spends all of it and refunds nothing.\n   */\n  readonly quoteSpent: bigint;\n  /** `quoteInRaw - quoteSpent`. The contract refunds this atomically in the same transaction. */\n  readonly refund: bigint;\n  /** Fees computed against `quoteSpent` (not the original `quoteInRaw`) — the contract recomputes them at the boundary rather than pro-rating the original quote. */\n  readonly fees: LaunchpadTradeFeeBreakdown;\n  /**\n   * True once the buy would have bought more than {@link launchpadSellableTokens} and was truncated\n   * to it.\n   *\n   * Under RC2 this also predicts a lifecycle change: taking the whole sellable supply empties the\n   * curve, so the curve calls back into the factory and graduates the launch **in this same\n   * transaction**. A caller that shows post-trade state should re-read the graduation status after\n   * a partial fill rather than assuming the launch is still trading.\n   */\n  readonly isPartialFill: boolean;\n}\n\n/**\n * `BondingCurve._buyExactIn`'s pricing and fee logic, minus the parts that are not pricing at all:\n * `_requireTradingOpen`'s gates (deadline, `graduated`, token/tax-exemption initialization),\n * `tokenRecipient` validity, and the actual asset transfers. Those stay the action layer's job.\n *\n * `snipeTaxBps` must be the caller's own `currentSnipeTaxBps(tokenRecipient)` from\n * `math/protection.ts` — this function does not compute it, because doing so here would require\n * threading `tokenRecipient` and `now` through a \"pricing\" function that otherwise depends on\n * nothing but curve state and fee constants.\n *\n * Throws {@link LaunchpadSlippageError} for both the ordinary and the partial-fill minimum-output\n * checks, {@link LaunchpadTradeFeeConsumesInputError} when fees would consume the entire input (in\n * the partial-fill branch this mirrors the contract's own `TradeFeeConsumesInput(quoteInRaw,\n * quoteInRaw)` — both revert arguments are the original gross, not any intermediate total fee, which\n * looks like a copy-paste of the non-boundary revert but is what the deployed contract actually\n * does), and {@link LaunchpadInvalidAmountError} for a zero result.\n */\nexport function simulateLaunchpadBuyExactIn(\n  state: LaunchpadCurveMathState,\n  feeConfig: LaunchpadCurveFeeConfig,\n  input: {\n    readonly quoteInRaw: bigint;\n    readonly snipeTaxBps: number;\n    readonly minTokenOut: bigint;\n  },\n): LaunchpadBuySimulation {\n  if (input.quoteInRaw <= 0n) throw new LaunchpadInvalidAmountError();\n\n  let fees = feesFromGross({\n    gross: input.quoteInRaw,\n    curveFeeBps: feeConfig.curveFeeBps,\n    snipeTaxBps: input.snipeTaxBps,\n    creatorTaxBps: feeConfig.creatorTaxBps,\n  });\n  const { quoteReserve, tokenReserve } = curvePricingReserves(state);\n  const available = launchpadSellableTokens(state);\n\n  let tokenOut = curveGetAmountOut(fees.net, quoteReserve, tokenReserve);\n  let quoteSpent = input.quoteInRaw;\n  let isPartialFill = false;\n\n  if (tokenOut >= available) {\n    tokenOut = available;\n    isPartialFill = true;\n\n    const requiredNet = curveGetAmountIn(tokenOut, quoteReserve, tokenReserve);\n    const totalFeeBpsSum =\n      BigInt(feeConfig.curveFeeBps) + BigInt(input.snipeTaxBps) + BigInt(feeConfig.creatorTaxBps);\n    if (totalFeeBpsSum >= BPS) {\n      throw new LaunchpadTradeFeeConsumesInputError(input.quoteInRaw, input.quoteInRaw);\n    }\n    // RC2 clamps rather than reverting. The ceiling division can land one unit above `quoteInRaw`\n    // even though the trader's input was sufficient to clear the boundary — RC1 rejected that with\n    // `InvalidAmount`, failing the very last buy of a curve on a rounding artefact. RC2 takes the\n    // minimum instead, charging the trader no more than they offered.\n    quoteSpent = ceilDiv(requiredNet * BPS, BPS - totalFeeBpsSum);\n    if (quoteSpent > input.quoteInRaw) quoteSpent = input.quoteInRaw;\n\n    fees = feesFromGross({\n      gross: quoteSpent,\n      curveFeeBps: feeConfig.curveFeeBps,\n      snipeTaxBps: input.snipeTaxBps,\n      creatorTaxBps: feeConfig.creatorTaxBps,\n    });\n    // Ceiling, matching RC2's `Math.Rounding.Ceil` — the minimum the trader accepts scales down\n    // with the smaller amount actually spent, but rounds in the trader's favour rather than the\n    // curve's. (RC1 floored here.)\n    //\n    // Worth surfacing to callers rather than hiding: this still weakens the slippage guard in\n    // proportion to the refund. Offering roughly twice what the final fill needs halves the\n    // effective minimum, and past about that point no `minTokenOut` a trader could physically ask\n    // for (not even the entire token supply) can bind at all. A UI that wants a real floor on the\n    // last buy of a curve should quote the fill first and offer close to it, not offer a large\n    // round number and rely on `minTokenOut`.\n    const scaledMinimum = ceilDiv(input.minTokenOut * quoteSpent, input.quoteInRaw);\n    if (tokenOut < scaledMinimum) throw new LaunchpadSlippageError();\n  } else if (tokenOut < input.minTokenOut) {\n    throw new LaunchpadSlippageError();\n  }\n  if (tokenOut === 0n) throw new LaunchpadInvalidAmountError();\n\n  return Object.freeze({\n    tokenOut,\n    quoteSpent,\n    refund: input.quoteInRaw - quoteSpent,\n    fees,\n    isPartialFill,\n  });\n}\n\n/** Full local reproduction of `BondingCurve._sellExactIn`'s pricing and fee math. */\nexport interface LaunchpadSellSimulation {\n  /** Quote before fees — `getAmountOut(tokenIn, tokenReserve, quoteReserve)`. */\n  readonly grossQuoteOut: bigint;\n  /** Net quote the trader receives: `grossQuoteOut` minus fees. */\n  readonly quoteOut: bigint;\n  readonly fees: LaunchpadTradeFeeBreakdown;\n}\n\n/**\n * `BondingCurve._sellExactIn`'s pricing and fee logic, minus `_requireTradingOpen`'s gates and the\n * actual transfers — same split of responsibility as {@link simulateLaunchpadBuyExactIn}.\n *\n * A sell always prices with `snipeTaxBps: 0` — there is no anti-sniper surcharge on the sell side —\n * so unlike the buy direction this never needs a caller-supplied snipe tax rate.\n *\n * Throws {@link LaunchpadSlippageError} below `minQuoteOutRaw`, and\n * {@link LaunchpadInsufficientQuoteReserveError} when the payout would exceed the curve's real\n * (non-phantom) quote reserve — a case a naive constant-product calculation alone would not catch,\n * because `phantomQuote` inflates `quoteReserve` beyond what the curve can actually pay out.\n */\nexport function simulateLaunchpadSellExactIn(\n  state: LaunchpadCurveMathState,\n  feeConfig: LaunchpadCurveFeeConfig,\n  input: {\n    readonly tokenIn: bigint;\n    readonly minQuoteOutRaw: bigint;\n  },\n): LaunchpadSellSimulation {\n  if (input.tokenIn <= 0n) throw new LaunchpadInvalidAmountError();\n\n  const grossQuoteOut = curveQuoteSellGross(state, input.tokenIn);\n  const fees = feesFromGross({\n    gross: grossQuoteOut,\n    curveFeeBps: feeConfig.curveFeeBps,\n    snipeTaxBps: 0,\n    creatorTaxBps: feeConfig.creatorTaxBps,\n  });\n  const quoteOut = fees.net;\n  if (quoteOut < input.minQuoteOutRaw) throw new LaunchpadSlippageError();\n\n  const availableQuote = state.trackedQuote - state.quoteFeeBalance - state.creatorTaxBalance;\n  if (quoteOut > availableQuote) {\n    throw new LaunchpadInsufficientQuoteReserveError(availableQuote, quoteOut);\n  }\n\n  return Object.freeze({ grossQuoteOut, quoteOut, fees });\n}\n","import type { Slippage } from \"../types\";\n\n/** The basis-point denominator. Not exported: kept local, like every Solidity contract's own `BPS`. */\nconst BPS = 10_000;\n\n/** Hard ceiling on caller-supplied slippage. Anything above this is rejected outright. */\nexport const MAX_SLIPPAGE_BPS = 5_000;\n\n/** Default deadline horizon: ten minutes from the reference chain time. */\nexport const DEFAULT_DEADLINE_SECONDS = 600n;\n\nexport class InvalidSlippageError extends Error {\n  readonly bps: number;\n\n  constructor(bps: number, message: string) {\n    super(message);\n    this.name = \"InvalidSlippageError\";\n    this.bps = bps;\n  }\n}\n\nexport class InvalidDeadlineError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"InvalidDeadlineError\";\n  }\n}\n\n/** Validates a slippage tolerance against the 0..50% range. */\nexport function assertSlippage(slippage: Slippage): number {\n  const { bps } = slippage;\n  if (!Number.isSafeInteger(bps)) {\n    throw new InvalidSlippageError(bps, \"Slippage bps must be an integer.\");\n  }\n  if (bps < 0) {\n    throw new InvalidSlippageError(bps, \"Slippage bps must not be negative.\");\n  }\n  if (bps > MAX_SLIPPAGE_BPS) {\n    throw new InvalidSlippageError(\n      bps,\n      `Slippage bps must not exceed ${MAX_SLIPPAGE_BPS} (${MAX_SLIPPAGE_BPS / 100}%).`,\n    );\n  }\n  return bps;\n}\n\n/**\n * Applies slippage to a quoted output, rounding **down** so the on-chain minimum is never more\n * optimistic than the quote. Rejects a zero expected output, because a zero `minOut` would\n * disable the contract's own slippage guard.\n */\nexport function applySlippageToMinimumOut(expectedOut: bigint, slippage: Slippage): bigint {\n  const bps = assertSlippage(slippage);\n  if (expectedOut <= 0n) {\n    throw new InvalidSlippageError(\n      bps,\n      \"Cannot derive a minimum output from a zero or negative quote.\",\n    );\n  }\n  // Floor division: (expected * (10000 - bps)) / 10000.\n  const minimumOut = (expectedOut * BigInt(BPS - bps)) / BigInt(BPS);\n  if (minimumOut <= 0n) {\n    throw new InvalidSlippageError(\n      bps,\n      \"Slippage tolerance reduces the minimum output to zero; lower the tolerance or raise the amount.\",\n    );\n  }\n  return minimumOut;\n}\n\n/**\n * Applies slippage to a quoted **input**, rounding **up**, producing the `quoteInMax` ceiling for\n * an exact-output buy.\n *\n * The mirror image of {@link applySlippageToMinimumOut}, and the reason the factory can express a \"Max\n * Sold\" control at all: `QuoteLaunchFactoryV3.buy` takes `quoteInMax` alongside `minTokenOut`, so\n * the trader names the tokens they want and caps what they will pay for them. Rounding up here is\n * what makes the cap a real tolerance rather than a quote that reverts on the first wei of curve\n * movement.\n */\nexport function applySlippageToMaximumIn(expectedIn: bigint, slippage: Slippage): bigint {\n  const bps = assertSlippage(slippage);\n  if (expectedIn <= 0n) {\n    throw new InvalidSlippageError(\n      bps,\n      \"Cannot derive a maximum input from a zero or negative quote.\",\n    );\n  }\n  return mulDivUp(expectedIn, BigInt(BPS + bps), BigInt(BPS));\n}\n\n/**\n * Builds a transaction deadline from a reference chain timestamp. The reference must come from a\n * block, not the client clock, because the factory compares against `block.timestamp`.\n */\nexport function toDeadline(\n  referenceTimestamp: bigint,\n  seconds: bigint = DEFAULT_DEADLINE_SECONDS,\n): bigint {\n  if (referenceTimestamp <= 0n) {\n    throw new InvalidDeadlineError(\"Reference timestamp must be a positive bigint.\");\n  }\n  if (seconds <= 0n) {\n    throw new InvalidDeadlineError(\"Deadline horizon must be a positive number of seconds.\");\n  }\n  return referenceTimestamp + seconds;\n}\n\n/** Rounds up `x * y / denominator`. */\nexport function mulDivUp(x: bigint, y: bigint, denominator: bigint): bigint {\n  if (denominator <= 0n) {\n    throw new RangeError(\"mulDivUp denominator must be positive.\");\n  }\n  const product = x * y;\n  const result = product / denominator;\n  return product % denominator === 0n ? result : result + 1n;\n}\n","import { type Address, getAddress, isAddress, isAddressEqual, zeroAddress } from \"viem\";\n\nimport { defineLaunchpadDeployment } from \"./deployment\";\nimport type {\n  LaunchpadCapability,\n  LaunchpadChainConfig,\n  LaunchpadQuoteTokenConfig,\n  LaunchpadTokenId,\n} from \"./types\";\n\nexport class InvalidLaunchpadChainConfigError extends Error {\n  readonly field: string;\n\n  constructor(field: string, message: string) {\n    super(message);\n    this.name = \"InvalidLaunchpadChainConfigError\";\n    this.field = field;\n  }\n}\n\nfunction invalid(field: string, message: string): never {\n  throw new InvalidLaunchpadChainConfigError(field, message);\n}\n\nfunction normalizeAddress(field: string, address: Address): Address {\n  if (!isAddress(address) || isAddressEqual(address, zeroAddress)) {\n    return invalid(field, `${field} must be a non-zero EVM address.`);\n  }\n  return getAddress(address);\n}\n\nfunction normalizeUrl(field: string, value: string): string {\n  try {\n    const url = new URL(value);\n    if (url.protocol !== \"https:\" && url.protocol !== \"wss:\") {\n      return invalid(field, `${field} must use HTTPS or WSS.`);\n    }\n    return url.toString().replace(/\\/$/, \"\");\n  } catch {\n    return invalid(field, `${field} must be an absolute URL.`);\n  }\n}\n\nfunction normalizeQuoteToken(\n  input: LaunchpadQuoteTokenConfig,\n  index: number,\n): LaunchpadQuoteTokenConfig {\n  const field = `quoteTokens[${index}]`;\n  if (!Number.isSafeInteger(input.decimals) || input.decimals < 0 || input.decimals > 255) {\n    invalid(`${field}.decimals`, \"Quote token decimals must be an integer between 0 and 255.\");\n  }\n  if (input.symbol.trim().length === 0) {\n    invalid(`${field}.symbol`, \"Quote token symbol must not be empty.\");\n  }\n  return Object.freeze({ ...input, address: normalizeAddress(`${field}.address`, input.address) });\n}\n\nconst capabilities: readonly LaunchpadCapability[] = [\n  \"create\",\n  \"bondingTrade\",\n  \"partnerAttribution\",\n];\n\n/** Validates, normalizes, and freezes a caller-supplied chain configuration. */\nexport function defineLaunchpadChain(input: LaunchpadChainConfig): Readonly<LaunchpadChainConfig> {\n  if (!Number.isSafeInteger(input.chainId) || input.chainId <= 0) {\n    invalid(\"chainId\", \"chainId must be a positive safe integer.\");\n  }\n  if (!/^[a-z0-9-]+$/.test(input.slug)) {\n    invalid(\"slug\", \"slug must be lowercase and contain only letters, numbers, and hyphens.\");\n  }\n  if (input.deployment.chainId !== input.chainId) {\n    invalid(\n      \"deployment.chainId\",\n      `deployment.chainId (${input.deployment.chainId}) must match the chain's chainId (${input.chainId}).`,\n    );\n  }\n  if (!Number.isSafeInteger(input.nativeCurrency.decimals) || input.nativeCurrency.decimals < 0) {\n    invalid(\"nativeCurrency.decimals\", \"Native currency decimals must be a non-negative integer.\");\n  }\n  if (input.nativeCurrency.symbol.trim().length === 0) {\n    invalid(\"nativeCurrency.symbol\", \"Native currency symbol must not be empty.\");\n  }\n  if (input.rpcUrls.length === 0) {\n    invalid(\"rpcUrls\", \"At least one RPC URL is required.\");\n  }\n  if (!Number.isSafeInteger(input.confirmations) || input.confirmations < 0) {\n    invalid(\"confirmations\", \"confirmations must be a non-negative safe integer.\");\n  }\n\n  const quoteTokens = input.quoteTokens.map(normalizeQuoteToken);\n  const quoteAddresses = new Set(quoteTokens.map((token) => token.address.toLowerCase()));\n  if (quoteAddresses.size !== quoteTokens.length) {\n    invalid(\"quoteTokens\", \"Quote token addresses must be unique for a chain.\");\n  }\n\n  // V2 factories support several quote tokens at once, so this no longer pins the config to a\n  // single currency the way V3's immutable `quoteToken` did. What still has to hold is that every\n  // currency offered here is one the deployment actually knows: a `decimals` that disagrees with\n  // the deployment record silently rescales every amount the UI formats, and an address the factory\n  // has no economics for cannot be launched or traded against at all.\n  for (const quoteToken of input.quoteTokens) {\n    const known = input.deployment.economics.quoteTokens.find(\n      (candidate) => candidate.address.toLowerCase() === quoteToken.address.toLowerCase(),\n    );\n    if (!known) {\n      invalid(\n        \"quoteTokens\",\n        `quoteTokens includes ${quoteToken.address}, which is not one of the deployment's configured quote tokens.`,\n      );\n    }\n    if (known.decimals !== quoteToken.decimals) {\n      invalid(\n        \"quoteTokens\",\n        `quoteTokens declares ${quoteToken.decimals} decimals for ${quoteToken.address} but the deployment records ${known.decimals}.`,\n      );\n    }\n  }\n\n  for (const capability of capabilities) {\n    if (typeof input.capabilities[capability] !== \"boolean\") {\n      invalid(\n        `capabilities.${capability}`,\n        \"Every Launchpad capability must be declared as a boolean.\",\n      );\n    }\n  }\n\n  return Object.freeze({\n    ...input,\n    apiBaseUrl: normalizeUrl(\"apiBaseUrl\", input.apiBaseUrl),\n    capabilities: Object.freeze({ ...input.capabilities }),\n    // Validation and freezing are delegated to the deployment's own definer rather than\n    // duplicated here, so a chain config can never carry an under-validated deployment.\n    deployment: defineLaunchpadDeployment(input.deployment),\n    explorerUrl: normalizeUrl(\"explorerUrl\", input.explorerUrl),\n    nativeCurrency: Object.freeze({ ...input.nativeCurrency }),\n    quoteTokens: Object.freeze(quoteTokens),\n    realtimeUrl: normalizeUrl(\"realtimeUrl\", input.realtimeUrl),\n    rpcUrls: Object.freeze(\n      input.rpcUrls.map((url, index) => normalizeUrl(`rpcUrls[${index}]`, url)),\n    ),\n  });\n}\n\n/** Normalizes an EVM token address while preserving its chain-scoped identity. */\nexport function defineLaunchpadTokenId(input: LaunchpadTokenId): Readonly<LaunchpadTokenId> {\n  if (!Number.isSafeInteger(input.chainId) || input.chainId <= 0) {\n    invalid(\"chainId\", \"chainId must be a positive safe integer.\");\n  }\n  return Object.freeze({\n    chainId: input.chainId,\n    address: normalizeAddress(\"address\", input.address),\n  });\n}\n","import { defineLaunchpadChain } from \"./chains\";\nimport { MissingChainError, requireWalletClient, resolveChainValue } from \"./core\";\nimport type {\n  LaunchpadChainConfig,\n  LaunchpadClient,\n  LaunchpadClientConfig,\n  LaunchpadContractAdapter,\n  LaunchpadReadRequest,\n  LaunchpadWriteRequest,\n} from \"./types\";\n\n/** Creates a chain-scoped, ABI-neutral Launchpad client around caller-provided adapters. */\nexport function createLaunchpadClient(config: LaunchpadClientConfig): LaunchpadClient {\n  const chains = Object.freeze(\n    Object.fromEntries(\n      Object.entries(config.chains).map(([chainId, chain]) => [\n        chainId,\n        defineLaunchpadChain(chain),\n      ]),\n    ),\n  );\n  const resolveChain = (chainId?: number): LaunchpadChainConfig => {\n    const resolvedChainId = chainId ?? config.publicClient.chain?.id;\n    if (resolvedChainId === undefined) throw new MissingChainError();\n    const chain = resolveChainValue(chains, resolvedChainId);\n    if (chain.chainId !== resolvedChainId) {\n      throw new TypeError(\n        `Launchpad chain ${chain.chainId} does not match registry chain ${resolvedChainId}.`,\n      );\n    }\n    return chain;\n  };\n  const resolveAdapter = (chainId?: number): LaunchpadContractAdapter => {\n    const chain = resolveChain(chainId);\n    return resolveChainValue(config.adapters ?? {}, chain.chainId);\n  };\n\n  return Object.freeze({\n    publicClient: config.publicClient,\n    walletClient: config.walletClient,\n    getChain: resolveChain,\n    getAdapter: resolveAdapter,\n    read: <Result>(request: LaunchpadReadRequest, chainId?: number) => {\n      const chain = resolveChain(chainId);\n      return resolveAdapter(chain.chainId).read<Result>(\n        { chain, publicClient: config.publicClient },\n        request,\n      );\n    },\n    write: <Result>(request: LaunchpadWriteRequest, chainId?: number) => {\n      const chain = resolveChain(chainId);\n      if (!chain.capabilities[request.requiredCapability]) {\n        throw new UnsupportedLaunchpadCapabilityError(chain.chainId, request.requiredCapability);\n      }\n      return resolveAdapter(chain.chainId).write<Result>(\n        {\n          chain,\n          publicClient: config.publicClient,\n          walletClient: requireWalletClient(config.walletClient),\n        },\n        request,\n      );\n    },\n  });\n}\n\nexport class UnsupportedLaunchpadCapabilityError extends Error {\n  readonly chainId: number;\n  readonly capability: LaunchpadWriteRequest[\"requiredCapability\"];\n\n  constructor(chainId: number, capability: LaunchpadWriteRequest[\"requiredCapability\"]) {\n    super(`Launchpad capability ${capability} is not supported on chain ${chainId}.`);\n    this.name = \"UnsupportedLaunchpadCapabilityError\";\n    this.chainId = chainId;\n    this.capability = capability;\n  }\n}\n","import { defineLaunchpadDeployment, type LaunchpadDeployment } from \"../deployment\";\n\n/** Arc Mainnet chain id. */\nexport const arcMainnetChainId = 5_042;\n\n/**\n * Arc Mainnet **Production V2** deployment, `arc-mainnet-v1` (core deployed at block 19588932).\n *\n * Built from the same sources as `arc-testnet-rc2`, which is checked rather than assumed: the two\n * factories have byte-identical runtime code apart from seven immutable slots holding their\n * respective `feeEscrow` and `partnerRegistry` addresses — 140 bytes out of 22,632. The generated\n * ABIs therefore apply unchanged, and `MemeHook.partnerLaunchInputSettled`, the getter RC2 added,\n * answers here too.\n *\n * **Live.** Public launch is open (`factory.launchEnabled() == true`) and the operators have run a\n * create-with-initial-buy, a buy and a sell against it; the end-to-end graduation path has not been\n * exercised. Every value below was read live from `https://rpc.arc-scan.org` rather than transcribed\n * from a manifest.\n *\n * On 2026-09-08 the deployment rotated onto the Holder-aware forwarder and bound a holder\n * distributor factory to it, so the last structural difference from the testnet is gone. One\n * difference remains and it matters before switching an integration over: **USDC is the only quote\n * token.** tUSDG is a testnet faucet token and does not exist here, so an integration that\n * hard-codes it has no tradable asset. USDC is an Arc system precompile, which is also why this\n * deployment cannot be exercised on a local fork.\n */\nexport const arcMainnetLaunchpadDeployment: Readonly<LaunchpadDeployment> =\n  defineLaunchpadDeployment({\n    chainId: arcMainnetChainId,\n    contractVersion: \"production-v2-arc-mainnet-v1\",\n    contracts: {\n      factory: \"0x7E462d220b6b0a4c55B205B613133dc1C1Cc9dC1\",\n      launchDeployer: \"0xfC15d28188dF2a9dFCdc1031fF5e4A79dEE8547e\",\n      // Rotated on 2026-09-08 (block 19798757) from 0x9C87E4…dFF7 to the Holder-aware forwarder,\n      // which serves both ordinary `launchAndBuy` and `launchWithHolderFeeSharing`. The factory and\n      // the distributor factory were switched over together; a one-sided rotation would leave one\n      // of the two creation paths reverting, which is why `verifyLaunchpadDeployment` checks both.\n      launchForwarder: \"0x7b9720bC177e8B6F96962e9b15891f27108cAd40\",\n      legacyLaunchForwarder: \"0x9C87E4bf9720b7e40DeD02D23193F75Cb3E6dFF7\",\n      // Lives in the separately maintained Holder Distributor project; the SDK binds only to the\n      // `IHolderDistributorFactory` adapter surface. Deployed at block 19792910, well after the\n      // core bundle, so it is outside the `deploymentBlock` range below.\n      holderDistributorFactory: \"0x14177a906578CD3A5535d892D2929CF73097c547\",\n      partnerRegistry: \"0x65ED91aaC042496be1A0527949fe216c1Df362C5\",\n      feeEscrow: \"0x29Ad26C48267B791DC2f6A2D4f3Fd819E6301540\",\n      buybackVault: \"0x139271e6694B4047949cDD0D4343d116dc732113\",\n      memeHook: \"0x173c4Bdd5CF95A935D2B5636C573C5F4DF062044\",\n      graduationCoordinator: \"0xD25E4bdABb03437e430a31d9bFef547096a3E596\",\n      graduationExecutor: \"0xBB5a660EC97548d9D83d938805F908f9d9d3a4d3\",\n      launchLocker: \"0x901f99bcb789AB929Fa7d580970A04dC555F7e13\",\n      emergencyDistributorFactory: \"0xde1af9c099406A65bc8de967998C29fbe93eB4Cb\",\n      orphanedAssetsVault: \"0x1958553B580aF77F664f43eE062c5D33bc9357a9\",\n      v4PoolManager: \"0x8366a39CC670B4001A1121B8F6A443A643e40951\",\n      v4PositionManager: \"0x6049c9a0e26405C0985f9E3685C87d0aE917f82B\",\n      // The canonical cross-chain Permit2, unlike the testnet's own deployment of it. Read back\n      // from `positionManager.permit2()`.\n      permit2: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n    },\n    economics: {\n      // `factory.approvedQuoteTokens` / `quoteTokenEconomics`, read live. USDC only — the same Arc\n      // system precompile address the testnet uses, with the same curve economics.\n      quoteTokens: [\n        {\n          address: \"0x3600000000000000000000000000000000000000\",\n          symbol: \"USDC\",\n          decimals: 6,\n          phantomQuote: 2_500_000_000n,\n          graduationThreshold: 10_000_000_000n,\n          approved: true,\n        },\n      ],\n      launchConfigs: [\n        {\n          id: 0n,\n          supply: 1_000_000_000n * 10n ** 18n,\n          curveFeeBps: 100n,\n          poolFee: 0,\n          tickSpacing: 200,\n          enabled: true,\n        },\n      ],\n      // Identical to the testnet's apart from the recipient, which is this deployment's own owner.\n      feePolicy: {\n        protocolFeeRecipient: \"0x55985f48C8642A531Fc3c5F2d3daA95A10018112\",\n        protocolFeeShareBps: 3_000,\n        buybackBurnBps: 5_000,\n        hookFeeBps: 100,\n        maxInternalPriceImpactBps: 300,\n      },\n      partnerPolicy: {\n        defaultPartnerShareOfPlatformBps: 2_000,\n        maxPartnerShareOfPlatformBps: 3_000,\n      },\n      snipeTax: {\n        startBps: 9_900,\n        durationSeconds: 3,\n      },\n      launchFeeRaw: 0n,\n      launchFeeToken: \"0x3600000000000000000000000000000000000000\",\n      maxCreatorInitialBuyBps: 10_000,\n      maxCreatorTaxBps: 1_000,\n    },\n    // Found by bisecting `eth_getCode` against the factory: first present at 19588932, absent at\n    // 19588931.\n    deploymentBlock: 19_588_932n,\n    artifactCommit: \"a53d2e4eeccd95f14083b664c11f149dcf332e3e\",\n    // The manifest's own `sourceCommit`. It is two commits ahead of `artifactCommit`, but the\n    // diff between them touches only Foundry deployment scripts — no `.sol` under contracts — so\n    // the bundled ABIs still describe this bytecode exactly.\n    sourceCommit: \"b2dfb1dd0efbfb31e81b6c17e9748771fab42d7e\",\n    factoryRuntimeCodeHash: \"0x808a5efa2fce37f4836c38b0fb444c593515c3f9d7c7bca76fd3758abfcad4fc\",\n  });\n","import { defineLaunchpadDeployment, type LaunchpadDeployment } from \"../deployment\";\n\n/** Arc Testnet chain id. Testnet-only; never treated as a production default. */\nexport const arcTestnetChainId = 5_042_002;\n\n/**\n * Explicitly named Arc Testnet **Production V2** deployment, `arc-testnet-rc2` (deployed\n * 2026-09-05, public launch enabled in the same rollout, forwarder rotated 2026-09-07).\n *\n * This is a development configuration, not a production default: it is deliberately excluded from\n * `launchpadDeploymentRegistry`, and consumers must opt in by name. Callers should still run\n * `verifyLaunchpadDeployment` and allow environment overrides rather than trusting these addresses\n * outright — the contract repository redeploys this environment freely.\n *\n * **RC2 replaces RC1 wholesale.** Every contract was redeployed, tUSDG included, so no RC1 address\n * survives and no RC1 launch, curve, pool, partner ledger or escrow balance carries over. State\n * from the two deployments must never be merged; key anything you persist by\n * {@link LaunchpadDeployment.contractVersion}. The economics are unchanged from RC1 — same phantom\n * quote, graduation threshold, supply, fee policy and snipe tax — so a diff of this file is almost\n * entirely addresses. The behavioural changes RC2 does carry (the forwarder now pulls funds itself,\n * graduation can complete automatically inside a buy, and pool fee sweeps settle partially) are\n * implemented in the actions rather than here; see\n * `docs/ai/launchpad-production-v2-migration-gaps.md`.\n *\n * Addresses come from\n * `contracts/production/release/arc-testnet-rc2/deployment-manifest.json`. The runtime code hash and\n * deployment block were read live against `https://rpc.testnet.arc.io` rather than transcribed: the\n * manifest publishes neither, and the block was found by bisecting `eth_getCode` against the factory\n * (first present at `60614952`, absent at `60614951`).\n */\nexport const arcTestnetLaunchpadDeployment: Readonly<LaunchpadDeployment> =\n  defineLaunchpadDeployment({\n    chainId: arcTestnetChainId,\n    contractVersion: \"production-v2-arc-testnet-rc2\",\n    // Slot names track `deployment-manifest.json`'s `addresses` object key for key, except the two\n    // Holder Fee Sharing slots, which the manifest keeps under `holderDistributorIntegration`.\n    contracts: {\n      factory: \"0xd60804941f49270C74F4C7E8686e288723360A75\",\n      launchDeployer: \"0xDaAc5712f0F132646E74B279FF76AbBD8C4fc48e\",\n      // Rotated on 2026-09-07 (block 60842375) from 0xaAD3bC…a8a8 to the Holder-aware forwarder,\n      // which serves both ordinary `launchAndBuy` and `launchWithHolderFeeSharing`. The factory and\n      // the distributor factory were switched over together; a one-sided rotation would leave one\n      // of the two creation paths reverting, which is why `verifyLaunchpadDeployment` checks both.\n      launchForwarder: \"0xEfFef0A2059E0B61b9253403AfB43a414F0994A9\",\n      legacyLaunchForwarder: \"0xaAD3bC8F0ED5388834b3858e892FAe9a12e1a8a8\",\n      // Lives in the separately maintained Holder Distributor project; the SDK binds only to the\n      // `IHolderDistributorFactory` adapter surface.\n      holderDistributorFactory: \"0x091452d669652828a76A89c9b16c9CA282eb188F\",\n      partnerRegistry: \"0xcbAEf9E31D5be62CD084CC41EE20388D3f712A01\",\n      feeEscrow: \"0x305bf6885Ba7D1a9Ac9Fbc4F7e7b687F559761d4\",\n      buybackVault: \"0xAA5Df9a50F3eBc600b734e61427236088d961EEB\",\n      memeHook: \"0x0aB71ad97c1304CfbDb0CC99eBCC2f8B98Aae044\",\n      graduationCoordinator: \"0x29C0eCc2eBb025A0bBcB053D8Be9763b92765a64\",\n      graduationExecutor: \"0x1683870359014f1c2F82122fC8243D73f405152D\",\n      launchLocker: \"0xD0412aFEeD1466173D545Ea64b6F699EF2964F4f\",\n      emergencyDistributorFactory: \"0x1A93Ab1396F02AfD9467B3bB94CcdE87364D94A0\",\n      // RC2's new terminal sink for assets no emergency distributor can pay out. The manifest\n      // publishes it twice, as `orphanedAssetsRecipient` and `orphanedAssetsVault`; they are the\n      // same address, and the recipient key is the one the factory actually reports.\n      orphanedAssetsVault: \"0xD7242d105B95B143ed964F6D6e0fE07AD4B3d6e6\",\n      v4PoolManager: \"0x2756F3F7bFAf103F4c550f4d24CdCa82B093240A\",\n      v4PositionManager: \"0x87Dd714940ea540c921a92216e6E0DE1E2b1735C\",\n      permit2: \"0xEA93b65F177751F059Dbba1F8D8f389F7227FF25\",\n    },\n    economics: {\n      // `factory.approvedQuoteTokens(address)` and `factory.quoteTokenEconomics(address)`, matching\n      // the manifest's `quoteTokens` array. tUSDG is a testnet-only faucet token (`TestUSDG.sol`);\n      // it will not exist on a mainnet deployment, and RC2 redeployed it to a new address.\n      quoteTokens: [\n        {\n          address: \"0x3600000000000000000000000000000000000000\",\n          symbol: \"USDC\",\n          decimals: 6,\n          phantomQuote: 2_500_000_000n,\n          graduationThreshold: 10_000_000_000n,\n          approved: true,\n        },\n        {\n          address: \"0x4608e7FC3163f11c241a7cDD1C8A7d46F150e37a\",\n          symbol: \"tUSDG\",\n          decimals: 6,\n          phantomQuote: 2_500_000_000n,\n          graduationThreshold: 10_000_000_000n,\n          approved: true,\n          testOnly: true,\n        },\n      ],\n      // `factory.launchConfig(0)`. Only one config exists on this deployment.\n      launchConfigs: [\n        {\n          id: 0n,\n          supply: 1_000_000_000n * 10n ** 18n,\n          curveFeeBps: 100n,\n          poolFee: 0,\n          tickSpacing: 200,\n          enabled: true,\n        },\n      ],\n      // `factory.feePolicy()`.\n      feePolicy: {\n        protocolFeeRecipient: \"0x111274b13A9b27833A8c5E166B5786b0E23f3a01\",\n        protocolFeeShareBps: 3_000,\n        buybackBurnBps: 5_000,\n        hookFeeBps: 100,\n        maxInternalPriceImpactBps: 300,\n      },\n      // `partnerRegistry.partnerPolicy()`.\n      partnerPolicy: {\n        defaultPartnerShareOfPlatformBps: 2_000,\n        maxPartnerShareOfPlatformBps: 3_000,\n      },\n      // `factory.snipeTaxConfig()`: 99% start, 3-second decay window.\n      snipeTax: {\n        startBps: 9_900,\n        durationSeconds: 3,\n      },\n      launchFeeRaw: 0n,\n      launchFeeToken: \"0x3600000000000000000000000000000000000000\",\n      maxCreatorInitialBuyBps: 10_000,\n      maxCreatorTaxBps: 1_000,\n    },\n    deploymentBlock: 60_614_952n,\n    artifactCommit: \"a53d2e4eeccd95f14083b664c11f149dcf332e3e\",\n    sourceCommit: \"f7f79a921134e43edbbf1b5fbd6627f761b73a06\",\n    // `keccak256(publicClient.getCode({ address: factory }))`, read back live against this\n    // deployment, not transcribed from any manifest field.\n    factoryRuntimeCodeHash: \"0xf65ea3fce9c3b67fb17d8a0403c411d261505097cd8eb202e1515418287d1d28\",\n  });\n","import type { Address, Hash, Hex, PublicClient, WalletClient } from \"viem\";\n\nimport {\n  type ApprovalPreview,\n  type BuybackReleasePreview,\n  type ClaimPreview,\n  type CreateTokenPreview,\n  canLaunchpadCreatorLaunch,\n  type EmergencyRedeemQuote,\n  type GraduationStepPreview,\n  getErc20Balance,\n  getLaunchpadApprovalStatus,\n  getLaunchpadBuybackReleasable,\n  getLaunchpadBuybackVest,\n  getLaunchpadClaimableBalance,\n  getLaunchpadCurveAddress,\n  getLaunchpadCurvePendingFees,\n  getLaunchpadCurveProgress,\n  getLaunchpadCurveState,\n  getLaunchpadEmergencyDistributorAddress,\n  getLaunchpadEmergencyExitState,\n  getLaunchpadErc20Metadata,\n  getLaunchpadGraduation,\n  getLaunchpadHolderDistributor,\n  getLaunchpadHolderDistributorState,\n  getLaunchpadHolderEpoch,\n  getLaunchpadLaunchGate,\n  getLaunchpadLaunchRecord,\n  getLaunchpadPartner,\n  getLaunchpadPartnerClaimableBalance,\n  getLaunchpadPartnerPolicy,\n  getLaunchpadPartnerUsability,\n  getLaunchpadPoolId,\n  getLaunchpadTokenInfo,\n  getLaunchpadTokenState,\n  type HolderSharingCreateTokenPreview,\n  hasLaunchpadHolderClaimed,\n  isLaunchpadHolderDistributor,\n  isLaunchpadHolderExcluded,\n  isLaunchpadHolderQuoteTokenAllowed,\n  isLaunchpadTaxExempt,\n  isLaunchpadToken,\n  type LaunchpadApprovalStatus,\n  type LaunchpadCurveProgress,\n  type LaunchpadHolderAllocation,\n  type LaunchpadHolderDistributorState,\n  type LaunchpadHolderEpoch,\n  type LaunchpadHolderSweepPreview,\n  type LaunchpadLaunchGate,\n  type LaunchpadPartnerUsability,\n  type LaunchpadTransactionResult,\n  type PreparedLaunchpadTransaction,\n  predictLaunchpadAddresses,\n  prepareApproveErc20,\n  prepareCreateToken,\n  prepareLaunchAndBuy,\n  prepareLaunchpadBuy,\n  prepareLaunchpadBuybackRelease,\n  prepareLaunchpadClaim,\n  prepareLaunchpadCreateGraduatedPool,\n  prepareLaunchpadEmergencyRedeem,\n  prepareLaunchpadGraduate,\n  prepareLaunchpadHolderClaim,\n  prepareLaunchpadHolderClaimMany,\n  prepareLaunchpadHolderHarvest,\n  prepareLaunchpadHolderRollOver,\n  prepareLaunchpadPartnerClaim,\n  prepareLaunchpadSell,\n  prepareLaunchpadSetBuybackEnabled,\n  prepareLaunchWithHolderFeeSharing,\n  quoteLaunchpadEmergencyRedeem,\n  sendPreparedLaunchpadTransaction,\n  validateAndResolveLaunchConfig,\n  waitForLaunchpadTransaction,\n} from \"./actions\";\nimport { UnsupportedLaunchpadCapabilityError } from \"./client\";\nimport type { LaunchpadDeployment } from \"./deployment\";\nimport { MissingWalletClientError } from \"./errors\";\nimport type { LaunchpadCreateTokenParams } from \"./math/create-params\";\nimport type {\n  BuyQuote,\n  LaunchpadActionContext,\n  LaunchpadBuybackVest,\n  LaunchpadCapability,\n  LaunchpadChainConfig,\n  LaunchpadCurvePendingFees,\n  LaunchpadCurveState,\n  LaunchpadEmergencyExitState,\n  LaunchpadErc20Metadata,\n  LaunchpadFeeEscrowBalance,\n  LaunchpadGraduationRecord,\n  LaunchpadLaunchRecord,\n  LaunchpadPartnerConfig,\n  LaunchpadPartnerEscrowBalance,\n  LaunchpadPartnerPolicySnapshot,\n  LaunchpadReadOptions,\n  LaunchpadTokenInfo,\n  LaunchpadTokenState,\n  LaunchpadWriteActionContext,\n  PredictedLaunchpadToken,\n  SellQuote,\n  Slippage,\n} from \"./types\";\n\n/** Typed client configuration, taking one verified chain config so capabilities cannot drift. */\nexport interface LaunchpadFactoryClientConfig {\n  readonly publicClient: PublicClient;\n  readonly walletClient?: WalletClient;\n  readonly chain: LaunchpadChainConfig;\n}\n\n/**\n * Client bound to one verified Production V2 `LaunchFactory` deployment.\n *\n * Reads take a token address and resolve the token's own curve internally. A caller making several\n * calls for one launch can avoid the repeated lookup by reading the record once\n * ({@link LaunchpadFactoryClient.getLaunchRecord}) and using the curve-level methods directly.\n */\nexport interface LaunchpadFactoryClient {\n  readonly deployment: LaunchpadDeployment;\n  readonly chain: LaunchpadChainConfig;\n\n  // --- Discovery and state ---\n  isLaunchToken(token: Address, options?: LaunchpadReadOptions): Promise<boolean>;\n  getCurveAddress(token: Address, options?: LaunchpadReadOptions): Promise<Address>;\n  getLaunchRecord(token: Address, options?: LaunchpadReadOptions): Promise<LaunchpadLaunchRecord>;\n  getTokenState(token: Address, options?: LaunchpadReadOptions): Promise<LaunchpadTokenState>;\n  /**\n   * Reads one curve's full pricing state.\n   *\n   * Takes only the curve address. It used to take a `quoteToken` as well, which was dead weight\n   * once the read started sourcing `graduationThreshold` from the curve itself — and worse than\n   * dead weight, since a pinned quote token is exactly the value that misprices older launches\n   * after governance retunes the template.\n   */\n  getCurveState(\n    input: { readonly curve: Address },\n    options?: LaunchpadReadOptions,\n  ): Promise<LaunchpadCurveState>;\n  getCurveProgress(token: Address, options?: LaunchpadReadOptions): Promise<LaunchpadCurveProgress>;\n  getGraduation(token: Address, options?: LaunchpadReadOptions): Promise<LaunchpadGraduationRecord>;\n  getPoolId(token: Address, options?: LaunchpadReadOptions): Promise<Hex>;\n  getTokenInfo(token: Address, options?: LaunchpadReadOptions): Promise<LaunchpadTokenInfo>;\n  getErc20Metadata(asset: Address, options?: LaunchpadReadOptions): Promise<LaunchpadErc20Metadata>;\n  getBalance(asset: Address, owner: Address, options?: LaunchpadReadOptions): Promise<bigint>;\n  getApprovalStatus(\n    input: {\n      readonly asset: Address;\n      readonly owner: Address;\n      readonly requiredAmount: bigint;\n      readonly spender?: Address;\n    },\n    options?: LaunchpadReadOptions,\n  ): Promise<LaunchpadApprovalStatus>;\n  isTaxExempt(\n    input: { readonly curve: Address; readonly account: Address },\n    options?: LaunchpadReadOptions,\n  ): Promise<boolean>;\n\n  // --- Creation ---\n  canLaunch(creator: Address, options?: LaunchpadReadOptions): Promise<boolean>;\n  getLaunchGate(creator: Address, options?: LaunchpadReadOptions): Promise<LaunchpadLaunchGate>;\n  validateAndResolve(\n    input: { readonly quoteToken: Address; readonly launchConfigId: bigint },\n    options?: LaunchpadReadOptions,\n  ): ReturnType<typeof validateAndResolveLaunchConfig>;\n  predictAddresses(\n    params: LaunchpadCreateTokenParams,\n    creator: Address,\n  ): Promise<PredictedLaunchpadToken>;\n  prepareCreateToken(\n    params: LaunchpadCreateTokenParams,\n  ): Promise<PreparedLaunchpadTransaction<CreateTokenPreview>>;\n  prepareLaunchAndBuy(\n    params: LaunchpadCreateTokenParams,\n  ): Promise<PreparedLaunchpadTransaction<CreateTokenPreview>>;\n  /**\n   * Atomic Holder Fee Sharing launch. Requires `params.creatorFeeRecipient` to be the zero\n   * address — the forwarder creates the distributor and installs it itself.\n   */\n  prepareLaunchWithHolderFeeSharing(\n    params: LaunchpadCreateTokenParams,\n    options?: { readonly distributorInitializationData?: Hex },\n  ): Promise<PreparedLaunchpadTransaction<HolderSharingCreateTokenPreview>>;\n  /** The distributor registered for a launch token; zero for an ordinary launch. */\n  getHolderDistributor(token: Address, options?: LaunchpadReadOptions): Promise<Address>;\n  /** Whether the registry recognises this address as one of its own distributors. */\n  isHolderDistributor(distributor: Address, options?: LaunchpadReadOptions): Promise<boolean>;\n  /** A holder distributor's bindings and live balances. */\n  getHolderDistributorState(\n    distributor: Address,\n    options?: LaunchpadReadOptions,\n  ): Promise<LaunchpadHolderDistributorState>;\n  /** One published epoch, with derived expiry flags. */\n  getHolderEpoch(\n    input: { readonly distributor: Address; readonly epochId: bigint; readonly now?: bigint },\n    options?: LaunchpadReadOptions,\n  ): Promise<LaunchpadHolderEpoch>;\n  /** Whether an account has already claimed a given epoch. */\n  hasHolderClaimed(\n    input: { readonly distributor: Address; readonly epochId: bigint; readonly account: Address },\n    options?: LaunchpadReadOptions,\n  ): Promise<boolean>;\n  /** Whether an account is barred from claiming — protocol-owned addresses, mostly. */\n  isHolderExcluded(\n    input: { readonly distributor: Address; readonly account: Address },\n    options?: LaunchpadReadOptions,\n  ): Promise<boolean>;\n  /** Whether the distributor project will distribute revenue in this quote asset. */\n  isHolderQuoteTokenAllowed(quoteToken: Address, options?: LaunchpadReadOptions): Promise<boolean>;\n  /**\n   * Claims one holder allocation. Anyone may submit it — the payout follows\n   * `allocation.account`, not the sender.\n   */\n  prepareHolderClaim(input: {\n    readonly distributor: Address;\n    readonly allocation: LaunchpadHolderAllocation;\n  }): Promise<PreparedLaunchpadTransaction<LaunchpadHolderAllocation>>;\n  /** Claims several allocations at once. All-or-nothing. */\n  prepareHolderClaimMany(input: {\n    readonly distributor: Address;\n    readonly allocations: readonly LaunchpadHolderAllocation[];\n  }): Promise<PreparedLaunchpadTransaction<readonly LaunchpadHolderAllocation[]>>;\n  /** Pulls escrowed revenue, vested buyback and harvester proceeds into the distributor. */\n  prepareHolderHarvest(\n    distributor: Address,\n  ): Promise<PreparedLaunchpadTransaction<LaunchpadHolderSweepPreview>>;\n  /** Returns an expired epoch's unclaimed remainder to the unallocated pool. */\n  prepareHolderRollOver(input: {\n    readonly distributor: Address;\n    readonly epochId: bigint;\n  }): Promise<\n    PreparedLaunchpadTransaction<LaunchpadHolderSweepPreview & { readonly epochId: bigint }>\n  >;\n\n  // --- Trading ---\n  /**\n   * Approves an ERC-20 for a spender.\n   *\n   * `spender` is required rather than defaulted: trading is pulled by the token's own **curve**\n   * while creation is pulled by the **factory**, so a default would be silently wrong half the\n   * time. Resolve the curve with {@link LaunchpadFactoryClient.getCurveAddress} first.\n   */\n  prepareApprove(input: {\n    readonly asset: Address;\n    readonly spender: Address;\n    readonly amount: bigint;\n  }): Promise<PreparedLaunchpadTransaction<ApprovalPreview>>;\n  prepareBuy(input: {\n    readonly token: Address;\n    readonly quoteInRaw: bigint;\n    readonly slippage: Slippage;\n    readonly deadline: bigint;\n    readonly tokenRecipient?: Address;\n    readonly partnerId?: Hex;\n  }): Promise<PreparedLaunchpadTransaction<BuyQuote>>;\n  prepareSell(input: {\n    readonly token: Address;\n    readonly tokenIn: bigint;\n    readonly slippage: Slippage;\n    readonly deadline: bigint;\n    readonly quoteRecipient?: Address;\n    readonly partnerId?: Hex;\n  }): Promise<PreparedLaunchpadTransaction<SellQuote>>;\n\n  // --- Graduation ---\n  prepareGraduate(token: Address): Promise<PreparedLaunchpadTransaction<GraduationStepPreview>>;\n  prepareCreateGraduatedPool(\n    token: Address,\n  ): Promise<PreparedLaunchpadTransaction<GraduationStepPreview>>;\n\n  // --- Fees ---\n  getPendingFees(\n    curve: Address,\n    options?: LaunchpadReadOptions,\n  ): Promise<LaunchpadCurvePendingFees>;\n  getClaimableBalance(\n    input: { readonly recipient: Address; readonly asset: Address },\n    options?: LaunchpadReadOptions,\n  ): Promise<LaunchpadFeeEscrowBalance>;\n  getPartnerClaimableBalance(\n    input: { readonly partnerId: Hex; readonly asset: Address },\n    options?: LaunchpadReadOptions,\n  ): Promise<LaunchpadPartnerEscrowBalance>;\n  prepareClaim(input: {\n    readonly asset: Address;\n    readonly amount?: bigint;\n  }): Promise<PreparedLaunchpadTransaction<ClaimPreview>>;\n  preparePartnerClaim(input: {\n    readonly partnerId: Hex;\n    readonly asset: Address;\n  }): Promise<PreparedLaunchpadTransaction<ClaimPreview>>;\n\n  // --- Partners ---\n  getPartner(partnerId: Hex, options?: LaunchpadReadOptions): Promise<LaunchpadPartnerConfig>;\n  getPartnerPolicy(options?: LaunchpadReadOptions): Promise<LaunchpadPartnerPolicySnapshot>;\n  getPartnerUsability(\n    partnerId: Hex,\n    options?: LaunchpadReadOptions,\n  ): Promise<LaunchpadPartnerUsability>;\n\n  // --- Buyback ---\n  getBuybackVest(token: Address, options?: LaunchpadReadOptions): Promise<LaunchpadBuybackVest>;\n  getBuybackReleasable(token: Address, options?: LaunchpadReadOptions): Promise<bigint>;\n  prepareBuybackRelease(\n    token: Address,\n  ): Promise<PreparedLaunchpadTransaction<BuybackReleasePreview>>;\n  prepareSetBuybackEnabled(input: {\n    readonly token: Address;\n    readonly enabled: boolean;\n  }): Promise<PreparedLaunchpadTransaction<{ readonly token: Address; readonly enabled: boolean }>>;\n\n  // --- Emergency exit ---\n  getEmergencyDistributor(\n    input: { readonly launchToken: Address; readonly quoteToken: Address },\n    options?: LaunchpadReadOptions,\n  ): Promise<{ readonly distributor: Address; readonly deployed: boolean }>;\n  getEmergencyExitState(\n    distributor: Address,\n    options?: LaunchpadReadOptions,\n  ): Promise<LaunchpadEmergencyExitState>;\n  quoteEmergencyRedeem(input: {\n    readonly distributor: Address;\n    readonly tokenIn: bigint;\n  }): Promise<EmergencyRedeemQuote>;\n  prepareEmergencyRedeem(input: {\n    readonly distributor: Address;\n    readonly tokenIn: bigint;\n    readonly recipient?: Address;\n  }): Promise<PreparedLaunchpadTransaction<EmergencyRedeemQuote>>;\n\n  // --- Submission ---\n  send(prepared: PreparedLaunchpadTransaction<unknown>): Promise<Hash>;\n  wait(\n    hash: Hash,\n    options?: { readonly confirmations?: number },\n  ): Promise<LaunchpadTransactionResult>;\n}\n\n/** Creates a client bound to one verified deployment. */\nexport function createLaunchpadFactoryClient(\n  config: LaunchpadFactoryClientConfig,\n): LaunchpadFactoryClient {\n  const deployment = config.chain.deployment;\n  const readContext: LaunchpadActionContext = {\n    publicClient: config.publicClient,\n    deployment,\n  };\n\n  const writeContext = (): LaunchpadWriteActionContext => {\n    if (!config.walletClient) throw new MissingWalletClientError();\n    return { publicClient: config.publicClient, walletClient: config.walletClient, deployment };\n  };\n\n  const requireCapability = (capability: LaunchpadCapability) => {\n    if (!config.chain.capabilities[capability]) {\n      throw new UnsupportedLaunchpadCapabilityError(config.chain.chainId, capability);\n    }\n  };\n\n  const client: LaunchpadFactoryClient = {\n    deployment,\n    chain: config.chain,\n\n    isLaunchToken: (token, options) => isLaunchpadToken(readContext, token, options),\n    getCurveAddress: (token, options) => getLaunchpadCurveAddress(readContext, token, options),\n    getLaunchRecord: (token, options) => getLaunchpadLaunchRecord(readContext, token, options),\n    getTokenState: (token, options) => getLaunchpadTokenState(readContext, token, options),\n    getCurveState: (input, options) => getLaunchpadCurveState(readContext, input, options),\n    getCurveProgress: (token, options) => getLaunchpadCurveProgress(readContext, token, options),\n    getGraduation: (token, options) => getLaunchpadGraduation(readContext, token, options),\n    getPoolId: (token, options) => getLaunchpadPoolId(readContext, token, options),\n    getTokenInfo: (token, options) => getLaunchpadTokenInfo(readContext, token, options),\n    getErc20Metadata: (asset, options) => getLaunchpadErc20Metadata(readContext, asset, options),\n    getBalance: (asset, owner, options) => getErc20Balance(readContext, asset, owner, options),\n    getApprovalStatus: (input, options) => getLaunchpadApprovalStatus(readContext, input, options),\n    isTaxExempt: (input, options) =>\n      isLaunchpadTaxExempt(readContext, input.curve, input.account, options),\n\n    canLaunch: (creator, options) => canLaunchpadCreatorLaunch(readContext, creator, options),\n    getLaunchGate: (creator, options) => getLaunchpadLaunchGate(readContext, creator, options),\n    validateAndResolve: (input, options) =>\n      validateAndResolveLaunchConfig(readContext, input, options),\n    predictAddresses: async (params, creator) =>\n      predictLaunchpadAddresses(writeContext(), params, creator),\n    prepareCreateToken: async (params) => {\n      requireCapability(\"create\");\n      return prepareCreateToken(writeContext(), params);\n    },\n    prepareLaunchAndBuy: async (params) => {\n      requireCapability(\"create\");\n      return prepareLaunchAndBuy(writeContext(), params);\n    },\n    prepareLaunchWithHolderFeeSharing: async (params, options) => {\n      requireCapability(\"create\");\n      return prepareLaunchWithHolderFeeSharing(writeContext(), params, options);\n    },\n    getHolderDistributor: (token, options) =>\n      getLaunchpadHolderDistributor(readContext, token, options),\n    isHolderDistributor: (distributor, options) =>\n      isLaunchpadHolderDistributor(readContext, distributor, options),\n    getHolderDistributorState: (distributor, options) =>\n      getLaunchpadHolderDistributorState(readContext, distributor, options),\n    getHolderEpoch: (input, options) => getLaunchpadHolderEpoch(readContext, input, options),\n    hasHolderClaimed: (input, options) => hasLaunchpadHolderClaimed(readContext, input, options),\n    isHolderExcluded: (input, options) => isLaunchpadHolderExcluded(readContext, input, options),\n    isHolderQuoteTokenAllowed: (quoteToken, options) =>\n      isLaunchpadHolderQuoteTokenAllowed(readContext, quoteToken, options),\n    prepareHolderClaim: async (input) => prepareLaunchpadHolderClaim(writeContext(), input),\n    prepareHolderClaimMany: async (input) => prepareLaunchpadHolderClaimMany(writeContext(), input),\n    prepareHolderHarvest: async (distributor) =>\n      prepareLaunchpadHolderHarvest(writeContext(), distributor),\n    prepareHolderRollOver: async (input) => prepareLaunchpadHolderRollOver(writeContext(), input),\n\n    prepareApprove: async (input) => prepareApproveErc20(writeContext(), input),\n    prepareBuy: async (input) => {\n      requireCapability(\"bondingTrade\");\n      if (input.partnerId !== undefined) requireCapability(\"partnerAttribution\");\n      return prepareLaunchpadBuy(writeContext(), input);\n    },\n    prepareSell: async (input) => {\n      requireCapability(\"bondingTrade\");\n      if (input.partnerId !== undefined) requireCapability(\"partnerAttribution\");\n      return prepareLaunchpadSell(writeContext(), input);\n    },\n\n    // Graduation is permissionless value recovery, so it is deliberately not capability-gated.\n    prepareGraduate: async (token) => prepareLaunchpadGraduate(writeContext(), token),\n    prepareCreateGraduatedPool: (token) =>\n      prepareLaunchpadCreateGraduatedPool(writeContext(), token),\n\n    getPendingFees: (curve, options) => getLaunchpadCurvePendingFees(readContext, curve, options),\n    getClaimableBalance: (input, options) =>\n      getLaunchpadClaimableBalance(readContext, input, options),\n    getPartnerClaimableBalance: (input, options) =>\n      getLaunchpadPartnerClaimableBalance(readContext, input, options),\n    prepareClaim: async (input) => prepareLaunchpadClaim(writeContext(), input),\n    preparePartnerClaim: async (input) => prepareLaunchpadPartnerClaim(writeContext(), input),\n\n    getPartner: (partnerId, options) => getLaunchpadPartner(readContext, partnerId, options),\n    getPartnerPolicy: (options) => getLaunchpadPartnerPolicy(readContext, options),\n    getPartnerUsability: (partnerId, options) =>\n      getLaunchpadPartnerUsability(readContext, partnerId, options),\n\n    getBuybackVest: (token, options) => getLaunchpadBuybackVest(readContext, token, options),\n    getBuybackReleasable: (token, options) =>\n      getLaunchpadBuybackReleasable(readContext, token, options),\n    prepareBuybackRelease: async (token) => prepareLaunchpadBuybackRelease(writeContext(), token),\n    prepareSetBuybackEnabled: (input) => prepareLaunchpadSetBuybackEnabled(writeContext(), input),\n\n    getEmergencyDistributor: (input, options) =>\n      getLaunchpadEmergencyDistributorAddress(readContext, input, options),\n    getEmergencyExitState: (distributor, options) =>\n      getLaunchpadEmergencyExitState(readContext, distributor, options),\n    quoteEmergencyRedeem: (input) => quoteLaunchpadEmergencyRedeem(readContext, input),\n    prepareEmergencyRedeem: async (input) => prepareLaunchpadEmergencyRedeem(writeContext(), input),\n\n    send: async (prepared) => sendPreparedLaunchpadTransaction(writeContext(), prepared),\n    wait: (hash, options) => waitForLaunchpadTransaction(readContext, hash, options),\n  };\n  return Object.freeze(client);\n}\n","import { type Address, isAddressEqual, keccak256, type PublicClient } from \"viem\";\n\nimport {\n  emergencyDistributorFactoryAbi,\n  holderDistributorFactoryAbi,\n  launchFactoryAbi,\n  memeHookAbi,\n  partnerRegistryAbi,\n} from \"./abi/generated\";\nimport type { LaunchpadDeployment } from \"./deployment\";\n\n/** Raised when on-chain state contradicts a registered deployment. */\nexport class LaunchpadDeploymentVerificationError extends Error {\n  readonly field: string;\n  readonly expected: string;\n  readonly actual: string;\n\n  constructor(field: string, expected: string, actual: string) {\n    super(\n      `Launchpad deployment verification failed for ${field}: expected ${expected}, got ${actual}.`,\n    );\n    this.name = \"LaunchpadDeploymentVerificationError\";\n    this.field = field;\n    this.expected = expected;\n    this.actual = actual;\n  }\n}\n\nfunction assertAddress(field: string, expected: Address, actual: Address): void {\n  if (!isAddressEqual(expected, actual)) {\n    throw new LaunchpadDeploymentVerificationError(field, expected, actual);\n  }\n}\n\nfunction assertEqual<T extends string | number | boolean | bigint>(\n  field: string,\n  expected: T,\n  actual: T,\n): void {\n  if (expected !== actual) {\n    throw new LaunchpadDeploymentVerificationError(field, String(expected), String(actual));\n  }\n}\n\n/** What a verification actually checked, so a caller can log it rather than trusting a bare boolean. */\nexport interface LaunchpadVerificationReport {\n  readonly chainId: number;\n  readonly factory: Address;\n  readonly factoryRuntimeCodeHash: `0x${string}`;\n  readonly checkedQuoteTokens: readonly Address[];\n  readonly checkedLaunchConfigIds: readonly bigint[];\n}\n\n/**\n * Proves a registered deployment matches on-chain state before anything is trusted.\n *\n * Verifies three separable things, because they fail for different reasons:\n *\n * 1. **Identity** — the factory's runtime code hash. Catches a wrong or re-deployed address.\n * 2. **Wiring** — every module address the factory reports, plus the hook's own view of the V4\n *    PoolManager. Catches a half-configured deployment, which V2 makes easy to produce since the\n *    dependencies are set individually after construction rather than in the constructor.\n * 3. **Economics** — the fee policy, partner policy, snipe tax, launch fee, creator ceilings, and\n *    every pinned quote token and launch config. These are mutable governance state, so a mismatch\n *    usually means the pinned record has drifted rather than that the deployment is wrong.\n *\n * The economics checks are the reason this must run against a live chain rather than being folded\n * into `defineLaunchpadDeployment`: governance can move them at any time with no redeployment and\n * no change to any address.\n */\nexport async function verifyLaunchpadDeployment(\n  publicClient: PublicClient,\n  deployment: LaunchpadDeployment,\n): Promise<LaunchpadVerificationReport> {\n  const contracts = deployment.contracts;\n  const economics = deployment.economics;\n  const factory = { address: contracts.factory, abi: launchFactoryAbi } as const;\n\n  const chainId = await publicClient.getChainId();\n  assertEqual(\"chainId\", deployment.chainId, chainId);\n\n  const code = await publicClient.getCode({ address: contracts.factory });\n  if (!code || code === \"0x\") {\n    throw new LaunchpadDeploymentVerificationError(\n      \"contracts.factory\",\n      \"deployed bytecode\",\n      \"no code at address\",\n    );\n  }\n  const runtimeCodeHash = keccak256(code);\n  assertEqual(\"factoryRuntimeCodeHash\", deployment.factoryRuntimeCodeHash, runtimeCodeHash);\n\n  // --- Wiring ---\n  const [\n    launchDeployer,\n    launchForwarder,\n    partnerRegistry,\n    feeEscrow,\n    buybackVault,\n    memeHook,\n    graduationCoordinator,\n    graduationExecutor,\n    emergencyDistributorFactory,\n  ] = await Promise.all([\n    publicClient.readContract({ ...factory, functionName: \"launchDeployer\" }),\n    publicClient.readContract({ ...factory, functionName: \"launchForwarder\" }),\n    publicClient.readContract({ ...factory, functionName: \"partnerRegistry\" }),\n    publicClient.readContract({ ...factory, functionName: \"feeEscrow\" }),\n    publicClient.readContract({ ...factory, functionName: \"buybackVault\" }),\n    publicClient.readContract({ ...factory, functionName: \"memeHook\" }),\n    publicClient.readContract({ ...factory, functionName: \"graduationCoordinator\" }),\n    publicClient.readContract({ ...factory, functionName: \"graduationExecutor\" }),\n    publicClient.readContract({ ...factory, functionName: \"emergencyDistributorFactory\" }),\n  ]);\n\n  assertAddress(\"contracts.launchDeployer\", contracts.launchDeployer, launchDeployer);\n  assertAddress(\"contracts.launchForwarder\", contracts.launchForwarder, launchForwarder);\n  assertAddress(\"contracts.partnerRegistry\", contracts.partnerRegistry, partnerRegistry);\n  assertAddress(\"contracts.feeEscrow\", contracts.feeEscrow, feeEscrow);\n  assertAddress(\"contracts.buybackVault\", contracts.buybackVault, buybackVault);\n  assertAddress(\"contracts.memeHook\", contracts.memeHook, memeHook);\n  assertAddress(\n    \"contracts.graduationCoordinator\",\n    contracts.graduationCoordinator,\n    graduationCoordinator,\n  );\n  assertAddress(\"contracts.graduationExecutor\", contracts.graduationExecutor, graduationExecutor);\n  assertAddress(\n    \"contracts.emergencyDistributorFactory\",\n    contracts.emergencyDistributorFactory,\n    emergencyDistributorFactory,\n  );\n\n  const poolManager = await publicClient.readContract({\n    address: contracts.memeHook,\n    abi: memeHookAbi,\n    functionName: \"poolManager\",\n  });\n  assertAddress(\"contracts.v4PoolManager\", contracts.v4PoolManager, poolManager);\n\n  // Both sides of the forwarder rotation must name the same address. The migration guide is\n  // explicit that the order matters — the distributor factory has to authorize a new forwarder\n  // before the core switches to it — and a half-finished rotation is invisible from either getter\n  // alone: whichever path the unauthorized side owns simply reverts on every creation.\n  if (contracts.holderDistributorFactory !== undefined) {\n    const authorizedForwarder = await publicClient.readContract({\n      address: contracts.holderDistributorFactory,\n      abi: holderDistributorFactoryAbi,\n      functionName: \"authorizedForwarder\",\n    });\n    assertAddress(\n      \"contracts.holderDistributorFactory.authorizedForwarder\",\n      contracts.launchForwarder,\n      authorizedForwarder,\n    );\n  }\n\n  // The orphaned-assets sink lives on the distributor factory, not the launch factory. Checking it\n  // is not bookkeeping: `GraduationCoordinator` reverts outright while the recipient is unset, so\n  // an unwired vault takes down graduation for every launch on the deployment.\n  const orphanedAssetsRecipient = await publicClient.readContract({\n    address: contracts.emergencyDistributorFactory,\n    abi: emergencyDistributorFactoryAbi,\n    functionName: \"orphanedAssetsRecipient\",\n  });\n  assertAddress(\n    \"contracts.orphanedAssetsVault\",\n    contracts.orphanedAssetsVault,\n    orphanedAssetsRecipient,\n  );\n\n  // --- Economics ---\n  const [feePolicy, snipeTaxConfig, launchFee, launchFeeToken, maxInitialBuy, maxCreatorTax] =\n    await Promise.all([\n      publicClient.readContract({ ...factory, functionName: \"feePolicy\" }),\n      publicClient.readContract({ ...factory, functionName: \"snipeTaxConfig\" }),\n      publicClient.readContract({ ...factory, functionName: \"launchFee\" }),\n      publicClient.readContract({ ...factory, functionName: \"launchFeeToken\" }),\n      publicClient.readContract({ ...factory, functionName: \"maxCreatorInitialBuyBps\" }),\n      publicClient.readContract({ ...factory, functionName: \"maxCreatorTaxBps\" }),\n    ]);\n\n  assertAddress(\n    \"economics.feePolicy.protocolFeeRecipient\",\n    economics.feePolicy.protocolFeeRecipient,\n    feePolicy.protocolFeeRecipient,\n  );\n  assertEqual(\n    \"economics.feePolicy.protocolFeeShareBps\",\n    economics.feePolicy.protocolFeeShareBps,\n    feePolicy.protocolFeeShareBps,\n  );\n  assertEqual(\n    \"economics.feePolicy.buybackBurnBps\",\n    economics.feePolicy.buybackBurnBps,\n    feePolicy.buybackBurnBps,\n  );\n  assertEqual(\n    \"economics.feePolicy.hookFeeBps\",\n    economics.feePolicy.hookFeeBps,\n    feePolicy.hookFeeBps,\n  );\n  assertEqual(\n    \"economics.feePolicy.maxInternalPriceImpactBps\",\n    economics.feePolicy.maxInternalPriceImpactBps,\n    feePolicy.maxInternalPriceImpactBps,\n  );\n  assertEqual(\"economics.snipeTax.startBps\", economics.snipeTax.startBps, snipeTaxConfig.startBps);\n  assertEqual(\n    \"economics.snipeTax.durationSeconds\",\n    economics.snipeTax.durationSeconds,\n    snipeTaxConfig.durationSeconds,\n  );\n  assertEqual(\"economics.launchFeeRaw\", economics.launchFeeRaw, launchFee);\n  assertAddress(\"economics.launchFeeToken\", economics.launchFeeToken, launchFeeToken);\n  assertEqual(\n    \"economics.maxCreatorInitialBuyBps\",\n    economics.maxCreatorInitialBuyBps,\n    maxInitialBuy,\n  );\n  assertEqual(\"economics.maxCreatorTaxBps\", economics.maxCreatorTaxBps, maxCreatorTax);\n\n  const partnerPolicy = await publicClient.readContract({\n    address: contracts.partnerRegistry,\n    abi: partnerRegistryAbi,\n    functionName: \"partnerPolicy\",\n  });\n  assertEqual(\n    \"economics.partnerPolicy.defaultPartnerShareOfPlatformBps\",\n    economics.partnerPolicy.defaultPartnerShareOfPlatformBps,\n    partnerPolicy.defaultPartnerShareOfPlatformBps,\n  );\n  assertEqual(\n    \"economics.partnerPolicy.maxPartnerShareOfPlatformBps\",\n    economics.partnerPolicy.maxPartnerShareOfPlatformBps,\n    partnerPolicy.maxPartnerShareOfPlatformBps,\n  );\n\n  // Every pinned quote token and launch config, since a launch resolves one of each and pinning a\n  // stale value would misprice every quote taken against it.\n  for (const quoteToken of economics.quoteTokens) {\n    const [approved, onChain] = await Promise.all([\n      publicClient.readContract({\n        ...factory,\n        functionName: \"approvedQuoteTokens\",\n        args: [quoteToken.address],\n      }),\n      publicClient.readContract({\n        ...factory,\n        functionName: \"quoteTokenEconomics\",\n        args: [quoteToken.address],\n      }),\n    ]);\n    const field = `economics.quoteTokens[${quoteToken.symbol}]`;\n    assertEqual(`${field}.approved`, quoteToken.approved, approved);\n    assertEqual(`${field}.phantomQuote`, quoteToken.phantomQuote, onChain.phantomQuote);\n    assertEqual(\n      `${field}.graduationThreshold`,\n      quoteToken.graduationThreshold,\n      onChain.graduationThreshold,\n    );\n    assertEqual(`${field}.decimals`, quoteToken.decimals, onChain.decimals);\n  }\n\n  for (const launchConfig of economics.launchConfigs) {\n    const onChain = await publicClient.readContract({\n      ...factory,\n      functionName: \"launchConfig\",\n      args: [launchConfig.id],\n    });\n    const field = `economics.launchConfigs[${launchConfig.id}]`;\n    assertEqual(`${field}.supply`, launchConfig.supply, onChain.supply);\n    assertEqual(`${field}.curveFeeBps`, launchConfig.curveFeeBps, onChain.curveFeeBps);\n    assertEqual(`${field}.poolFee`, launchConfig.poolFee, onChain.poolFee);\n    assertEqual(`${field}.tickSpacing`, launchConfig.tickSpacing, onChain.tickSpacing);\n    assertEqual(`${field}.enabled`, launchConfig.enabled, onChain.enabled);\n  }\n\n  return Object.freeze({\n    chainId,\n    factory: contracts.factory,\n    factoryRuntimeCodeHash: runtimeCodeHash,\n    checkedQuoteTokens: Object.freeze(economics.quoteTokens.map((token) => token.address)),\n    checkedLaunchConfigIds: Object.freeze(economics.launchConfigs.map((config) => config.id)),\n  });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACA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","names":["import_viem","import_viem","import_viem","import_viem","import_viem","import_viem","import_viem","import_viem","ZERO_ADDRESS","import_viem","import_viem","import_viem","partner","import_viem","import_viem","import_viem","ZERO_ADDRESS","import_viem","BPS","BPS","BPS","bps","import_viem","invalid","normalizeAddress","normalizeQuoteToken","import_viem"]}