@meteora-ag/dynamic-bonding-curve-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/client.ts","../src/derive.ts","../src/constants.ts","../src/utils.ts","../src/idl/dynamic-bonding-curve/idl.json","../src/idl/dynamic-vault/idl.json","../src/idl/damm-v1/idl.json","../src/math/swapQuote.ts","../src/math/safeMath.ts","../src/math/curve.ts","../src/math/utilsMath.ts","../src/math/feeMath.ts","../src/common.ts","../src/design.ts"],"sourcesContent":["import type {\n Accounts,\n BN,\n IdlAccounts,\n IdlTypes,\n Program,\n} from '@coral-xyz/anchor'\nimport type { DynamicBondingCurve } from './idl/dynamic-bonding-curve/idl'\nimport type { Keypair, PublicKey, Transaction } from '@solana/web3.js'\nimport Decimal from 'decimal.js'\n\n// Program Type\nexport type DynamicBondingCurveProgram = Program<DynamicBondingCurve>\n\n/////////////////\n// IX ACCOUNTS //\n/////////////////\n\nexport type ClaimProtocolFeeAccounts = Accounts<\n DynamicBondingCurve['instructions']['0']\n>['claimProtocolFee']\n\nexport type ClaimTradingFeeAccounts = Accounts<\n DynamicBondingCurve['instructions']['1']\n>['claimTradingFee']\n\nexport type CloseClaimFeeOperatorAccounts = Accounts<\n DynamicBondingCurve['instructions']['2']\n>['closeClaimFeeOperator']\n\nexport type CreateClaimFeeOperatorAccounts = Accounts<\n DynamicBondingCurve['instructions']['3']\n>['createClaimFeeOperator']\n\nexport type CreateConfigAccounts = Accounts<\n DynamicBondingCurve['instructions']['4']\n>['createConfig']\n\nexport type CreateLockerAccounts = Accounts<\n DynamicBondingCurve['instructions']['5']\n>['createLocker']\n\nexport type CreatePartnerMetadata = Accounts<\n DynamicBondingCurve['instructions']['6']\n>['createPartnerMetadata']\n\nexport type CreateVirtualPoolMetadata = Accounts<\n DynamicBondingCurve['instructions']['7']\n>['createVirtualPoolMetadata']\n\nexport type InitializeVirtualPoolWithSplTokenAccounts = Accounts<\n DynamicBondingCurve['instructions']['8']\n>['initializeVirtualPoolWithSplToken']\n\nexport type InitializeVirtualPoolWithToken2022Accounts = Accounts<\n DynamicBondingCurve['instructions']['9']\n>['initializeVirtualPoolWithToken2022']\n\nexport type MigrateMeteoraDammAccounts = Accounts<\n DynamicBondingCurve['instructions']['10']\n>['migrateMeteoraDamm']\n\nexport type MigrateMeteoraDammClaimLpTokenAccounts = Accounts<\n DynamicBondingCurve['instructions']['11']\n>['migrateMeteoraDammClaimLpToken']\n\nexport type MigrateMeteoraDammLockLpTokenAccounts = Accounts<\n DynamicBondingCurve['instructions']['12']\n>['migrateMeteoraDammLockLpToken']\n\nexport type MigrationDammV2Accounts = Accounts<\n DynamicBondingCurve['instructions']['13']\n>['migrationDammV2']\n\nexport type MigrationDammV2CreateMetadataAccounts = Accounts<\n DynamicBondingCurve['instructions']['14']\n>['migrationDammV2CreateMetadata']\n\nexport type MigrationMeteoraDammCreateMetadataAccounts = Accounts<\n DynamicBondingCurve['instructions']['15']\n>['migrationMeteoraDammCreateMetadata']\n\nexport type PartnerWithdrawSurplusAccounts = Accounts<\n DynamicBondingCurve['instructions']['16']\n>['partnerWithdrawSurplus']\n\nexport type SwapAccounts = Accounts<\n DynamicBondingCurve['instructions']['18']\n>['swap']\n\n///////////////\n// IDL Types //\n///////////////\n\nexport type ConfigParameters = IdlTypes<DynamicBondingCurve>['configParameters']\nexport type InitializePoolParameters =\n IdlTypes<DynamicBondingCurve>['initializePoolParameters']\nexport type SwapParameters = IdlTypes<DynamicBondingCurve>['swapParameters']\nexport type PoolFeeParameters =\n IdlTypes<DynamicBondingCurve>['poolFeeParameters']\nexport type DynamicFeeParameters =\n IdlTypes<DynamicBondingCurve>['dynamicFeeParameters']\nexport type LiquidityDistributionParameters =\n IdlTypes<DynamicBondingCurve>['liquidityDistributionParameters']\nexport type PoolFeesConfig = IdlTypes<DynamicBondingCurve>['poolFeesConfig']\nexport type DynamicFeeConfig = IdlTypes<DynamicBondingCurve>['dynamicFeeConfig']\nexport type BaseFeeConfig = IdlTypes<DynamicBondingCurve>['baseFeeConfig']\nexport type PoolFees = IdlTypes<DynamicBondingCurve>['poolFees']\nexport type PoolMetrics = IdlTypes<DynamicBondingCurve>['poolMetrics']\nexport type SwapResult = IdlTypes<DynamicBondingCurve>['swapResult']\nexport type CreatePartnerMetadataParameters =\n IdlTypes<DynamicBondingCurve>['createPartnerMetadataParameters']\nexport type CreateVirtualPoolMetadataParameters =\n IdlTypes<DynamicBondingCurve>['createVirtualPoolMetadataParameters']\n\n//////////////////\n// IDL ACCOUNTS //\n//////////////////\n\nexport type ClaimFeeOperator =\n IdlAccounts<DynamicBondingCurve>['claimFeeOperator']\nexport type Config = IdlAccounts<DynamicBondingCurve>['config']\nexport type MeteoraDammMigrationMetadata =\n IdlAccounts<DynamicBondingCurve>['meteoraDammMigrationMetadata']\nexport type LockEscrow = IdlAccounts<DynamicBondingCurve>['lockEscrow']\nexport type VolatilityTracker =\n IdlTypes<DynamicBondingCurve>['volatilityTracker']\nexport type VirtualPool = IdlAccounts<DynamicBondingCurve>['virtualPool']\nexport type PoolConfig = IdlAccounts<DynamicBondingCurve>['poolConfig']\nexport type PartnerMetadata =\n IdlAccounts<DynamicBondingCurve>['partnerMetadata']\nexport type VirtualPoolMetadata =\n IdlAccounts<DynamicBondingCurve>['virtualPoolMetadata']\n\n///////////\n// ENUMS //\n///////////\n\nexport enum ActivationType {\n Slot = 0,\n Timestamp = 1,\n}\n\nexport enum TokenType {\n SPL = 0,\n Token2022 = 1,\n}\n\nexport enum CollectFeeMode {\n OnlyQuote = 0,\n Both = 1,\n}\n\nexport enum MigrationOption {\n MET_DAMM = 0,\n MET_DAMM_V2 = 1,\n}\n\nexport enum CollectFeeMode {\n QuoteToken = 0,\n OutputToken = 1,\n}\n\nexport enum FeeSchedulerMode {\n Linear = 0,\n Exponential = 1,\n}\n\nexport enum MigrationFeeOption {\n FixedBps25 = 0,\n FixedBps30 = 1,\n FixedBps100 = 2,\n FixedBps200 = 3,\n}\n\nexport enum TokenDecimal {\n SIX = 6,\n NINE = 9,\n}\n\nexport enum TradeDirection {\n BaseToQuote = 0,\n QuoteToBase = 1,\n}\n\nexport enum Rounding {\n Up,\n Down,\n}\n\n///////////\n// TYPES //\n///////////\n\nexport type CreateConfigParam = Omit<\n CreateConfigAccounts,\n 'program' | 'eventAuthority' | 'systemProgram'\n> &\n ConfigParameters\n\nexport type CreateDammMigrationMetadataParam = {\n payer: PublicKey\n virtualPool: PublicKey\n config: PublicKey\n migrateToDammV2: boolean\n}\n\nexport type CreateConstantProductConfigWithLockVestingParam = {\n lockVestingParams: {\n percentageSupplyVesting: number\n frequency: number\n numberOfPeriod: number\n cliffUnlockEnabled: boolean\n }\n totalTokenSupply: number\n percentageSupplyOnMigration: number\n startPrice: Decimal\n migrationPrice: Decimal\n tokenBaseDecimal: number\n tokenQuoteDecimal: number\n swapBufferPercentage: number\n baseFeeBps: number\n dynamicFeeEnabled: boolean\n activationType: ActivationType\n collectFeeMode: CollectFeeMode\n migrationOption: MigrationOption\n migrationFeeOption: MigrationFeeOption\n tokenType: TokenType\n partnerLpPercentage: number\n creatorLpPercentage: number\n partnerLockedLpPercentage: number\n creatorLockedLpPercentage: number\n feeClaimer: PublicKey\n leftoverReceiver: PublicKey\n payer: PublicKey\n quoteMint: PublicKey\n config: PublicKey\n}\n\nexport type CreateConstantProductConfigWithoutLockVestingParam = {\n totalTokenSupply: number\n percentageSupplyOnMigration: number\n startPrice: Decimal\n tokenBaseDecimal: number\n tokenQuoteDecimal: number\n swapBufferPercentage: number\n baseFeeBps: number\n dynamicFeeEnabled: boolean\n activationType: ActivationType\n collectFeeMode: CollectFeeMode\n migrationOption: MigrationOption\n migrationFeeOption: MigrationFeeOption\n tokenType: TokenType\n partnerLpPercentage: number\n creatorLpPercentage: number\n partnerLockedLpPercentage: number\n creatorLockedLpPercentage: number\n feeClaimer: PublicKey\n leftoverReceiver: PublicKey\n payer: PublicKey\n quoteMint: PublicKey\n config: PublicKey\n}\n\nexport type DesignCurveParam = {\n tokenDecimal: TokenDecimal\n migrationQuoteThreshold: BN\n tokenBaseSupply: BN\n migrationBasePercent: number\n}\n\nexport type DesignConstantProductCurveWithLockVestingParam = {\n lockVestingParams: {\n percentageSupplyVesting: number\n frequency: number\n numberOfPeriod: number\n cliffUnlockEnabled: boolean\n }\n totalTokenSupply: number\n percentageSupplyOnMigration: number\n startPrice: Decimal\n migrationPrice: Decimal\n tokenBaseDecimal: number\n tokenQuoteDecimal: number\n swapBufferPercentage: number\n baseFeeBps: number\n dynamicFeeEnabled: boolean\n activationType: ActivationType\n collectFeeMode: CollectFeeMode\n migrationOption: MigrationOption\n migrationFeeOption: MigrationFeeOption\n tokenType: TokenType\n partnerLpPercentage: number\n creatorLpPercentage: number\n partnerLockedLpPercentage: number\n creatorLockedLpPercentage: number\n}\n\nexport type DesignConstantProductCurveWithoutLockVestingParam = {\n totalTokenSupply: number\n percentageSupplyOnMigration: number\n startPrice: Decimal\n tokenBaseDecimal: number\n tokenQuoteDecimal: number\n swapBufferPercentage: number\n baseFeeBps: number\n dynamicFeeEnabled: boolean\n activationType: ActivationType\n collectFeeMode: CollectFeeMode\n migrationOption: MigrationOption\n migrationFeeOption: MigrationFeeOption\n tokenType: TokenType\n partnerLpPercentage: number\n creatorLpPercentage: number\n partnerLockedLpPercentage: number\n creatorLockedLpPercentage: number\n}\n\nexport type DesignCurveResponse = {\n sqrtStartPrice: BN\n curve: LiquidityDistributionParameters[]\n}\n\nexport type MigrateToDammV1Param = {\n payer: PublicKey\n virtualPool: PublicKey\n dammConfig: PublicKey\n}\n\nexport type MigrateToDammV2Param = {\n payer: PublicKey\n virtualPool: PublicKey\n dammConfig: PublicKey\n}\n\nexport type MigrateToDammV2Response = {\n transaction: Transaction\n firstPositionNftKeypair: Keypair\n secondPositionNftKeypair: Keypair\n}\n\nexport type ClaimTradingFeeParam = {\n feeClaimer: PublicKey\n pool: PublicKey\n maxBaseAmount: BN\n maxQuoteAmount: BN\n}\n\nexport type CreateVirtualPoolMetadataParam = {\n virtualPool: PublicKey\n name: string\n website: string\n logo: string\n creator: PublicKey\n payer: PublicKey\n}\n\nexport type CreatePartnerMetadataParam = {\n name: string\n website: string\n logo: string\n feeClaimer: PublicKey\n payer: PublicKey\n}\n\nexport type CreatePoolParam = {\n name: string\n symbol: string\n uri: string\n config: PublicKey\n creator: PublicKey\n baseMint: PublicKey\n quoteMint: PublicKey\n baseTokenType: TokenType\n quoteTokenType: TokenType\n}\n\nexport type SwapParam = {\n owner: PublicKey\n amountIn: BN\n minimumAmountOut: BN\n swapBaseForQuote: boolean\n}\n\nexport type SwapQuoteParam = {\n virtualPool: VirtualPool\n config: PoolConfig\n swapBaseForQuote: boolean\n amountIn: BN\n hasReferral: boolean\n currentPoint: BN\n}\n\nexport type DammLpTokenParam = {\n payer: PublicKey\n virtualPool: PublicKey\n dammConfig: PublicKey\n isPartner: boolean\n}\n\nexport type PartnerWithdrawSurplusParam = {\n feeClaimer: PublicKey\n virtualPool: PublicKey\n}\n\nexport type WithdrawLeftoverParam = {\n payer: PublicKey\n virtualPool: PublicKey\n}\n\nexport type CreateLockerParam = {\n payer: PublicKey\n virtualPool: PublicKey\n}\n\n////////////////\n// INTERFACES //\n////////////////\n\nexport interface FeeResult {\n amount: BN\n protocolFee: BN\n tradingFee: BN\n referralFee: BN\n}\n\nexport interface FeeMode {\n feesOnInput: boolean\n feesOnBaseToken: boolean\n hasReferral: boolean\n}\n\nexport interface QuoteResult {\n amountOut: BN\n minimumAmountOut: BN\n nextSqrtPrice: BN\n fee: {\n trading: BN\n protocol: BN\n referral?: BN\n }\n price: {\n beforeSwap: number\n afterSwap: number\n }\n}\n\nexport interface FeeOnAmountResult {\n amount: BN // Amount remaining after taking trading fee\n protocolFee: BN // Final protocol fee (after referral deduction)\n tradingFee: BN // Portion of trading fee NOT going to protocol\n referralFee: BN // Referral fee amount\n}\n\nexport interface PrepareSwapParams {\n inputMint: PublicKey\n outputMint: PublicKey\n inputTokenProgram: PublicKey\n outputTokenProgram: PublicKey\n}\n\nexport interface SwapAmount {\n outputAmount: BN\n nextSqrtPrice: BN\n}\n","import {\n TokenType,\n type ClaimTradingFeeParam,\n type CreateConfigParam,\n type CreateDammMigrationMetadataParam,\n type CreatePartnerMetadataParam,\n type CreatePartnerMetadataParameters,\n type CreatePoolParam,\n type InitializeVirtualPoolWithSplTokenAccounts,\n type InitializeVirtualPoolWithToken2022Accounts,\n type DammLpTokenParam,\n type MeteoraDammMigrationMetadata,\n type PartnerWithdrawSurplusParam,\n type SwapAccounts,\n type SwapParam,\n type MigrateToDammV1Param,\n type MigrateToDammV2Param,\n type PoolConfig,\n type VirtualPool,\n type PartnerMetadata,\n type CreateVirtualPoolMetadataParam,\n type CreateVirtualPoolMetadataParameters,\n type VirtualPoolMetadata,\n type CreateLockerParam,\n type ConfigParameters,\n type WithdrawLeftoverParam,\n type LockEscrow,\n type MigrateToDammV2Response,\n type SwapQuoteParam,\n type CreateConstantProductConfigWithLockVestingParam,\n type CreateConstantProductConfigWithoutLockVestingParam,\n} from './types'\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n PublicKey,\n SystemProgram,\n SYSVAR_RENT_PUBKEY,\n Transaction,\n TransactionInstruction,\n} from '@solana/web3.js'\nimport {\n deriveBaseKeyForLocker,\n deriveDammMigrationMetadataAddress,\n deriveDammPoolAddress,\n deriveDammV2EventAuthority,\n deriveDammV2PoolAddress,\n deriveEscrow,\n deriveEventAuthority,\n deriveLockerEventAuthority,\n deriveLockEscrowAddress,\n deriveLpMintAddress,\n deriveMetadata,\n derivePartnerMetadata,\n derivePool,\n derivePoolAuthority,\n derivePositionAddress,\n derivePositionNftAccount,\n deriveProtocolFeeAddress,\n deriveTokenVaultAddress,\n deriveVaultLPAddress,\n deriveVirtualPoolMetadata,\n deriveVaultPdas,\n} from './derive'\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n getAssociatedTokenAddressSync,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n} from '@solana/spl-token'\nimport {\n DAMM_V1_PROGRAM_ID,\n DAMM_V2_PROGRAM_ID,\n LOCKER_PROGRAM_ID,\n METAPLEX_PROGRAM_ID,\n VAULT_PROGRAM_ID,\n DYNAMIC_BONDING_CURVE_PROGRAM_ID,\n} from './constants'\nimport {\n createDammV1Program,\n createProgram,\n createVaultProgram,\n findAssociatedTokenAddress,\n getAccountData,\n isNativeSol,\n unwrapSOLInstruction,\n wrapSOLInstruction,\n createProgramAccountFilter,\n convertBNToDecimal,\n} from './utils'\nimport type { Program, ProgramAccount } from '@coral-xyz/anchor'\nimport type { DynamicBondingCurve as DynamicBondingCurveIDL } from './idl/dynamic-bonding-curve/idl'\nimport BN from 'bn.js'\nimport { swapQuote } from './math/swapQuote'\nimport {\n createInitializePermissionlessDynamicVaultIx,\n createLockEscrowIx,\n prepareSwapParams,\n} from './common'\nimport {\n designConstantProductCurveWithLockVesting,\n designConstantProductCurveWithoutLockVesting,\n} from './design'\nimport type { DynamicVault } from './idl/dynamic-vault/idl'\nimport type { DammV1 } from './idl/damm-v1/idl'\n\nexport class DynamicBondingCurveProgramClient {\n private program: Program<DynamicBondingCurveIDL>\n\n constructor(connection: Connection) {\n const { program } = createProgram(connection)\n this.program = program\n }\n\n /**\n * Get the underlying program instance\n * @returns The program instance\n */\n getProgram(): Program<DynamicBondingCurveIDL> {\n return this.program\n }\n\n /**\n * Get virtual pool\n * @param poolAddress - The address of the pool\n * @returns A virtual pool or null if not found\n */\n async getPool(\n poolAddress: PublicKey | string\n ): Promise<VirtualPool | null> {\n return getAccountData<VirtualPool>(\n poolAddress,\n 'virtualPool',\n this.program\n )\n }\n\n /**\n * Retrieves all virtual pools\n * @returns Array of pool accounts with their addresses\n */\n async getPools(): Promise<ProgramAccount<VirtualPool>[]> {\n return await this.program.account.virtualPool.all()\n }\n\n /**\n * Get pool config (partner config)\n * @param configAddress - The address of the pool config key\n * @returns A pool config\n */\n async getPoolConfig(\n configAddress: PublicKey | string\n ): Promise<PoolConfig> {\n return getAccountData<PoolConfig>(\n configAddress,\n 'poolConfig',\n this.program\n )\n }\n\n /**\n * Retrieve all pool config keys (list of all configs owned by partner)\n * @param owner - The owner of the pool configs\n * @returns An array of pool configs\n */\n async getPoolConfigs(\n owner?: PublicKey | string\n ): Promise<(ProgramAccount<PoolConfig> & { createdAt?: Date })[]> {\n const filters = owner ? createProgramAccountFilter(owner, 72) : []\n const poolConfigs = await this.program.account.poolConfig.all(filters)\n\n const signaturePromises = poolConfigs.map(async (config) => {\n const signatures =\n await this.program.provider.connection.getSignaturesForAddress(\n config.publicKey,\n { limit: 1 },\n 'confirmed'\n )\n return signatures[0]?.blockTime\n ? new Date(signatures[0].blockTime * 1000)\n : undefined\n })\n\n const timestamps = await Promise.all(signaturePromises)\n\n return poolConfigs.map((config, index) => ({\n ...config,\n createdAt: timestamps[index],\n }))\n }\n\n /**\n * Get pool migration quote threshold\n * @param poolAddress - The address of the pool\n * @returns The migration quote threshold\n */\n async getPoolMigrationQuoteThreshold(\n poolAddress: PublicKey | string\n ): Promise<BN> {\n const pool = await this.getPool(poolAddress)\n if (!pool) {\n throw new Error(`Pool not found: ${poolAddress.toString()}`)\n }\n const configAddress = pool.config\n const config = await this.getPoolConfig(configAddress)\n return config.migrationQuoteThreshold\n }\n\n /**\n * Get virtual pool metadata\n * @param virtualPoolAddress - The address of the virtual pool\n * @returns A virtual pool metadata\n */\n async getPoolMetadata(\n virtualPoolAddress: PublicKey | string\n ): Promise<VirtualPoolMetadata[]> {\n const filters = createProgramAccountFilter(virtualPoolAddress, 8)\n const accounts =\n await this.program.account.virtualPoolMetadata.all(filters)\n return accounts.map((account) => account.account)\n }\n\n /**\n * Get partner metadata\n * @param partnerAddress - The address of the partner\n * @returns A partner metadata\n */\n async getPartnerMetadata(\n partnerAccountAddress: PublicKey | string\n ): Promise<PartnerMetadata[]> {\n const filters = createProgramAccountFilter(partnerAccountAddress, 8)\n const accounts = await this.program.account.partnerMetadata.all(filters)\n return accounts.map((account) => account.account)\n }\n\n /**\n * Get DAMM V1 migration metadata\n * @param poolAddress - The address of the meteora DAMM migration metadata\n * @returns A meteora DAMM migration metadata\n */\n async getDammV1MigrationMetadata(\n poolAddress: PublicKey | string\n ): Promise<MeteoraDammMigrationMetadata> {\n const metadata =\n await this.program.account.meteoraDammMigrationMetadata.fetch(\n poolAddress instanceof PublicKey\n ? poolAddress\n : new PublicKey(poolAddress)\n )\n\n return metadata\n }\n\n /**\n * Get DAMM V1 migration metadata\n * @param walletAddress - The address of the meteora DAMM migration metadata\n * @returns A meteora DAMM migration metadata\n */\n async getLockedLpTokenAmount(\n walletAddress: PublicKey | string\n ): Promise<LockEscrow> {\n const metadata = await this.program.account.lockEscrow.fetch(\n walletAddress instanceof PublicKey\n ? walletAddress\n : new PublicKey(walletAddress)\n )\n\n return metadata\n }\n}\n\n/**\n * Pool-related operations\n */\nexport class PoolService {\n constructor(private programClient: DynamicBondingCurveProgramClient) {}\n\n /**\n * Create a new pool\n * @param createPoolParam - The parameters for the pool\n * @returns A new pool\n */\n async createPool(createPoolParam: CreatePoolParam): Promise<Transaction> {\n const program = this.programClient.getProgram()\n const {\n quoteMint,\n baseMint,\n config,\n baseTokenType,\n quoteTokenType,\n name,\n symbol,\n uri,\n creator,\n } = createPoolParam\n\n const eventAuthority = deriveEventAuthority()\n const poolAuthority = derivePoolAuthority(program.programId)\n const pool = derivePool(quoteMint, baseMint, config, program.programId)\n const baseVault = deriveTokenVaultAddress(\n pool,\n baseMint,\n program.programId\n )\n const quoteVault = deriveTokenVaultAddress(\n pool,\n quoteMint,\n program.programId\n )\n const baseMetadata = deriveMetadata(baseMint)\n\n if (baseTokenType === TokenType.SPL) {\n const accounts: InitializeVirtualPoolWithSplTokenAccounts = {\n pool,\n config,\n creator,\n mintMetadata: baseMetadata,\n program: program.programId,\n tokenQuoteProgram:\n quoteTokenType === TokenType.SPL\n ? TOKEN_PROGRAM_ID\n : TOKEN_2022_PROGRAM_ID,\n baseMint,\n payer: creator,\n poolAuthority,\n baseVault,\n quoteVault,\n quoteMint,\n eventAuthority,\n metadataProgram: METAPLEX_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n }\n return program.methods\n .initializeVirtualPoolWithSplToken({\n name,\n symbol,\n uri,\n })\n .accounts(accounts)\n .transaction()\n }\n\n if (baseTokenType === TokenType.Token2022) {\n const accounts: InitializeVirtualPoolWithToken2022Accounts = {\n pool,\n config,\n creator,\n program: program.programId,\n baseMint,\n payer: creator,\n poolAuthority,\n baseVault,\n quoteVault,\n quoteMint,\n eventAuthority,\n tokenQuoteProgram: TOKEN_PROGRAM_ID,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n }\n return program.methods\n .initializeVirtualPoolWithToken2022({\n name,\n symbol,\n uri,\n })\n .accounts(accounts)\n .transaction()\n }\n\n throw new Error('Invalid base token type')\n }\n\n /**\n * Create virtual pool metadata\n * @param createVirtualPoolMetadataParam - The parameters for the virtual pool metadata\n * @returns A create virtual pool metadata transaction\n */\n async createPoolMetadata(\n createVirtualPoolMetadataParam: CreateVirtualPoolMetadataParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n const eventAuthority = deriveEventAuthority()\n const virtualPoolMetadata = deriveVirtualPoolMetadata(\n createVirtualPoolMetadataParam.virtualPool\n )\n\n const virtualPoolMetadataParam: CreateVirtualPoolMetadataParameters = {\n padding: new Array(96).fill(0),\n name: createVirtualPoolMetadataParam.name,\n website: createVirtualPoolMetadataParam.website,\n logo: createVirtualPoolMetadataParam.logo,\n }\n\n const accounts = {\n virtualPool: createVirtualPoolMetadataParam.virtualPool,\n virtualPoolMetadata,\n creator: createVirtualPoolMetadataParam.creator,\n payer: createVirtualPoolMetadataParam.payer,\n systemProgram: SystemProgram.programId,\n eventAuthority,\n program: program.programId,\n }\n\n return program.methods\n .createVirtualPoolMetadata(virtualPoolMetadataParam)\n .accounts(accounts)\n .transaction()\n }\n\n /**\n * Swap between base and quote\n * @param pool - The pool address\n * @param swapParam - The parameters for the swap\n * @returns A swap transaction\n */\n async swap(pool: PublicKey, swapParam: SwapParam): Promise<Transaction> {\n const program = this.programClient.getProgram()\n\n const virtualPoolState = await this.programClient.getPool(pool)\n if (!virtualPoolState) {\n throw new Error(`Pool not found: ${pool.toString()}`)\n }\n\n const poolConfigState = await this.programClient.getPoolConfig(\n virtualPoolState.config\n )\n\n const { amountIn, minimumAmountOut, swapBaseForQuote, owner } =\n swapParam\n\n const { inputMint, outputMint, inputTokenProgram, outputTokenProgram } =\n prepareSwapParams(\n swapBaseForQuote,\n virtualPoolState,\n poolConfigState\n )\n\n const eventAuthority = deriveEventAuthority()\n const poolAuthority = derivePoolAuthority(program.programId)\n\n const inputTokenAccount = findAssociatedTokenAddress(\n owner,\n inputMint,\n inputTokenProgram\n )\n\n const outputTokenAccount = findAssociatedTokenAddress(\n owner,\n outputMint,\n outputTokenProgram\n )\n\n const isSOLInput = isNativeSol(inputMint)\n const isSOLOutput = isNativeSol(outputMint)\n\n const ixs = []\n const cleanupIxs = []\n if (isSOLInput) {\n ixs.push(\n createAssociatedTokenAccountIdempotentInstruction(\n owner,\n inputTokenAccount,\n owner,\n inputMint\n )\n )\n ixs.push(\n ...wrapSOLInstruction(\n owner,\n inputTokenAccount,\n BigInt(amountIn.toString())\n )\n )\n const unwrapIx = unwrapSOLInstruction(owner)\n if (unwrapIx) {\n cleanupIxs.push(unwrapIx)\n }\n }\n\n ixs.push(\n createAssociatedTokenAccountIdempotentInstruction(\n owner,\n outputTokenAccount,\n owner,\n outputMint\n )\n )\n\n if (isSOLOutput) {\n const unwrapIx = unwrapSOLInstruction(owner)\n if (unwrapIx) {\n cleanupIxs.push(unwrapIx)\n }\n }\n\n const accounts: SwapAccounts = {\n baseMint: virtualPoolState.baseMint,\n quoteMint: poolConfigState.quoteMint,\n pool: pool,\n baseVault: virtualPoolState.baseVault,\n quoteVault: virtualPoolState.quoteVault,\n config: virtualPoolState.config,\n eventAuthority,\n poolAuthority,\n referralTokenAccount: null,\n inputTokenAccount,\n outputTokenAccount,\n payer: owner,\n tokenBaseProgram: swapBaseForQuote\n ? inputTokenProgram\n : outputTokenProgram,\n tokenQuoteProgram: swapBaseForQuote\n ? outputTokenProgram\n : inputTokenProgram,\n program: program.programId,\n }\n\n const transaction = await program.methods\n .swap({\n amountIn,\n minimumAmountOut,\n })\n .accounts(accounts)\n .transaction()\n\n if (ixs.length > 0) {\n transaction.add(...ixs)\n }\n\n if (cleanupIxs.length > 0) {\n transaction.add(...cleanupIxs)\n }\n\n return transaction\n }\n\n /**\n * Calculate the amount out for a swap (quote)\n * @param virtualPool - The virtual pool\n * @param config - The config\n * @param swapBaseForQuote - Whether to swap base for quote\n * @param amountIn - The amount in\n * @param hasReferral - Whether the referral is enabled\n * @param currentPoint - The current point\n * @returns The swap quote result\n */\n swapQuote(swapQuoteParam: SwapQuoteParam) {\n const {\n virtualPool,\n config,\n swapBaseForQuote,\n amountIn,\n hasReferral,\n currentPoint,\n } = swapQuoteParam\n\n return swapQuote(\n virtualPool,\n config,\n swapBaseForQuote,\n amountIn,\n hasReferral,\n currentPoint\n )\n }\n}\n\n/**\n * Partner-related operations\n */\nexport class PartnerService {\n constructor(private programClient: DynamicBondingCurveProgramClient) {}\n\n /**\n * Create a new config\n * @param createConfigParam - The parameters for the config\n * @returns A new config\n */\n async createConfig(\n createConfigParam: CreateConfigParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n\n const {\n config,\n feeClaimer,\n leftoverReceiver,\n quoteMint,\n payer,\n ...configParam\n } = createConfigParam\n\n const eventAuthority = deriveEventAuthority()\n\n const accounts = {\n config,\n feeClaimer,\n leftoverReceiver,\n quoteMint,\n payer,\n eventAuthority,\n program: program.programId,\n }\n\n return program.methods\n .createConfig(configParam)\n .accounts(accounts)\n .transaction()\n }\n\n /**\n * Create a new constant product config with lock vesting\n * @param createConstantProductConfigWithLockVestingParam - The parameters for the constant product config with lock vesting\n * @returns A new constant product config with lock vesting\n */\n async createConstantProductConfigWithLockVesting(\n createConstantProductConfigWithLockVestingParam: CreateConstantProductConfigWithLockVestingParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n\n const {\n lockVestingParams,\n totalTokenSupply,\n percentageSupplyOnMigration,\n startPrice,\n migrationPrice,\n tokenBaseDecimal,\n tokenQuoteDecimal,\n swapBufferPercentage,\n baseFeeBps,\n dynamicFeeEnabled,\n activationType,\n collectFeeMode,\n migrationOption,\n migrationFeeOption,\n tokenType,\n partnerLpPercentage,\n creatorLpPercentage,\n partnerLockedLpPercentage,\n creatorLockedLpPercentage,\n feeClaimer,\n leftoverReceiver,\n payer,\n quoteMint,\n config,\n } = createConstantProductConfigWithLockVestingParam\n\n const eventAuthority = deriveEventAuthority()\n\n const constantProductCurveWithLockVestingConfig: ConfigParameters =\n designConstantProductCurveWithLockVesting({\n lockVestingParams,\n totalTokenSupply,\n percentageSupplyOnMigration,\n startPrice,\n migrationPrice,\n tokenBaseDecimal,\n tokenQuoteDecimal,\n swapBufferPercentage,\n baseFeeBps,\n dynamicFeeEnabled,\n activationType,\n collectFeeMode,\n migrationOption,\n migrationFeeOption,\n tokenType,\n partnerLpPercentage,\n creatorLpPercentage,\n partnerLockedLpPercentage,\n creatorLockedLpPercentage,\n })\n\n const accounts = {\n config,\n feeClaimer,\n leftoverReceiver,\n quoteMint,\n payer,\n eventAuthority,\n program: program.programId,\n }\n\n return program.methods\n .createConfig(constantProductCurveWithLockVestingConfig)\n .accounts(accounts)\n .transaction()\n }\n\n /**\n * Create a new constant product config without lock vesting\n * @param createConstantProductConfigWithoutLockVestingParam - The parameters for the constant product config without lock vesting\n * @returns A new constant product config without lock vesting\n */\n async createConstantProductConfigWithoutLockVesting(\n createConstantProductConfigWithoutLockVestingParam: CreateConstantProductConfigWithoutLockVestingParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n\n const {\n totalTokenSupply,\n percentageSupplyOnMigration,\n startPrice,\n tokenBaseDecimal,\n tokenQuoteDecimal,\n swapBufferPercentage,\n baseFeeBps,\n dynamicFeeEnabled,\n activationType,\n collectFeeMode,\n migrationOption,\n migrationFeeOption,\n tokenType,\n partnerLpPercentage,\n creatorLpPercentage,\n partnerLockedLpPercentage,\n creatorLockedLpPercentage,\n feeClaimer,\n leftoverReceiver,\n payer,\n quoteMint,\n config,\n } = createConstantProductConfigWithoutLockVestingParam\n\n const eventAuthority = deriveEventAuthority()\n\n const constantProductCurveWithoutLockVestingConfig: ConfigParameters =\n designConstantProductCurveWithoutLockVesting({\n totalTokenSupply,\n percentageSupplyOnMigration,\n startPrice,\n tokenBaseDecimal,\n tokenQuoteDecimal,\n swapBufferPercentage,\n baseFeeBps,\n dynamicFeeEnabled,\n activationType,\n collectFeeMode,\n migrationOption,\n migrationFeeOption,\n tokenType,\n partnerLpPercentage,\n creatorLpPercentage,\n partnerLockedLpPercentage,\n creatorLockedLpPercentage,\n })\n\n console.log(\n convertBNToDecimal(constantProductCurveWithoutLockVestingConfig)\n )\n\n const accounts = {\n config,\n feeClaimer,\n leftoverReceiver,\n quoteMint,\n payer,\n eventAuthority,\n program: program.programId,\n }\n\n return program.methods\n .createConfig(constantProductCurveWithoutLockVestingConfig)\n .accounts(accounts)\n .transaction()\n }\n\n /**\n * Create partner metadata\n * @param createPartnerMetadataParam - The parameters for the partner metadata\n * @returns A create partner metadata transaction\n */\n async createPartnerMetadata(\n createPartnerMetadataParam: CreatePartnerMetadataParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n const eventAuthority = deriveEventAuthority()\n const partnerMetadata = derivePartnerMetadata(\n createPartnerMetadataParam.feeClaimer,\n program.programId\n )\n\n const partnerMetadataParam: CreatePartnerMetadataParameters = {\n padding: new Array(96).fill(0),\n name: createPartnerMetadataParam.name,\n website: createPartnerMetadataParam.website,\n logo: createPartnerMetadataParam.logo,\n }\n\n const accounts = {\n partnerMetadata,\n payer: createPartnerMetadataParam.payer,\n feeClaimer: createPartnerMetadataParam.feeClaimer,\n systemProgram: SystemProgram.programId,\n eventAuthority,\n program: program.programId,\n }\n\n return program.methods\n .createPartnerMetadata(partnerMetadataParam)\n .accounts(accounts)\n .transaction()\n }\n\n /**\n * Claim trading fee\n * @param claimTradingFeeParam - The parameters for the claim trading fee\n * @returns A claim trading fee transaction\n */\n async claimTradingFee(\n claimTradingFeeParam: ClaimTradingFeeParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n const poolAuthority = derivePoolAuthority(program.programId)\n const eventAuthority = deriveEventAuthority()\n\n const virtualPoolState = await this.programClient.getPool(\n claimTradingFeeParam.pool\n )\n\n if (!virtualPoolState) {\n throw new Error(\n `Pool not found: ${claimTradingFeeParam.pool.toString()}`\n )\n }\n\n const poolConfigState = await this.programClient.getPoolConfig(\n virtualPoolState.config\n )\n\n const tokenBaseProgram =\n poolConfigState.tokenType === TokenType.SPL\n ? TOKEN_PROGRAM_ID\n : TOKEN_2022_PROGRAM_ID\n\n const tokenQuoteProgram =\n poolConfigState.quoteTokenFlag === TokenType.SPL\n ? TOKEN_PROGRAM_ID\n : TOKEN_2022_PROGRAM_ID\n\n const tokenBaseAccount = findAssociatedTokenAddress(\n claimTradingFeeParam.feeClaimer,\n virtualPoolState.baseMint,\n tokenBaseProgram\n )\n\n const tokenQuoteAccount = findAssociatedTokenAddress(\n claimTradingFeeParam.feeClaimer,\n poolConfigState.quoteMint,\n tokenQuoteProgram\n )\n\n const preInstructions: TransactionInstruction[] = []\n const postInstructions: TransactionInstruction[] = []\n\n const createBaseTokenAccountIx =\n createAssociatedTokenAccountIdempotentInstruction(\n claimTradingFeeParam.feeClaimer,\n tokenBaseAccount,\n claimTradingFeeParam.feeClaimer,\n virtualPoolState.baseMint,\n tokenBaseProgram\n )\n\n if (createBaseTokenAccountIx) {\n preInstructions.push(createBaseTokenAccountIx)\n }\n\n const createQuoteTokenAccountIx =\n createAssociatedTokenAccountIdempotentInstruction(\n claimTradingFeeParam.feeClaimer,\n tokenQuoteAccount,\n claimTradingFeeParam.feeClaimer,\n poolConfigState.quoteMint,\n tokenQuoteProgram\n )\n\n if (createQuoteTokenAccountIx) {\n preInstructions.push(createQuoteTokenAccountIx)\n }\n\n const unwrapSolIx = unwrapSOLInstruction(\n claimTradingFeeParam.feeClaimer\n )\n\n if (unwrapSolIx) {\n postInstructions.push(unwrapSolIx)\n }\n\n const accounts = {\n poolAuthority,\n config: virtualPoolState.config,\n pool: claimTradingFeeParam.pool,\n tokenAAccount: tokenBaseAccount,\n tokenBAccount: tokenQuoteAccount,\n baseVault: virtualPoolState.baseVault,\n quoteVault: virtualPoolState.quoteVault,\n baseMint: virtualPoolState.baseMint,\n quoteMint: poolConfigState.quoteMint,\n feeClaimer: claimTradingFeeParam.feeClaimer,\n tokenBaseProgram,\n tokenQuoteProgram,\n eventAuthority,\n program: program.programId,\n }\n\n return program.methods\n .claimTradingFee(\n claimTradingFeeParam.maxBaseAmount,\n claimTradingFeeParam.maxQuoteAmount\n )\n .accounts(accounts)\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction()\n }\n\n /**\n * Partner withdraw surplus\n * @param partnerWithdrawSurplusParam - The parameters for the partner withdraw surplus\n * @returns A partner withdraw surplus transaction\n */\n async partnerWithdrawSurplus(\n partnerWithdrawSurplusParam: PartnerWithdrawSurplusParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n const poolAuthority = derivePoolAuthority(program.programId)\n const eventAuthority = deriveEventAuthority()\n\n const virtualPoolState = await this.programClient.getPool(\n partnerWithdrawSurplusParam.virtualPool\n )\n if (!virtualPoolState) {\n throw new Error(\n `Pool not found: ${partnerWithdrawSurplusParam.virtualPool.toString()}`\n )\n }\n\n const poolConfigState = await this.programClient.getPoolConfig(\n virtualPoolState.config\n )\n\n const tokenQuoteProgram =\n poolConfigState.quoteTokenFlag === TokenType.SPL\n ? TOKEN_PROGRAM_ID\n : TOKEN_2022_PROGRAM_ID\n\n const tokenQuoteAccount = findAssociatedTokenAddress(\n partnerWithdrawSurplusParam.feeClaimer,\n poolConfigState.quoteMint,\n tokenQuoteProgram\n )\n\n const preInstructions: TransactionInstruction[] = []\n const postInstructions: TransactionInstruction[] = []\n\n const createQuoteTokenAccountIx =\n createAssociatedTokenAccountIdempotentInstruction(\n partnerWithdrawSurplusParam.feeClaimer,\n tokenQuoteAccount,\n partnerWithdrawSurplusParam.feeClaimer,\n poolConfigState.quoteMint,\n tokenQuoteProgram\n )\n\n if (createQuoteTokenAccountIx) {\n preInstructions.push(createQuoteTokenAccountIx)\n }\n\n const unwrapSolIx = unwrapSOLInstruction(\n partnerWithdrawSurplusParam.feeClaimer\n )\n\n if (unwrapSolIx) {\n postInstructions.push(unwrapSolIx)\n }\n\n const accounts = {\n poolAuthority,\n config: virtualPoolState.config,\n virtualPool: partnerWithdrawSurplusParam.virtualPool,\n tokenQuoteAccount,\n quoteVault: virtualPoolState.quoteVault,\n quoteMint: poolConfigState.quoteMint,\n feeClaimer: partnerWithdrawSurplusParam.feeClaimer,\n tokenQuoteProgram,\n eventAuthority,\n program: program.programId,\n }\n\n return program.methods\n .partnerWithdrawSurplus()\n .accounts(accounts)\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction()\n }\n\n /**\n * Withdraw leftover\n * @param withdrawLeftoverParam - The parameters for the withdraw leftover\n * @returns A withdraw leftover transaction\n */\n async withdrawLeftover(\n withdrawLeftoverParam: WithdrawLeftoverParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n const poolAuthority = derivePoolAuthority(program.programId)\n const eventAuthority = deriveEventAuthority()\n\n const virtualPoolState = await this.programClient.getPool(\n withdrawLeftoverParam.virtualPool\n )\n\n if (!virtualPoolState) {\n throw new Error(\n `Pool not found: ${withdrawLeftoverParam.virtualPool.toString()}`\n )\n }\n\n const poolConfigState = await this.programClient.getPoolConfig(\n virtualPoolState.config\n )\n\n const tokenBaseProgram =\n poolConfigState.tokenType === TokenType.SPL\n ? TOKEN_PROGRAM_ID\n : TOKEN_2022_PROGRAM_ID\n\n const tokenBaseAccount = findAssociatedTokenAddress(\n poolConfigState.leftoverReceiver,\n virtualPoolState.baseMint,\n tokenBaseProgram\n )\n\n const preInstructions: TransactionInstruction[] = []\n\n const createBaseTokenAccountIx =\n createAssociatedTokenAccountIdempotentInstruction(\n poolConfigState.leftoverReceiver,\n tokenBaseAccount,\n poolConfigState.leftoverReceiver,\n virtualPoolState.baseMint,\n tokenBaseProgram\n )\n\n if (createBaseTokenAccountIx) {\n preInstructions.push(createBaseTokenAccountIx)\n }\n\n const accounts = {\n poolAuthority,\n config: virtualPoolState.config,\n virtualPool: withdrawLeftoverParam.virtualPool,\n tokenBaseAccount,\n baseVault: virtualPoolState.baseVault,\n baseMint: virtualPoolState.baseMint,\n leftoverReceiver: poolConfigState.leftoverReceiver,\n tokenBaseProgram,\n eventAuthority,\n program: program.programId,\n }\n\n return program.methods\n .withdrawLeftover()\n .accounts(accounts)\n .preInstructions(preInstructions)\n .transaction()\n }\n}\n\n/**\n * Migration-related operations\n */\nexport class MigrationService {\n private connection: Connection\n\n constructor(private programClient: DynamicBondingCurveProgramClient) {\n this.connection = this.programClient.getProgram().provider.connection\n }\n\n /**\n * Get the vault program instance\n * @returns The vault program instance\n */\n private getVaultProgram(): Program<DynamicVault> {\n return createVaultProgram(this.connection)\n }\n\n /**\n * Get the DAMM V1 program instance\n * @returns The DAMM V1 program instance\n */\n private getDammV1Program(): Program<DammV1> {\n return createDammV1Program(this.connection)\n }\n\n /**\n * Create metadata for the migration of Meteora DAMM V1 or DAMM V2\n * @param createDammMigrationMetadataParam - The parameters for the migration\n * @returns A migration transaction\n */\n async createDammMigrationMetadata(\n createDammMigrationMetadataParam: CreateDammMigrationMetadataParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n\n const migrationMetadata = deriveDammMigrationMetadataAddress(\n createDammMigrationMetadataParam.virtualPool,\n program.programId,\n createDammMigrationMetadataParam.migrateToDammV2\n )\n\n const accounts = {\n virtualPool: createDammMigrationMetadataParam.virtualPool,\n config: createDammMigrationMetadataParam.config,\n migrationMetadata: migrationMetadata,\n payer: createDammMigrationMetadataParam.payer,\n systemProgram: SystemProgram.programId,\n }\n\n if (createDammMigrationMetadataParam.migrateToDammV2) {\n return program.methods\n .migrationDammV2CreateMetadata()\n .accountsPartial(accounts)\n .transaction()\n } else {\n return program.methods\n .migrationMeteoraDammCreateMetadata()\n .accountsPartial(accounts)\n .transaction()\n }\n }\n\n /**\n * Create a locker\n * @param createLockerParam - The parameters for the locker\n * @returns A create locker transaction\n */\n async createLocker(\n createLockerParam: CreateLockerParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n const poolAuthority = derivePoolAuthority(program.programId)\n const lockerEventAuthority = deriveLockerEventAuthority()\n\n const virtualPoolState = await this.programClient.getPool(\n createLockerParam.virtualPool\n )\n\n if (!virtualPoolState) {\n throw new Error(\n `Pool not found: ${createLockerParam.virtualPool.toString()}`\n )\n }\n\n const poolConfigState = await this.programClient.getPoolConfig(\n virtualPoolState.config\n )\n\n const base = deriveBaseKeyForLocker(createLockerParam.virtualPool)\n\n const escrow = deriveEscrow(base)\n\n const tokenProgram =\n poolConfigState.tokenType === 0\n ? TOKEN_PROGRAM_ID\n : TOKEN_2022_PROGRAM_ID\n\n const escrowToken = findAssociatedTokenAddress(\n escrow,\n virtualPoolState.baseMint,\n tokenProgram\n )\n\n const preInstructions: TransactionInstruction[] = []\n\n const createOwnerEscrowVaultTokenXIx =\n createAssociatedTokenAccountIdempotentInstruction(\n createLockerParam.payer,\n escrowToken,\n escrow,\n virtualPoolState.baseMint,\n tokenProgram\n )\n\n preInstructions.push(createOwnerEscrowVaultTokenXIx)\n\n const accounts = {\n virtualPool: createLockerParam.virtualPool,\n config: virtualPoolState.config,\n poolAuthority,\n baseVault: virtualPoolState.baseVault,\n baseMint: virtualPoolState.baseMint,\n base,\n creator: virtualPoolState.creator,\n escrow,\n escrowToken,\n payer: createLockerParam.payer,\n tokenProgram,\n lockerProgram: LOCKER_PROGRAM_ID,\n lockerEventAuthority,\n systemProgram: SystemProgram.programId,\n }\n\n return program.methods\n .createLocker()\n .accounts(accounts)\n .preInstructions(preInstructions)\n .transaction()\n }\n\n ///////////////////////\n // DAMM V1 FUNCTIONS //\n ///////////////////////\n\n /**\n * Migrate to DAMM V1\n * @param migrateToDammV1Param - The parameters for the migration\n * @returns A migrate transaction\n */\n async migrateToDammV1(\n migrateToDammV1Param: MigrateToDammV1Param\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n\n const virtualPoolState = await this.programClient.getPool(\n migrateToDammV1Param.virtualPool\n )\n if (!virtualPoolState) {\n throw new Error(\n `Pool not found: ${migrateToDammV1Param.virtualPool.toString()}`\n )\n }\n\n const poolConfigState = await this.programClient.getPoolConfig(\n virtualPoolState.config\n )\n\n const poolAuthority = derivePoolAuthority(program.programId)\n\n const migrationMetadata = deriveDammMigrationMetadataAddress(\n migrateToDammV1Param.virtualPool,\n program.programId,\n false\n )\n\n const dammPool = deriveDammPoolAddress(\n migrateToDammV1Param.dammConfig,\n virtualPoolState.baseMint,\n poolConfigState.quoteMint\n )\n\n const lpMint = deriveLpMintAddress(dammPool, DAMM_V1_PROGRAM_ID)\n\n const mintMetadata = deriveMetadata(lpMint)\n\n const [protocolTokenAFee, protocolTokenBFee] = [\n deriveProtocolFeeAddress(\n virtualPoolState.baseMint,\n dammPool,\n DAMM_V1_PROGRAM_ID\n ),\n deriveProtocolFeeAddress(\n poolConfigState.quoteMint,\n dammPool,\n DAMM_V1_PROGRAM_ID\n ),\n ]\n\n const vaultProgram = this.getVaultProgram()\n\n const [\n {\n vaultPda: aVault,\n tokenVaultPda: aTokenVault,\n lpMintPda: aLpMintPda,\n },\n {\n vaultPda: bVault,\n tokenVaultPda: bTokenVault,\n lpMintPda: bLpMintPda,\n },\n ] = [\n deriveVaultPdas(virtualPoolState.baseMint, vaultProgram.programId),\n deriveVaultPdas(poolConfigState.quoteMint, vaultProgram.programId),\n ]\n\n const [aVaultAccount, bVaultAccount] = await Promise.all([\n vaultProgram.account.vault.fetchNullable(aVault),\n vaultProgram.account.vault.fetchNullable(bVault),\n ])\n\n let aVaultLpMint = aLpMintPda\n let bVaultLpMint = bLpMintPda\n const preInstructions: TransactionInstruction[] = []\n\n if (!aVaultAccount) {\n const createVaultAIx =\n await createInitializePermissionlessDynamicVaultIx(\n virtualPoolState.baseMint,\n migrateToDammV1Param.payer,\n vaultProgram\n )\n if (createVaultAIx) {\n preInstructions.push(createVaultAIx.instruction)\n }\n } else {\n aVaultLpMint = aVaultAccount.lpMint\n }\n if (!bVaultAccount) {\n const createVaultBIx =\n await createInitializePermissionlessDynamicVaultIx(\n poolConfigState.quoteMint,\n migrateToDammV1Param.payer,\n vaultProgram\n )\n if (createVaultBIx) {\n preInstructions.push(createVaultBIx.instruction)\n }\n } else {\n bVaultLpMint = bVaultAccount.lpMint\n }\n\n const [aVaultLp, bVaultLp] = [\n deriveVaultLPAddress(aVault, dammPool, DAMM_V1_PROGRAM_ID),\n deriveVaultLPAddress(bVault, dammPool, DAMM_V1_PROGRAM_ID),\n ]\n\n const virtualPoolLp = getAssociatedTokenAddressSync(\n lpMint,\n poolAuthority,\n true,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n )\n\n const transaction = await program.methods\n .migrateMeteoraDamm()\n .accountsStrict({\n virtualPool: migrateToDammV1Param.virtualPool,\n migrationMetadata,\n config: virtualPoolState.config,\n poolAuthority,\n pool: dammPool,\n dammConfig: migrateToDammV1Param.dammConfig,\n lpMint,\n tokenAMint: virtualPoolState.baseMint,\n tokenBMint: poolConfigState.quoteMint,\n aVault,\n bVault,\n aTokenVault,\n bTokenVault,\n aVaultLpMint,\n bVaultLpMint,\n aVaultLp,\n bVaultLp,\n baseVault: virtualPoolState.baseVault,\n quoteVault: virtualPoolState.quoteVault,\n virtualPoolLp,\n protocolTokenAFee,\n protocolTokenBFee,\n payer: migrateToDammV1Param.payer,\n rent: SYSVAR_RENT_PUBKEY,\n mintMetadata,\n metadataProgram: METAPLEX_PROGRAM_ID,\n ammProgram: DAMM_V1_PROGRAM_ID,\n vaultProgram: VAULT_PROGRAM_ID,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .transaction()\n\n const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({\n units: 500000,\n })\n\n transaction.add(modifyComputeUnits)\n\n return transaction\n }\n\n /**\n * Lock DAMM V1 LP token for creator or partner\n * @param lockDammV1LpTokenParam - The parameters for the lock\n * @returns A lock transaction\n */\n async lockDammV1LpToken(\n lockDammV1LpTokenParam: DammLpTokenParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n const poolAuthority = derivePoolAuthority(program.programId)\n\n const virtualPoolState = await this.programClient.getPool(\n lockDammV1LpTokenParam.virtualPool\n )\n\n if (!virtualPoolState) {\n throw new Error(\n `Pool not found: ${lockDammV1LpTokenParam.virtualPool.toString()}`\n )\n }\n\n const poolConfigState = await this.programClient.getPoolConfig(\n virtualPoolState.config\n )\n\n const dammPool = deriveDammPoolAddress(\n lockDammV1LpTokenParam.dammConfig,\n virtualPoolState.baseMint,\n poolConfigState.quoteMint\n )\n\n const migrationMetadata = deriveDammMigrationMetadataAddress(\n lockDammV1LpTokenParam.virtualPool,\n DYNAMIC_BONDING_CURVE_PROGRAM_ID,\n false\n )\n\n const vaultProgram = this.getVaultProgram()\n\n const [\n { vaultPda: aVault, lpMintPda: aLpMintPda },\n { vaultPda: bVault, lpMintPda: bLpMintPda },\n ] = [\n deriveVaultPdas(virtualPoolState.baseMint, vaultProgram.programId),\n deriveVaultPdas(poolConfigState.quoteMint, vaultProgram.programId),\n ]\n\n const [aVaultAccount, bVaultAccount] = await Promise.all([\n vaultProgram.account.vault.fetchNullable(aVault),\n vaultProgram.account.vault.fetchNullable(bVault),\n ])\n\n let aVaultLpMint = aLpMintPda\n let bVaultLpMint = bLpMintPda\n const preInstructions: TransactionInstruction[] = []\n\n if (!aVaultAccount) {\n const createVaultAIx =\n await createInitializePermissionlessDynamicVaultIx(\n virtualPoolState.baseMint,\n lockDammV1LpTokenParam.payer,\n vaultProgram\n )\n if (createVaultAIx) {\n preInstructions.push(createVaultAIx.instruction)\n }\n } else {\n aVaultLpMint = aVaultAccount.lpMint\n }\n if (!bVaultAccount) {\n const createVaultBIx =\n await createInitializePermissionlessDynamicVaultIx(\n poolConfigState.quoteMint,\n lockDammV1LpTokenParam.payer,\n vaultProgram\n )\n if (createVaultBIx) {\n preInstructions.push(createVaultBIx.instruction)\n }\n } else {\n bVaultLpMint = bVaultAccount.lpMint\n }\n\n const [aVaultLp, bVaultLp] = [\n deriveVaultLPAddress(aVault, dammPool, DAMM_V1_PROGRAM_ID),\n deriveVaultLPAddress(bVault, dammPool, DAMM_V1_PROGRAM_ID),\n ]\n\n const lpMint = deriveLpMintAddress(dammPool, DAMM_V1_PROGRAM_ID)\n\n const dammV1Program = this.getDammV1Program()\n\n const dammV1MigrationMetadata =\n await this.programClient.getDammV1MigrationMetadata(\n migrationMetadata\n )\n\n let lockEscrowKey: PublicKey\n\n if (lockDammV1LpTokenParam.isPartner) {\n lockEscrowKey = deriveLockEscrowAddress(\n dammPool,\n dammV1MigrationMetadata.partner,\n DAMM_V1_PROGRAM_ID\n )\n\n const lockEscrowData =\n await this.connection.getAccountInfo(lockEscrowKey)\n\n if (!lockEscrowData) {\n const ix = await createLockEscrowIx(\n this.connection,\n lockDammV1LpTokenParam.payer,\n dammPool,\n lpMint,\n dammV1MigrationMetadata.partner,\n lockEscrowKey,\n dammV1Program\n )\n preInstructions.push(ix)\n }\n } else {\n lockEscrowKey = deriveLockEscrowAddress(\n dammPool,\n virtualPoolState.creator,\n DAMM_V1_PROGRAM_ID\n )\n\n console.log('lockEscrowKey', lockEscrowKey)\n\n const lockEscrowData =\n await this.connection.getAccountInfo(lockEscrowKey)\n\n if (!lockEscrowData) {\n const ix = await createLockEscrowIx(\n this.connection,\n lockDammV1LpTokenParam.payer,\n dammPool,\n lpMint,\n virtualPoolState.creator,\n lockEscrowKey,\n dammV1Program\n )\n preInstructions.push(ix)\n }\n }\n\n const escrowVault = getAssociatedTokenAddressSync(\n lpMint,\n lockEscrowKey,\n true,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n )\n\n const createEscrowVaultIx =\n createAssociatedTokenAccountIdempotentInstruction(\n lockDammV1LpTokenParam.payer,\n escrowVault,\n lockEscrowKey,\n lpMint,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n )\n\n preInstructions.push(createEscrowVaultIx)\n\n const sourceTokens = getAssociatedTokenAddressSync(\n lpMint,\n poolAuthority,\n true\n )\n\n const accounts = {\n virtualPool: lockDammV1LpTokenParam.virtualPool,\n migrationMetadata,\n poolAuthority,\n pool: dammPool,\n lpMint,\n lockEscrow: lockEscrowKey,\n owner: lockDammV1LpTokenParam.isPartner\n ? dammV1MigrationMetadata.partner\n : virtualPoolState.creator,\n sender: lockDammV1LpTokenParam.payer,\n sourceTokens,\n escrowVault,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n aVault,\n bVault,\n aVaultLp,\n bVaultLp,\n aVaultLpMint,\n bVaultLpMint,\n ammProgram: DAMM_V1_PROGRAM_ID,\n vaultProgram: VAULT_PROGRAM_ID,\n tokenProgram: TOKEN_PROGRAM_ID,\n }\n\n return program.methods\n .migrateMeteoraDammLockLpToken()\n .accountsStrict(accounts)\n .preInstructions(preInstructions)\n .transaction()\n }\n\n /**\n * Claim DAMM V1 LP token for creator or partner\n * @param claimDammV1LpTokenParam - The parameters for the claim\n * @returns A claim transaction\n */\n async claimDammV1LpToken(\n claimDammV1LpTokenParam: DammLpTokenParam\n ): Promise<Transaction> {\n const program = this.programClient.getProgram()\n const poolAuthority = derivePoolAuthority(program.programId)\n\n const virtualPoolState = await this.programClient.getPool(\n claimDammV1LpTokenParam.virtualPool\n )\n\n if (!virtualPoolState) {\n throw new Error(\n `Pool not found: ${claimDammV1LpTokenParam.virtualPool.toString()}`\n )\n }\n\n const poolConfigState = await this.programClient.getPoolConfig(\n virtualPoolState.config\n )\n\n const dammPool = deriveDammPoolAddress(\n claimDammV1LpTokenParam.dammConfig,\n virtualPoolState.baseMint,\n poolConfigState.quoteMint\n )\n\n const migrationMetadata = deriveDammMigrationMetadataAddress(\n claimDammV1LpTokenParam.virtualPool,\n DYNAMIC_BONDING_CURVE_PROGRAM_ID,\n false\n )\n\n const lpMint = deriveLpMintAddress(dammPool, DAMM_V1_PROGRAM_ID)\n\n console.log('lpMint', lpMint.toString())\n\n const destinationToken = findAssociatedTokenAddress(\n claimDammV1LpTokenParam.payer,\n lpMint,\n TOKEN_PROGRAM_ID\n )\n\n const preInstructions: TransactionInstruction[] = []\n\n const createDestinationTokenIx =\n createAssociatedTokenAccountIdempotentInstruction(\n claimDammV1LpTokenParam.payer,\n destinationToken,\n claimDammV1LpTokenParam.payer,\n lpMint,\n TOKEN_PROGRAM_ID\n )\n\n preInstructions.push(createDestinationTokenIx)\n\n const sourceToken = getAssociatedTokenAddressSync(\n lpMint,\n poolAuthority,\n true\n )\n\n const accounts = {\n virtualPool: claimDammV1LpTokenParam.virtualPool,\n migrationMetadata,\n poolAuthority,\n lpMint,\n sourceToken,\n destinationToken,\n owner: claimDammV1LpTokenParam.isPartner\n ? poolConfigState.feeClaimer\n : virtualPoolState.creator,\n sender: claimDammV1LpTokenParam.payer,\n tokenProgram: TOKEN_PROGRAM_ID,\n }\n\n return program.methods\n .migrateMeteoraDammClaimLpToken()\n .accountsPartial(accounts)\n .preInstructions(preInstructions)\n .transaction()\n }\n\n ///////////////////////\n // DAMM V2 FUNCTIONS //\n ///////////////////////\n\n /**\n * Migrate to DAMM V2\n * @param migrateToDammV2Param - The parameters for the migration\n * @returns A migrate transaction\n */\n async migrateToDammV2(\n migrateToDammV2Param: MigrateToDammV2Param\n ): Promise<MigrateToDammV2Response> {\n const program = this.programClient.getProgram()\n const poolAuthority = derivePoolAuthority(program.programId)\n const dammPoolAuthority = derivePoolAuthority(DAMM_V2_PROGRAM_ID)\n const dammEventAuthority = deriveDammV2EventAuthority()\n\n const virtualPoolState = await this.programClient.getPool(\n migrateToDammV2Param.virtualPool\n )\n\n if (!virtualPoolState) {\n throw new Error(\n `Pool not found: ${migrateToDammV2Param.virtualPool.toString()}`\n )\n }\n\n const poolConfigState = await this.programClient.getPoolConfig(\n virtualPoolState.config\n )\n\n const migrationMetadata = deriveDammMigrationMetadataAddress(\n migrateToDammV2Param.virtualPool,\n program.programId,\n true\n )\n\n const dammPool = deriveDammV2PoolAddress(\n migrateToDammV2Param.dammConfig,\n virtualPoolState.baseMint,\n poolConfigState.quoteMint\n )\n\n const firstPositionNftKP = Keypair.generate()\n const firstPosition = derivePositionAddress(\n firstPositionNftKP.publicKey\n )\n const firstPositionNftAccount = derivePositionNftAccount(\n firstPositionNftKP.publicKey\n )\n\n const secondPositionNftKP = Keypair.generate()\n const secondPosition = derivePositionAddress(\n secondPositionNftKP.publicKey\n )\n const secondPositionNftAccount = derivePositionNftAccount(\n secondPositionNftKP.publicKey\n )\n\n const tokenAVault = deriveTokenVaultAddress(\n dammPool,\n virtualPoolState.baseMint,\n DAMM_V2_PROGRAM_ID\n )\n\n const tokenBVault = deriveTokenVaultAddress(\n dammPool,\n poolConfigState.quoteMint,\n DAMM_V2_PROGRAM_ID\n )\n\n const tokenBaseProgram =\n poolConfigState.tokenType == 0\n ? TOKEN_PROGRAM_ID\n : TOKEN_2022_PROGRAM_ID\n\n const tokenQuoteProgram =\n poolConfigState.quoteTokenFlag == 0\n ? TOKEN_PROGRAM_ID\n : TOKEN_2022_PROGRAM_ID\n\n const tx = await program.methods\n .migrationDammV2()\n .accountsStrict({\n virtualPool: migrateToDammV2Param.virtualPool,\n migrationMetadata,\n config: virtualPoolState.config,\n poolAuthority,\n pool: dammPool,\n firstPositionNftMint: firstPositionNftKP.publicKey,\n firstPosition,\n firstPositionNftAccount,\n secondPositionNftMint: secondPositionNftKP.publicKey,\n secondPosition,\n secondPositionNftAccount,\n dammPoolAuthority,\n ammProgram: DAMM_V2_PROGRAM_ID,\n baseMint: virtualPoolState.baseMint,\n quoteMint: poolConfigState.quoteMint,\n tokenAVault,\n tokenBVault,\n baseVault: virtualPoolState.baseVault,\n quoteVault: virtualPoolState.quoteVault,\n payer: migrateToDammV2Param.payer,\n tokenBaseProgram,\n tokenQuoteProgram,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n dammEventAuthority,\n })\n .remainingAccounts([\n {\n isSigner: false,\n isWritable: false,\n pubkey: migrateToDammV2Param.dammConfig,\n },\n ])\n .transaction()\n\n const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({\n units: 500000,\n })\n\n tx.add(modifyComputeUnits)\n\n return {\n transaction: tx,\n firstPositionNftKeypair: firstPositionNftKP,\n secondPositionNftKeypair: secondPositionNftKP,\n }\n }\n}\n\n/**\n * Main client class\n */\nexport class DynamicBondingCurveClient {\n private programClient: DynamicBondingCurveProgramClient\n public pools: PoolService\n public partners: PartnerService\n public migrations: MigrationService\n\n constructor(connection: Connection) {\n this.programClient = new DynamicBondingCurveProgramClient(connection)\n this.pools = new PoolService(this.programClient)\n this.partners = new PartnerService(this.programClient)\n this.migrations = new MigrationService(this.programClient)\n }\n\n /**\n * Get the underlying program client\n * @returns The program client\n */\n getProgramClient(): DynamicBondingCurveProgramClient {\n return this.programClient\n }\n\n /**\n * Static method to create a client instance for a specific pool\n * @param connection - The connection to the Solana network\n * @returns A DynamicBondingCurveClient instance\n */\n static async create(\n connection: Connection\n ): Promise<DynamicBondingCurveClient> {\n const client = new DynamicBondingCurveClient(connection)\n return client\n }\n}\n","import { PublicKey } from '@solana/web3.js'\nimport {\n BASE_ADDRESS,\n DAMM_V1_PROGRAM_ID,\n DAMM_V2_PROGRAM_ID,\n LOCKER_PROGRAM_ID,\n METAPLEX_PROGRAM_ID,\n VAULT_PROGRAM_ID,\n DYNAMIC_BONDING_CURVE_PROGRAM_ID,\n} from './constants'\nimport { getFirstKey, getSecondKey } from './utils'\n\nconst SEED = Object.freeze({\n POOL_AUTHORITY: 'pool_authority',\n EVENT_AUTHORITY: '__event_authority',\n POOL: 'pool',\n TOKEN_VAULT: 'token_vault',\n METADATA: 'metadata',\n PARTNER_METADATA: 'partner_metadata',\n CLAIM_FEE_OPERATOR: 'cf_operator',\n DAMM_V1_MIGRATION_METADATA: 'meteora',\n DAMM_V2_MIGRATION_METADATA: 'damm_v2',\n LP_MINT: 'lp_mint',\n FEE: 'fee',\n POSITION: 'position',\n POSITION_NFT_ACCOUNT: 'position_nft_account',\n LOCK_ESCROW: 'lock_escrow',\n VIRTUAL_POOL_METADATA: 'virtual_pool_metadata',\n ESCROW: 'escrow',\n BASE_LOCKER: 'base_locker',\n VAULT: 'vault',\n})\n\n/////////////////////\n// EVENT AUTHORITY //\n/////////////////////\n\n/**\n * Derive the dynamic bonding curve event authority\n * @returns The event authority\n */\nexport function deriveEventAuthority(): PublicKey {\n const [eventAuthority] = PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.EVENT_AUTHORITY)],\n DYNAMIC_BONDING_CURVE_PROGRAM_ID\n )\n return eventAuthority\n}\n\n/**\n * Derive the DAMM V2 event authority\n * @returns The event authority\n */\nexport function deriveDammV2EventAuthority(): PublicKey {\n const [eventAuthority] = PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.EVENT_AUTHORITY)],\n DAMM_V2_PROGRAM_ID\n )\n return eventAuthority\n}\n\n/**\n * Derive the locker event authority\n * @returns The event authority\n */\nexport function deriveLockerEventAuthority(): PublicKey {\n const [eventAuthority] = PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.EVENT_AUTHORITY)],\n LOCKER_PROGRAM_ID\n )\n return eventAuthority\n}\n\n////////////////////\n// POOL AUTHORITY //\n////////////////////\n\n/**\n * Derive the pool authority\n * @param programId - The program ID\n * @returns The pool authority\n */\nexport function derivePoolAuthority(programId: PublicKey): PublicKey {\n const [poolAuthority] = PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.POOL_AUTHORITY)],\n programId\n )\n\n return poolAuthority\n}\n\n////////////////////\n// POOL ADDRESSES //\n////////////////////\n\n/**\n * Derive the pool address\n * @param quoteMint - The quote mint\n * @param baseMint - The base mint\n * @param config - The config\n * @param programId - The program ID\n * @returns The pool\n */\nexport function derivePool(\n quoteMint: PublicKey,\n baseMint: PublicKey,\n config: PublicKey,\n programId: PublicKey\n): PublicKey {\n const isQuoteMintBiggerThanBaseMint =\n new PublicKey(quoteMint)\n .toBuffer()\n .compare(new Uint8Array(new PublicKey(baseMint).toBuffer())) > 0\n\n const [pool] = PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED.POOL),\n new PublicKey(config).toBuffer(),\n isQuoteMintBiggerThanBaseMint\n ? new PublicKey(quoteMint).toBuffer()\n : new PublicKey(baseMint).toBuffer(),\n isQuoteMintBiggerThanBaseMint\n ? new PublicKey(baseMint).toBuffer()\n : new PublicKey(quoteMint).toBuffer(),\n ],\n programId\n )\n\n return pool\n}\n\n/**\n * Derive the DAMM pool address\n * @param config - The config\n * @param tokenAMint - The token A mint\n * @param tokenBMint - The token B mint\n * @returns The DAMM pool address\n */\nexport function deriveDammPoolAddress(\n config: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n getFirstKey(tokenAMint, tokenBMint),\n getSecondKey(tokenAMint, tokenBMint),\n config.toBuffer(),\n ],\n DAMM_V1_PROGRAM_ID\n )[0]\n}\n\n/**\n * Derive the DAMM V2 pool address\n * @param config - The config\n * @param tokenAMint - The token A mint\n * @param tokenBMint - The token B mint\n * @returns The DAMM V2 pool address\n */\nexport function deriveDammV2PoolAddress(\n config: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED.POOL),\n config.toBuffer(),\n getFirstKey(tokenAMint, tokenBMint),\n getSecondKey(tokenAMint, tokenBMint),\n ],\n DAMM_V2_PROGRAM_ID\n )[0]\n}\n\n////////////////////////\n// METADATA ADDRESSES //\n////////////////////////\n\n/**\n * Derive the metadata address\n * @param mint - The mint\n * @returns The metadata address\n */\nexport function deriveMetadata(mint: PublicKey): PublicKey {\n const [metadata] = PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED.METADATA),\n METAPLEX_PROGRAM_ID.toBuffer(),\n mint.toBuffer(),\n ],\n METAPLEX_PROGRAM_ID\n )\n\n return metadata\n}\n\n/**\n * Derive the partner metadata\n * @param feeClaimer - The fee claimer\n * @param programId - The program ID\n * @returns The partner metadata\n */\nexport function derivePartnerMetadata(\n feeClaimer: PublicKey,\n programId: PublicKey\n): PublicKey {\n const [partnerMetadata] = PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.PARTNER_METADATA), feeClaimer.toBuffer()],\n programId\n )\n return partnerMetadata\n}\n\n/**\n * Derive the virtual pool metadata\n * @param pool - The pool\n * @returns The virtual pool metadata\n */\nexport function deriveVirtualPoolMetadata(pool: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.VIRTUAL_POOL_METADATA), pool.toBuffer()],\n DYNAMIC_BONDING_CURVE_PROGRAM_ID\n )[0]\n}\n\n/**\n * Derive the DAMM migration metadata address\n * @param virtual_pool - The virtual pool\n * @param programId - The program ID\n * @param migrateToDammV2 - Whether to migrate to DAMM V2\n * @returns The DAMM migration metadata address\n */\nexport function deriveDammMigrationMetadataAddress(\n virtual_pool: PublicKey,\n programId: PublicKey,\n migrateToDammV2: boolean\n): PublicKey {\n if (migrateToDammV2) {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED.DAMM_V2_MIGRATION_METADATA),\n virtual_pool.toBuffer(),\n ],\n programId\n )[0]\n } else {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED.DAMM_V1_MIGRATION_METADATA),\n virtual_pool.toBuffer(),\n ],\n programId\n )[0]\n }\n}\n\n/////////////////////\n// VAULT ADDRESSES //\n/////////////////////\n\n/**\n * Derive the token vault address\n * @param pool - The pool\n * @param mint - The mint\n * @param programId - The program ID\n * @returns The token vault\n */\nexport function deriveTokenVaultAddress(\n pool: PublicKey,\n mint: PublicKey,\n programId: PublicKey\n): PublicKey {\n const [tokenVault] = PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.TOKEN_VAULT), mint.toBuffer(), pool.toBuffer()],\n programId\n )\n\n return tokenVault\n}\n\n/**\n * Derive the vault LP address\n * @param vault - The vault\n * @param pool - The pool\n * @param programId - The program ID\n * @returns The vault LP address\n */\nexport function deriveVaultLPAddress(\n vault: PublicKey,\n pool: PublicKey,\n programId: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [vault.toBuffer(), pool.toBuffer()],\n programId\n )[0]\n}\n\n/**\n * Derive the vault address\n * @param mint - The mint\n * @param payer - The payer\n * @returns The vault address\n */\nexport function deriveVaultAddress(\n mint: PublicKey,\n payer: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.VAULT), mint.toBuffer(), payer.toBuffer()],\n VAULT_PROGRAM_ID\n )[0]\n}\n\n/**\n * Derive the vault PDAs\n * @param tokenMint - The token mint\n * @param programId - The program ID\n * @param seedBaseKey - The seed base key\n * @returns The vault PDAs\n */\nexport const deriveVaultPdas = (\n tokenMint: PublicKey,\n programId: PublicKey,\n seedBaseKey?: PublicKey\n) => {\n const [vault] = PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED.VAULT),\n tokenMint.toBuffer(),\n (seedBaseKey ?? BASE_ADDRESS).toBuffer(),\n ],\n programId\n )\n\n const [tokenVault] = PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.TOKEN_VAULT), vault.toBuffer()],\n programId\n )\n const [lpMint] = PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.LP_MINT), vault.toBuffer()],\n programId\n )\n\n return {\n vaultPda: vault,\n tokenVaultPda: tokenVault,\n lpMintPda: lpMint,\n }\n}\n\n/**\n * Derive the token vault key\n * @param vaultKey - The vault key\n * @returns The token vault key\n */\nexport function deriveTokenVaultKey(vaultKey: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.TOKEN_VAULT), vaultKey.toBuffer()],\n VAULT_PROGRAM_ID\n )[0]\n}\n\n//////////////////\n// LP ADDRESSES //\n//////////////////\n\n/**\n * Derive the LP mint address\n * @param pool - The pool\n * @param programId - The program ID\n * @returns The LP mint address\n */\nexport function deriveLpMintAddress(pool: PublicKey, programId: PublicKey) {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.LP_MINT), pool.toBuffer()],\n programId\n )[0]\n}\n\n////////////////////////\n// POSITION ADDRESSES //\n////////////////////////\n\n/**\n * Derive the position address\n * @param positionNft - The position NFT\n * @returns The position address\n */\nexport function derivePositionAddress(positionNft: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.POSITION), positionNft.toBuffer()],\n DAMM_V2_PROGRAM_ID\n )[0]\n}\n\n/**\n * Derive the position NFT account\n * @param positionNftMint - The position NFT mint\n * @returns The position NFT account\n */\nexport function derivePositionNftAccount(\n positionNftMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.POSITION_NFT_ACCOUNT), positionNftMint.toBuffer()],\n DAMM_V2_PROGRAM_ID\n )[0]\n}\n\n//////////////////////\n// ESCROW ADDRESSES //\n//////////////////////\n\n/**\n * Derive the lock escrow address\n * @param dammPool - The DAMM pool\n * @param creator - The creator of the virtual pool\n * @param programId - The program ID\n * @returns The lock escrow address\n */\nexport function deriveLockEscrowAddress(\n dammPool: PublicKey,\n creator: PublicKey,\n programId: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEED.LOCK_ESCROW),\n dammPool.toBuffer(),\n creator.toBuffer(),\n ],\n programId\n )[0]\n}\n\n/**\n * Derive the escrow address\n * @param base - The base mint\n * @returns The escrow address\n */\nexport function deriveEscrow(base: PublicKey): PublicKey {\n const [escrow] = PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.ESCROW), base.toBuffer()],\n LOCKER_PROGRAM_ID\n )\n return escrow\n}\n\n///////////////////\n// FEE ADDRESSES //\n///////////////////\n\n/**\n * Derive the protocol fee address\n * @param mint - The mint\n * @param pool - The pool\n * @param programId - The program ID\n * @returns The protocol fee address\n */\nexport function deriveProtocolFeeAddress(\n mint: PublicKey,\n pool: PublicKey,\n programId: PublicKey\n) {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.FEE), mint.toBuffer(), pool.toBuffer()],\n programId\n )[0]\n}\n\n////////////////////\n// LOCKER ADDRESS //\n////////////////////\n\n/**\n * Derive the base key for the locker\n * @param virtualPool - The virtual pool\n * @returns The base key for the locker\n */\nexport function deriveBaseKeyForLocker(virtualPool: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEED.BASE_LOCKER), virtualPool.toBuffer()],\n DYNAMIC_BONDING_CURVE_PROGRAM_ID\n )[0]\n}\n","import BN from 'bn.js'\nimport { PublicKey } from '@solana/web3.js'\n\nexport const BASIS_POINT_MAX: number = 10_000\nexport const OFFSET: number = 64\nexport const U64_MAX: BN = new BN('18446744073709551615')\nexport const MIN_SQRT_PRICE: BN = new BN('4295048016')\nexport const MAX_SQRT_PRICE: BN = new BN('79226673521066979257578248091')\n\n// Curve constants\nexport const MAX_CURVE_POINT = 20\nexport const FEE_DENOMINATOR = new BN(1_000_000_000)\nexport const MAX_FEE_NUMERATOR = new BN(500_000_000)\nexport const MAX_TOKEN_SUPPLY = new BN(10_000_000_000)\nexport const SCALE_OFFSET = 64\nexport const ONE = new BN(1).shln(SCALE_OFFSET)\nexport const RESOLUTION = 64\nexport const ONE_Q64 = new BN(1).shln(RESOLUTION)\nexport const PARTNER_SURPLUS_SHARE = 90\n\n// Pubkey\nexport const DYNAMIC_BONDING_CURVE_PROGRAM_ID = new PublicKey(\n 'virEFLZsQm1iFAs8py1XnziJ67gTzW2bfCWhxNPfccD'\n)\nexport const METAPLEX_PROGRAM_ID = new PublicKey(\n 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s'\n)\nexport const DAMM_V1_PROGRAM_ID = new PublicKey(\n 'Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB'\n)\nexport const DAMM_V2_PROGRAM_ID = new PublicKey(\n 'cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG'\n)\nexport const VAULT_PROGRAM_ID = new PublicKey(\n '24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi'\n)\nexport const LOCKER_PROGRAM_ID = new PublicKey(\n 'LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn'\n)\nexport const BASE_ADDRESS = new PublicKey(\n 'HWzXGcGHy4tcpYfaRDCyLNzXqBTv3E6BttpCH2vJxArv'\n)\n","import { AnchorProvider, Program, Wallet } from '@coral-xyz/anchor'\nimport { TOKEN_2022_PROGRAM_ID } from '@solana/spl-token'\nimport {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n type Connection,\n type GetProgramAccountsFilter,\n} from '@solana/web3.js'\nimport type { DynamicBondingCurve } from './idl/dynamic-bonding-curve/idl'\nimport DynamicBondingCurveIDL from './idl/dynamic-bonding-curve/idl.json'\nimport type { DynamicVault } from './idl/dynamic-vault/idl'\nimport DynamicVaultIDL from './idl/dynamic-vault/idl.json'\nimport type { DammV1 } from './idl/damm-v1/idl'\nimport DammV1IDL from './idl/damm-v1/idl.json'\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n createCloseAccountInstruction,\n getAssociatedTokenAddressSync,\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n} from '@solana/spl-token'\nimport { TokenType } from './types'\nimport BN from 'bn.js'\n\nexport function getSecondKey(key1: PublicKey, key2: PublicKey) {\n const buf1 = key1.toBuffer()\n const buf2 = key2.toBuffer()\n // Buf1 > buf2\n if (Buffer.compare(buf1, buf2) === 1) {\n return buf2\n }\n return buf1\n}\n\nexport function getFirstKey(key1: PublicKey, key2: PublicKey) {\n const buf1 = key1.toBuffer()\n const buf2 = key2.toBuffer()\n // Buf1 > buf2\n if (Buffer.compare(buf1, buf2) === 1) {\n return buf1\n }\n return buf2\n}\n\n/**\n * Create a program instance\n * @param connection - The connection to the network\n * @returns The program instance\n */\nexport function createProgram(connection: Connection) {\n const provider = new AnchorProvider(connection, null as unknown as Wallet, {\n commitment: 'confirmed',\n })\n const program = new Program<DynamicBondingCurve>(\n DynamicBondingCurveIDL,\n provider\n )\n\n return { program }\n}\n\n/**\n * Create a vault program instance\n * @param connection - The connection to the network\n * @returns The vault program instance\n */\nexport function createVaultProgram(\n connection: Connection\n): Program<DynamicVault> {\n const provider = new AnchorProvider(connection, null as unknown as Wallet, {\n commitment: 'confirmed',\n })\n\n const program = new Program<DynamicVault>(DynamicVaultIDL, provider)\n return program\n}\n\n/**\n * Create a DAMM V1 program instance\n * @param connection - The connection to the network\n * @returns The DAMM V1 program instance\n */\nexport function createDammV1Program(connection: Connection): Program<DammV1> {\n const provider = new AnchorProvider(connection, null as unknown as Wallet, {\n commitment: 'confirmed',\n })\n\n const program = new Program<DammV1>(DammV1IDL, provider)\n return program\n}\n\n/**\n * Find the associated token address for a wallet and token mint\n * @param walletAddress - The wallet address\n * @param tokenMintAddress - The token mint address\n * @param tokenProgramId - The token program ID\n * @returns The associated token address\n */\nexport function findAssociatedTokenAddress(\n walletAddress: PublicKey,\n tokenMintAddress: PublicKey,\n tokenProgramId: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n walletAddress.toBuffer(),\n tokenProgramId.toBuffer(),\n tokenMintAddress.toBuffer(),\n ],\n ASSOCIATED_TOKEN_PROGRAM_ID\n )[0]\n}\n\n/**\n * Create a wrap SOL instruction\n * @param from - The from address\n * @param to - The to address\n * @param amount - The amount to wrap\n * @returns The wrap SOL instruction\n */\nexport function wrapSOLInstruction(\n from: PublicKey,\n to: PublicKey,\n amount: bigint\n): TransactionInstruction[] {\n return [\n SystemProgram.transfer({\n fromPubkey: from,\n toPubkey: to,\n lamports: amount,\n }),\n new TransactionInstruction({\n keys: [\n {\n pubkey: to,\n isSigner: false,\n isWritable: true,\n },\n ],\n data: Buffer.from(new Uint8Array([17])),\n programId: TOKEN_PROGRAM_ID,\n }),\n ]\n}\n\n/**\n * Create an unwrap SOL instruction\n * @param owner - The owner of the SOL\n * @param allowOwnerOffCurve - Whether to allow the owner to be off curve\n * @returns The unwrap SOL instruction\n */\nexport function unwrapSOLInstruction(\n owner: PublicKey,\n allowOwnerOffCurve = true\n): TransactionInstruction | null {\n const wSolATAAccount = getAssociatedTokenAddressSync(\n NATIVE_MINT,\n owner,\n allowOwnerOffCurve\n )\n if (wSolATAAccount) {\n const closedWrappedSolInstruction = createCloseAccountInstruction(\n wSolATAAccount,\n owner,\n owner,\n [],\n TOKEN_PROGRAM_ID\n )\n return closedWrappedSolInstruction\n }\n return null\n}\n\n/**\n * Get the token program for a given token type\n * @param tokenType - The token type\n * @returns The token program\n */\nexport function getTokenProgram(tokenType: TokenType): PublicKey {\n return tokenType === TokenType.SPL\n ? TOKEN_PROGRAM_ID\n : TOKEN_2022_PROGRAM_ID\n}\n\n/**\n * Create a memcmp filter for owner-based filtering\n * @param owner - The owner public key or string\n * @param offset - The offset where the owner field is located in the account data\n * @returns A GetProgramAccountsFilter array with the owner filter\n */\nexport function createProgramAccountFilter(\n owner: PublicKey | string,\n offset: number\n): GetProgramAccountsFilter[] {\n const ownerKey = typeof owner === 'string' ? new PublicKey(owner) : owner\n return [\n {\n memcmp: {\n offset,\n bytes: ownerKey.toBase58(),\n encoding: 'base58',\n },\n },\n ]\n}\n\n/**\n * Generic account fetch helper\n * @param accountAddress - The address of the account to fetch\n * @param accountType - The type of account to fetch from program.account\n * @returns The fetched account data\n */\nexport async function getAccountData<T>(\n accountAddress: PublicKey | string,\n accountType: keyof Program<DynamicBondingCurve>['account'],\n program: Program<DynamicBondingCurve>\n): Promise<T> {\n const address =\n accountAddress instanceof PublicKey\n ? accountAddress\n : new PublicKey(accountAddress)\n\n return (await program.account[accountType].fetchNullable(address)) as T\n}\n\n/**\n * Check if a mint is the native SOL mint\n * @param mint - The mint to check\n * @returns Whether the mint is the native SOL mint\n */\nexport function isNativeSol(mint: PublicKey): boolean {\n return mint.toString() === NATIVE_MINT.toString()\n}\n\n// Helper function to convert BN values to decimal strings\nexport function convertBNToDecimal<T>(obj: T): T {\n if (obj instanceof BN) {\n return obj.toString(10) as T\n }\n if (Array.isArray(obj)) {\n return obj.map((item) => convertBNToDecimal(item)) as T\n }\n if (obj && typeof obj === 'object') {\n const result = {} as T\n for (const key in obj) {\n result[key] = convertBNToDecimal(obj[key])\n }\n return result\n }\n return obj\n}\n","{\n \"address\": \"virEFLZsQm1iFAs8py1XnziJ67gTzW2bfCWhxNPfccD\",\n \"metadata\": {\n \"name\": \"dynamic_bonding_curve\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"claim_protocol_fee\",\n \"discriminator\": [\n 165,\n 228,\n 133,\n 48,\n 99,\n 249,\n 255,\n 33\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"config\",\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"base_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"quote_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"token_base_account\",\n \"docs\": [\n \"The treasury token a account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 48,\n 9,\n 89,\n 123,\n 106,\n 114,\n 131,\n 251,\n 50,\n 173,\n 254,\n 250,\n 10,\n 80,\n 160,\n 84,\n 143,\n 100,\n 81,\n 249,\n 134,\n 112,\n 30,\n 213,\n 50,\n 166,\n 239,\n 78,\n 53,\n 175,\n 188,\n 85\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_base_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"base_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_quote_account\",\n \"docs\": [\n \"The treasury token b account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 48,\n 9,\n 89,\n 123,\n 106,\n 114,\n 131,\n 251,\n 50,\n 173,\n 254,\n 250,\n 10,\n 80,\n 160,\n 84,\n 143,\n 100,\n 81,\n 249,\n 134,\n 112,\n 30,\n 213,\n 50,\n 166,\n 239,\n 78,\n 53,\n 175,\n 188,\n 85\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_quote_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quote_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"claim_fee_operator\",\n \"docs\": [\n \"Claim fee operator\"\n ]\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"Operator\"\n ],\n \"signer\": true,\n \"relations\": [\n \"claim_fee_operator\"\n ]\n },\n {\n \"name\": \"token_base_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_quote_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"claim_trading_fee\",\n \"discriminator\": [\n 8,\n 236,\n 89,\n 49,\n 152,\n 125,\n 177,\n 81\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"config\",\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The treasury token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The treasury token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"base_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"quote_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"fee_claimer\",\n \"signer\": true,\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"token_base_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_quote_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"max_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount_b\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"close_claim_fee_operator\",\n \"discriminator\": [\n 38,\n 134,\n 82,\n 216,\n 95,\n 124,\n 17,\n 99\n ],\n \"accounts\": [\n {\n \"name\": \"claim_fee_operator\",\n \"writable\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_claim_fee_operator\",\n \"docs\": [\n \"ADMIN FUNCTIONS ///\"\n ],\n \"discriminator\": [\n 169,\n 62,\n 207,\n 107,\n 58,\n 187,\n 162,\n 109\n ],\n \"accounts\": [\n {\n \"name\": \"claim_fee_operator\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 102,\n 95,\n 111,\n 112,\n 101,\n 114,\n 97,\n 116,\n 111,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"operator\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\"\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_config\",\n \"discriminator\": [\n 201,\n 207,\n 243,\n 114,\n 75,\n 111,\n 47,\n 189\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"fee_claimer\"\n },\n {\n \"name\": \"leftover_receiver\"\n },\n {\n \"name\": \"quote_mint\",\n \"docs\": [\n \"quote mint\"\n ]\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"config_parameters\",\n \"type\": {\n \"defined\": {\n \"name\": \"ConfigParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"create_locker\",\n \"docs\": [\n \"PERMISSIONLESS FUNCTIONS ///\",\n \"create locker\"\n ],\n \"discriminator\": [\n 167,\n 90,\n 137,\n 154,\n 75,\n 47,\n 17,\n 84\n ],\n \"accounts\": [\n {\n \"name\": \"virtual_pool\",\n \"docs\": [\n \"Virtual pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"Config\"\n ],\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"writable\": true,\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"base_vault\",\n \"writable\": true,\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"base_mint\",\n \"writable\": true,\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"base\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 98,\n 97,\n 115,\n 101,\n 95,\n 108,\n 111,\n 99,\n 107,\n 101,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"virtual_pool\"\n }\n ]\n }\n },\n {\n \"name\": \"creator\",\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"escrow\",\n \"writable\": true\n },\n {\n \"name\": \"escrow_token\",\n \"writable\": true\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"locker_program\",\n \"address\": \"LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn\"\n },\n {\n \"name\": \"locker_event_authority\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_partner_metadata\",\n \"docs\": [\n \"PARTNER FUNCTIONS ////\"\n ],\n \"discriminator\": [\n 192,\n 168,\n 234,\n 191,\n 188,\n 226,\n 227,\n 255\n ],\n \"accounts\": [\n {\n \"name\": \"partner_metadata\",\n \"docs\": [\n \"Partner metadata\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 97,\n 114,\n 116,\n 110,\n 101,\n 114,\n 95,\n 109,\n 101,\n 116,\n 97,\n 100,\n 97,\n 116,\n 97\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"fee_claimer\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Payer of the partner metadata.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"fee_claimer\",\n \"docs\": [\n \"Fee claimer for partner\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"metadata\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreatePartnerMetadataParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"create_virtual_pool_metadata\",\n \"discriminator\": [\n 45,\n 97,\n 187,\n 103,\n 254,\n 109,\n 124,\n 134\n ],\n \"accounts\": [\n {\n \"name\": \"virtual_pool\",\n \"writable\": true\n },\n {\n \"name\": \"virtual_pool_metadata\",\n \"docs\": [\n \"Virtual pool metadata\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 105,\n 114,\n 116,\n 117,\n 97,\n 108,\n 95,\n 112,\n 111,\n 111,\n 108,\n 95,\n 109,\n 101,\n 116,\n 97,\n 100,\n 97,\n 116,\n 97\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"virtual_pool\"\n }\n ]\n }\n },\n {\n \"name\": \"creator\",\n \"signer\": true,\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Payer of the virtual pool metadata.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"metadata\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreateVirtualPoolMetadataParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_virtual_pool_with_spl_token\",\n \"docs\": [\n \"POOL CREATOR FUNCTIONS ////\"\n ],\n \"discriminator\": [\n 140,\n 85,\n 215,\n 176,\n 102,\n 54,\n 104,\n 79\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"docs\": [\n \"Which config the pool belongs to.\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"base_mint\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"quote_mint\",\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"Token a vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 111,\n 107,\n 101,\n 110,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"base_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"Token b vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 111,\n 107,\n 101,\n 110,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"quote_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"mint_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"metadata_program\",\n \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Address paying to create the pool. Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_quote_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitializePoolParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_virtual_pool_with_token2022\",\n \"discriminator\": [\n 169,\n 118,\n 51,\n 78,\n 145,\n 110,\n 220,\n 155\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"docs\": [\n \"Which config the pool belongs to.\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"base_mint\",\n \"docs\": [\n \"Unique token mint address, initialize in contract\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"quote_mint\",\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 111,\n 107,\n 101,\n 110,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"base_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"Token quote vault for the pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 111,\n 107,\n 101,\n 110,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"quote_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Address paying to create the pool. Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_quote_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token program for base mint\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitializePoolParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"migrate_meteora_damm\",\n \"discriminator\": [\n 27,\n 1,\n 48,\n 22,\n 180,\n 63,\n 118,\n 217\n ],\n \"accounts\": [\n {\n \"name\": \"virtual_pool\",\n \"docs\": [\n \"virtual pool\"\n ],\n \"writable\": true,\n \"relations\": [\n \"migration_metadata\"\n ]\n },\n {\n \"name\": \"migration_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"config\",\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"writable\": true,\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"damm_config\",\n \"docs\": [\n \"pool config\"\n ]\n },\n {\n \"name\": \"lp_mint\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_mint\",\n \"writable\": true\n },\n {\n \"name\": \"token_b_mint\"\n },\n {\n \"name\": \"a_vault\",\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"writable\": true,\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"quote_vault\",\n \"writable\": true,\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"virtual_pool_lp\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_a_fee\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_b_fee\",\n \"writable\": true\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"rent\"\n },\n {\n \"name\": \"mint_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"metadata_program\"\n },\n {\n \"name\": \"amm_program\",\n \"address\": \"Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB\"\n },\n {\n \"name\": \"vault_program\"\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ],\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"migrate_meteora_damm_claim_lp_token\",\n \"discriminator\": [\n 139,\n 133,\n 2,\n 30,\n 91,\n 145,\n 127,\n 154\n ],\n \"accounts\": [\n {\n \"name\": \"virtual_pool\",\n \"relations\": [\n \"migration_metadata\"\n ]\n },\n {\n \"name\": \"migration_metadata\",\n \"docs\": [\n \"migration metadata\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"pool_authority\",\n \"writable\": true,\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"lp_mint\",\n \"relations\": [\n \"migration_metadata\"\n ]\n },\n {\n \"name\": \"source_token\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"pool_authority\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"migration_metadata\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"destination_token\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"migration_metadata\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"owner\"\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ],\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"migrate_meteora_damm_lock_lp_token\",\n \"discriminator\": [\n 177,\n 55,\n 238,\n 157,\n 251,\n 88,\n 165,\n 42\n ],\n \"accounts\": [\n {\n \"name\": \"virtual_pool\",\n \"relations\": [\n \"migration_metadata\"\n ]\n },\n {\n \"name\": \"migration_metadata\",\n \"docs\": [\n \"migration_metadata\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"pool_authority\",\n \"writable\": true,\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"lock_escrow\"\n ]\n },\n {\n \"name\": \"lp_mint\",\n \"relations\": [\n \"migration_metadata\"\n ]\n },\n {\n \"name\": \"lock_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"relations\": [\n \"lock_escrow\"\n ]\n },\n {\n \"name\": \"source_tokens\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"pool_authority\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"migration_metadata\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"escrow_vault\",\n \"writable\": true\n },\n {\n \"name\": \"amm_program\",\n \"address\": \"Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB\"\n },\n {\n \"name\": \"a_vault\"\n },\n {\n \"name\": \"b_vault\"\n },\n {\n \"name\": \"a_vault_lp\"\n },\n {\n \"name\": \"b_vault_lp\"\n },\n {\n \"name\": \"a_vault_lp_mint\"\n },\n {\n \"name\": \"b_vault_lp_mint\"\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ],\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"migration_damm_v2\",\n \"discriminator\": [\n 156,\n 169,\n 230,\n 103,\n 53,\n 228,\n 80,\n 64\n ],\n \"accounts\": [\n {\n \"name\": \"virtual_pool\",\n \"docs\": [\n \"virtual pool\"\n ],\n \"writable\": true,\n \"relations\": [\n \"migration_metadata\"\n ]\n },\n {\n \"name\": \"migration_metadata\",\n \"docs\": [\n \"migration metadata\"\n ]\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"virtual pool config key\"\n ],\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"writable\": true,\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"first_position_nft_mint\",\n \"writable\": true\n },\n {\n \"name\": \"first_position_nft_account\",\n \"writable\": true\n },\n {\n \"name\": \"first_position\",\n \"writable\": true\n },\n {\n \"name\": \"second_position_nft_mint\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"second_position_nft_account\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"second_position\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"damm_pool_authority\"\n },\n {\n \"name\": \"amm_program\",\n \"address\": \"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG\"\n },\n {\n \"name\": \"base_mint\",\n \"writable\": true\n },\n {\n \"name\": \"quote_mint\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"writable\": true\n },\n {\n \"name\": \"token_b_vault\",\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"writable\": true,\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"quote_vault\",\n \"writable\": true,\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_base_program\"\n },\n {\n \"name\": \"token_quote_program\"\n },\n {\n \"name\": \"token_2022_program\"\n },\n {\n \"name\": \"damm_event_authority\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"migration_damm_v2_create_metadata\",\n \"discriminator\": [\n 109,\n 189,\n 19,\n 36,\n 195,\n 183,\n 222,\n 82\n ],\n \"accounts\": [\n {\n \"name\": \"virtual_pool\"\n },\n {\n \"name\": \"config\",\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"migration_metadata\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 97,\n 109,\n 109,\n 95,\n 118,\n 50\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"virtual_pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"migration_meteora_damm_create_metadata\",\n \"docs\": [\n \"migrate damm v1\"\n ],\n \"discriminator\": [\n 47,\n 94,\n 126,\n 115,\n 221,\n 226,\n 194,\n 133\n ],\n \"accounts\": [\n {\n \"name\": \"virtual_pool\"\n },\n {\n \"name\": \"config\",\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"migration_metadata\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 101,\n 116,\n 101,\n 111,\n 114,\n 97\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"virtual_pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"partner_withdraw_surplus\",\n \"discriminator\": [\n 168,\n 173,\n 72,\n 100,\n 201,\n 98,\n 38,\n 92\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"config\",\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"virtual_pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_quote_account\",\n \"docs\": [\n \"The receiver token account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"quote_mint\",\n \"docs\": [\n \"The mint of quote token\"\n ],\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"fee_claimer\",\n \"signer\": true,\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"token_quote_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"protocol_withdraw_surplus\",\n \"discriminator\": [\n 54,\n 136,\n 225,\n 138,\n 172,\n 182,\n 214,\n 167\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"config\",\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"virtual_pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_quote_account\",\n \"docs\": [\n \"The treasury quote token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 48,\n 9,\n 89,\n 123,\n 106,\n 114,\n 131,\n 251,\n 50,\n 173,\n 254,\n 250,\n 10,\n 80,\n 160,\n 84,\n 143,\n 100,\n 81,\n 249,\n 134,\n 112,\n 30,\n 213,\n 50,\n 166,\n 239,\n 78,\n 53,\n 175,\n 188,\n 85\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_quote_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quote_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"The vault token account for quote token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"quote_mint\",\n \"docs\": [\n \"The mint of of token\"\n ],\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"token_quote_program\",\n \"docs\": [\n \"Token b program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"swap\",\n \"docs\": [\n \"TRADING BOTS FUNCTIONS ////\"\n ],\n \"discriminator\": [\n 248,\n 198,\n 158,\n 145,\n 225,\n 117,\n 135,\n 200\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"config key\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"input_token_account\",\n \"docs\": [\n \"The user token account for input token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"output_token_account\",\n \"docs\": [\n \"The user token account for output token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"The vault token account for base token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"The vault token account for quote token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"base_mint\",\n \"docs\": [\n \"The mint of base token\"\n ]\n },\n {\n \"name\": \"quote_mint\",\n \"docs\": [\n \"The mint of quote token\"\n ]\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"The user performing the swap\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_base_program\",\n \"docs\": [\n \"Token base program\"\n ]\n },\n {\n \"name\": \"token_quote_program\",\n \"docs\": [\n \"Token quote program\"\n ]\n },\n {\n \"name\": \"referral_token_account\",\n \"docs\": [\n \"referral token account\"\n ],\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_leftover\",\n \"discriminator\": [\n 20,\n 198,\n 202,\n 237,\n 235,\n 243,\n 183,\n 66\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"address\": \"FDWrKWnAmrmJTGjaS5ztxNT6STuFYaYhgRUZd3MewQeY\"\n },\n {\n \"name\": \"config\",\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"virtual_pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_base_account\",\n \"docs\": [\n \"The receiver token account, withdraw to ATA\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"leftover_receiver\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_base_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"base_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"base_mint\",\n \"docs\": [\n \"The mint of quote token\"\n ],\n \"relations\": [\n \"virtual_pool\"\n ]\n },\n {\n \"name\": \"leftover_receiver\",\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"token_base_program\",\n \"docs\": [\n \"Token base program\"\n ]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n }\n ],\n \"accounts\": [\n {\n \"name\": \"ClaimFeeOperator\",\n \"discriminator\": [\n 166,\n 48,\n 134,\n 86,\n 34,\n 200,\n 188,\n 150\n ]\n },\n {\n \"name\": \"Config\",\n \"discriminator\": [\n 155,\n 12,\n 170,\n 224,\n 30,\n 250,\n 204,\n 130\n ]\n },\n {\n \"name\": \"LockEscrow\",\n \"discriminator\": [\n 190,\n 106,\n 121,\n 6,\n 200,\n 182,\n 21,\n 75\n ]\n },\n {\n \"name\": \"MeteoraDammMigrationMetadata\",\n \"discriminator\": [\n 17,\n 155,\n 141,\n 215,\n 207,\n 4,\n 133,\n 156\n ]\n },\n {\n \"name\": \"MeteoraDammV2Metadata\",\n \"discriminator\": [\n 104,\n 221,\n 219,\n 203,\n 10,\n 142,\n 250,\n 163\n ]\n },\n {\n \"name\": \"PartnerMetadata\",\n \"discriminator\": [\n 68,\n 68,\n 130,\n 19,\n 16,\n 209,\n 98,\n 156\n ]\n },\n {\n \"name\": \"PoolConfig\",\n \"discriminator\": [\n 26,\n 108,\n 14,\n 123,\n 116,\n 230,\n 129,\n 43\n ]\n },\n {\n \"name\": \"VirtualPool\",\n \"discriminator\": [\n 213,\n 224,\n 5,\n 209,\n 98,\n 69,\n 119,\n 92\n ]\n },\n {\n \"name\": \"VirtualPoolMetadata\",\n \"discriminator\": [\n 217,\n 37,\n 82,\n 250,\n 43,\n 47,\n 228,\n 254\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"EvtClaimProtocolFee\",\n \"discriminator\": [\n 186,\n 244,\n 75,\n 251,\n 188,\n 13,\n 25,\n 33\n ]\n },\n {\n \"name\": \"EvtClaimTradingFee\",\n \"discriminator\": [\n 26,\n 83,\n 117,\n 240,\n 92,\n 202,\n 112,\n 254\n ]\n },\n {\n \"name\": \"EvtCloseClaimFeeOperator\",\n \"discriminator\": [\n 111,\n 39,\n 37,\n 55,\n 110,\n 216,\n 194,\n 23\n ]\n },\n {\n \"name\": \"EvtCreateClaimFeeOperator\",\n \"discriminator\": [\n 21,\n 6,\n 153,\n 120,\n 68,\n 116,\n 28,\n 177\n ]\n },\n {\n \"name\": \"EvtCreateConfig\",\n \"discriminator\": [\n 131,\n 207,\n 180,\n 174,\n 180,\n 73,\n 165,\n 54\n ]\n },\n {\n \"name\": \"EvtCreateDammV2MigrationMetadata\",\n \"discriminator\": [\n 103,\n 111,\n 132,\n 168,\n 140,\n 253,\n 150,\n 114\n ]\n },\n {\n \"name\": \"EvtCreateMeteoraMigrationMetadata\",\n \"discriminator\": [\n 99,\n 167,\n 133,\n 63,\n 214,\n 143,\n 175,\n 139\n ]\n },\n {\n \"name\": \"EvtCurveComplete\",\n \"discriminator\": [\n 229,\n 231,\n 86,\n 84,\n 156,\n 134,\n 75,\n 24\n ]\n },\n {\n \"name\": \"EvtInitializePool\",\n \"discriminator\": [\n 228,\n 50,\n 246,\n 85,\n 203,\n 66,\n 134,\n 37\n ]\n },\n {\n \"name\": \"EvtPartnerMetadata\",\n \"discriminator\": [\n 200,\n 127,\n 6,\n 55,\n 13,\n 32,\n 8,\n 150\n ]\n },\n {\n \"name\": \"EvtPartnerWithdrawSurplus\",\n \"discriminator\": [\n 195,\n 56,\n 152,\n 9,\n 232,\n 72,\n 35,\n 22\n ]\n },\n {\n \"name\": \"EvtProtocolWithdrawSurplus\",\n \"discriminator\": [\n 109,\n 111,\n 28,\n 221,\n 134,\n 195,\n 230,\n 203\n ]\n },\n {\n \"name\": \"EvtSwap\",\n \"discriminator\": [\n 27,\n 60,\n 21,\n 213,\n 138,\n 170,\n 187,\n 147\n ]\n },\n {\n \"name\": \"EvtVirtualPoolMetadata\",\n \"discriminator\": [\n 188,\n 18,\n 72,\n 76,\n 195,\n 91,\n 38,\n 74\n ]\n },\n {\n \"name\": \"EvtWithdrawLeftover\",\n \"discriminator\": [\n 191,\n 189,\n 104,\n 143,\n 111,\n 156,\n 94,\n 229\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math operation overflow\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidFee\",\n \"msg\": \"Invalid fee setup\"\n },\n {\n \"code\": 6002,\n \"name\": \"ExceededSlippage\",\n \"msg\": \"Exceeded slippage tolerance\"\n },\n {\n \"code\": 6003,\n \"name\": \"ExceedMaxFeeBps\",\n \"msg\": \"Exceeded max fee bps\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidAdmin\",\n \"msg\": \"Invalid admin\"\n },\n {\n \"code\": 6005,\n \"name\": \"AmountIsZero\",\n \"msg\": \"Amount is zero\"\n },\n {\n \"code\": 6006,\n \"name\": \"TypeCastFailed\",\n \"msg\": \"Type cast error\"\n },\n {\n \"code\": 6007,\n \"name\": \"InvalidActivationType\",\n \"msg\": \"Invalid activation type\"\n },\n {\n \"code\": 6008,\n \"name\": \"InvalidQuoteMint\",\n \"msg\": \"Invalid quote mint\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidCollectFeeMode\",\n \"msg\": \"Invalid collect fee mode\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidMigrationFeeOption\",\n \"msg\": \"Invalid migration fee option\"\n },\n {\n \"code\": 6011,\n \"name\": \"InvalidInput\",\n \"msg\": \"Invalid input\"\n },\n {\n \"code\": 6012,\n \"name\": \"NotEnoughLiquidity\",\n \"msg\": \"Not enough liquidity\"\n },\n {\n \"code\": 6013,\n \"name\": \"PoolIsCompleted\",\n \"msg\": \"Pool is completed\"\n },\n {\n \"code\": 6014,\n \"name\": \"PoolIsIncompleted\",\n \"msg\": \"Pool is incompleted\"\n },\n {\n \"code\": 6015,\n \"name\": \"InvalidMigrationOption\",\n \"msg\": \"Invalid migration option\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidTokenDecimals\",\n \"msg\": \"Invalid activation type\"\n },\n {\n \"code\": 6017,\n \"name\": \"InvalidTokenType\",\n \"msg\": \"Invalid token type\"\n },\n {\n \"code\": 6018,\n \"name\": \"InvalidFeePercentage\",\n \"msg\": \"Invalid fee percentage\"\n },\n {\n \"code\": 6019,\n \"name\": \"InvalidQuoteThreshold\",\n \"msg\": \"Invalid quote threshold\"\n },\n {\n \"code\": 6020,\n \"name\": \"InvalidTokenSupply\",\n \"msg\": \"Invalid token supply\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidCurve\",\n \"msg\": \"Invalid curve\"\n },\n {\n \"code\": 6022,\n \"name\": \"NotPermitToDoThisAction\",\n \"msg\": \"Not permit to do this action\"\n },\n {\n \"code\": 6023,\n \"name\": \"InvalidOwnerAccount\",\n \"msg\": \"Invalid owner account\"\n },\n {\n \"code\": 6024,\n \"name\": \"InvalidConfigAccount\",\n \"msg\": \"Invalid config account\"\n },\n {\n \"code\": 6025,\n \"name\": \"SurplusHasBeenWithdraw\",\n \"msg\": \"Surplus has been withdraw\"\n },\n {\n \"code\": 6026,\n \"name\": \"LeftoverHasBeenWithdraw\",\n \"msg\": \"Leftover has been withdraw\"\n },\n {\n \"code\": 6027,\n \"name\": \"TotalBaseTokenExceedMaxSupply\",\n \"msg\": \"Total base token is exceeded max supply\"\n },\n {\n \"code\": 6028,\n \"name\": \"UnsupportNativeMintToken2022\",\n \"msg\": \"Unsupport native mint token 2022\"\n },\n {\n \"code\": 6029,\n \"name\": \"InsufficientLiquidityForMigration\",\n \"msg\": \"Insufficient liquidity for migration\"\n },\n {\n \"code\": 6030,\n \"name\": \"MissingPoolConfigInRemainingAccount\",\n \"msg\": \"Missing pool config in remaining account\"\n },\n {\n \"code\": 6031,\n \"name\": \"InvalidVestingParameters\",\n \"msg\": \"Invalid vesting parameters\"\n },\n {\n \"code\": 6032,\n \"name\": \"InvalidLeftoverAddress\",\n \"msg\": \"Invalid leftover address\"\n }\n ],\n \"types\": [\n {\n \"name\": \"BaseFeeConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"fee_scheduler_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"BaseFeeParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_scheduler_mode\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ClaimFeeOperator\",\n \"docs\": [\n \"Parameter that set by the protocol\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"operator\",\n \"docs\": [\n \"operator\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\n \"Reserve\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 128\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Config\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFees\"\n }\n }\n },\n {\n \"name\": \"activation_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vault_config_key\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 219\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ConfigParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"migration_option\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_decimal\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_lp_percentage\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_locked_lp_percentage\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"creator_lp_percentage\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"creator_locked_lp_percentage\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"migration_quote_threshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_start_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"locked_vesting\",\n \"type\": {\n \"defined\": {\n \"name\": \"LockedVestingParams\"\n }\n }\n },\n {\n \"name\": \"migration_fee_option\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_supply\",\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"TokenSupplyParams\"\n }\n }\n }\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"padding for future use\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 8\n ]\n }\n },\n {\n \"name\": \"curve\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"LiquidityDistributionParameters\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"CreatePartnerMetadataParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 96\n ]\n }\n },\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"website\",\n \"type\": \"string\"\n },\n {\n \"name\": \"logo\",\n \"type\": \"string\"\n }\n ]\n }\n },\n {\n \"name\": \"CreateVirtualPoolMetadataParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 96\n ]\n }\n },\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"website\",\n \"type\": \"string\"\n },\n {\n \"name\": \"logo\",\n \"type\": \"string\"\n }\n ]\n }\n },\n {\n \"name\": \"DynamicFeeConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"initialized\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n },\n {\n \"name\": \"max_volatility_accumulator\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"variable_fee_control\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"padding2\",\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"bin_step_u128\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"DynamicFeeParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"bin_step_u128\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"filter_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"max_volatility_accumulator\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"variable_fee_control\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimProtocolFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_base_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_quote_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimTradingFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_base_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_quote_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCloseClaimFeeOperator\",\n \"docs\": [\n \"Close claim fee operator\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"claim_fee_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateClaimFeeOperator\",\n \"docs\": [\n \"Create claim fee operator\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"operator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateConfig\",\n \"docs\": [\n \"Create config\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"quote_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_claimer\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"migration_option\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_decimal\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_locked_lp_percentage\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_lp_percentage\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"creator_locked_lp_percentage\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"creator_lp_percentage\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"swap_base_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"migration_quote_threshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"migration_base_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_start_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"locked_vesting\",\n \"type\": {\n \"defined\": {\n \"name\": \"LockedVestingParams\"\n }\n }\n },\n {\n \"name\": \"migration_fee_option\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"fixed_token_supply_flag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"pre_migration_token_supply\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_migration_token_supply\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"curve\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"LiquidityDistributionParameters\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateDammV2MigrationMetadata\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"virtual_pool\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateMeteoraMigrationMetadata\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"virtual_pool\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCurveComplete\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_reserve\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"quote_reserve\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtInitializePool\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"activation_point\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtPartnerMetadata\",\n \"docs\": [\n \"Create partner metadata\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"partner_metadata\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_claimer\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtPartnerWithdrawSurplus\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"surplus_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtProtocolWithdrawSurplus\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"surplus_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtSwap\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"trade_direction\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"has_referral\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapParameters\"\n }\n }\n },\n {\n \"name\": \"swap_result\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapResult\"\n }\n }\n },\n {\n \"name\": \"amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_timestamp\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtVirtualPoolMetadata\",\n \"docs\": [\n \"Create virtual pool metadata\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"virtual_pool_metadata\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"virtual_pool\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtWithdrawLeftover\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"leftover_receiver\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"leftover_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"InitializePoolParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"name\": \"uri\",\n \"type\": \"string\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityDistributionConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityDistributionParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"LockEscrow\",\n \"docs\": [\n \"State of lock escrow account\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"escrow_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"total_locked_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lp_per_token\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"unclaimed_fee_pending\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"b_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LockedVestingConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_per_period\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_duration_from_migration_time\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"_padding\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LockedVestingParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_per_period\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_duration_from_migration_time\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"MeteoraDammMigrationMetadata\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"virtual_pool\",\n \"docs\": [\n \"pool\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator\",\n \"docs\": [\n \"pool creator\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partner\",\n \"docs\": [\n \"partner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"lp mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partner_locked_lp\",\n \"docs\": [\n \"partner locked lp\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_lp\",\n \"docs\": [\n \"partner lp\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_locked_lp\",\n \"docs\": [\n \"creator locked lp\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_lp\",\n \"docs\": [\n \"creator lp\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"creator_locked_status\",\n \"docs\": [\n \"flag to check whether lp is locked for creator\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_locked_status\",\n \"docs\": [\n \"flag to check whether lp is locked for partner\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"creator_claim_status\",\n \"docs\": [\n \"flag to check whether creator has claimed lp token\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_claim_status\",\n \"docs\": [\n \"flag to check whether partner has claimed lp token\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\n \"Reserve\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 107\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"MeteoraDammV2Metadata\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"virtual_pool\",\n \"docs\": [\n \"pool\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator\",\n \"docs\": [\n \"pool creator\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partner\",\n \"docs\": [\n \"partner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\n \"Reserve\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 126\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PartnerMetadata\",\n \"docs\": [\n \"Metadata for a partner.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_claimer\",\n \"docs\": [\n \"fee claimer\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"padding for future use\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 6\n ]\n }\n },\n {\n \"name\": \"name\",\n \"docs\": [\n \"Name of partner.\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"website\",\n \"docs\": [\n \"Website of partner.\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"logo\",\n \"docs\": [\n \"Logo of partner\"\n ],\n \"type\": \"string\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"quote_mint\",\n \"docs\": [\n \"quote mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_claimer\",\n \"docs\": [\n \"Address to get the fee\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"leftover_receiver\",\n \"docs\": [\n \"Address to receive extra base token after migration, in case token is fixed supply\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"Pool fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeesConfig\"\n }\n }\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"Collect fee mode\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"migration_option\",\n \"docs\": [\n \"migration option\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"whether mode slot or timestamp\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_decimal\",\n \"docs\": [\n \"token decimals\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"version\",\n \"docs\": [\n \"version\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_type\",\n \"docs\": [\n \"token type of base token\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"quote_token_flag\",\n \"docs\": [\n \"quote token flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_locked_lp_percentage\",\n \"docs\": [\n \"partner locked lp percentage\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_lp_percentage\",\n \"docs\": [\n \"partner lp percentage\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"creator_locked_lp_percentage\",\n \"docs\": [\n \"creator post migration fee percentage\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"creator_lp_percentage\",\n \"docs\": [\n \"creator lp percentage\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"migration_fee_option\",\n \"docs\": [\n \"migration fee option\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"fixed_token_supply_flag\",\n \"docs\": [\n \"flag to indicate whether token is dynamic supply (0) or fixed supply (1)\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding 0\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 3\n ]\n }\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"padding 1\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"swap_base_amount\",\n \"docs\": [\n \"swap base amount\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"migration_quote_threshold\",\n \"docs\": [\n \"migration quote threshold (in quote token)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"migration_base_threshold\",\n \"docs\": [\n \"migration base threshold (in base token)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"migration_sqrt_price\",\n \"docs\": [\n \"migration sqrt price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"locked_vesting_config\",\n \"docs\": [\n \"locked vesting config\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"LockedVestingConfig\"\n }\n }\n },\n {\n \"name\": \"pre_migration_token_supply\",\n \"docs\": [\n \"pre migration token supply\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_migration_token_supply\",\n \"docs\": [\n \"post migration token supply\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"_padding_2\",\n \"docs\": [\n \"padding 2\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 2\n ]\n }\n },\n {\n \"name\": \"sqrt_start_price\",\n \"docs\": [\n \"minimum price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"curve\",\n \"docs\": [\n \"curve, only use 20 point firstly, we can extend that latter\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"LiquidityDistributionConfig\"\n }\n },\n 20\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolFeeParameters\",\n \"docs\": [\n \"Information regarding fee charges\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_fee\",\n \"docs\": [\n \"Base fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"BaseFeeParameters\"\n }\n }\n },\n {\n \"name\": \"dynamic_fee\",\n \"docs\": [\n \"dynamic fee\"\n ],\n \"type\": {\n \"option\": {\n \"defined\": {\n \"name\": \"DynamicFeeParameters\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolFees\",\n \"docs\": [\n \"Information regarding fee charges\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"trade_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"trade_fee_denominator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_trade_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_trade_fee_denominator\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolFeesConfig\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"BaseFeeConfig\"\n }\n }\n },\n {\n \"name\": \"dynamic_fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"DynamicFeeConfig\"\n }\n }\n },\n {\n \"name\": \"padding_0\",\n \"type\": {\n \"array\": [\n \"u64\",\n 5\n ]\n }\n },\n {\n \"name\": \"padding_1\",\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n },\n {\n \"name\": \"protocol_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolMetrics\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_protocol_base_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_protocol_quote_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_trading_base_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_trading_quote_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SwapParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minimum_amount_out\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SwapResult\",\n \"docs\": [\n \"Encodes all results of swapping\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"actual_input_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"output_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"next_sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"trading_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"referral_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenSupplyParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pre_migration_token_supply\",\n \"docs\": [\n \"pre migration token supply\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_migration_token_supply\",\n \"docs\": [\n \"post migration token supply\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"VirtualPool\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"volatility_tracker\",\n \"docs\": [\n \"volatility tracker\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"VolatilityTracker\"\n }\n }\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"config key\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"creator\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_mint\",\n \"docs\": [\n \"base mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"base vault\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"quote vault\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_reserve\",\n \"docs\": [\n \"base reserve\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"quote_reserve\",\n \"docs\": [\n \"quote reserve\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_base_fee\",\n \"docs\": [\n \"protocol base fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_quote_fee\",\n \"docs\": [\n \"protocol quote fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"trading_base_fee\",\n \"docs\": [\n \"trading base fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"trading_quote_fee\",\n \"docs\": [\n \"trading quote fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"current price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"Activation point\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool_type\",\n \"docs\": [\n \"pool type, spl token or token2022\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"is_migrated\",\n \"docs\": [\n \"is migrated\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"is_partner_withdraw_surplus\",\n \"docs\": [\n \"is partner withdraw surplus\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"is_procotol_withdraw_surplus\",\n \"docs\": [\n \"is protocol withdraw surplus\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"migration_progress\",\n \"docs\": [\n \"migration progress\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"is_withdraw_leftover\",\n \"docs\": [\n \"is withdraw leftover\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 2\n ]\n }\n },\n {\n \"name\": \"metrics\",\n \"docs\": [\n \"pool metrics\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolMetrics\"\n }\n }\n },\n {\n \"name\": \"finish_curve_timestamp\",\n \"docs\": [\n \"The time curve is finished\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Padding for further use\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 9\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"VirtualPoolMetadata\",\n \"docs\": [\n \"Metadata for a virtual pool.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"virtual_pool\",\n \"docs\": [\n \"virtual pool\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"padding for future use\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 6\n ]\n }\n },\n {\n \"name\": \"name\",\n \"docs\": [\n \"Name of project.\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"website\",\n \"docs\": [\n \"Website of project.\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"logo\",\n \"docs\": [\n \"Logo of project\"\n ],\n \"type\": \"string\"\n }\n ]\n }\n },\n {\n \"name\": \"VolatilityTracker\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"last_update_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"sqrt_price_reference\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"volatility_accumulator\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"volatility_reference\",\n \"type\": \"u128\"\n }\n ]\n }\n }\n ]\n}","{\n \"address\": \"24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi\",\n \"metadata\": {\n \"name\": \"vault\",\n \"version\": \"0.7.2\",\n \"spec\": \"0.1.0\"\n },\n \"docs\": [\n \"Program for vault\"\n ],\n \"instructions\": [\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"initialize new vault\"\n ],\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"This is base account for all vault\",\n \"No need base key now because we only allow 1 vault per token now\",\n \"Vault account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Payer can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"Token vault account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_mint\",\n \"docs\": [\n \"Token mint account\"\n ]\n },\n {\n \"name\": \"lp_mint\",\n \"writable\": true\n },\n {\n \"name\": \"rent\",\n \"docs\": [\n \"rent\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"system_program\"\n ]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"enable_vault\",\n \"docs\": [\n \"enable vault\"\n ],\n \"discriminator\": [\n 145,\n 82,\n 241,\n 156,\n 26,\n 154,\n 233,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Vault account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin account\"\n ],\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"enabled\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"set_operator\",\n \"docs\": [\n \"set new operator\"\n ],\n \"discriminator\": [\n 238,\n 153,\n 101,\n 169,\n 243,\n 131,\n 36,\n 1\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Vault account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"operator\"\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"admin\"\n ],\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"initialize_strategy\",\n \"docs\": [\n \"Initialize a strategy and add strategy to vault.strategies index\"\n ],\n \"discriminator\": [\n 208,\n 119,\n 144,\n 145,\n 178,\n 57,\n 105,\n 252\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Vault account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy_program\"\n },\n {\n \"name\": \"strategy\",\n \"docs\": [\n \"Strategy account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"collateral_vault\",\n \"docs\": [\n \"Collateral vault account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"collateral_mint\",\n \"docs\": [\n \"Collateral mint account\"\n ]\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin account\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program account\"\n ]\n },\n {\n \"name\": \"rent\",\n \"docs\": [\n \"Rent account\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program account\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"bumps\",\n \"type\": {\n \"defined\": {\n \"name\": \"StrategyBumps\"\n }\n }\n },\n {\n \"name\": \"strategy_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"StrategyType\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"remove_strategy\",\n \"docs\": [\n \"remove a strategy\"\n ],\n \"discriminator\": [\n 185,\n 238,\n 33,\n 91,\n 134,\n 210,\n 97,\n 26\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Vault account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy\",\n \"docs\": [\n \"Strategy account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy_program\"\n },\n {\n \"name\": \"collateral_vault\",\n \"docs\": [\n \"Collateral vault account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"token_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"fee_vault\",\n \"docs\": [\n \"fee_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"lp_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ]\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"admin\"\n ],\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_strategy2\",\n \"docs\": [\n \"remove a strategy by advance payment\"\n ],\n \"discriminator\": [\n 138,\n 104,\n 208,\n 148,\n 126,\n 35,\n 195,\n 14\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Vault account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy\",\n \"docs\": [\n \"Strategy account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy_program\"\n },\n {\n \"name\": \"collateral_vault\",\n \"docs\": [\n \"Collateral vault account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"token_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_admin_advance_payment\",\n \"docs\": [\n \"token_advance_payemnt\",\n \"the owner of token_advance_payment must be admin\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_vault_advance_payment\",\n \"docs\": [\n \"token_vault_advance_payment\",\n \"the account must be different from token_vault\",\n \"the owner of token_advance_payment must be vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"fee_vault\",\n \"docs\": [\n \"fee_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"lp_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ]\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"admin\"\n ],\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"max_admin_pay_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"collect_dust\",\n \"docs\": [\n \"collect token, that someone send wrongly\",\n \"also help in case Mango reimbursement\"\n ],\n \"discriminator\": [\n 246,\n 149,\n 21,\n 82,\n 160,\n 74,\n 254,\n 240\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"vault\"\n ]\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"Token vault, must be different from vault.token_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_admin\",\n \"docs\": [\n \"token admin, enforce owner is admin to avoid mistake\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"admin\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"add_strategy\",\n \"docs\": [\n \"add a strategy\"\n ],\n \"discriminator\": [\n 64,\n 123,\n 127,\n 227,\n 192,\n 234,\n 198,\n 20\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy\",\n \"docs\": [\n \"strategy\"\n ]\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"admin\"\n ],\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"deposit_strategy\",\n \"docs\": [\n \"deposit liquidity to a strategy\"\n ],\n \"discriminator\": [\n 246,\n 82,\n 57,\n 226,\n 131,\n 222,\n 253,\n 249\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy\",\n \"docs\": [\n \"strategy\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"token_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"fee_vault\",\n \"docs\": [\n \"fee_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"lp_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy_program\"\n },\n {\n \"name\": \"collateral_vault\",\n \"docs\": [\n \"collateral_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ]\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"operator\"\n ],\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw_strategy\",\n \"docs\": [\n \"withdraw liquidity from a strategy\"\n ],\n \"discriminator\": [\n 31,\n 45,\n 162,\n 5,\n 193,\n 217,\n 134,\n 188\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy\",\n \"docs\": [\n \"strategy\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"token_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"fee_vault\",\n \"docs\": [\n \"fee_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"lp_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy_program\"\n },\n {\n \"name\": \"collateral_vault\",\n \"docs\": [\n \"collateral_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ]\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"operator\"\n ],\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw2\",\n \"docs\": [\n \"Withdraw v2. Withdraw from token vault if no remaining accounts are available. Else, it will attempt to withdraw from strategy and token vault. This method just proxy between 2 methods. Protocol integration should be using withdraw instead of this function.\"\n ],\n \"discriminator\": [\n 80,\n 6,\n 111,\n 73,\n 174,\n 211,\n 66,\n 132\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"token_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"lp_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_token\",\n \"docs\": [\n \"user_token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_lp\",\n \"docs\": [\n \"user_lp\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"user\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"unmint_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_out_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"deposit\",\n \"docs\": [\n \"user deposit liquidity to vault\"\n ],\n \"discriminator\": [\n 242,\n 35,\n 198,\n 137,\n 82,\n 225,\n 242,\n 182\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"token_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"lp_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_token\",\n \"docs\": [\n \"user_token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_lp\",\n \"docs\": [\n \"user_lp\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"user\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"token_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minimum_lp_token_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw\",\n \"docs\": [\n \"user withdraw liquidity from vault\"\n ],\n \"discriminator\": [\n 183,\n 18,\n 70,\n 156,\n 148,\n 109,\n 161,\n 34\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"token_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"lp_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_token\",\n \"docs\": [\n \"user_token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_lp\",\n \"docs\": [\n \"user_lp\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"user\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"unmint_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_out_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw_directly_from_strategy\",\n \"docs\": [\n \"user withdraw liquidity from vault, if vault reserve doesn't have enough liquidity, it will withdraw from the strategy firstly\"\n ],\n \"discriminator\": [\n 201,\n 141,\n 146,\n 46,\n 173,\n 116,\n 198,\n 22\n ],\n \"accounts\": [\n {\n \"name\": \"vault\",\n \"docs\": [\n \"vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"strategy\",\n \"docs\": [\n \"strategy\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"strategy_program\"\n },\n {\n \"name\": \"collateral_vault\",\n \"docs\": [\n \"collateral_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"token_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"lp_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"fee_vault\",\n \"docs\": [\n \"fee_vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_token\",\n \"docs\": [\n \"user_token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_lp\",\n \"docs\": [\n \"user_lp\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"user\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"token_program\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"unmint_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_out_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Vault\",\n \"discriminator\": [\n 211,\n 8,\n 232,\n 43,\n 2,\n 152,\n 117,\n 119\n ]\n },\n {\n \"name\": \"Strategy\",\n \"discriminator\": [\n 174,\n 110,\n 39,\n 119,\n 82,\n 106,\n 169,\n 102\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"AddLiquidity\",\n \"discriminator\": [\n 31,\n 94,\n 125,\n 90,\n 227,\n 52,\n 61,\n 186\n ]\n },\n {\n \"name\": \"RemoveLiquidity\",\n \"discriminator\": [\n 116,\n 244,\n 97,\n 232,\n 103,\n 31,\n 152,\n 58\n ]\n },\n {\n \"name\": \"StrategyDeposit\",\n \"discriminator\": [\n 205,\n 53,\n 91,\n 239,\n 34,\n 136,\n 73,\n 47\n ]\n },\n {\n \"name\": \"StrategyWithdraw\",\n \"discriminator\": [\n 120,\n 76,\n 208,\n 95,\n 221,\n 210,\n 229,\n 189\n ]\n },\n {\n \"name\": \"ClaimReward\",\n \"discriminator\": [\n 148,\n 116,\n 134,\n 204,\n 22,\n 171,\n 85,\n 95\n ]\n },\n {\n \"name\": \"PerformanceFee\",\n \"discriminator\": [\n 28,\n 70,\n 231,\n 223,\n 81,\n 109,\n 239,\n 167\n ]\n },\n {\n \"name\": \"ReportLoss\",\n \"discriminator\": [\n 154,\n 36,\n 158,\n 196,\n 32,\n 163,\n 123,\n 126\n ]\n },\n {\n \"name\": \"TotalAmount\",\n \"discriminator\": [\n 92,\n 200,\n 122,\n 145,\n 211,\n 203,\n 49,\n 205\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"VaultIsDisabled\",\n \"msg\": \"Vault is disabled\"\n },\n {\n \"code\": 6001,\n \"name\": \"ExceededSlippage\",\n \"msg\": \"Exceeded slippage tolerance\"\n },\n {\n \"code\": 6002,\n \"name\": \"StrategyIsNotExisted\",\n \"msg\": \"Strategy is not existed\"\n },\n {\n \"code\": 6003,\n \"name\": \"UnAuthorized\",\n \"msg\": \"UnAuthorized\"\n },\n {\n \"code\": 6004,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math operation overflow\"\n },\n {\n \"code\": 6005,\n \"name\": \"ProtocolIsNotSupported\",\n \"msg\": \"Protocol is not supported\"\n },\n {\n \"code\": 6006,\n \"name\": \"UnMatchReserve\",\n \"msg\": \"Reserve does not support token mint\"\n },\n {\n \"code\": 6007,\n \"name\": \"InvalidLockedProfitDegradation\",\n \"msg\": \"lockedProfitDegradation is invalid\"\n },\n {\n \"code\": 6008,\n \"name\": \"MaxStrategyReached\",\n \"msg\": \"Maximum number of strategies have been reached\"\n },\n {\n \"code\": 6009,\n \"name\": \"StrategyExisted\",\n \"msg\": \"Strategy existed\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidUnmintAmount\",\n \"msg\": \"Invalid unmint amount\"\n },\n {\n \"code\": 6011,\n \"name\": \"InvalidAccountsForStrategy\",\n \"msg\": \"Invalid accounts for strategy\"\n },\n {\n \"code\": 6012,\n \"name\": \"InvalidBump\",\n \"msg\": \"Invalid bump\"\n },\n {\n \"code\": 6013,\n \"name\": \"AmountMustGreaterThanZero\",\n \"msg\": \"Amount must be greater than 0\"\n },\n {\n \"code\": 6014,\n \"name\": \"MangoIsNotSupportedAnymore\",\n \"msg\": \"Mango is not supported anymore\"\n },\n {\n \"code\": 6015,\n \"name\": \"StrategyIsNotSupported\",\n \"msg\": \"Strategy is not supported\"\n },\n {\n \"code\": 6016,\n \"name\": \"PayAmountIsExeeced\",\n \"msg\": \"Pay amount is exceeded\"\n },\n {\n \"code\": 6017,\n \"name\": \"FeeVaultIsNotSet\",\n \"msg\": \"Fee vault is not set\"\n },\n {\n \"code\": 6018,\n \"name\": \"LendingAssertionViolation\",\n \"msg\": \"deposit amount in lending is not matched\"\n },\n {\n \"code\": 6019,\n \"name\": \"HaveMoneyInLending\",\n \"msg\": \"Cannot remove strategy becase we have some in lending\"\n }\n ],\n \"types\": [\n {\n \"name\": \"VaultBumps\",\n \"docs\": [\n \"Vault bumps struct\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"vault_bump\",\n \"docs\": [\n \"vault_bump\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_vault_bump\",\n \"docs\": [\n \"token_vault_bump\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"StrategyBumps\",\n \"docs\": [\n \"Strategy bumps struct\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"strategy_index\",\n \"docs\": [\n \"strategy_index\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"other_bumps\",\n \"docs\": [\n \"Bumps of PDAs for the integrated protocol.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 10\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"LockedProfitTracker\",\n \"docs\": [\n \"LockedProfitTracker struct\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"last_updated_locked_profit\",\n \"docs\": [\n \"The total locked profit from the last report\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_report\",\n \"docs\": [\n \"The last timestamp (in seconds) rebalancing\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"locked_profit_degradation\",\n \"docs\": [\n \"Rate per second of degradation\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"StrategyType\",\n \"docs\": [\n \"StrategyType struct\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"PortFinanceWithoutLM\"\n },\n {\n \"name\": \"PortFinanceWithLM\"\n },\n {\n \"name\": \"SolendWithoutLM\"\n },\n {\n \"name\": \"Mango\"\n },\n {\n \"name\": \"SolendWithLM\"\n },\n {\n \"name\": \"ApricotWithoutLM\"\n },\n {\n \"name\": \"Francium\"\n },\n {\n \"name\": \"Tulip\"\n },\n {\n \"name\": \"Vault\"\n },\n {\n \"name\": \"Drift\"\n },\n {\n \"name\": \"Frakt\"\n },\n {\n \"name\": \"Marginfi\"\n }\n ]\n }\n },\n {\n \"name\": \"Vault\",\n \"docs\": [\n \"Vault struct\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"enabled\",\n \"docs\": [\n \"The flag, if admin set enable = false, then the user can only withdraw and cannot deposit in the vault.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"bumps\",\n \"docs\": [\n \"Vault nonce, to create vault seeds\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"VaultBumps\"\n }\n }\n },\n {\n \"name\": \"total_amount\",\n \"docs\": [\n \"The total liquidity of the vault, including remaining tokens in token_vault and the liquidity in all strategies.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"Token account, hold liquidity in vault reserve\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_vault\",\n \"docs\": [\n \"Hold lp token of vault, each time rebalance crank is called, vault calculate performance fee and mint corresponding lp token amount to fee_vault. fee_vault is owned by treasury address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_mint\",\n \"docs\": [\n \"Token mint that vault supports\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"Lp mint of vault\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"strategies\",\n \"docs\": [\n \"The list of strategy addresses that vault supports, vault can support up to MAX_STRATEGY strategies at the same time.\"\n ],\n \"type\": {\n \"array\": [\n \"pubkey\",\n 30\n ]\n }\n },\n {\n \"name\": \"base\",\n \"docs\": [\n \"The base address to create vault seeds\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin of vault\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"Person who can send the crank. Operator can only send liquidity to strategies that admin defined, and claim reward to account of treasury address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"locked_profit_tracker\",\n \"docs\": [\n \"Stores information for locked profit.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"LockedProfitTracker\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"Strategy\",\n \"docs\": [\n \"Strategy struct\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"reserve\",\n \"docs\": [\n \"Lending pool address, that the strategy will deposit/withdraw balance\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"collateral_vault\",\n \"docs\": [\n \"The token account, that holds the collateral token\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"strategy_type\",\n \"docs\": [\n \"Specify type of strategy\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"StrategyType\"\n }\n }\n },\n {\n \"name\": \"current_liquidity\",\n \"docs\": [\n \"The liquidity in strategy at the time vault deposit/withdraw from a lending protocol\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bumps\",\n \"docs\": [\n \"Hold some bumps, in case the strategy needs to use other seeds to sign a CPI call.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 10\n ]\n }\n },\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Vault address, that the strategy belongs\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"is_disable\",\n \"docs\": [\n \"If we remove strategy by remove_strategy2 endpoint, this account will be never added again\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"AddLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lp_mint_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoveLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lp_unmint_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"StrategyDeposit\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"strategy_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"StrategyType\"\n }\n }\n },\n {\n \"name\": \"token_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"StrategyWithdraw\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"strategy_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"StrategyType\"\n }\n }\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"estimated_token_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"ClaimReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"strategy_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"StrategyType\"\n }\n }\n },\n {\n \"name\": \"token_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"mint_account\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"PerformanceFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lp_mint_more\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"ReportLoss\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"strategy\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"loss\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"TotalAmount\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n }\n ]\n}","{\n \"address\": \"Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB\",\n \"metadata\": {\n \"name\": \"amm\",\n \"version\": \"0.5.3\",\n \"spec\": \"0.1.0\"\n },\n \"docs\": [\n \"Program for AMM\"\n ],\n \"instructions\": [\n {\n \"name\": \"initialize_permissioned_pool\",\n \"docs\": [\n \"Initialize a new permissioned pool.\"\n ],\n \"discriminator\": [\n 77,\n 85,\n 178,\n 157,\n 50,\n 48,\n 212,\n 126\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (arbitrary address)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token A mint of the pool. Eg: USDT\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token B mint of the pool. Eg: USDC\"\n ]\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin_token_a\",\n \"docs\": [\n \"Admin token account for pool token A mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin_token_b\",\n \"docs\": [\n \"Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin_pool_lp\",\n \"docs\": [\n \"Admin pool LP token account. Used to receive LP during first deposit (initialize pool)\",\n \"Admin pool LP token account. Used to receive LP during first deposit (initialize pool)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_a_fee\",\n \"docs\": [\n \"Protocol fee token account for token A. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_b_fee\",\n \"docs\": [\n \"Protocol fee token account for token B. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"fee_owner\"\n },\n {\n \"name\": \"rent\",\n \"docs\": [\n \"Rent account.\"\n ]\n },\n {\n \"name\": \"mint_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"metadata_program\"\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. The pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program.\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"curve_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"CurveType\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_permissionless_pool\",\n \"docs\": [\n \"Initialize a new permissionless pool.\"\n ],\n \"discriminator\": [\n 118,\n 173,\n 41,\n 157,\n 173,\n 72,\n 97,\n 103\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA address)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token A mint of the pool. Eg: USDT\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token B mint of the pool. Eg: USDC\"\n ]\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_pool_lp\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_a_fee\",\n \"docs\": [\n \"Protocol fee token account for token A. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_b_fee\",\n \"docs\": [\n \"Protocol fee token account for token B. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"fee_owner\"\n },\n {\n \"name\": \"rent\",\n \"docs\": [\n \"Rent account.\"\n ]\n },\n {\n \"name\": \"mint_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"metadata_program\"\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. The pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program.\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"curve_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"CurveType\"\n }\n }\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize_permissionless_pool_with_fee_tier\",\n \"docs\": [\n \"Initialize a new permissionless pool with customized fee tier\"\n ],\n \"discriminator\": [\n 6,\n 135,\n 68,\n 147,\n 229,\n 82,\n 169,\n 113\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA address)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token A mint of the pool. Eg: USDT\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token B mint of the pool. Eg: USDC\"\n ]\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_pool_lp\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_a_fee\",\n \"docs\": [\n \"Protocol fee token account for token A. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_b_fee\",\n \"docs\": [\n \"Protocol fee token account for token B. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"fee_owner\"\n },\n {\n \"name\": \"rent\",\n \"docs\": [\n \"Rent account.\"\n ]\n },\n {\n \"name\": \"mint_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"metadata_program\"\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. The pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program.\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"curve_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"CurveType\"\n }\n }\n },\n {\n \"name\": \"trade_fee_bps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"enable_or_disable_pool\",\n \"docs\": [\n \"Enable or disable a pool. A disabled pool allow only remove balanced liquidity operation.\"\n ],\n \"discriminator\": [\n 128,\n 6,\n 228,\n 131,\n 55,\n 161,\n 52,\n 169\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin account. Must be owner of the pool.\"\n ],\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"enable\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"swap\",\n \"docs\": [\n \"Swap token A to B, or vice versa. An amount of trading fee will be charged for liquidity provider, and the admin of the pool.\"\n ],\n \"discriminator\": [\n 248,\n 198,\n 158,\n 145,\n 225,\n 117,\n 135,\n 200\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_source_token\",\n \"docs\": [\n \"User token account. Token from this account will be transfer into the vault by the pool in exchange for another token of the pool.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_destination_token\",\n \"docs\": [\n \"User token account. The exchanged token will be transfer into this account from the pool.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"Lp token mint of vault a\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"Lp token mint of vault b\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_fee\",\n \"docs\": [\n \"Protocol fee token account. Used to receive trading fee. It's mint field must matched with user_source_token mint field.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User account. Must be owner of user_source_token.\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. the pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"in_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minimum_out_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"remove_liquidity_single_side\",\n \"docs\": [\n \"Withdraw only single token from the pool. Only supported by pool with stable swap curve.\"\n ],\n \"discriminator\": [\n 84,\n 84,\n 177,\n 66,\n 254,\n 185,\n 10,\n 251\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_pool_lp\",\n \"docs\": [\n \"User pool lp token account. LP will be burned from this account upon success liquidity removal.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_destination_token\",\n \"docs\": [\n \"User token account to receive token upon success liquidity removal.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User account. Must be owner of the user_pool_lp account.\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. The pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"pool_token_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minimum_out_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"add_imbalance_liquidity\",\n \"docs\": [\n \"Deposit tokens to the pool in an imbalance ratio. Only supported by pool with stable swap curve.\"\n ],\n \"discriminator\": [\n 79,\n 35,\n 122,\n 84,\n 173,\n 15,\n 93,\n 191\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_pool_lp\",\n \"docs\": [\n \"user pool lp token account. lp will be burned from this account upon success liquidity removal.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault a\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault b\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_a_token\",\n \"docs\": [\n \"User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_b_token\",\n \"docs\": [\n \"User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User account. Must be owner of user_a_token, and user_b_token.\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. the pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"minimum_pool_token_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"remove_balance_liquidity\",\n \"docs\": [\n \"Withdraw tokens from the pool in a balanced ratio. User will still able to withdraw from pool even the pool is disabled. This allow user to exit their liquidity when there's some unforeseen event happen.\"\n ],\n \"discriminator\": [\n 133,\n 109,\n 44,\n 179,\n 56,\n 238,\n 114,\n 33\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_pool_lp\",\n \"docs\": [\n \"user pool lp token account. lp will be burned from this account upon success liquidity removal.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault a\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault b\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_a_token\",\n \"docs\": [\n \"User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_b_token\",\n \"docs\": [\n \"User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User account. Must be owner of user_a_token, and user_b_token.\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. the pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"pool_token_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minimum_a_token_out\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minimum_b_token_out\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"add_balance_liquidity\",\n \"docs\": [\n \"Deposit tokens to the pool in a balanced ratio.\"\n ],\n \"discriminator\": [\n 168,\n 227,\n 50,\n 62,\n 189,\n 171,\n 84,\n 176\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_pool_lp\",\n \"docs\": [\n \"user pool lp token account. lp will be burned from this account upon success liquidity removal.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault a\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault b\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_a_token\",\n \"docs\": [\n \"User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_b_token\",\n \"docs\": [\n \"User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User account. Must be owner of user_a_token, and user_b_token.\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. the pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"pool_token_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"maximum_token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"maximum_token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_pool_fees\",\n \"docs\": [\n \"Update trading fee charged for liquidity provider, and admin.\"\n ],\n \"discriminator\": [\n 102,\n 44,\n 158,\n 54,\n 205,\n 37,\n 126,\n 78\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"fee_operator\",\n \"docs\": [\n \"Fee operator account\"\n ],\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFees\"\n }\n }\n },\n {\n \"name\": \"new_partner_fee_numerator\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"override_curve_param\",\n \"docs\": [\n \"Update swap curve parameters. This function do not allow update of curve type. For example: stable swap curve to constant product curve. Only supported by pool with stable swap curve.\",\n \"Only amp is allowed to be override. The other attributes of stable swap curve will be ignored.\"\n ],\n \"discriminator\": [\n 98,\n 86,\n 204,\n 51,\n 94,\n 71,\n 69,\n 187\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin account.\"\n ],\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"curve_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"CurveType\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"get_pool_info\",\n \"docs\": [\n \"Get the general information of the pool.\"\n ],\n \"discriminator\": [\n 9,\n 48,\n 220,\n 101,\n 22,\n 240,\n 78,\n 200\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ]\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ]\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ]\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ]\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.\"\n ]\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.\"\n ]\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault a\"\n ]\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault b\"\n ]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"bootstrap_liquidity\",\n \"docs\": [\n \"Bootstrap the pool when liquidity is depleted.\"\n ],\n \"discriminator\": [\n 4,\n 228,\n 215,\n 71,\n 225,\n 253,\n 119,\n 206\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_pool_lp\",\n \"docs\": [\n \"user pool lp token account. lp will be burned from this account upon success liquidity removal.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault a\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault b\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_a_token\",\n \"docs\": [\n \"User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_b_token\",\n \"docs\": [\n \"User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User account. Must be owner of user_a_token, and user_b_token.\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. the pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"create_mint_metadata\",\n \"docs\": [\n \"Create mint metadata account for old pools\"\n ],\n \"discriminator\": [\n 13,\n 70,\n 168,\n 41,\n 250,\n 100,\n 148,\n 90\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account\"\n ]\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP mint account of the pool\"\n ]\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"Vault A LP account of the pool\"\n ]\n },\n {\n \"name\": \"mint_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"metadata_program\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ]\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Payer\"\n ],\n \"writable\": true,\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_lock_escrow\",\n \"docs\": [\n \"Create lock account\"\n ],\n \"discriminator\": [\n 54,\n 87,\n 165,\n 19,\n 69,\n 227,\n 218,\n 224\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account\"\n ]\n },\n {\n \"name\": \"lock_escrow\",\n \"docs\": [\n \"Lock account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"owner\"\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ]\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Payer account\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lock\",\n \"docs\": [\n \"Lock Lp token\"\n ],\n \"discriminator\": [\n 21,\n 19,\n 208,\n 43,\n 237,\n 62,\n 255,\n 87\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ]\n },\n {\n \"name\": \"lock_escrow\",\n \"docs\": [\n \"Lock account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"source_tokens\",\n \"docs\": [\n \"owner lp token account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"escrow_vault\",\n \"docs\": [\n \"Escrow vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.\"\n ]\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.\"\n ]\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ]\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ]\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault a\"\n ]\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault b\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"max_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claim_fee\",\n \"docs\": [\n \"Claim fee\"\n ],\n \"discriminator\": [\n 169,\n 32,\n 79,\n 137,\n 136,\n 232,\n 70,\n 137\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lock_escrow\",\n \"docs\": [\n \"Lock account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of lock account\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"source_tokens\",\n \"docs\": [\n \"owner lp token account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"escrow_vault\",\n \"docs\": [\n \"Escrow vault\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token a. token a of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token b. token b of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault a\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault b\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_a_token\",\n \"docs\": [\n \"User token A account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_b_token\",\n \"docs\": [\n \"User token B account. Token will be transfer from this account if it is add liquidity operation. Else, token will be transfer into this account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. the pool will deposit/withdraw liquidity from the vault.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"max_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"create_config\",\n \"docs\": [\n \"Create config\"\n ],\n \"discriminator\": [\n 201,\n 207,\n 243,\n 114,\n 75,\n 111,\n 47,\n 189\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"config_parameters\",\n \"type\": {\n \"defined\": {\n \"name\": \"ConfigParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"close_config\",\n \"docs\": [\n \"Close config\"\n ],\n \"discriminator\": [\n 145,\n 9,\n 72,\n 157,\n 95,\n 125,\n 61,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"initialize_permissionless_constant_product_pool_with_config\",\n \"docs\": [\n \"Initialize permissionless pool with config\"\n ],\n \"discriminator\": [\n 7,\n 166,\n 138,\n 171,\n 206,\n 171,\n 236,\n 244\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA address)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"config\"\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token A mint of the pool. Eg: USDT\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token B mint of the pool. Eg: USDC\"\n ]\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_pool_lp\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_a_fee\",\n \"docs\": [\n \"Protocol fee token account for token A. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_b_fee\",\n \"docs\": [\n \"Protocol fee token account for token B. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"rent\",\n \"docs\": [\n \"Rent account.\"\n ]\n },\n {\n \"name\": \"mint_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"metadata_program\"\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. The pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program.\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize_permissionless_constant_product_pool_with_config2\",\n \"docs\": [\n \"Initialize permissionless pool with config 2\"\n ],\n \"discriminator\": [\n 48,\n 149,\n 220,\n 130,\n 61,\n 11,\n 9,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA address)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"config\"\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token A mint of the pool. Eg: USDT\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token B mint of the pool. Eg: USDC\"\n ]\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_pool_lp\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_a_fee\",\n \"docs\": [\n \"Protocol fee token account for token A. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_b_fee\",\n \"docs\": [\n \"Protocol fee token account for token B. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"rent\",\n \"docs\": [\n \"Rent account.\"\n ]\n },\n {\n \"name\": \"mint_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"metadata_program\"\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. The pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program.\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"activation_point\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"initialize_customizable_permissionless_constant_product_pool\",\n \"docs\": [\n \"Initialize permissionless pool with customizable params\"\n ],\n \"discriminator\": [\n 145,\n 24,\n 172,\n 194,\n 219,\n 125,\n 3,\n 190\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA address)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token A mint of the pool. Eg: USDT\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token B mint of the pool. Eg: USDC\"\n ]\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_token_vault\",\n \"docs\": [\n \"Token vault account of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_token_vault\",\n \"docs\": [\n \"Token vault account of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault A\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp_mint\",\n \"docs\": [\n \"LP token mint of vault B\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn vault LP upon deposit/withdraw from the vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"Payer token account for pool token A mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"Admin token account for pool token B mint. Used to bootstrap the pool with initial liquidity.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_pool_lp\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_a_fee\",\n \"docs\": [\n \"Protocol fee token account for token A. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_b_fee\",\n \"docs\": [\n \"Protocol fee token account for token B. Used to receive trading fee.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Admin account. This account will be the admin of the pool, and the payer for PDA during initialize pool.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"rent\",\n \"docs\": [\n \"Rent account.\"\n ]\n },\n {\n \"name\": \"mint_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"metadata_program\"\n },\n {\n \"name\": \"vault_program\",\n \"docs\": [\n \"Vault program. The pool will deposit/withdraw liquidity from the vault.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program.\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program.\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"CustomizableParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_activation_point\",\n \"docs\": [\n \"Update activation slot\"\n ],\n \"discriminator\": [\n 150,\n 62,\n 125,\n 219,\n 171,\n 220,\n 26,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin account.\"\n ],\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"new_activation_point\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw_protocol_fees\",\n \"docs\": [\n \"Withdraw protocol fee\"\n ],\n \"discriminator\": [\n 11,\n 68,\n 165,\n 98,\n 18,\n 208,\n 134,\n 73\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ]\n },\n {\n \"name\": \"a_vault_lp\"\n },\n {\n \"name\": \"protocol_token_a_fee\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_b_fee\",\n \"writable\": true\n },\n {\n \"name\": \"treasury_token_a\",\n \"writable\": true\n },\n {\n \"name\": \"treasury_token_b\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"set_whitelisted_vault\",\n \"docs\": [\n \"Set whitelisted vault\"\n ],\n \"discriminator\": [\n 12,\n 148,\n 94,\n 42,\n 55,\n 57,\n 83,\n 247\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"whitelisted_vault\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"partner_claim_fee\",\n \"docs\": [\n \"Partner claim fee\"\n ],\n \"discriminator\": [\n 57,\n 53,\n 176,\n 30,\n 123,\n 70,\n 52,\n 64\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"a_vault_lp\"\n },\n {\n \"name\": \"protocol_token_a_fee\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_token_b_fee\",\n \"writable\": true\n },\n {\n \"name\": \"partner_token_a\",\n \"writable\": true\n },\n {\n \"name\": \"partner_token_b\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"partner_authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"max_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount_b\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Config\",\n \"discriminator\": [\n 155,\n 12,\n 170,\n 224,\n 30,\n 250,\n 204,\n 130\n ]\n },\n {\n \"name\": \"LockEscrow\",\n \"discriminator\": [\n 190,\n 106,\n 121,\n 6,\n 200,\n 182,\n 21,\n 75\n ]\n },\n {\n \"name\": \"Pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"AddLiquidity\",\n \"discriminator\": [\n 31,\n 94,\n 125,\n 90,\n 227,\n 52,\n 61,\n 186\n ]\n },\n {\n \"name\": \"RemoveLiquidity\",\n \"discriminator\": [\n 116,\n 244,\n 97,\n 232,\n 103,\n 31,\n 152,\n 58\n ]\n },\n {\n \"name\": \"BootstrapLiquidity\",\n \"discriminator\": [\n 121,\n 127,\n 38,\n 136,\n 92,\n 55,\n 14,\n 247\n ]\n },\n {\n \"name\": \"Swap\",\n \"discriminator\": [\n 81,\n 108,\n 227,\n 190,\n 205,\n 208,\n 10,\n 196\n ]\n },\n {\n \"name\": \"SetPoolFees\",\n \"discriminator\": [\n 245,\n 26,\n 198,\n 164,\n 88,\n 18,\n 75,\n 9\n ]\n },\n {\n \"name\": \"PoolInfo\",\n \"discriminator\": [\n 207,\n 20,\n 87,\n 97,\n 251,\n 212,\n 234,\n 45\n ]\n },\n {\n \"name\": \"TransferAdmin\",\n \"discriminator\": [\n 228,\n 169,\n 131,\n 244,\n 61,\n 56,\n 65,\n 254\n ]\n },\n {\n \"name\": \"OverrideCurveParam\",\n \"discriminator\": [\n 247,\n 20,\n 165,\n 248,\n 75,\n 5,\n 54,\n 246\n ]\n },\n {\n \"name\": \"PoolCreated\",\n \"discriminator\": [\n 202,\n 44,\n 41,\n 88,\n 104,\n 220,\n 157,\n 82\n ]\n },\n {\n \"name\": \"PoolEnabled\",\n \"discriminator\": [\n 2,\n 151,\n 18,\n 83,\n 204,\n 134,\n 92,\n 191\n ]\n },\n {\n \"name\": \"MigrateFeeAccount\",\n \"discriminator\": [\n 223,\n 234,\n 232,\n 26,\n 252,\n 105,\n 180,\n 125\n ]\n },\n {\n \"name\": \"CreateLockEscrow\",\n \"discriminator\": [\n 74,\n 94,\n 106,\n 141,\n 49,\n 17,\n 98,\n 109\n ]\n },\n {\n \"name\": \"Lock\",\n \"discriminator\": [\n 220,\n 183,\n 67,\n 215,\n 153,\n 207,\n 56,\n 234\n ]\n },\n {\n \"name\": \"ClaimFee\",\n \"discriminator\": [\n 75,\n 122,\n 154,\n 48,\n 140,\n 74,\n 123,\n 163\n ]\n },\n {\n \"name\": \"CreateConfig\",\n \"discriminator\": [\n 199,\n 152,\n 10,\n 19,\n 39,\n 39,\n 157,\n 104\n ]\n },\n {\n \"name\": \"CloseConfig\",\n \"discriminator\": [\n 249,\n 181,\n 108,\n 89,\n 4,\n 150,\n 90,\n 174\n ]\n },\n {\n \"name\": \"WithdrawProtocolFees\",\n \"discriminator\": [\n 30,\n 240,\n 207,\n 196,\n 139,\n 239,\n 79,\n 28\n ]\n },\n {\n \"name\": \"PartnerClaimFees\",\n \"discriminator\": [\n 135,\n 131,\n 10,\n 94,\n 119,\n 209,\n 202,\n 48\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math operation overflow\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidFee\",\n \"msg\": \"Invalid fee setup\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidInvariant\",\n \"msg\": \"Invalid invariant d\"\n },\n {\n \"code\": 6003,\n \"name\": \"FeeCalculationFailure\",\n \"msg\": \"Fee calculation failure\"\n },\n {\n \"code\": 6004,\n \"name\": \"ExceededSlippage\",\n \"msg\": \"Exceeded slippage tolerance\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidCalculation\",\n \"msg\": \"Invalid curve calculation\"\n },\n {\n \"code\": 6006,\n \"name\": \"ZeroTradingTokens\",\n \"msg\": \"Given pool token amount results in zero trading tokens\"\n },\n {\n \"code\": 6007,\n \"name\": \"ConversionError\",\n \"msg\": \"Math conversion overflow\"\n },\n {\n \"code\": 6008,\n \"name\": \"FaultyLpMint\",\n \"msg\": \"LP mint authority must be 'A' vault lp, without freeze authority, and 0 supply\"\n },\n {\n \"code\": 6009,\n \"name\": \"MismatchedTokenMint\",\n \"msg\": \"Token mint mismatched\"\n },\n {\n \"code\": 6010,\n \"name\": \"MismatchedLpMint\",\n \"msg\": \"LP mint mismatched\"\n },\n {\n \"code\": 6011,\n \"name\": \"MismatchedOwner\",\n \"msg\": \"Invalid lp token owner\"\n },\n {\n \"code\": 6012,\n \"name\": \"InvalidVaultAccount\",\n \"msg\": \"Invalid vault account\"\n },\n {\n \"code\": 6013,\n \"name\": \"InvalidVaultLpAccount\",\n \"msg\": \"Invalid vault lp account\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidPoolLpMintAccount\",\n \"msg\": \"Invalid pool lp mint account\"\n },\n {\n \"code\": 6015,\n \"name\": \"PoolDisabled\",\n \"msg\": \"Pool disabled\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidAdminAccount\",\n \"msg\": \"Invalid admin account\"\n },\n {\n \"code\": 6017,\n \"name\": \"InvalidProtocolFeeAccount\",\n \"msg\": \"Invalid protocol fee account\"\n },\n {\n \"code\": 6018,\n \"name\": \"SameAdminAccount\",\n \"msg\": \"Same admin account\"\n },\n {\n \"code\": 6019,\n \"name\": \"IdenticalSourceDestination\",\n \"msg\": \"Identical user source and destination token account\"\n },\n {\n \"code\": 6020,\n \"name\": \"ApyCalculationError\",\n \"msg\": \"Apy calculation error\"\n },\n {\n \"code\": 6021,\n \"name\": \"InsufficientSnapshot\",\n \"msg\": \"Insufficient virtual price snapshot\"\n },\n {\n \"code\": 6022,\n \"name\": \"NonUpdatableCurve\",\n \"msg\": \"Current curve is non-updatable\"\n },\n {\n \"code\": 6023,\n \"name\": \"MisMatchedCurve\",\n \"msg\": \"New curve is mismatched with old curve\"\n },\n {\n \"code\": 6024,\n \"name\": \"InvalidAmplification\",\n \"msg\": \"Amplification is invalid\"\n },\n {\n \"code\": 6025,\n \"name\": \"UnsupportedOperation\",\n \"msg\": \"Operation is not supported\"\n },\n {\n \"code\": 6026,\n \"name\": \"ExceedMaxAChanges\",\n \"msg\": \"Exceed max amplification changes\"\n },\n {\n \"code\": 6027,\n \"name\": \"InvalidRemainingAccountsLen\",\n \"msg\": \"Invalid remaining accounts length\"\n },\n {\n \"code\": 6028,\n \"name\": \"InvalidRemainingAccounts\",\n \"msg\": \"Invalid remaining account\"\n },\n {\n \"code\": 6029,\n \"name\": \"MismatchedDepegMint\",\n \"msg\": \"Token mint B doesn't matches depeg type token mint\"\n },\n {\n \"code\": 6030,\n \"name\": \"InvalidApyAccount\",\n \"msg\": \"Invalid APY account\"\n },\n {\n \"code\": 6031,\n \"name\": \"InvalidTokenMultiplier\",\n \"msg\": \"Invalid token multiplier\"\n },\n {\n \"code\": 6032,\n \"name\": \"InvalidDepegInformation\",\n \"msg\": \"Invalid depeg information\"\n },\n {\n \"code\": 6033,\n \"name\": \"UpdateTimeConstraint\",\n \"msg\": \"Update time constraint violated\"\n },\n {\n \"code\": 6034,\n \"name\": \"ExceedMaxFeeBps\",\n \"msg\": \"Exceeded max fee bps\"\n },\n {\n \"code\": 6035,\n \"name\": \"InvalidAdmin\",\n \"msg\": \"Invalid admin\"\n },\n {\n \"code\": 6036,\n \"name\": \"PoolIsNotPermissioned\",\n \"msg\": \"Pool is not permissioned\"\n },\n {\n \"code\": 6037,\n \"name\": \"InvalidDepositAmount\",\n \"msg\": \"Invalid deposit amount\"\n },\n {\n \"code\": 6038,\n \"name\": \"InvalidFeeOwner\",\n \"msg\": \"Invalid fee owner\"\n },\n {\n \"code\": 6039,\n \"name\": \"NonDepletedPool\",\n \"msg\": \"Pool is not depleted\"\n },\n {\n \"code\": 6040,\n \"name\": \"AmountNotPeg\",\n \"msg\": \"Token amount is not 1:1\"\n },\n {\n \"code\": 6041,\n \"name\": \"AmountIsZero\",\n \"msg\": \"Amount is zero\"\n },\n {\n \"code\": 6042,\n \"name\": \"TypeCastFailed\",\n \"msg\": \"Type cast error\"\n },\n {\n \"code\": 6043,\n \"name\": \"AmountIsNotEnough\",\n \"msg\": \"Amount is not enough\"\n },\n {\n \"code\": 6044,\n \"name\": \"InvalidActivationDuration\",\n \"msg\": \"Invalid activation duration\"\n },\n {\n \"code\": 6045,\n \"name\": \"PoolIsNotLaunchPool\",\n \"msg\": \"Pool is not launch pool\"\n },\n {\n \"code\": 6046,\n \"name\": \"UnableToModifyActivationPoint\",\n \"msg\": \"Unable to modify activation point\"\n },\n {\n \"code\": 6047,\n \"name\": \"InvalidAuthorityToCreateThePool\",\n \"msg\": \"Invalid authority to create the pool\"\n },\n {\n \"code\": 6048,\n \"name\": \"InvalidActivationType\",\n \"msg\": \"Invalid activation type\"\n },\n {\n \"code\": 6049,\n \"name\": \"InvalidActivationPoint\",\n \"msg\": \"Invalid activation point\"\n },\n {\n \"code\": 6050,\n \"name\": \"PreActivationSwapStarted\",\n \"msg\": \"Pre activation swap window started\"\n },\n {\n \"code\": 6051,\n \"name\": \"InvalidPoolType\",\n \"msg\": \"Invalid pool type\"\n },\n {\n \"code\": 6052,\n \"name\": \"InvalidQuoteMint\",\n \"msg\": \"Quote token must be SOL,USDC\"\n }\n ],\n \"types\": [\n {\n \"name\": \"TokenMultiplier\",\n \"docs\": [\n \"Multiplier for the pool token. Used to normalized token with different decimal into the same precision.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_a_multiplier\",\n \"docs\": [\n \"Multiplier for token A of the pool.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_multiplier\",\n \"docs\": [\n \"Multiplier for token B of the pool.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"precision_factor\",\n \"docs\": [\n \"Record the highest token decimal in the pool. For example, Token A is 6 decimal, token B is 9 decimal. This will save value of 9.\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolFees\",\n \"docs\": [\n \"Information regarding fee charges\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"trade_fee_numerator\",\n \"docs\": [\n \"Trade fees are extra token amounts that are held inside the token\",\n \"accounts during a trade, making the value of liquidity tokens rise.\",\n \"Trade fee numerator\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"trade_fee_denominator\",\n \"docs\": [\n \"Trade fee denominator\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_trade_fee_numerator\",\n \"docs\": [\n \"Protocol trading fees are extra token amounts that are held inside the token\",\n \"accounts during a trade, with the equivalent in pool tokens minted to\",\n \"the protocol of the program.\",\n \"Protocol trade fee numerator\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_trade_fee_denominator\",\n \"docs\": [\n \"Protocol trade fee denominator\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Depeg\",\n \"docs\": [\n \"Contains information for depeg pool\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_virtual_price\",\n \"docs\": [\n \"The virtual price of staking / interest bearing token\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"base_cache_updated\",\n \"docs\": [\n \"The last time base_virtual_price is updated\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"depeg_type\",\n \"docs\": [\n \"Type of the depeg pool\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"DepegType\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"ConfigParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"trade_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_trade_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"activation_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vault_config_key\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_fee_numerator\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CustomizableParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"trade_fee_numerator\",\n \"docs\": [\n \"Trading fee.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"The pool start trading.\"\n ],\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"has_alpha_vault\",\n \"docs\": [\n \"Whether the pool support alpha vault\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"Activation type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"Padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 90\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Padding\",\n \"docs\": [\n \"Padding for future pool fields\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"padding0\",\n \"docs\": [\n \"Padding 0\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n },\n {\n \"name\": \"padding1\",\n \"docs\": [\n \"Padding 1\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 21\n ]\n }\n },\n {\n \"name\": \"padding2\",\n \"docs\": [\n \"Padding 2\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 21\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PartnerInfo\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pending_fee_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pending_fee_b\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Bootstrapping\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"Activation point, can be slot or timestamp\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"whitelisted_vault\",\n \"docs\": [\n \"Whitelisted vault to be able to buy pool before activation_point\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator\",\n \"docs\": [\n \"Need to store pool creator in lauch pool, so they can modify liquidity before activation_point\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"Activation type, 0 means by slot, 1 means by timestamp\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ActivationType\",\n \"docs\": [\n \"Type of the activation\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Slot\"\n },\n {\n \"name\": \"Timestamp\"\n }\n ]\n }\n },\n {\n \"name\": \"RoundDirection\",\n \"docs\": [\n \"Rounding direction\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Floor\"\n },\n {\n \"name\": \"Ceiling\"\n }\n ]\n }\n },\n {\n \"name\": \"TradeDirection\",\n \"docs\": [\n \"Trade (swap) direction\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"AtoB\"\n },\n {\n \"name\": \"BtoA\"\n }\n ]\n }\n },\n {\n \"name\": \"NewCurveType\",\n \"docs\": [\n \"Type of the swap curve\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"ConstantProduct\"\n },\n {\n \"name\": \"Stable\",\n \"fields\": [\n {\n \"name\": \"amp\",\n \"docs\": [\n \"Amplification coefficient\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_multiplier\",\n \"docs\": [\n \"Multiplier for the pool token. Used to normalized token with different decimal into the same precision.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"TokenMultiplier\"\n }\n }\n },\n {\n \"name\": \"depeg\",\n \"docs\": [\n \"Depeg pool information. Contains functions to allow token amount to be repeg using stake / interest bearing token virtual price\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"Depeg\"\n }\n }\n },\n {\n \"name\": \"last_amp_updated_timestamp\",\n \"docs\": [\n \"The last amp updated timestamp. Used to prevent update_curve_info called infinitely many times within a short period\"\n ],\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"NewCurve\",\n \"fields\": [\n {\n \"name\": \"field_one\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field_two\",\n \"type\": \"u64\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"CurveType\",\n \"docs\": [\n \"Type of the swap curve\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"ConstantProduct\"\n },\n {\n \"name\": \"Stable\",\n \"fields\": [\n {\n \"name\": \"amp\",\n \"docs\": [\n \"Amplification coefficient\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_multiplier\",\n \"docs\": [\n \"Multiplier for the pool token. Used to normalized token with different decimal into the same precision.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"TokenMultiplier\"\n }\n }\n },\n {\n \"name\": \"depeg\",\n \"docs\": [\n \"Depeg pool information. Contains functions to allow token amount to be repeg using stake / interest bearing token virtual price\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"Depeg\"\n }\n }\n },\n {\n \"name\": \"last_amp_updated_timestamp\",\n \"docs\": [\n \"The last amp updated timestamp. Used to prevent update_curve_info called infinitely many times within a short period\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"DepegType\",\n \"docs\": [\n \"Type of depeg pool\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"None\"\n },\n {\n \"name\": \"Marinade\"\n },\n {\n \"name\": \"Lido\"\n },\n {\n \"name\": \"SplStake\"\n }\n ]\n }\n },\n {\n \"name\": \"Rounding\",\n \"docs\": [\n \"Round up, down\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Up\"\n },\n {\n \"name\": \"Down\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolType\",\n \"docs\": [\n \"Pool type\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Permissioned\"\n },\n {\n \"name\": \"Permissionless\"\n }\n ]\n }\n },\n {\n \"name\": \"Config\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFees\"\n }\n }\n },\n {\n \"name\": \"activation_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vault_config_key\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"docs\": [\n \"Only pool_creator_authority can use the current config to initialize new pool. When it's Pubkey::default, it's a public config.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"Activation type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 219\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"LockEscrow\",\n \"docs\": [\n \"State of lock escrow account\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner address\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"escrow_vault\",\n \"docs\": [\n \"Vault address, store the lock user lock\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"bump, used to sign\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"total_locked_amount\",\n \"docs\": [\n \"Total locked amount\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"lp_per_token\",\n \"docs\": [\n \"Lp per token, virtual price of lp token\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"unclaimed_fee_pending\",\n \"docs\": [\n \"Unclaimed fee pending\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"a_fee\",\n \"docs\": [\n \"Total a fee claimed so far\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"b_fee\",\n \"docs\": [\n \"Total b fee claimed so far\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Pool\",\n \"docs\": [\n \"State of pool account\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP token mint of the pool\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token A mint of the pool. Eg: USDT\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token B mint of the pool. Eg: USDC\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"a_vault\",\n \"docs\": [\n \"Vault account for token A. Token A of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"b_vault\",\n \"docs\": [\n \"Vault account for token B. Token B of the pool will be deposit / withdraw from this vault account.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"a_vault_lp\",\n \"docs\": [\n \"LP token account of vault A. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"b_vault_lp\",\n \"docs\": [\n \"LP token account of vault B. Used to receive/burn the vault LP upon deposit/withdraw from the vault.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"a_vault_lp_bump\",\n \"docs\": [\n \"\\\"A\\\" vault lp bump. Used to create signer seeds.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"enabled\",\n \"docs\": [\n \"Flag to determine whether the pool is enabled, or disabled.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"protocol_token_a_fee\",\n \"docs\": [\n \"Protocol fee token account for token A. Used to receive trading fee.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"protocol_token_b_fee\",\n \"docs\": [\n \"Protocol fee token account for token B. Used to receive trading fee.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_last_updated_at\",\n \"docs\": [\n \"Fee last updated timestamp\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding0\",\n \"type\": {\n \"array\": [\n \"u8\",\n 24\n ]\n }\n },\n {\n \"name\": \"fees\",\n \"docs\": [\n \"Store the fee charges setting.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFees\"\n }\n }\n },\n {\n \"name\": \"pool_type\",\n \"docs\": [\n \"Pool type\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolType\"\n }\n }\n },\n {\n \"name\": \"stake\",\n \"docs\": [\n \"Stake pubkey of SPL stake pool\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_locked_lp\",\n \"docs\": [\n \"Total locked lp token\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bootstrapping\",\n \"docs\": [\n \"bootstrapping config\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"Bootstrapping\"\n }\n }\n },\n {\n \"name\": \"partner_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"PartnerInfo\"\n }\n }\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"Padding for future pool field\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"Padding\"\n }\n }\n },\n {\n \"name\": \"curve_type\",\n \"docs\": [\n \"The type of the swap curve supported by the pool.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CurveType\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"AddLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lp_mint_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoveLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lp_unmint_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_a_out_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_out_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"BootstrapLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lp_mint_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Swap\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"in_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"out_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"trade_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"host_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SetPoolFees\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"trade_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"trade_fee_denominator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_trade_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_trade_fee_denominator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolInfo\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"virtual_price\",\n \"type\": \"f64\"\n },\n {\n \"name\": \"current_timestamp\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"TransferAdmin\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"OverrideCurveParam\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"new_amp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"updated_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolCreated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lp_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolType\"\n }\n }\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolEnabled\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"enabled\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"MigrateFeeAccount\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_admin_token_a_fee\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_admin_token_b_fee\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreateLockEscrow\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Lock\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"ClaimFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"b_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreateConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"trade_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_trade_fee_numerator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"CloseConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawProtocolFees\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"protocol_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_b_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_a_fee_owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"protocol_b_fee_owner\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"PartnerClaimFees\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_b\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner\",\n \"type\": \"pubkey\"\n }\n ]\n }\n }\n ]\n}","import BN from 'bn.js'\nimport Decimal from 'decimal.js'\nimport { SafeMath } from './safeMath'\nimport { MAX_CURVE_POINT } from '../constants'\nimport {\n getDeltaAmountBaseUnsigned,\n getDeltaAmountQuoteUnsigned,\n getNextSqrtPriceFromInput,\n} from './curve'\nimport { getFeeOnAmount } from './feeMath'\nimport { bnToDecimal, decimalToBN } from './utilsMath'\nimport {\n TradeDirection,\n type FeeOnAmountResult,\n type FeeMode,\n type SwapAmount,\n} from '../types'\nimport {\n Rounding,\n type PoolConfig,\n type QuoteResult,\n type VirtualPool,\n} from '../types'\n\n/**\n * Get swap result\n * @param poolState Pool state\n * @param configState Config state\n * @param amountIn Input amount\n * @param feeMode Fee mode\n * @param tradeDirection Trade direction\n * @param currentPoint Current point\n * @returns Swap result\n */\nexport function getSwapResult(\n poolState: VirtualPool,\n configState: PoolConfig,\n amountIn: BN,\n feeMode: FeeMode,\n tradeDirection: TradeDirection,\n currentPoint: BN\n): QuoteResult {\n let actualProtocolFee = new BN(0)\n let actualTradingFee = new BN(0)\n let actualReferralFee = new BN(0)\n\n // Apply fees on input if needed\n let actualAmountIn: BN\n if (feeMode.feesOnInput) {\n const feeResult: FeeOnAmountResult = getFeeOnAmount(\n amountIn,\n configState.poolFees,\n feeMode.hasReferral,\n currentPoint,\n poolState.activationPoint,\n poolState.volatilityTracker\n )\n\n actualProtocolFee = feeResult.protocolFee\n actualTradingFee = feeResult.tradingFee\n actualReferralFee = feeResult.referralFee\n actualAmountIn = feeResult.amount\n } else {\n actualAmountIn = amountIn\n }\n\n // Calculate swap amount\n const swapAmount: SwapAmount =\n tradeDirection === TradeDirection.BaseToQuote\n ? getSwapAmountFromBaseToQuote(\n configState,\n poolState.sqrtPrice,\n actualAmountIn\n )\n : getSwapAmountFromQuoteToBase(\n configState,\n poolState.sqrtPrice,\n actualAmountIn\n )\n\n // Apply fees on output if needed\n let actualAmountOut: BN\n if (feeMode.feesOnInput) {\n actualAmountOut = swapAmount.outputAmount\n } else {\n const feeResult: FeeOnAmountResult = getFeeOnAmount(\n swapAmount.outputAmount,\n configState.poolFees,\n feeMode.hasReferral,\n currentPoint,\n poolState.activationPoint,\n poolState.volatilityTracker\n )\n\n actualProtocolFee = feeResult.protocolFee\n actualTradingFee = feeResult.tradingFee\n actualReferralFee = feeResult.referralFee\n actualAmountOut = feeResult.amount\n }\n\n let beforePrice = 0\n let afterPrice = 0\n\n try {\n const sqrtPriceDecimal = new Decimal(poolState.sqrtPrice.toString())\n const nextSqrtPriceDecimal = new Decimal(\n swapAmount.nextSqrtPrice.toString()\n )\n\n // Square the values\n const beforePriceDecimal = sqrtPriceDecimal\n .pow(2)\n .div(new Decimal(2).pow(128))\n const afterPriceDecimal = nextSqrtPriceDecimal\n .pow(2)\n .div(new Decimal(2).pow(128))\n\n if (beforePriceDecimal.lte(Number.MAX_SAFE_INTEGER)) {\n beforePrice = beforePriceDecimal.toNumber()\n }\n\n if (afterPriceDecimal.lte(Number.MAX_SAFE_INTEGER)) {\n afterPrice = afterPriceDecimal.toNumber()\n }\n } catch (error) {\n console.warn('Error calculating price:', error)\n }\n\n return {\n amountOut: actualAmountOut,\n minimumAmountOut: actualAmountOut,\n nextSqrtPrice: swapAmount.nextSqrtPrice,\n fee: {\n trading: actualTradingFee,\n protocol: actualProtocolFee,\n referral: actualReferralFee,\n },\n price: {\n beforeSwap: beforePrice,\n afterSwap: afterPrice,\n },\n }\n}\n\n/**\n * Get swap amount from base to quote\n * @param configState Config state\n * @param currentSqrtPrice Current sqrt price\n * @param amountIn Input amount\n * @returns Swap amount\n */\nexport function getSwapAmountFromBaseToQuote(\n configState: {\n curve: Array<{\n sqrtPrice: BN\n liquidity: BN\n }>\n },\n currentSqrtPrice: BN,\n amountIn: BN\n): SwapAmount {\n // Early return for zero amount\n if (amountIn.isZero()) {\n return {\n outputAmount: new BN(0),\n nextSqrtPrice: currentSqrtPrice,\n }\n }\n\n // Using Decimal.js for tracking total output with higher precision\n let totalOutputAmountDecimal = new Decimal(0)\n let sqrtPrice = currentSqrtPrice\n let amountLeft = amountIn\n\n // Iterate through the curve points in reverse order\n for (let i = MAX_CURVE_POINT - 1; i >= 0; i--) {\n if (i >= configState.curve.length) continue\n\n if (configState.curve[i]?.sqrtPrice.lt(sqrtPrice)) {\n // Get the current liquidity\n const currentLiquidity =\n i + 1 < configState.curve.length\n ? configState.curve[i + 1]?.liquidity\n : configState.curve[i]?.liquidity\n\n // Skip if liquidity is zero\n if (currentLiquidity?.isZero()) continue\n\n const maxAmountIn = getDeltaAmountBaseUnsigned(\n configState.curve[i]?.sqrtPrice ?? new BN(0),\n sqrtPrice,\n currentLiquidity ?? new BN(0),\n Rounding.Up\n )\n\n if (amountLeft.lt(maxAmountIn)) {\n const nextSqrtPrice = getNextSqrtPriceFromInput(\n sqrtPrice,\n currentLiquidity ?? new BN(0),\n amountLeft,\n true\n )\n\n const outputAmount = getDeltaAmountQuoteUnsigned(\n nextSqrtPrice,\n sqrtPrice,\n currentLiquidity ?? new BN(0),\n Rounding.Down\n )\n\n // Add to total using Decimal.js\n totalOutputAmountDecimal = totalOutputAmountDecimal.add(\n bnToDecimal(outputAmount)\n )\n sqrtPrice = nextSqrtPrice\n amountLeft = new BN(0)\n break\n } else {\n const nextSqrtPrice =\n configState.curve[i]?.sqrtPrice ?? new BN(0)\n const outputAmount = getDeltaAmountQuoteUnsigned(\n nextSqrtPrice,\n sqrtPrice,\n currentLiquidity ?? new BN(0),\n Rounding.Down\n )\n\n // Add to total using Decimal.js\n totalOutputAmountDecimal = totalOutputAmountDecimal.add(\n bnToDecimal(outputAmount)\n )\n sqrtPrice = nextSqrtPrice\n amountLeft = SafeMath.sub(amountLeft, maxAmountIn)\n }\n }\n }\n\n // Process remaining amount\n if (!amountLeft.isZero() && !configState.curve[0]?.liquidity?.isZero()) {\n const nextSqrtPrice = getNextSqrtPriceFromInput(\n sqrtPrice,\n configState.curve[0]?.liquidity ?? new BN(0),\n amountLeft,\n true\n )\n\n const outputAmount = getDeltaAmountQuoteUnsigned(\n nextSqrtPrice,\n sqrtPrice,\n configState.curve[0]?.liquidity ?? new BN(0),\n Rounding.Down\n )\n\n // Add to total using Decimal.js\n totalOutputAmountDecimal = totalOutputAmountDecimal.add(\n bnToDecimal(outputAmount)\n )\n sqrtPrice = nextSqrtPrice\n }\n\n // Convert final Decimal result back to BN\n const totalOutputAmount = decimalToBN(\n totalOutputAmountDecimal,\n Rounding.Down\n )\n\n return {\n outputAmount: totalOutputAmount,\n nextSqrtPrice: sqrtPrice,\n }\n}\n\n/**\n * Get swap amount from quote to base\n * @param configState Config state\n * @param currentSqrtPrice Current sqrt price\n * @param amountIn Input amount\n * @returns Swap amount\n * @throws Error if not enough liquidity\n */\nexport function getSwapAmountFromQuoteToBase(\n configState: {\n curve: Array<{\n sqrtPrice: BN\n liquidity: BN\n }>\n },\n currentSqrtPrice: BN,\n amountIn: BN\n): SwapAmount {\n // Early return for zero amount\n if (amountIn.isZero()) {\n return {\n outputAmount: new BN(0),\n nextSqrtPrice: currentSqrtPrice,\n }\n }\n\n // Using Decimal.js for tracking total output with higher precision\n let totalOutputAmountDecimal = new Decimal(0)\n let sqrtPrice = currentSqrtPrice\n let amountLeft = amountIn\n\n // Iterate through the curve points\n for (let i = 0; i < MAX_CURVE_POINT; i++) {\n if (i >= configState.curve.length) continue\n\n // Skip if liquidity is zero\n if (configState.curve[i]?.liquidity?.isZero()) continue\n\n if (configState.curve[i]?.sqrtPrice?.gt(sqrtPrice)) {\n const maxAmountIn = getDeltaAmountQuoteUnsigned(\n sqrtPrice,\n configState.curve[i]?.sqrtPrice ?? new BN(0),\n configState.curve[i]?.liquidity ?? new BN(0),\n Rounding.Up\n )\n\n if (amountLeft.lt(maxAmountIn)) {\n const nextSqrtPrice = getNextSqrtPriceFromInput(\n sqrtPrice,\n configState.curve[i]?.liquidity ?? new BN(0),\n amountLeft,\n false\n )\n\n const outputAmount = getDeltaAmountBaseUnsigned(\n sqrtPrice,\n nextSqrtPrice,\n configState.curve[i]?.liquidity ?? new BN(0),\n Rounding.Down\n )\n\n // Add to total using Decimal.js\n totalOutputAmountDecimal = totalOutputAmountDecimal.add(\n bnToDecimal(outputAmount)\n )\n sqrtPrice = nextSqrtPrice\n amountLeft = new BN(0)\n break\n } else {\n const nextSqrtPrice =\n configState.curve[i]?.sqrtPrice ?? new BN(0)\n const outputAmount = getDeltaAmountBaseUnsigned(\n sqrtPrice,\n nextSqrtPrice,\n configState.curve[i]?.liquidity ?? new BN(0),\n Rounding.Down\n )\n\n // Add to total using Decimal.js\n totalOutputAmountDecimal = totalOutputAmountDecimal.add(\n bnToDecimal(outputAmount)\n )\n sqrtPrice = nextSqrtPrice\n amountLeft = SafeMath.sub(amountLeft, maxAmountIn)\n }\n }\n }\n\n // Check if all amount was processed\n if (!amountLeft.isZero()) {\n throw new Error('Not enough liquidity to process the entire amount')\n }\n\n // Convert final Decimal result back to BN\n const totalOutputAmount = decimalToBN(\n totalOutputAmountDecimal,\n Rounding.Down\n )\n\n return {\n outputAmount: totalOutputAmount,\n nextSqrtPrice: sqrtPrice,\n }\n}\n\n/**\n * Get fee mode\n * @param collectFeeMode Collect fee mode\n * @param tradeDirection Trade direction\n * @param hasReferral Whether referral is used\n * @returns Fee mode\n */\nexport function getFeeMode(\n collectFeeMode: number,\n tradeDirection: TradeDirection,\n hasReferral: boolean\n): FeeMode {\n let feesOnInput: boolean\n let feesOnBaseToken: boolean\n\n if (collectFeeMode === 0) {\n // QuoteToken\n if (tradeDirection === TradeDirection.BaseToQuote) {\n feesOnInput = false\n feesOnBaseToken = false\n } else {\n feesOnInput = true\n feesOnBaseToken = false\n }\n } else if (collectFeeMode === 1) {\n // OutputToken\n if (tradeDirection === TradeDirection.BaseToQuote) {\n feesOnInput = false\n feesOnBaseToken = false\n } else {\n feesOnInput = false\n feesOnBaseToken = true\n }\n } else {\n throw new Error('InvalidCollectFeeMode')\n }\n\n return {\n feesOnInput,\n feesOnBaseToken,\n hasReferral,\n }\n}\n\n/**\n * Calculate quote for a swap with exact input amount\n * Matches Rust's quote_exact_in function\n */\nexport function swapQuote(\n virtualPool: VirtualPool,\n config: PoolConfig,\n swapBaseForQuote: boolean,\n amountIn: BN,\n hasReferral: boolean = false,\n currentPoint: BN\n): QuoteResult {\n // Match Rust's validation checks\n if (virtualPool.quoteReserve.gte(config.migrationQuoteThreshold)) {\n throw new Error('Virtual pool is completed')\n }\n\n if (amountIn.isZero()) {\n throw new Error('Amount is zero')\n }\n\n // Match Rust's trade direction determination\n const tradeDirection = swapBaseForQuote\n ? TradeDirection.BaseToQuote\n : TradeDirection.QuoteToBase\n\n // Get fee mode using Rust's logic\n const feeMode = getFeeMode(\n config.collectFeeMode,\n tradeDirection,\n hasReferral\n )\n\n // Get swap result\n return getSwapResult(\n virtualPool,\n config,\n amountIn,\n feeMode,\n tradeDirection,\n currentPoint\n )\n}\n","import BN from 'bn.js'\n\n/**\n * Safe math operations for BN\n */\nexport class SafeMath {\n /**\n * Safe addition\n * @param a First number\n * @param b Second number\n * @returns Sum of a and b\n */\n static add(a: BN, b: BN): BN {\n return a.add(b)\n }\n\n /**\n * Safe subtraction\n * @param a First number\n * @param b Second number\n * @returns Difference of a and b\n * @throws Error if b > a\n */\n static sub(a: BN, b: BN): BN {\n if (b.gt(a)) {\n throw new Error('SafeMath: subtraction overflow')\n }\n return a.sub(b)\n }\n\n /**\n * Safe multiplication\n * @param a First number\n * @param b Second number\n * @returns Product of a and b\n */\n static mul(a: BN, b: BN): BN {\n return a.mul(b)\n }\n\n /**\n * Safe division\n * @param a First number\n * @param b Second number\n * @returns Quotient of a and b\n * @throws Error if b is zero\n */\n static div(a: BN, b: BN): BN {\n if (b.isZero()) {\n throw new Error('SafeMath: division by zero')\n }\n return a.div(b)\n }\n\n /**\n * Safe modulo\n * @param a First number\n * @param b Second number\n * @returns Remainder of a divided by b\n * @throws Error if b is zero\n */\n static mod(a: BN, b: BN): BN {\n if (b.isZero()) {\n throw new Error('SafeMath: modulo by zero')\n }\n return a.mod(b)\n }\n\n /**\n * Safe left shift\n * @param a Number to shift\n * @param b Number of bits to shift\n * @returns a << b\n */\n static shl(a: BN, b: number): BN {\n return a.shln(b)\n }\n\n /**\n * Safe right shift\n * @param a Number to shift\n * @param b Number of bits to shift\n * @returns a >> b\n */\n static shr(a: BN, b: number): BN {\n return a.shrn(b)\n }\n}\n","import BN from 'bn.js'\nimport Decimal from 'decimal.js'\nimport { decimalToBN, batchBnToDecimal } from './utilsMath'\nimport { RESOLUTION } from '../constants'\nimport { Rounding } from '../types'\n\n/**\n * Gets the delta amount_base for given liquidity and price range\n * Formula: Δa = L * (1 / √P_lower - 1 / √P_upper)\n * i.e. L * (√P_upper - √P_lower) / (√P_upper * √P_lower)\n * @param lowerSqrtPrice Lower sqrt price\n * @param upperSqrtPrice Upper sqrt price\n * @param liquidity Liquidity\n * @param round Rounding direction\n * @returns Delta amount base\n */\nexport function getDeltaAmountBaseUnsigned(\n lowerSqrtPrice: BN,\n upperSqrtPrice: BN,\n liquidity: BN,\n round: Rounding\n): BN {\n // Throw error for zero liquidity\n if (liquidity.isZero()) {\n throw new Error('Liquidity cannot be zero')\n }\n\n // Convert to Decimal for higher precision in one batch\n const [lowerSqrtPriceDecimal, upperSqrtPriceDecimal, liquidityDecimal] =\n batchBnToDecimal(lowerSqrtPrice, upperSqrtPrice, liquidity)\n\n // Batch operations in Decimal\n const numerator = upperSqrtPriceDecimal\n ? upperSqrtPriceDecimal.sub(lowerSqrtPriceDecimal ?? new Decimal(0))\n : new Decimal(0)\n const denominator = lowerSqrtPriceDecimal\n ? lowerSqrtPriceDecimal.mul(upperSqrtPriceDecimal ?? new Decimal(0))\n : new Decimal(0)\n\n if (denominator.isZero()) {\n throw new Error('Denominator cannot be zero')\n }\n\n // Calculate with Decimal.js in one operation\n const result = liquidityDecimal\n ? liquidityDecimal.mul(numerator).div(denominator)\n : new Decimal(0)\n\n // Convert back to BN with appropriate rounding\n return decimalToBN(result, round)\n}\n\n/**\n * Gets the delta amount_quote for given liquidity and price range\n * Formula: Δb = L (√P_upper - √P_lower)\n * @param lowerSqrtPrice Lower sqrt price\n * @param upperSqrtPrice Upper sqrt price\n * @param liquidity Liquidity\n * @param round Rounding direction\n * @returns Delta amount quote\n */\nexport function getDeltaAmountQuoteUnsigned(\n lowerSqrtPrice: BN,\n upperSqrtPrice: BN,\n liquidity: BN,\n round: Rounding\n): BN {\n // Throw error for zero liquidity\n if (liquidity.isZero()) {\n throw new Error('Liquidity cannot be zero')\n }\n\n // Throw error for identical prices\n if (lowerSqrtPrice.eq(upperSqrtPrice)) {\n throw new Error('InvalidPrice')\n }\n\n try {\n // Convert to Decimal for higher precision in one batch\n const [lowerSqrtPriceDecimal, upperSqrtPriceDecimal, liquidityDecimal] =\n batchBnToDecimal(lowerSqrtPrice, upperSqrtPrice, liquidity)\n\n // Validate inputs\n if (\n !lowerSqrtPriceDecimal ||\n !upperSqrtPriceDecimal ||\n !liquidityDecimal\n ) {\n throw new Error('Failed to convert BN to Decimal')\n }\n\n // Batch operations in Decimal\n const deltaSqrtPrice = upperSqrtPriceDecimal.sub(lowerSqrtPriceDecimal)\n const denominator = new Decimal(2).pow(RESOLUTION * 2)\n\n // Calculate with Decimal.js in one operation\n const result = liquidityDecimal.mul(deltaSqrtPrice).div(denominator)\n\n // Validate result\n if (!result.isFinite()) {\n throw new Error('Invalid calculation result: not finite')\n }\n\n // Convert back to BN with appropriate rounding\n return decimalToBN(result, round)\n } catch (error: unknown) {\n console.error('Error in getDeltaAmountQuoteUnsigned:', {\n lowerSqrtPrice: lowerSqrtPrice.toString(),\n upperSqrtPrice: upperSqrtPrice.toString(),\n liquidity: liquidity.toString(),\n error: error instanceof Error ? error.message : String(error),\n })\n throw error\n }\n}\n\n/**\n * Gets the next sqrt price given an input amount of token_a or token_b\n * @param sqrtPrice Current sqrt price\n * @param liquidity Liquidity\n * @param amountIn Input amount\n * @param baseForQuote Whether the input is base token for quote token\n * @returns Next sqrt price\n */\nexport function getNextSqrtPriceFromInput(\n sqrtPrice: BN,\n liquidity: BN,\n amountIn: BN,\n baseForQuote: boolean\n): BN {\n if (sqrtPrice.isZero() || liquidity.isZero()) {\n throw new Error('Price or liquidity cannot be zero')\n }\n\n // Round off to make sure that we don't pass the target price\n if (baseForQuote) {\n return getNextSqrtPriceFromAmountBaseRoundingUp(\n sqrtPrice,\n liquidity,\n amountIn\n )\n } else {\n return getNextSqrtPriceFromAmountQuoteRoundingDown(\n sqrtPrice,\n liquidity,\n amountIn\n )\n }\n}\n\n/**\n * Gets the next sqrt price from amount base rounding up\n * Formula: √P' = √P * L / (L + Δx * √P)\n * @param sqrtPrice Current sqrt price\n * @param liquidity Liquidity\n * @param amount Input amount\n * @returns Next sqrt price\n */\nexport function getNextSqrtPriceFromAmountBaseRoundingUp(\n sqrtPrice: BN,\n liquidity: BN,\n amount: BN\n): BN {\n // Early return for zero amount\n if (amount.isZero()) {\n return sqrtPrice\n }\n\n // Convert to Decimal for higher precision in one batch\n const [sqrtPriceDecimal, liquidityDecimal, amountDecimal] =\n batchBnToDecimal(sqrtPrice, liquidity, amount)\n\n // Batch operations in Decimal\n const product = amountDecimal\n ? amountDecimal.mul(sqrtPriceDecimal ?? new Decimal(0))\n : new Decimal(0)\n const denominator = liquidityDecimal\n ? liquidityDecimal.add(product)\n : new Decimal(0)\n\n // Calculate with Decimal.js in one operation\n const result = liquidityDecimal\n ? liquidityDecimal\n .mul(sqrtPriceDecimal ?? new Decimal(0))\n .div(denominator)\n : new Decimal(0)\n\n // Convert back to BN with ceiling rounding\n return decimalToBN(result, Rounding.Up)\n}\n\n/**\n * Gets the next sqrt price given a delta of token_quote\n * Formula: √P' = √P + Δy / L\n * @param sqrtPrice Current sqrt price\n * @param liquidity Liquidity\n * @param amount Input amount\n * @returns Next sqrt price\n */\nexport function getNextSqrtPriceFromAmountQuoteRoundingDown(\n sqrtPrice: BN,\n liquidity: BN,\n amount: BN\n): BN {\n // Early return for zero amount\n if (amount.isZero()) {\n return sqrtPrice\n }\n\n // Convert to Decimal for higher precision in one batch\n const [sqrtPriceDecimal, liquidityDecimal, amountDecimal] =\n batchBnToDecimal(sqrtPrice, liquidity, amount)\n\n // Batch operations in Decimal\n const scaleFactor = new Decimal(2).pow(RESOLUTION * 2)\n\n // Calculate with Decimal.js in one operation\n const result = sqrtPriceDecimal\n ? sqrtPriceDecimal.add(\n amountDecimal\n ? amountDecimal\n .mul(scaleFactor)\n .div(liquidityDecimal ?? new Decimal(0))\n : new Decimal(0)\n )\n : new Decimal(0)\n\n // Convert back to BN with floor rounding\n return decimalToBN(result, Rounding.Down)\n}\n","import BN from 'bn.js'\nimport Decimal from 'decimal.js'\nimport { SafeMath } from './safeMath'\nimport { Rounding } from '../types'\n\n// Configure Decimal.js for high precision\nDecimal.set({ precision: 64, rounding: Decimal.ROUND_DOWN })\n\n/**\n * Convert BN to Decimal\n * @param bn BN value\n * @returns Decimal value\n */\nexport function bnToDecimal(bn: BN): Decimal {\n return new Decimal(bn.toString())\n}\n\n/**\n * Convert multiple BN values to Decimal\n * @param values BN values\n * @returns Decimal values\n */\nexport function batchBnToDecimal(...values: BN[]): Decimal[] {\n return values.map((bn) => new Decimal(bn.toString()))\n}\n\n/**\n * Convert Decimal to BN\n * @param decimal Decimal value\n * @param round Rounding direction\n * @returns BN value\n */\nexport function decimalToBN(\n decimal: Decimal,\n round: Rounding = Rounding.Down\n): BN {\n try {\n // Ensure the decimal is a valid number\n if (!decimal.isFinite()) {\n throw new Error('Invalid decimal value: not finite')\n }\n\n // Convert to string and remove any scientific notation\n const str = decimal.toFixed(0)\n\n // Validate the string is a valid number\n if (!/^-?\\d+$/.test(str)) {\n throw new Error(`Invalid decimal string: ${str}`)\n }\n\n if (round === Rounding.Up) {\n return new BN(str)\n } else {\n return new BN(str)\n }\n } catch (error: unknown) {\n console.error('Error converting decimal to BN:', {\n decimal: decimal.toString(),\n error: error instanceof Error ? error.message : String(error),\n })\n throw error\n }\n}\n\n/**\n * Multiply and divide with rounding using Decimal.js for higher precision\n * @param x First number\n * @param y Second number\n * @param denominator Denominator\n * @param rounding Rounding direction\n * @returns (x * y) / denominator\n */\nexport function mulDiv(x: BN, y: BN, denominator: BN, rounding: Rounding): BN {\n // For simple cases where precision loss is minimal, use BN directly\n if (denominator.eq(new BN(1)) || x.isZero() || y.isZero()) {\n return x.mul(y)\n }\n\n // For small numbers where BN math is sufficient, use BN directly\n if (\n x.lt(new BN(1000)) &&\n y.lt(new BN(1000)) &&\n denominator.lt(new BN(1000))\n ) {\n return mulDivBN(x, y, denominator, rounding)\n }\n\n if (denominator.isZero()) {\n throw new Error('MulDiv: division by zero')\n }\n\n // Convert to Decimal for higher precision in one batch\n const [xDecimal, yDecimal, denominatorDecimal] = batchBnToDecimal(\n x,\n y,\n denominator\n )\n\n // Batch operations in Decimal\n if (!xDecimal || !yDecimal || !denominatorDecimal) {\n throw new Error('MulDiv: conversion to Decimal failed')\n }\n const result = xDecimal.mul(yDecimal).div(denominatorDecimal)\n\n // Apply rounding and convert back to BN\n return decimalToBN(\n rounding === Rounding.Up ? result.ceil() : result.floor(),\n rounding\n )\n}\n\n/**\n * BN-based mulDiv implementation for simpler cases\n */\nexport function mulDivBN(\n x: BN,\n y: BN,\n denominator: BN,\n rounding: Rounding\n): BN {\n if (denominator.isZero()) {\n throw new Error('MulDiv: division by zero')\n }\n\n const prod = SafeMath.mul(x, y)\n\n if (rounding === Rounding.Up) {\n // Calculate ceiling division: (a + b - 1) / b\n const numerator = SafeMath.add(\n prod,\n SafeMath.sub(denominator, new BN(1))\n )\n return SafeMath.div(numerator, denominator)\n } else {\n return SafeMath.div(prod, denominator)\n }\n}\n\n/**\n * Safe multiplication, division, and casting to u64\n * @param x First number\n * @param y Second number\n * @param denominator Denominator\n * @param rounding Rounding direction\n * @returns (x * y) / denominator as u64\n */\nexport function safeMulDivCastU64(\n x: BN,\n y: BN,\n denominator: BN,\n rounding: Rounding\n): BN {\n return mulDiv(x, y, denominator, rounding)\n}\n","import BN from 'bn.js'\nimport Decimal from 'decimal.js'\nimport { SafeMath } from './safeMath'\nimport {\n safeMulDivCastU64,\n bnToDecimal,\n decimalToBN,\n batchBnToDecimal,\n mulDivBN,\n} from './utilsMath'\nimport {\n BASIS_POINT_MAX,\n FEE_DENOMINATOR,\n MAX_FEE_NUMERATOR,\n} from '../constants'\nimport {\n FeeSchedulerMode,\n Rounding,\n type BaseFeeConfig,\n type DynamicFeeConfig,\n type FeeOnAmountResult,\n type PoolFeesConfig,\n type VolatilityTracker,\n} from '../types'\n\n/**\n * Get fee in period for exponential fee scheduler\n * @param cliffFeeNumerator Cliff fee numerator\n * @param reductionFactor Reduction factor\n * @param period Period\n * @returns Fee numerator\n */\nexport function getFeeInPeriod(\n cliffFeeNumerator: BN,\n reductionFactor: BN,\n period: number\n): BN {\n // Early return for period 0\n if (period === 0) {\n return cliffFeeNumerator\n }\n\n // Early return for period 1 with simple calculation\n if (period === 1) {\n const basisPointMax = new BN(BASIS_POINT_MAX)\n return mulDivBN(\n cliffFeeNumerator,\n basisPointMax.sub(reductionFactor),\n basisPointMax,\n Rounding.Down\n )\n }\n\n // Convert to Decimal for higher precision in one batch\n const [cliffFeeDecimal, reductionFactorDecimal] = batchBnToDecimal(\n cliffFeeNumerator,\n reductionFactor\n )\n const basisPointMaxDecimal = new Decimal(BASIS_POINT_MAX)\n\n // Batch operations in Decimal\n // Calculate (1 - reduction_factor/10_000)\n if (!basisPointMaxDecimal || !reductionFactorDecimal) {\n throw new Error('GetFeeInPeriod: conversion to Decimal failed')\n }\n const multiplier = basisPointMaxDecimal\n .sub(reductionFactorDecimal)\n .div(basisPointMaxDecimal)\n\n // Calculate (1 - reduction_factor/10_000)^period in one operation\n if (!cliffFeeDecimal) {\n throw new Error('GetFeeInPeriod: conversion to Decimal failed')\n }\n const feeNumeratorDecimal = cliffFeeDecimal.mul(multiplier.pow(period))\n\n // Convert back to BN\n return decimalToBN(feeNumeratorDecimal, Rounding.Down)\n}\n\n/**\n * Get current base fee numerator\n * @param baseFee Base fee parameters\n * @param currentPoint Current point\n * @param activationPoint Activation point\n * @returns Current base fee numerator\n */\nexport function getCurrentBaseFeeNumerator(\n baseFee: BaseFeeConfig,\n currentPoint: BN,\n activationPoint: BN\n): BN {\n // Early return for zero period frequency\n if (baseFee.periodFrequency.isZero()) {\n return baseFee.cliffFeeNumerator\n }\n\n // Convert to Decimal for higher precision in one batch\n const [\n currentPointDecimal,\n activationPointDecimal,\n periodFrequencyDecimal,\n cliffFeeNumeratorDecimal,\n reductionFactorDecimal,\n ] = batchBnToDecimal(\n currentPoint,\n activationPoint,\n baseFee.periodFrequency,\n baseFee.cliffFeeNumerator,\n baseFee.reductionFactor\n )\n\n // Calculate period\n let periodDecimal: Decimal\n if (\n currentPointDecimal &&\n activationPointDecimal &&\n currentPointDecimal.lt(activationPointDecimal)\n ) {\n // Before activation point, use max period (min fee)\n periodDecimal = new Decimal(baseFee.numberOfPeriod)\n } else {\n // Calculate elapsed periods\n periodDecimal = currentPointDecimal\n ? currentPointDecimal\n .sub(activationPointDecimal ?? new Decimal(0))\n .div(periodFrequencyDecimal ?? new Decimal(0))\n .floor()\n : new Decimal(0)\n\n // Cap at max number of periods\n if (periodDecimal.gt(new Decimal(baseFee.numberOfPeriod))) {\n periodDecimal = new Decimal(baseFee.numberOfPeriod)\n }\n }\n\n const feeSchedulerMode = baseFee.feeSchedulerMode\n\n if (feeSchedulerMode === FeeSchedulerMode.Linear) {\n // Calculate with Decimal.js in one operation\n const feeNumeratorDecimal = cliffFeeNumeratorDecimal\n ? cliffFeeNumeratorDecimal.sub(\n periodDecimal.mul(reductionFactorDecimal ?? new Decimal(0))\n )\n : new Decimal(0)\n\n // Convert back to BN\n return decimalToBN(feeNumeratorDecimal, Rounding.Down)\n } else if (feeSchedulerMode === FeeSchedulerMode.Exponential) {\n // For exponential mode, use the optimized getFeeInPeriod function\n return getFeeInPeriod(\n baseFee.cliffFeeNumerator,\n baseFee.reductionFactor,\n periodDecimal.toNumber()\n )\n } else {\n throw new Error('Invalid fee scheduler mode')\n }\n}\n\n/**\n * Get fee on amount\n * @param amount Amount\n * @param poolFees Pool fees\n * @param isReferral Whether referral is used\n * @param currentPoint Current point\n * @param activationPoint Activation point\n * @param volatilityTracker Volatility tracker\n * @returns Fee on amount result\n */\nexport function getFeeOnAmount(\n amount: BN,\n poolFees: PoolFeesConfig,\n isReferral: boolean,\n currentPoint: BN,\n activationPoint: BN,\n volatilityTracker: VolatilityTracker\n): FeeOnAmountResult {\n // Get total trading fee\n const baseFeeNumerator = getCurrentBaseFeeNumerator(\n poolFees.baseFee,\n currentPoint,\n activationPoint\n )\n\n // Add dynamic fee if enabled\n let totalFeeNumerator = baseFeeNumerator\n if (poolFees.dynamicFee.initialized !== 0) {\n const variableFee = getVariableFee(\n poolFees.dynamicFee,\n volatilityTracker\n )\n totalFeeNumerator = SafeMath.add(totalFeeNumerator, variableFee)\n }\n\n // Cap at MAX_FEE_NUMERATOR\n if (totalFeeNumerator.gt(new BN(MAX_FEE_NUMERATOR))) {\n totalFeeNumerator = new BN(MAX_FEE_NUMERATOR)\n }\n\n // Calculate trading fee\n const tradingFee = safeMulDivCastU64(\n amount,\n totalFeeNumerator,\n new BN(FEE_DENOMINATOR),\n Rounding.Up\n )\n\n // Update amount\n const amountAfterFee = SafeMath.sub(amount, tradingFee)\n\n // Calculate protocol fee\n const protocolFee = safeMulDivCastU64(\n tradingFee,\n new BN(poolFees.protocolFeePercent),\n new BN(100),\n Rounding.Down\n )\n\n // Update trading fee\n const tradingFeeAfterProtocol = SafeMath.sub(tradingFee, protocolFee)\n\n // Calculate referral fee\n let referralFee = new BN(0)\n if (isReferral) {\n referralFee = safeMulDivCastU64(\n protocolFee,\n new BN(poolFees.referralFeePercent),\n new BN(100),\n Rounding.Down\n )\n }\n\n // Update protocol fee\n const protocolFeeAfterReferral = SafeMath.sub(protocolFee, referralFee)\n\n return {\n amount: amountAfterFee,\n tradingFee: tradingFeeAfterProtocol,\n protocolFee: protocolFeeAfterReferral,\n referralFee,\n }\n}\n\n/**\n * Get variable fee from dynamic fee\n * @param dynamicFee Dynamic fee parameters\n * @param volatilityTracker Volatility tracker\n * @returns Variable fee\n */\nexport function getVariableFee(\n dynamicFee: DynamicFeeConfig,\n volatilityTracker: VolatilityTracker\n): BN {\n // Early return if not initialized\n if (dynamicFee.initialized === 0) {\n return new BN(0)\n }\n\n // Early return if volatility accumulator is zero\n if (volatilityTracker.volatilityAccumulator.isZero()) {\n return new BN(0)\n }\n\n // Convert to Decimal for higher precision\n const volatilityAccumulatorDecimal = bnToDecimal(\n volatilityTracker.volatilityAccumulator\n )\n const binStepDecimal = new Decimal(dynamicFee.binStep)\n const variableFeeControlDecimal = new Decimal(dynamicFee.variableFeeControl)\n\n // Batch operations in Decimal\n // Calculate (volatilityAccumulator * binStep)^2 * variableFeeControl\n const volatilityTimesBinStep =\n volatilityAccumulatorDecimal.mul(binStepDecimal)\n const vFee = volatilityTimesBinStep.pow(2).mul(variableFeeControlDecimal)\n\n // Scale down to 1e9 unit with ceiling\n const scaleFactor = new Decimal(100_000_000_000)\n const scaledVFee = vFee\n .add(scaleFactor.sub(new Decimal(1)))\n .div(scaleFactor)\n .floor()\n\n // Convert back to BN\n return decimalToBN(scaledVFee, Rounding.Down)\n}\n","import {\n Connection,\n PublicKey,\n SystemProgram,\n SYSVAR_RENT_PUBKEY,\n TransactionInstruction,\n} from '@solana/web3.js'\nimport { TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport {\n deriveLpMintAddress,\n deriveTokenVaultKey,\n deriveVaultAddress,\n} from './derive'\nimport type { DynamicVault } from './idl/dynamic-vault/idl'\nimport type { Program } from '@coral-xyz/anchor'\nimport type { DammV1 } from './idl/damm-v1/idl'\nimport {\n type LiquidityDistributionParameters,\n type PrepareSwapParams,\n type TokenType,\n} from './types'\nimport { getTokenProgram } from './utils'\nimport { BASE_ADDRESS } from './constants'\nimport BN from 'bn.js'\nimport Decimal from 'decimal.js'\n\n/**\n * Create a permissionless dynamic vault\n * @param mint - The mint of the vault\n * @param payer - The payer of the vault\n * @param vaultProgram - The vault program\n * @returns The vault key, token vault key, and lp mint key\n */\nexport async function createInitializePermissionlessDynamicVaultIx(\n mint: PublicKey,\n payer: PublicKey,\n vaultProgram: Program<DynamicVault>\n): Promise<{\n vaultKey: PublicKey\n tokenVaultKey: PublicKey\n lpMintKey: PublicKey\n instruction: TransactionInstruction\n}> {\n const vaultKey = deriveVaultAddress(mint, BASE_ADDRESS)\n\n const tokenVaultKey = deriveTokenVaultKey(vaultKey)\n\n const lpMintKey = deriveLpMintAddress(vaultKey, vaultProgram.programId)\n\n const ix = await vaultProgram.methods\n .initialize()\n .accountsPartial({\n vault: vaultKey,\n tokenVault: tokenVaultKey,\n tokenMint: mint,\n lpMint: lpMintKey,\n payer,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n\n return {\n instruction: ix,\n vaultKey,\n tokenVaultKey,\n lpMintKey,\n }\n}\n\n/**\n * Create a lock escrow instruction\n * @param connection - The connection to the Solana network\n * @param payer - The payer of the lock escrow\n * @param pool - The pool address\n * @param lpMint - The lp mint address\n * @param escrowOwner - The owner of the escrow\n * @param lockEscrowKey - The lock escrow key\n * @param dammV1Program - The DAMM V1 program\n * @returns The lock escrow instruction\n */\nexport async function createLockEscrowIx(\n connection: Connection,\n payer: PublicKey,\n pool: PublicKey,\n lpMint: PublicKey,\n escrowOwner: PublicKey,\n lockEscrowKey: PublicKey,\n dammV1Program: Program<DammV1>\n): Promise<TransactionInstruction> {\n const ix = await dammV1Program.methods\n .createLockEscrow()\n .accountsStrict({\n pool,\n lpMint,\n owner: escrowOwner,\n lockEscrow: lockEscrowKey,\n systemProgram: SystemProgram.programId,\n payer: payer,\n })\n .instruction()\n\n return ix\n}\n\n/**\n * Prepare swap parameters\n * @param swapBaseForQuote - Whether to swap base for quote\n * @param virtualPoolState - The virtual pool state\n * @param poolConfigState - The pool config state\n * @returns The prepare swap parameters\n */\nexport function prepareSwapParams(\n swapBaseForQuote: boolean,\n virtualPoolState: {\n baseMint: PublicKey\n poolType: TokenType\n },\n poolConfigState: {\n quoteMint: PublicKey\n quoteTokenFlag: TokenType\n }\n): PrepareSwapParams {\n if (swapBaseForQuote) {\n return {\n inputMint: new PublicKey(virtualPoolState.baseMint),\n outputMint: new PublicKey(poolConfigState.quoteMint),\n inputTokenProgram: getTokenProgram(virtualPoolState.poolType),\n outputTokenProgram: getTokenProgram(poolConfigState.quoteTokenFlag),\n }\n } else {\n return {\n inputMint: new PublicKey(poolConfigState.quoteMint),\n outputMint: new PublicKey(virtualPoolState.baseMint),\n inputTokenProgram: getTokenProgram(poolConfigState.quoteTokenFlag),\n outputTokenProgram: getTokenProgram(virtualPoolState.poolType),\n }\n }\n}\n\n/**\n * Get the sqrt price from the price\n * @param price - The price\n * @param tokenADecimal - The decimal of token A\n * @param tokenBDecimal - The decimal of token B\n * @returns The sqrt price\n */\n// Original formula: price = (sqrtPrice >> 64)^2 * 10^(tokenADecimal - tokenBDecimal)\nexport const getSqrtPriceFromPrice = (\n price: string,\n tokenADecimal: number,\n tokenBDecimal: number\n): BN => {\n const decimalPrice = new Decimal(price)\n const adjustedByDecimals = decimalPrice.div(\n new Decimal(10 ** (tokenADecimal - tokenBDecimal))\n )\n const sqrtValue = Decimal.sqrt(adjustedByDecimals)\n const sqrtValueQ64 = sqrtValue.mul(Decimal.pow(2, 64))\n return new BN(sqrtValueQ64.floor().toFixed())\n}\n\n/**\n * Get the price from the sqrt price\n * @param sqrtPrice - The sqrt price\n * @param tokenADecimal - The decimal of token A\n * @param tokenBDecimal - The decimal of token B\n * @returns The price\n */\n// Reverse formula: sqrtPrice = sqrt(price / 10^(tokenADecimal - tokenBDecimal)) << 64\nexport const getPriceFromSqrtPrice = (\n sqrtPrice: BN,\n tokenADecimal: number,\n tokenBDecimal: number\n): Decimal => {\n const decimalSqrtPrice = new Decimal(sqrtPrice.toString())\n const price = decimalSqrtPrice\n .mul(decimalSqrtPrice)\n .mul(new Decimal(10 ** (tokenADecimal - tokenBDecimal)))\n .div(Decimal.pow(2, 128))\n\n return price\n}\n\n/**\n * Get the base token for swap\n * @param sqrtStartPrice - The start sqrt price\n * @param sqrtMigrationPrice - The migration sqrt price\n * @param curve - The curve\n * @returns The base token\n */\nexport function getBaseTokenForSwap(\n sqrtStartPrice: BN,\n sqrtMigrationPrice: BN,\n curve: Array<LiquidityDistributionParameters>\n): BN {\n let totalAmount = new BN(0)\n for (let i = 0; i < curve.length; i++) {\n const lowerSqrtPrice = i == 0 ? sqrtStartPrice : curve[i - 1]?.sqrtPrice\n if (curve[i]?.sqrtPrice && curve[i]?.sqrtPrice.gt(sqrtMigrationPrice)) {\n const deltaAmount = getDeltaAmountBase(\n lowerSqrtPrice ?? new BN(0),\n sqrtMigrationPrice,\n curve[i]?.liquidity ?? new BN(0)\n )\n totalAmount = totalAmount.add(deltaAmount)\n break\n } else {\n const deltaAmount = getDeltaAmountBase(\n lowerSqrtPrice ?? new BN(0),\n curve[i]?.sqrtPrice ?? new BN(0),\n curve[i]?.liquidity ?? new BN(0)\n )\n totalAmount = totalAmount.add(deltaAmount)\n }\n }\n return totalAmount\n}\n\n/**\n * Get the base token for migration\n * @param sqrtMigrationPrice - The migration sqrt price\n * @param migrationQuoteThreshold - The migration quote threshold\n * @returns The base token\n */\nexport function getBaseTokenForMigration(\n sqrtMigrationPrice: BN,\n migrationQuoteThreshold: BN\n): BN {\n const price = sqrtMigrationPrice.mul(sqrtMigrationPrice)\n const base = migrationQuoteThreshold.shln(128).div(price)\n return base\n}\n\n/**\n * Get the delta amount base\n * @param lowerSqrtPrice - The lower sqrt price\n * @param upperSqrtPrice - The upper sqrt price\n * @param liquidity - The liquidity\n * @returns The delta amount base\n */\nexport function getDeltaAmountBase(\n lowerSqrtPrice: BN,\n upperSqrtPrice: BN,\n liquidity: BN\n): BN {\n const numerator = liquidity.mul(upperSqrtPrice.sub(lowerSqrtPrice))\n const denominator = lowerSqrtPrice.mul(upperSqrtPrice)\n return numerator.add(denominator).sub(new BN(1)).div(denominator)\n}\n\n/**\n * Adds a buffer to the liquidity to ensure large swaps don't fail\n * @param liquidity Original liquidity\n * @param migrationSqrtPrice The migration sqrt price\n * @param maxSqrtPrice The maximum sqrt price\n * @returns Liquidity with buffer\n */\nexport function getLiquidityBuffer(\n liquidity: BN,\n migrationSqrtPrice: BN,\n maxSqrtPrice: BN\n): BN {\n // (max-min)\n const priceDiff = maxSqrtPrice.sub(migrationSqrtPrice)\n\n // (max*min)\n const priceProduct = maxSqrtPrice.mul(migrationSqrtPrice)\n\n // swap_buffer_amount = liquidity * (max-min) / (max*min)\n const bufferSwapAmount = liquidity.mul(priceDiff).div(priceProduct)\n\n return bufferSwapAmount\n}\n","import Decimal from 'decimal.js'\nimport BN from 'bn.js'\nimport {\n FeeSchedulerMode,\n type ConfigParameters,\n type DesignConstantProductCurveWithLockVestingParam,\n type DesignConstantProductCurveWithoutLockVestingParam,\n type DesignCurveParam,\n type DesignCurveResponse,\n} from './types'\nimport { MAX_SQRT_PRICE } from './constants'\nimport {\n getLiquidityBuffer,\n getBaseTokenForMigration,\n getBaseTokenForSwap,\n getPriceFromSqrtPrice,\n getSqrtPriceFromPrice,\n} from './common'\n\n/**\n * Design the curve for the Constant Product curve with lock vesting\n * @param designConstantProductCurveWithLockVestingParam - The parameters for the curve\n * @returns The instruction parameters\n */\nexport function designConstantProductCurveWithLockVesting(\n designConstantProductCurveWithLockVestingParam: DesignConstantProductCurveWithLockVestingParam\n): ConfigParameters {\n const {\n totalTokenSupply,\n percentageSupplyOnMigration,\n lockVestingParams,\n startPrice,\n migrationPrice,\n tokenBaseDecimal,\n tokenQuoteDecimal,\n baseFeeBps,\n dynamicFeeEnabled,\n activationType,\n collectFeeMode,\n migrationOption,\n migrationFeeOption,\n tokenType,\n partnerLpPercentage,\n creatorLpPercentage,\n partnerLockedLpPercentage,\n creatorLockedLpPercentage,\n } = designConstantProductCurveWithLockVestingParam\n\n const totalSupply = new BN(totalTokenSupply).mul(\n new BN(10).pow(new BN(tokenBaseDecimal))\n )\n const baseDecimalFactor = new Decimal(10 ** tokenBaseDecimal)\n const quoteDecimalFactor = new Decimal(10 ** tokenQuoteDecimal)\n const preMigrationTokenSupply = totalSupply\n const postMigrationTokenSupply = totalSupply\n const migrationSupply = totalSupply\n .mul(new BN(percentageSupplyOnMigration))\n .div(new BN(100))\n\n let lockedVestingAmount = totalSupply\n .mul(new BN(lockVestingParams.percentageSupplyVesting))\n .div(new BN(100))\n\n const amountPerPeriod =\n lockVestingParams.numberOfPeriod == 0\n ? new BN(0)\n : lockedVestingAmount.div(new BN(lockVestingParams.numberOfPeriod))\n lockedVestingAmount = amountPerPeriod.mul(\n new BN(lockVestingParams.numberOfPeriod)\n )\n\n const sqrtStartPrice = getSqrtPriceFromPrice(\n startPrice.toString(),\n tokenBaseDecimal,\n tokenQuoteDecimal\n )\n\n const migrationSqrtPrice = getSqrtPriceFromPrice(\n migrationPrice.toString(),\n tokenBaseDecimal,\n tokenQuoteDecimal\n )\n\n const priceDelta = migrationSqrtPrice.sub(sqrtStartPrice)\n\n const migrationQuoteThresholdFloat = migrationPrice\n .mul(new Decimal(migrationSupply.toString()))\n .mul(quoteDecimalFactor)\n .div(baseDecimalFactor)\n .floor()\n\n const migrationQuoteThreshold = new BN(\n migrationQuoteThresholdFloat.toString()\n )\n const liquidity = migrationQuoteThreshold.shln(128).div(priceDelta)\n const curves = [\n {\n sqrtPrice: migrationSqrtPrice,\n liquidity,\n },\n {\n sqrtPrice: MAX_SQRT_PRICE,\n liquidity: getLiquidityBuffer(\n liquidity,\n migrationSqrtPrice,\n MAX_SQRT_PRICE\n ),\n },\n ]\n\n // reverse to get amount on swap\n const maxSwapAmount = getBaseTokenForSwap(\n sqrtStartPrice,\n MAX_SQRT_PRICE,\n curves\n )\n const migrationAmount = getBaseTokenForMigration(\n migrationSqrtPrice,\n migrationQuoteThreshold\n )\n\n const cliffUnlockAmount =\n lockVestingParams.cliffUnlockEnabled == false\n ? new BN(0)\n : totalSupply\n .sub(maxSwapAmount)\n .sub(lockedVestingAmount)\n .sub(migrationAmount)\n\n const config: ConfigParameters = {\n poolFees: {\n baseFee: {\n cliffFeeNumerator: new BN((baseFeeBps * 100000).toString()),\n numberOfPeriod: 0,\n reductionFactor: new BN('0'),\n periodFrequency: new BN('0'),\n feeSchedulerMode: FeeSchedulerMode.Linear,\n },\n dynamicFee: dynamicFeeEnabled\n ? {\n binStep: 1,\n binStepU128: new BN('1844674407370955'),\n filterPeriod: 10,\n decayPeriod: 120,\n reductionFactor: 5000,\n variableFeeControl: 2000000,\n maxVolatilityAccumulator: 100000,\n }\n : null,\n },\n activationType: activationType,\n collectFeeMode: collectFeeMode,\n migrationOption: migrationOption,\n tokenType: tokenType,\n tokenDecimal: tokenBaseDecimal,\n migrationQuoteThreshold: new BN(migrationQuoteThreshold.toString()),\n partnerLpPercentage: partnerLpPercentage,\n creatorLpPercentage: creatorLpPercentage,\n partnerLockedLpPercentage: partnerLockedLpPercentage,\n creatorLockedLpPercentage: creatorLockedLpPercentage,\n sqrtStartPrice: new BN(sqrtStartPrice.toString()),\n lockedVesting: {\n amountPerPeriod: new BN(amountPerPeriod.toString()),\n cliffDurationFromMigrationTime: new BN('0'),\n frequency: new BN(lockVestingParams.frequency.toString()),\n numberOfPeriod: new BN(lockVestingParams.numberOfPeriod.toString()),\n cliffUnlockAmount: new BN(cliffUnlockAmount.toString()),\n },\n migrationFeeOption: migrationFeeOption,\n tokenSupply: {\n preMigrationTokenSupply: new BN(preMigrationTokenSupply.toString()),\n postMigrationTokenSupply: new BN(\n postMigrationTokenSupply.toString()\n ),\n },\n padding: [\n new BN(0),\n new BN(0),\n new BN(0),\n new BN(0),\n new BN(0),\n new BN(0),\n new BN(0),\n ],\n curve: curves.map((point) => ({\n sqrtPrice: new BN(point.sqrtPrice.toString()),\n liquidity: new BN(point.liquidity.toString()),\n })),\n }\n\n return config\n}\n\n/**\n * Design the curve for the Constant Product curve without lock vesting\n * @param designConstantProductCurveWithoutLockVestingParam - The parameters for the curve\n * @returns The instruction parameters\n */\nexport function designConstantProductCurveWithoutLockVesting(\n designConstantProductCurveWithoutLockVestingParam: DesignConstantProductCurveWithoutLockVestingParam\n): ConfigParameters {\n const {\n totalTokenSupply,\n percentageSupplyOnMigration,\n startPrice,\n tokenBaseDecimal,\n tokenQuoteDecimal,\n baseFeeBps,\n dynamicFeeEnabled,\n activationType,\n collectFeeMode,\n migrationOption,\n migrationFeeOption,\n tokenType,\n partnerLpPercentage,\n creatorLpPercentage,\n partnerLockedLpPercentage,\n creatorLockedLpPercentage,\n } = designConstantProductCurveWithoutLockVestingParam\n\n const totalSupply = new BN(totalTokenSupply).mul(\n new BN(10).pow(new BN(tokenBaseDecimal))\n )\n const baseDecimalFactor = new Decimal(10 ** tokenBaseDecimal)\n const quoteDecimalFactor = new Decimal(10 ** tokenQuoteDecimal)\n const preMigrationTokenSupply = totalSupply\n const postMigrationTokenSupply = totalSupply\n const migrationSupply = totalSupply\n .mul(new BN(percentageSupplyOnMigration))\n .div(new BN(100))\n const swapSupply = totalSupply.sub(migrationSupply)\n\n const sqrtStartPrice = getSqrtPriceFromPrice(\n startPrice.toString(),\n tokenBaseDecimal,\n tokenQuoteDecimal\n )\n let migrationSqrtPrice = sqrtStartPrice.mul(swapSupply).div(migrationSupply)\n migrationSqrtPrice = migrationSqrtPrice.sub(new BN(1))\n const priceDelta = migrationSqrtPrice.sub(sqrtStartPrice)\n\n const migrationPrice = getPriceFromSqrtPrice(\n migrationSqrtPrice,\n tokenBaseDecimal,\n tokenQuoteDecimal\n )\n const migrationQuoteThresholdFloat = migrationPrice\n .mul(new Decimal(migrationSupply.toString()))\n .mul(quoteDecimalFactor)\n .div(baseDecimalFactor)\n .floor()\n\n const migrationQuoteThreshold = new BN(\n migrationQuoteThresholdFloat.toString()\n )\n\n const liquidity = migrationQuoteThreshold.shln(128).div(priceDelta)\n const curves = [\n {\n sqrtPrice: migrationSqrtPrice,\n liquidity,\n },\n {\n sqrtPrice: MAX_SQRT_PRICE,\n liquidity: getLiquidityBuffer(\n liquidity,\n migrationSqrtPrice,\n MAX_SQRT_PRICE\n ),\n },\n ]\n\n const config: ConfigParameters = {\n poolFees: {\n baseFee: {\n cliffFeeNumerator: new BN((baseFeeBps * 100000).toString()),\n numberOfPeriod: 0,\n reductionFactor: new BN('0'),\n periodFrequency: new BN('0'),\n feeSchedulerMode: FeeSchedulerMode.Linear,\n },\n dynamicFee: dynamicFeeEnabled\n ? {\n binStep: 1,\n binStepU128: new BN('1844674407370955'),\n filterPeriod: 10,\n decayPeriod: 120,\n reductionFactor: 5000,\n variableFeeControl: 2000000,\n maxVolatilityAccumulator: 100000,\n }\n : null,\n },\n activationType: activationType,\n collectFeeMode: collectFeeMode,\n migrationOption: migrationOption,\n tokenType: tokenType,\n tokenDecimal: tokenBaseDecimal,\n migrationQuoteThreshold: new BN(migrationQuoteThreshold.toString()),\n partnerLpPercentage: partnerLpPercentage,\n creatorLpPercentage: creatorLpPercentage,\n partnerLockedLpPercentage: partnerLockedLpPercentage,\n creatorLockedLpPercentage: creatorLockedLpPercentage,\n sqrtStartPrice: new BN(sqrtStartPrice.toString()),\n lockedVesting: {\n amountPerPeriod: new BN('0'),\n cliffDurationFromMigrationTime: new BN('0'),\n frequency: new BN('0'),\n numberOfPeriod: new BN('0'),\n cliffUnlockAmount: new BN('0'),\n },\n migrationFeeOption: migrationFeeOption,\n tokenSupply: {\n preMigrationTokenSupply: new BN(preMigrationTokenSupply.toString()),\n postMigrationTokenSupply: new BN(\n postMigrationTokenSupply.toString()\n ),\n },\n padding: [\n new BN(0),\n new BN(0),\n new BN(0),\n new BN(0),\n new BN(0),\n new BN(0),\n new BN(0),\n ],\n curve: curves.map((point) => ({\n sqrtPrice: new BN(point.sqrtPrice.toString()),\n liquidity: new BN(point.liquidity.toString()),\n })),\n }\n\n return config\n}\n\n/**\n * Design a Constant Product curve\n * @param params - The parameters for the curve\n * @returns The instruction parameters\n */\nexport async function designCurve(\n params: DesignCurveParam\n): Promise<DesignCurveResponse> {\n const {\n tokenDecimal,\n migrationQuoteThreshold,\n tokenBaseSupply,\n migrationBasePercent,\n } = params\n\n const Q64 = new BN(2).pow(new BN(64))\n const Q128 = Q64.mul(Q64)\n const Q64_DEC = new Decimal(Q64.toString())\n\n // Scale the base supply by the migration percent and token decimals\n // baseSupplyDecimal: e.g. 1e9\n // migrationBaseSupplyDecimal = 1e9 * 0.15 * 10^9 = 1.5e17\n const baseSupplyDecimal = new Decimal(tokenBaseSupply.toString())\n const migrationBaseSupplyDecimal = baseSupplyDecimal\n .mul(migrationBasePercent / 100)\n .mul(new Decimal(10).pow(tokenDecimal))\n\n // quoteThresholdDecimal: e.g. 80 * 10^9\n const quoteThresholdDecimal = new Decimal(\n migrationQuoteThreshold.toString()\n )\n\n // Compute Pmax = ceil( sqrt(quote/base) * 2^64 )\n const priceDecimal = quoteThresholdDecimal.div(migrationBaseSupplyDecimal)\n const sqrtPriceDecimal = priceDecimal.sqrt()\n const PmaxDEC = sqrtPriceDecimal.mul(Q64_DEC).ceil()\n const PmaxBN = new BN(PmaxDEC.toFixed(0), 10)\n\n // Pmin = floor((2^128 / 10_000_000) / Pmax)\n const ratioBN = Q128.div(new BN(10_000_000))\n const PminBN = ratioBN.div(PmaxBN)\n\n // sqrt_start_price in Q64 is exactly Pmin\n const sqrtStartPrice = PminBN\n\n // liquidity = floor( quote * 2^128 / (Pmax – Pmin) )\n const liquidity = migrationQuoteThreshold.mul(Q128).div(PmaxBN.sub(PminBN))\n\n return {\n sqrtStartPrice,\n curve: [\n {\n sqrtPrice: MAX_SQRT_PRICE,\n liquidity,\n },\n ],\n }\n}\n"],"mappings":"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ACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,QAAU;AAAA,gBACR,SAAW;AAAA,kBACT,MAAQ;AAAA,gBACV;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,KAAO;AAAA,gBACL,SAAW;AAAA,kBACT,MAAQ;AAAA,gBACV;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,KAAO;AAAA,gBACL,SAAW;AAAA,kBACT,MAAQ;AAAA,gBACV;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,kBACE,SAAW;AAAA,oBACT,MAAQ;AAAA,kBACV;AAAA,gBACF;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,QAAU;AAAA,gBACR,SAAW;AAAA,kBACT,MAAQ;AAAA,gBACV;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,SAAW;AAAA,gBACT,MAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN;AAAA,YACF;AAAA,YACA,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,eAAiB;AAAA,MACjB,MAAQ;AAAA,QACN,MAAQ;AAAA,MACV;AAAA,MACA,MAAQ;AAAA,QACN,MAAQ;AAAA,QACR,QAAU;AAAA,UACR;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,cACN,OAAS;AAAA,gBACP;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,MAAQ;AAAA,YACR,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACtuKA,IAAAC,eAAA;AAAA,EACI,SAAW;AAAA,EACX,UAAY;AAAA,IACR,MAAQ;AAAA,IACR,SAAW;AAAA,IACX,MAAQ;AAAA,EACZ;AAAA,EACA,MAAQ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,cAAgB;AAAA,IACZ;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ,CAAC;AAAA,IACb;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ,CAAC;AAAA,IACb;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ,SAAW;AAAA,cACP,MAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ,SAAW;AAAA,cACP,MAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ,CAAC;AAAA,IACb;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,YACA;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,QACA;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ,CAAC;AAAA,IACb;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ,CAAC;AAAA,IACb;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,UAAY;AAAA,IACR;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,QAAU;AAAA,IACN;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,QAAU;AAAA,IACN;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,OAAS;AAAA,IACL;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,cACJ,OAAS;AAAA,gBACL;AAAA,gBACA;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,UAAY;AAAA,UACR;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,cACJ,SAAW;AAAA,gBACP,MAAQ;AAAA,cACZ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,cACJ,OAAS;AAAA,gBACL;AAAA,gBACA;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,cACJ,SAAW;AAAA,gBACP,MAAQ;AAAA,cACZ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,cACJ,SAAW;AAAA,gBACP,MAAQ;AAAA,cACZ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,cACJ,OAAS;AAAA,gBACL;AAAA,gBACA;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ;AAAA,YACJ;AAAA,YACA,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ,SAAW;AAAA,gBACP,MAAQ;AAAA,cACZ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ,SAAW;AAAA,gBACP,MAAQ;AAAA,cACZ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,cACJ,SAAW;AAAA,gBACP,MAAQ;AAAA,cACZ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,UACA;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ,MAAQ;AAAA,QACR,QAAU;AAAA,UACN;AAAA,YACI,MAAQ;AAAA,YACR,MAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;;;AC1rDA,IAAAC,eAAA;AAAA,EACI,SAAW;AAAA,EACX,UAAY;AAAA,IACR,MAAQ;AAAA,IACR,SAAW;AAAA,IACX,MAAQ;AAAA,EACZ;AAAA,EACA,MAAQ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,cAAgB;AAAA,IACZ;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,YACA;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ,SAAW;AAAA,cACP,MAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ,SAAW;AAAA,cACP,MAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ,SAAW;AAAA,cACP,MAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ,SAAW;AAAA,cACP,MAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,QACA;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ,SAAW;AAAA,cACP,MAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ,CAAC;AAAA,IACb;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ,CAAC;AAAA,IACb;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ,CAAC;AAAA,IACb;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ,SAAW;AAAA,cACP,MAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,MACJ;AAAA,MACA,MAAQ,CAAC;AAAA,IACb;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ,QAAU;AAAA,UACd;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,UACZ,QAAU;AAAA,QACd;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ,SAAW;AAAA,cACP,MAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MACA,MAAQ,CAAC;AAAA,IACb;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACA,UAAY;AAAA,QACR;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,UAAY;AAAA,QAChB;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,QAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,MAAQ;AAAA,QACJ;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,QACA;AAAA,UACI,MAAQ;AAAA,UACR,MAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,UAAY;AAAA,IACR;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,QAAU;AAAA,IACN;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,eAAiB;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,QAAU;AAAA,IACN;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACX;AAAA,IA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","names":["ActivationType","TokenType","CollectFeeMode","MigrationOption","FeeSchedulerMode","MigrationFeeOption","TokenDecimal","TradeDirection","Rounding","PublicKey","SystemProgram","SYSVAR_RENT_PUBKEY","PublicKey","PublicKey","idl_default","idl_default","BN","idl_default","PublicKey","PublicKey","ASSOCIATED_TOKEN_PROGRAM_ID","getAssociatedTokenAddressSync","TOKEN_2022_PROGRAM_ID","TOKEN_PROGRAM_ID","BN","Decimal","Decimal","BN","Decimal","Decimal","BN","Decimal","BN","Decimal","BN","Decimal","BN","Decimal","PublicKey","SystemProgram","TOKEN_PROGRAM_ID","BN","Decimal","TOKEN_PROGRAM_ID","SystemProgram","PublicKey","Decimal","BN","BN","Decimal","PublicKey","TOKEN_PROGRAM_ID","TOKEN_2022_PROGRAM_ID","SystemProgram","getAssociatedTokenAddressSync","ASSOCIATED_TOKEN_PROGRAM_ID","SYSVAR_RENT_PUBKEY"]}