@meteora-ag/cp-amm-sdk 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +21 -1
- package/dist/index.d.ts +21 -1
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +64 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/nguyennguyen/Repos/racoons/cp-amm-sdk/dist/index.js","../src/CpAmm.ts","../src/idl/cp_amm.json","../src/types.ts","../src/pda.ts","../src/constants.ts","../src/helpers/token.ts","../src/helpers/fee.ts","../src/math/feeMath.ts","../src/math/mathUtils.ts","../src/helpers/curve.ts","../src/helpers/computeUnits.ts","../src/helpers/utils.ts","../src/helpers/accountFilters.ts","../src/helpers/priceMath.ts","../src/helpers/token2022.ts","../src/helpers/vestings.ts","../src/index.ts"],"names":["Rounding","ActivationPoint","FeeSchedulerMode","CollectFeeMode","TradeDirection","ActivationType","PublicKey","BN"],"mappings":"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ACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AACA,MAAA;AACQ,QAAA;AACmB,QAAA;AACZ,QAAA;AACX,QAAA;AACY,QAAA;AACZ,QAAA;AACA,MAAA;AAEJ,MAAA;AAEA,MAAA;AACE,QAAA;AACA,QAAA;AAA4D,MAAA;AAE9D,MAAA;AAEmB,QAAA;AACK,QAAA;AACpB,QAAA;AACwB,QAAA;AACD,QAAA;AACH,QAAA;AACpB,QAAA;AACA,QAAA;AACO,QAAA;AACP,MAAA;AAIW,IAAA;AACjB,EAAA;AACF;ADujOA;AACA;AiB/uTA;AjBivTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/nguyennguyen/Repos/racoons/cp-amm-sdk/dist/index.js","sourcesContent":[null,"import { Program, BN } from \"@coral-xyz/anchor\";\nimport { NATIVE_MINT, TOKEN_2022_PROGRAM_ID } from \"@solana/spl-token\";\nimport invariant from \"invariant\";\n\nimport CpAmmIDL from \"./idl/cp_amm.json\";\nimport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport {\n Connection,\n Transaction,\n PublicKey,\n TransactionInstruction,\n SystemProgram,\n AccountMeta,\n} from \"@solana/web3.js\";\nimport {\n AddLiquidityParams,\n AmmProgram,\n BuildAddLiquidityParams,\n BuildLiquidatePositionInstructionParams,\n BuildRemoveAllLiquidityInstructionParams,\n ClaimPartnerFeeParams,\n ClaimPositionFeeInstructionParams,\n ClaimPositionFeeParams,\n ClaimRewardParams,\n ClosePositionInstructionParams,\n ClosePositionParams,\n ConfigState,\n CreatePoolParams,\n CreatePositionAndAddLiquidity,\n CreatePositionParams,\n DepositQuote,\n DynamicFeeParams,\n FundRewardParams,\n GetDepositQuoteParams,\n GetQuoteParams,\n GetWithdrawQuoteParams,\n InitializeCustomizeablePoolParams,\n InitializeCustomizeablePoolWithDynamicConfigParams,\n LiquidityDeltaParams,\n LockPositionParams,\n MergePositionParams,\n PermanentLockParams,\n PoolState,\n PositionState,\n PrepareCustomizablePoolParams,\n PreparedPoolCreation,\n PreparePoolCreationParams,\n PreparePoolCreationSingleSide,\n PrepareTokenAccountParams,\n RefreshVestingParams,\n RemoveAllLiquidityAndClosePositionParams,\n RemoveAllLiquidityParams,\n RemoveLiquidityParams,\n Rounding,\n SetupFeeClaimAccountsParams,\n SwapParams,\n TxBuilder,\n UpdateRewardDurationParams,\n UpdateRewardFunderParams,\n VestingState,\n WithdrawIneligibleRewardParams,\n WithdrawQuote,\n} from \"./types\";\nimport {\n deriveCustomizablePoolAddress,\n derivePoolAddress,\n derivePoolAuthority,\n derivePositionAddress,\n derivePositionNftAccount,\n deriveTokenBadgeAddress,\n deriveTokenVaultAddress,\n} from \"./pda\";\n\nimport {\n getFeeNumerator,\n getOrCreateATAInstruction,\n getTokenProgram,\n unwrapSOLInstruction,\n wrapSOLInstruction,\n getSwapAmount,\n getLiquidityDeltaFromAmountA,\n getLiquidityDeltaFromAmountB,\n getMinAmountWithSlippage,\n getPriceImpact,\n positionByPoolFilter,\n vestingByPositionFilter,\n calculateInitSqrtPrice,\n calculateTransferFeeExcludedAmount,\n calculateTransferFeeIncludedAmount,\n getAmountBFromLiquidityDelta,\n getAmountAFromLiquidityDelta,\n getAvailableVestingLiquidity,\n isVestingComplete,\n getAllPositionNftAccountByOwner,\n} from \"./helpers\";\nimport { min, max } from \"bn.js\";\n\n/**\n * CpAmm SDK class to interact with the Dynamic CP-AMM\n */\nexport class CpAmm {\n _program: AmmProgram;\n private poolAuthority: PublicKey;\n constructor(connection: Connection) {\n this._program = new Program(CpAmmIDL as CpAmmTypes, {\n connection: connection,\n });\n this.poolAuthority = derivePoolAuthority();\n }\n\n //// ANCHOR: PRIVATE FUNCTIONS //////\n /**\n * Prepares token accounts for a transaction by retrieving or creating associated token accounts.\n * @private\n * @param {PublicKey} owner - The owner of the token accounts\n * @param {PublicKey} tokenAMint - Mint address of token A\n * @param {PublicKey} tokenBMint - Mint address of token B\n * @param {PublicKey} tokenAProgram - Program ID for token A (Token or Token2022)\n * @param {PublicKey} tokenBProgram - Program ID for token B (Token or Token2022)\n * @returns {Promise<{tokenAAta: PublicKey, tokenBAta: PublicKey, instructions: TransactionInstruction[]}>}\n * The token account addresses and any instructions needed to create them\n */\n private async prepareTokenAccounts(\n params: PrepareTokenAccountParams\n ): Promise<{\n tokenAAta: PublicKey;\n tokenBAta: PublicKey;\n instructions: TransactionInstruction[];\n }> {\n const {\n payer,\n tokenAOwner,\n tokenBOwner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n const instructions: TransactionInstruction[] = [];\n const [\n { ataPubkey: tokenAAta, ix: createInputTokenAccountIx },\n { ataPubkey: tokenBAta, ix: createOutputTokenAccountIx },\n ] = await Promise.all([\n getOrCreateATAInstruction(\n this._program.provider.connection,\n tokenAMint,\n tokenAOwner,\n payer,\n true,\n tokenAProgram\n ),\n getOrCreateATAInstruction(\n this._program.provider.connection,\n tokenBMint,\n tokenBOwner,\n payer,\n true,\n tokenBProgram\n ),\n ]);\n createInputTokenAccountIx && instructions.push(createInputTokenAccountIx);\n createOutputTokenAccountIx && instructions.push(createOutputTokenAccountIx);\n\n return { tokenAAta, tokenBAta, instructions };\n }\n\n /**\n * Derives token badge account metadata\n * @param tokenAMint - Public key of token A mint\n * @param tokenBMint - Public key of token B mint\n * @returns Array of account metadata for token badges\n */\n private getTokenBadgeAccounts(\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n ): AccountMeta[] {\n return [\n {\n pubkey: deriveTokenBadgeAddress(tokenAMint),\n isWritable: false,\n isSigner: false,\n },\n {\n pubkey: deriveTokenBadgeAddress(tokenBMint),\n isWritable: false,\n isSigner: false,\n },\n ];\n }\n\n /**\n * Builds an instruction to add liquidity to a position.\n * @private\n * @param {BuildAddLiquidityParams} params - Parameters for adding liquidity\n * @returns {Promise<TransactionInstruction>} Instruction to add liquidity\n */\n private async buildAddLiquidityInstruction(\n params: BuildAddLiquidityParams\n ): Promise<TransactionInstruction> {\n const {\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n } = params;\n return await this._program.methods\n .addLiquidity({\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n })\n .accountsPartial({\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to remove all liquidity from a position.\n * @private\n * @param {BuildRemoveAllLiquidityInstructionParams} params - Parameters for removing all liquidity\n * @returns {Promise<TransactionInstruction>} Instruction to remove all liquidity\n */\n private async buildRemoveAllLiquidityInstruction(\n params: BuildRemoveAllLiquidityInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n } = params;\n return await this._program.methods\n .removeAllLiquidity(tokenAAmountThreshold, tokenBAmountThreshold)\n .accountsPartial({\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to claim fees accumulated by a position.\n * @private\n * @param {ClaimPositionFeeInstructionParams} params - Parameters for claiming position fees\n * @returns {Promise<TransactionInstruction>} Instruction to claim position fees\n */\n private async buildClaimPositionFeeInstruction(\n params: ClaimPositionFeeInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n owner,\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n return await this._program.methods\n .claimPositionFee()\n .accountsPartial({\n poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to close a position.\n * @private\n * @param {ClosePositionInstructionParams} params - Parameters for closing a position\n * @returns {Promise<TransactionInstruction>} Instruction to close the position\n */\n private async buildClosePositionInstruction(\n params: ClosePositionInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n owner,\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n positionNftMint,\n } = params;\n\n return await this._program.methods\n .closePosition()\n .accountsPartial({\n positionNftMint,\n positionNftAccount,\n pool,\n position,\n poolAuthority,\n rentReceiver: owner,\n owner,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to refresh vesting for a position\n * @param params Parameters required for the refresh vesting instruction\n * @returns Transaction instruction or null if no vestings to refresh\n */\n private async buildRefreshVestingInstruction(\n params: RefreshVestingParams\n ): Promise<TransactionInstruction | null> {\n const { owner, position, positionNftAccount, pool, vestingAccounts } =\n params;\n\n if (vestingAccounts.length == 0) {\n return null;\n }\n\n return await this._program.methods\n .refreshVesting()\n .accountsPartial({\n position,\n positionNftAccount,\n pool,\n owner,\n })\n .remainingAccounts(\n vestingAccounts.map((pubkey: PublicKey) => {\n return {\n isSigner: false,\n isWritable: true,\n pubkey,\n };\n })\n )\n .instruction();\n }\n\n /**\n * Helper function that builds instructions to claim fees, remove liquidity, and close a position\n * @param {BuildLiquidatePositionInstructionParams} params - Parameters for liquidating a position\n * @returns {Promise<TransactionInstruction[]>} Array of instructions\n * @private\n */\n private async buildLiquidatePositionInstruction(\n params: BuildLiquidatePositionInstructionParams\n ): Promise<TransactionInstruction[]> {\n const {\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n } = params;\n\n const { nftMint: positionNftMint, pool } = positionState;\n const { tokenAMint, tokenBMint, tokenAVault, tokenBVault } = poolState;\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const instructions: TransactionInstruction[] = [];\n\n // 1. claim position fee\n const claimPositionFeeInstruction =\n await this.buildClaimPositionFeeInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n instructions.push(claimPositionFeeInstruction);\n\n // 2. remove all liquidity\n const removeAllLiquidityInstruction =\n await this.buildRemoveAllLiquidityInstruction({\n poolAuthority: this.poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n });\n instructions.push(removeAllLiquidityInstruction);\n // 3. close position\n const closePositionInstruction = await this.buildClosePositionInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftMint,\n positionNftAccount,\n });\n instructions.push(closePositionInstruction);\n\n return instructions;\n }\n\n /**\n * Builds a instruction to create a position.\n * @param {CreatePositionParams} params - Parameters for position creation.\n * @returns Transaction instruction.\n */\n private async buildCreatePositionInstruction(\n params: CreatePositionParams\n ): Promise<{\n ix: TransactionInstruction;\n position: PublicKey;\n positionNftAccount: PublicKey;\n }> {\n const { owner, payer, pool, positionNft } = params;\n\n const position = derivePositionAddress(positionNft);\n const positionNftAccount = derivePositionNftAccount(positionNft);\n\n const ix = await this._program.methods\n .createPosition()\n .accountsPartial({\n owner,\n positionNftMint: positionNft,\n poolAuthority: this.poolAuthority,\n positionNftAccount,\n payer: payer,\n pool,\n position,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n\n return {\n ix,\n position,\n positionNftAccount,\n };\n }\n\n /**\n * Private helper method to prepare common customizable pool creation logic\n * @param {PrepareCustomizablePoolParams} params - Common parameters for pool creation\n * @returns Prepared transaction data including instructions and accounts\n */\n private async prepareCreatePoolParams(params: PrepareCustomizablePoolParams) {\n const {\n pool,\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n payer,\n positionNft,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const position = derivePositionAddress(positionNft);\n const positionNftAccount = derivePositionNftAccount(positionNft);\n\n const tokenAVault = deriveTokenVaultAddress(tokenAMint, pool);\n const tokenBVault = deriveTokenVaultAddress(tokenBMint, pool);\n\n const {\n tokenAAta: payerTokenA,\n tokenBAta: payerTokenB,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer,\n tokenAOwner: payer,\n tokenBOwner: payer,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenA,\n BigInt(tokenAAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenB,\n BigInt(tokenBAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n const tokenBadgeAccounts = this.getTokenBadgeAccounts(\n tokenAMint,\n tokenBMint\n );\n\n return {\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n preInstructions,\n tokenBadgeAccounts,\n };\n }\n\n /**\n * Sets up token accounts and instructions for fee claim operations.\n * @private\n * @param {SetupFeeClaimAccountsParams} params - Parameters for setting up fee claim accounts.\n * @returns Token accounts and instructions for fee claiming.\n */\n private async setupFeeClaimAccounts(\n params: SetupFeeClaimAccountsParams\n ): Promise<{\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n preInstructions: TransactionInstruction[];\n postInstructions: TransactionInstruction[];\n }> {\n const {\n payer,\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n receiver,\n tempWSolAccount,\n } = params;\n\n const tokenAIsSOL = tokenAMint.equals(NATIVE_MINT);\n const tokenBIsSOL = tokenBMint.equals(NATIVE_MINT);\n const hasSolToken = tokenAIsSOL || tokenBIsSOL;\n\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: TransactionInstruction[] = [];\n let tokenAAccount: PublicKey;\n let tokenBAccount: PublicKey;\n\n let tokenAOwner = owner;\n let tokenBOwner = owner;\n if (receiver) {\n tokenAOwner = tokenAIsSOL ? tempWSolAccount : receiver;\n tokenBOwner = tokenBIsSOL ? tempWSolAccount : receiver;\n }\n\n const { tokenAAta, tokenBAta, instructions } =\n await this.prepareTokenAccounts({\n payer,\n tokenAOwner,\n tokenBOwner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n tokenAAccount = tokenAAta;\n tokenBAccount = tokenBAta;\n preInstructions.push(...instructions);\n\n if (hasSolToken) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(\n tempWSolAccount ?? owner,\n receiver ?? owner\n );\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n return {\n tokenAAccount,\n tokenBAccount,\n preInstructions,\n postInstructions,\n };\n }\n\n //// ANCHOR: GETTER/FETCHER FUNCTIONS //////\n\n /**\n * Fetches the Config state of the program.\n * @param config - Public key of the config account.\n * @returns Parsed ConfigState.\n */\n async fetchConfigState(config: PublicKey): Promise<ConfigState> {\n const configState = await this._program.account.config.fetchNullable(\n config\n );\n invariant(configState, `Config account: ${config} not found`);\n\n return configState;\n }\n\n /**\n * Fetches the Pool state.\n * @param pool - Public key of the pool.\n * @returns Parsed PoolState.\n */\n async fetchPoolState(pool: PublicKey): Promise<PoolState> {\n const poolState = await this._program.account.pool.fetchNullable(pool);\n invariant(poolState, `Pool account: ${pool} not found`);\n\n return poolState;\n }\n\n /**\n * Fetches the Position state.\n * @param position - Public key of the position.\n * @returns Parsed PositionState.\n */\n async fetchPositionState(position: PublicKey): Promise<PositionState> {\n const positionState = await this._program.account.position.fetchNullable(\n position\n );\n invariant(positionState, `Position account: ${position} not found`);\n\n return positionState;\n }\n\n /**\n * Retrieves all config accounts.\n * @returns Array of config public keys and their states.\n */\n async getAllConfigs(): Promise<\n Array<{ publicKey: PublicKey; account: ConfigState }>\n > {\n const configAccounts = await this._program.account.config.all();\n\n return configAccounts;\n }\n\n /**\n * Retrieves all pool accounts.\n * @returns Array of pool public keys and their states.\n */\n async getAllPools(): Promise<\n Array<{ publicKey: PublicKey; account: PoolState }>\n > {\n const poolAccounts = await this._program.account.pool.all();\n\n return poolAccounts;\n }\n\n /**\n * Retrieves all position accounts.\n * @returns Array of position public keys and their states.\n */\n async getAllPositions(): Promise<\n Array<{\n publicKey: PublicKey;\n account: PositionState;\n }>\n > {\n const poolAccounts = await this._program.account.position.all();\n\n return poolAccounts;\n }\n\n /**\n * Gets all positions a specific pool.\n * @param pool - Public key of the pool.\n * @returns List of user positions for the pool.\n */\n async getAllPositionsByPool(pool: PublicKey): Promise<\n Array<{\n publicKey: PublicKey;\n account: PositionState;\n }>\n > {\n return await this._program.account.position.all([\n positionByPoolFilter(pool),\n ]);\n }\n\n /**\n * Gets all positions of a user for a specific pool.\n * @param pool - Public key of the pool.\n * @param user - Public key of the user.\n * @returns List of user positions for the pool.\n */\n async getUserPositionByPool(\n pool: PublicKey,\n user: PublicKey\n ): Promise<\n Array<{\n positionNftAccount: PublicKey;\n position: PublicKey;\n positionState: PositionState;\n }>\n > {\n const allUserPositions = await this.getPositionsByUser(user);\n return allUserPositions.filter((position) =>\n position.positionState.pool.equals(pool)\n );\n }\n\n /**\n * Gets all positions of a user across all pools.\n * @param user - Public key of the user.\n * @returns Array of user positions already sorted by liquidity\n */\n async getPositionsByUser(user: PublicKey): Promise<\n Array<{\n positionNftAccount: PublicKey;\n position: PublicKey;\n positionState: PositionState;\n }>\n > {\n const userPositionAccounts = await getAllPositionNftAccountByOwner(\n this._program.provider.connection,\n user\n );\n if (userPositionAccounts.length === 0) {\n return [];\n }\n\n const positionAddresses = userPositionAccounts.map((account) =>\n derivePositionAddress(account.positionNft)\n );\n\n const positionStates = await this._program.account.position.fetchMultiple(\n positionAddresses\n );\n const positionResult = userPositionAccounts\n .map((account, index) => {\n const positionState = positionStates[index];\n if (!positionState) return null;\n\n return {\n positionNftAccount: account.positionNftAccount,\n position: positionAddresses[index],\n positionState,\n };\n })\n .filter(Boolean);\n\n // in-place sort\n positionResult.sort((a, b) => {\n const totalLiquidityA = a.positionState.vestedLiquidity\n .add(a.positionState.permanentLockedLiquidity)\n .add(a.positionState.unlockedLiquidity);\n\n const totalLiquidityB = b.positionState.vestedLiquidity\n .add(b.positionState.permanentLockedLiquidity)\n .add(b.positionState.unlockedLiquidity);\n\n return totalLiquidityB.cmp(totalLiquidityA);\n });\n\n return positionResult;\n }\n\n async getAllVestingsByPosition(position: PublicKey): Promise<\n Array<{\n publicKey: PublicKey;\n account: VestingState;\n }>\n > {\n const vestings = await this._program.account.vesting.all([\n vestingByPositionFilter(position),\n ]);\n\n return vestings;\n }\n\n isLockedPosition(position: PositionState): boolean {\n const totalLockedLiquidity = position.vestedLiquidity.add(\n position.permanentLockedLiquidity\n );\n\n return totalLockedLiquidity.gtn(0);\n }\n\n isPermanentLockedPosition(positionState: PositionState): boolean {\n return positionState.permanentLockedLiquidity.gtn(0);\n }\n\n /**\n * Checks if a position can be unlocked based on its locking state and vesting schedules.\n *\n * This method evaluates whether a position is eligible for operations that require\n * unlocked liquidity, such as removing all liquidity or closing the position. It checks both\n * permanent locks and time-based vesting schedules.\n *\n * @private\n * @param {PositionState} positionState - The current state of the position\n * @param {Array<{account: PublicKey; vestingState: VestingState}>} vestings - Array of vesting accounts and their states\n * @param {BN} currentPoint - Current timestamp or slot number (depending on activation type of pool)\n *\n * @returns {Object} Result object containing unlock status and reason\n * @returns {boolean} result.canUnlock - Whether the position can be unlocked\n * @returns {string|undefined} result.reason - Reason why position cannot be unlocked (if applicable)\n */\n canUnlockPosition(\n positionState: PositionState,\n vestings: Array<{ account: PublicKey; vestingState: VestingState }>,\n currentPoint: BN\n ): { canUnlock: boolean; reason?: string } {\n if (vestings.length > 0) {\n // Check if permanently locked\n if (this.isPermanentLockedPosition(positionState)) {\n return {\n canUnlock: false,\n reason: \"Position is permanently locked\",\n };\n }\n\n // Check each vesting\n // We expect that should have only one vesting per position\n for (const vesting of vestings) {\n if (!isVestingComplete(vesting.vestingState, currentPoint)) {\n return {\n canUnlock: false,\n reason: \"Position has incomplete vesting schedule\",\n };\n }\n }\n }\n\n return { canUnlock: true };\n }\n\n async isPoolExist(pool: PublicKey): Promise<boolean> {\n const poolState = await this._program.account.pool.fetchNullable(pool);\n return poolState !== null;\n }\n\n /**\n * Computes the liquidity delta based on the provided token amounts and sqrt price\n *\n * @param {LiquidityDeltaParams} params - The parameters for liquidity calculation\n * @returns {Promise<BN>} - The computed liquidity delta in Q64 value.\n */\n getLiquidityDelta(params: LiquidityDeltaParams): BN {\n const {\n maxAmountTokenA,\n maxAmountTokenB,\n sqrtMaxPrice,\n sqrtMinPrice,\n sqrtPrice,\n } = params;\n\n const liquidityDeltaFromAmountA = getLiquidityDeltaFromAmountA(\n maxAmountTokenA,\n sqrtPrice,\n sqrtMaxPrice\n );\n\n const liquidityDeltaFromAmountB = getLiquidityDeltaFromAmountB(\n maxAmountTokenB,\n sqrtMinPrice,\n sqrtPrice\n );\n\n return min(liquidityDeltaFromAmountA, liquidityDeltaFromAmountB);\n }\n\n /**\n * Calculates swap quote based on input amount and pool state.\n * @param params - Swap parameters including input amount, pool state, slippage, etc.\n * @returns Swap quote including expected output amount, fee, and price impact.\n */\n getQuote(params: GetQuoteParams): {\n swapInAmount: BN;\n consumedInAmount: BN;\n swapOutAmount: BN;\n minSwapOutAmount: BN;\n totalFee: BN;\n priceImpact: number;\n } {\n const {\n inAmount,\n inputTokenMint,\n slippage,\n poolState,\n currentTime,\n currentSlot,\n inputTokenInfo,\n outputTokenInfo,\n } = params;\n const {\n sqrtPrice: sqrtPriceQ64,\n liquidity: liquidityQ64,\n activationType,\n activationPoint,\n collectFeeMode,\n poolFees,\n } = poolState;\n const {\n feeSchedulerMode,\n cliffFeeNumerator,\n numberOfPeriod,\n reductionFactor,\n periodFrequency,\n } = poolFees.baseFee;\n const dynamicFee = poolFees.dynamicFee;\n\n let actualAmountIn = inAmount;\n if (inputTokenInfo) {\n actualAmountIn = calculateTransferFeeExcludedAmount(\n inAmount,\n inputTokenInfo.mint,\n inputTokenInfo.currentEpoch\n ).amount;\n }\n const aToB = poolState.tokenAMint.equals(inputTokenMint);\n const currentPoint = activationType ? currentTime : currentSlot;\n\n let dynamicFeeParams: DynamicFeeParams;\n if (dynamicFee.initialized) {\n const { volatilityAccumulator, binStep, variableFeeControl } = dynamicFee;\n dynamicFeeParams = { volatilityAccumulator, binStep, variableFeeControl };\n }\n\n const tradeFeeNumerator = getFeeNumerator(\n currentPoint,\n activationPoint,\n numberOfPeriod,\n periodFrequency,\n feeSchedulerMode,\n cliffFeeNumerator,\n reductionFactor,\n dynamicFeeParams\n );\n\n const { amountOut, totalFee, nextSqrtPrice } = getSwapAmount(\n actualAmountIn,\n sqrtPriceQ64,\n liquidityQ64,\n tradeFeeNumerator,\n aToB,\n collectFeeMode\n );\n\n let actualAmountOut = amountOut;\n if (outputTokenInfo) {\n actualAmountOut = calculateTransferFeeExcludedAmount(\n amountOut,\n outputTokenInfo.mint,\n outputTokenInfo.currentEpoch\n ).amount;\n }\n\n const minSwapOutAmount = getMinAmountWithSlippage(\n actualAmountOut,\n slippage\n );\n\n return {\n swapInAmount: inAmount,\n consumedInAmount: actualAmountIn,\n swapOutAmount: actualAmountOut,\n minSwapOutAmount,\n totalFee,\n priceImpact: getPriceImpact(nextSqrtPrice, sqrtPriceQ64),\n };\n }\n\n /**\n * Calculates the deposit quote for liquidity pool.\n *\n * @param {GetDepositQuoteParams} params - The parameters for calculating the deposit quote.\n *\n * @returns {Promise<Object>} Deposit quote results\n * @returns {BN} returns.actualInputAmount - The actual amount used as input (after deducting transfer fees).\n * @returns {BN} returns.outputAmount - The calculated corresponding amount of the other token.\n * @returns {BN} returns.liquidityDelta - The amount of liquidity that will be added to the pool.\n */\n getDepositQuote(params: GetDepositQuoteParams): DepositQuote {\n const {\n inAmount,\n isTokenA,\n inputTokenInfo,\n outputTokenInfo,\n minSqrtPrice,\n maxSqrtPrice,\n sqrtPrice,\n } = params;\n\n const actualAmountIn = inputTokenInfo\n ? calculateTransferFeeExcludedAmount(\n inAmount,\n inputTokenInfo.mint,\n inputTokenInfo.currentEpoch\n ).amount\n : inAmount;\n\n const { liquidityDelta, rawAmount } = isTokenA\n ? {\n liquidityDelta: getLiquidityDeltaFromAmountA(\n actualAmountIn,\n sqrtPrice,\n maxSqrtPrice\n ),\n rawAmount: (delta: BN) =>\n getAmountBFromLiquidityDelta(\n delta,\n sqrtPrice,\n minSqrtPrice,\n Rounding.Up\n ),\n }\n : {\n liquidityDelta: getLiquidityDeltaFromAmountB(\n actualAmountIn,\n minSqrtPrice,\n sqrtPrice\n ),\n rawAmount: (delta: BN) =>\n getAmountAFromLiquidityDelta(\n delta,\n sqrtPrice,\n maxSqrtPrice,\n Rounding.Up\n ),\n };\n\n const rawOutputAmount = new BN(rawAmount(liquidityDelta));\n const outputAmount = outputTokenInfo\n ? calculateTransferFeeIncludedAmount(\n rawOutputAmount,\n outputTokenInfo.mint,\n outputTokenInfo.currentEpoch\n ).amount\n : rawOutputAmount;\n\n return {\n actualInputAmount: actualAmountIn,\n consumedInputAmount: inAmount,\n liquidityDelta,\n outputAmount,\n };\n }\n\n /**\n * Calculates the withdrawal quote for removing liquidity from a concentrated liquidity pool.\n *\n * @param {GetWithdrawQuoteParams} params - The parameters for calculating the withdraw quote\n *\n * @param {Object|null} params.tokenATokenInfo - must provide if token a is token2022\n * @param {Object|null} params.tokenBTokenInfo - must provide if token b is token2022\n *\n * @returns {Promise<Object>} Withdrawal quote results\n * @returns {BN} returns.liquidityDelta - The amount of liquidity that will be removed from the pool\n * @returns {BN} returns.outAmountA - The calculated amount of token A to be received (after deducting transfer fees)\n * @returns {BN} returns.outAmountB - The calculated amount of token B to be received (after deducting transfer fees)\n */\n getWithdrawQuote(params: GetWithdrawQuoteParams): WithdrawQuote {\n const {\n liquidityDelta,\n sqrtPrice,\n maxSqrtPrice,\n minSqrtPrice,\n tokenATokenInfo,\n tokenBTokenInfo,\n } = params;\n const amountA = getAmountAFromLiquidityDelta(\n liquidityDelta,\n sqrtPrice,\n maxSqrtPrice,\n Rounding.Down\n );\n const amountB = getAmountBFromLiquidityDelta(\n liquidityDelta,\n sqrtPrice,\n minSqrtPrice,\n Rounding.Down\n );\n\n return {\n liquidityDelta,\n outAmountA: tokenATokenInfo\n ? calculateTransferFeeExcludedAmount(\n amountA,\n tokenATokenInfo.mint,\n tokenATokenInfo.currentEpoch\n ).amount\n : amountA,\n outAmountB: tokenBTokenInfo\n ? calculateTransferFeeExcludedAmount(\n amountB,\n tokenBTokenInfo.mint,\n tokenBTokenInfo.currentEpoch\n ).amount\n : amountB,\n };\n }\n\n /**\n * Calculates liquidity and corresponding token amounts for token A single-sided pool creation\n * Only supports initialization where initial price equals min sqrt price\n * @param params Parameters for single-sided pool creation\n * @returns Calculated liquidity delta\n */\n preparePoolCreationSingleSide(params: PreparePoolCreationSingleSide): BN {\n const {\n tokenAAmount,\n initSqrtPrice,\n minSqrtPrice,\n maxSqrtPrice,\n tokenAInfo,\n } = params;\n\n if (!initSqrtPrice.eq(minSqrtPrice)) {\n throw new Error(\"Only support single side for base token.\");\n }\n\n const actualAmountIn = tokenAInfo\n ? tokenAAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenAAmount,\n tokenAInfo.mint,\n tokenAInfo.currentEpoch\n ).transferFee\n )\n : tokenAAmount;\n\n const liquidityDelta = getLiquidityDeltaFromAmountA(\n actualAmountIn,\n initSqrtPrice,\n maxSqrtPrice\n );\n\n return liquidityDelta;\n }\n\n /**\n * Prepares parameters required for pool creation, including initial sqrt price and liquidity.\n * @private\n * @param {PreparePoolCreationParams} params - Initial token amounts for pool creation.\n * @returns init sqrt price and liquidity in Q64 format.\n */\n preparePoolCreationParams(\n params: PreparePoolCreationParams\n ): PreparedPoolCreation {\n const {\n tokenAAmount,\n tokenBAmount,\n minSqrtPrice,\n maxSqrtPrice,\n tokenAInfo,\n tokenBInfo,\n } = params;\n\n if (tokenAAmount.eq(new BN(0)) && tokenBAmount.eq(new BN(0))) {\n throw new Error(\"Invalid input amount\");\n }\n\n const actualAmountAIn = tokenAInfo\n ? tokenAAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenAAmount,\n tokenAInfo.mint,\n tokenAInfo.currentEpoch\n ).transferFee\n )\n : tokenAAmount;\n\n const actualAmountBIn = tokenBInfo\n ? tokenBAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenBAmount,\n tokenBInfo.mint,\n tokenBInfo.currentEpoch\n ).transferFee\n )\n : tokenBAmount;\n\n const initSqrtPrice = calculateInitSqrtPrice(\n tokenAAmount,\n tokenBAmount,\n minSqrtPrice,\n maxSqrtPrice\n );\n\n const liquidityDeltaFromAmountA = getLiquidityDeltaFromAmountA(\n actualAmountAIn,\n initSqrtPrice,\n maxSqrtPrice\n );\n\n const liquidityDeltaFromAmountB = getLiquidityDeltaFromAmountB(\n actualAmountBIn,\n minSqrtPrice,\n initSqrtPrice\n );\n\n const liquidityDelta = min(\n liquidityDeltaFromAmountA,\n liquidityDeltaFromAmountB\n );\n\n return {\n initSqrtPrice,\n liquidityDelta,\n };\n }\n\n //// ANCHOR: MAIN ENDPOINT //////\n /**\n * Builds a transaction to create a permissionless pool.\n * @param params - Parameters for pool creation.\n * @returns Transaction builder.\n */\n async createPool(params: CreatePoolParams): TxBuilder {\n const {\n payer,\n creator,\n config,\n positionNft,\n tokenAMint,\n tokenBMint,\n initSqrtPrice,\n liquidityDelta,\n activationPoint,\n tokenAAmount,\n tokenBAmount,\n tokenAProgram,\n tokenBProgram,\n isLockLiquidity,\n } = params;\n\n const pool = derivePoolAddress(config, tokenAMint, tokenBMint);\n const {\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n preInstructions,\n tokenBadgeAccounts,\n } = await this.prepareCreatePoolParams({\n pool,\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n payer,\n positionNft,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstruction: TransactionInstruction[] = [];\n\n if (isLockLiquidity) {\n const permanentLockIx = await this._program.methods\n .permanentLockPosition(liquidityDelta)\n .accountsPartial({\n position,\n positionNftAccount,\n pool: pool,\n owner: creator,\n })\n .instruction();\n postInstruction.push(permanentLockIx);\n }\n\n const tx = await this._program.methods\n .initializePool({\n liquidity: liquidityDelta,\n sqrtPrice: initSqrtPrice,\n activationPoint: activationPoint,\n })\n .accountsPartial({\n creator,\n positionNftAccount,\n positionNftMint: positionNft,\n payer,\n config,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n tokenAProgram,\n tokenBProgram,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstruction)\n .remainingAccounts(tokenBadgeAccounts)\n .transaction();\n\n return tx;\n }\n\n /**\n * Builds a transaction to create a customizable pool.\n * @param params - Parameters for customizable pool creation.\n * @returns Transaction and related addresses.\n */\n async createCustomPool(params: InitializeCustomizeablePoolParams): Promise<{\n tx: Transaction;\n pool: PublicKey;\n position: PublicKey;\n }> {\n const {\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n sqrtMinPrice,\n sqrtMaxPrice,\n liquidityDelta,\n initSqrtPrice,\n payer,\n creator,\n positionNft,\n poolFees,\n hasAlphaVault,\n collectFeeMode,\n activationPoint,\n activationType,\n tokenAProgram,\n tokenBProgram,\n isLockLiquidity,\n } = params;\n const pool = deriveCustomizablePoolAddress(tokenAMint, tokenBMint);\n const {\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n preInstructions,\n tokenBadgeAccounts,\n } = await this.prepareCreatePoolParams({\n pool,\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount: tokenBMint.equals(NATIVE_MINT)\n ? max(tokenBAmount, new BN(1))\n : tokenBAmount,\n payer,\n positionNft,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstruction: TransactionInstruction[] = [];\n\n if (isLockLiquidity) {\n const permanentLockIx = await this._program.methods\n .permanentLockPosition(liquidityDelta)\n .accountsPartial({\n position,\n positionNftAccount,\n pool: pool,\n owner: creator,\n })\n .instruction();\n postInstruction.push(permanentLockIx);\n }\n\n const transaction = await this._program.methods\n .initializeCustomizablePool({\n poolFees,\n sqrtMinPrice,\n sqrtMaxPrice,\n hasAlphaVault,\n liquidity: liquidityDelta,\n sqrtPrice: initSqrtPrice,\n activationType,\n collectFeeMode,\n activationPoint,\n })\n .accountsPartial({\n creator,\n positionNftAccount,\n positionNftMint: positionNft,\n payer: payer,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n tokenAProgram,\n tokenBProgram,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstruction)\n .remainingAccounts(tokenBadgeAccounts)\n .transaction();\n\n return { tx: transaction, pool, position };\n }\n\n async createCustomPoolWithDynamicConfig(\n params: InitializeCustomizeablePoolWithDynamicConfigParams\n ): Promise<{\n tx: Transaction;\n pool: PublicKey;\n position: PublicKey;\n }> {\n const {\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n sqrtMinPrice,\n sqrtMaxPrice,\n liquidityDelta,\n initSqrtPrice,\n payer,\n config,\n poolCreatorAuthority,\n creator,\n positionNft,\n poolFees,\n hasAlphaVault,\n collectFeeMode,\n activationPoint,\n activationType,\n tokenAProgram,\n tokenBProgram,\n isLockLiquidity,\n } = params;\n\n const pool = derivePoolAddress(config, tokenAMint, tokenBMint);\n const {\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n preInstructions,\n tokenBadgeAccounts,\n } = await this.prepareCreatePoolParams({\n pool,\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n payer,\n positionNft,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstruction: TransactionInstruction[] = [];\n\n if (isLockLiquidity) {\n const permanentLockIx = await this._program.methods\n .permanentLockPosition(liquidityDelta)\n .accountsPartial({\n position,\n positionNftAccount,\n pool: pool,\n owner: creator,\n })\n .instruction();\n postInstruction.push(permanentLockIx);\n }\n\n const transaction = await this._program.methods\n .initializePoolWithDynamicConfig({\n poolFees,\n sqrtMinPrice,\n sqrtMaxPrice,\n hasAlphaVault,\n liquidity: liquidityDelta,\n sqrtPrice: initSqrtPrice,\n activationType,\n collectFeeMode,\n activationPoint,\n })\n .accountsPartial({\n creator,\n positionNftAccount,\n positionNftMint: positionNft,\n payer: payer,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n poolCreatorAuthority: poolCreatorAuthority,\n config: config,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n tokenAProgram,\n tokenBProgram,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstruction)\n .remainingAccounts(tokenBadgeAccounts)\n .transaction();\n\n return { tx: transaction, pool, position };\n }\n\n /**\n * Builds a transaction to create a position.\n * @param {CreatePositionParams} params - Parameters for position creation.\n * @returns Transaction builder.\n */\n async createPosition(params: CreatePositionParams): TxBuilder {\n const { ix } = await this.buildCreatePositionInstruction(params);\n return new Transaction().add(ix);\n }\n\n /**\n * Builds a transaction to add liquidity to an existing position.\n * @param {AddLiquidityParams} params - Parameters for adding liquidity.\n * @returns Transaction builder.\n */\n async addLiquidity(params: AddLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n liquidityDelta,\n maxAmountTokenA,\n maxAmountTokenB,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenAAccount,\n BigInt(maxAmountTokenA.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenBAccount,\n BigInt(maxAmountTokenB.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const addLiquidityInstruction = await this.buildAddLiquidityInstruction({\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n addLiquidityInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Creates a new position and add liquidity to position it in a single transaction.\n * Handles both native SOL and other tokens, automatically wrapping/unwrapping SOL as needed.\n *\n * @param {CreatePositionAndAddLiquidity} params - Parameters for creating position and adding liquidity\n *\n * @returns {Transaction} A transaction that creates a position and adds liquidity\n *\n **/\n async createPositionAndAddLiquidity(\n params: CreatePositionAndAddLiquidity\n ): TxBuilder {\n const {\n owner,\n pool,\n positionNft,\n liquidityDelta,\n maxAmountTokenA,\n maxAmountTokenB,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const tokenAVault = deriveTokenVaultAddress(tokenAMint, pool);\n const tokenBVault = deriveTokenVaultAddress(tokenBMint, pool);\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenAAccount,\n BigInt(maxAmountTokenA.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenBAccount,\n BigInt(maxAmountTokenB.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const {\n ix: createPositionIx,\n position,\n positionNftAccount,\n } = await this.buildCreatePositionInstruction({\n owner,\n payer: owner,\n pool,\n positionNft,\n });\n\n const addLiquidityInstruction = await this.buildAddLiquidityInstruction({\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n });\n\n const transaction = new Transaction();\n transaction.add(createPositionIx);\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n addLiquidityInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to remove liquidity from a position.\n * @param {RemoveLiquidityParams} params - Parameters for removing liquidity.\n * @returns Transaction builder.\n */\n async removeLiquidity(params: RemoveLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n vestings,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n return await this._program.methods\n .removeLiquidity({\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n })\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to remove liquidity from a position.\n * @param {RemoveLiquidityParams} params - Parameters for removing liquidity.\n * @returns Transaction builder.\n */\n async removeAllLiquidity(params: RemoveAllLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n vestings,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n const removeAllLiquidityInstruction =\n await this.buildRemoveAllLiquidityInstruction({\n poolAuthority: this.poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n removeAllLiquidityInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to perform a swap in the pool.\n * @param {SwapParams} params - Parameters for swapping tokens.\n * @returns Transaction builder.\n */\n async swap(params: SwapParams): TxBuilder {\n const {\n payer,\n pool,\n inputTokenMint,\n outputTokenMint,\n amountIn,\n minimumAmountOut,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n referralTokenAccount,\n } = params;\n\n const [inputTokenProgram, outputTokenProgram] = inputTokenMint.equals(\n tokenAMint\n )\n ? [tokenAProgram, tokenBProgram]\n : [tokenBProgram, tokenAProgram];\n\n const {\n tokenAAta: inputTokenAccount,\n tokenBAta: outputTokenAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer,\n tokenAOwner: payer,\n tokenBOwner: payer,\n tokenAMint: inputTokenMint,\n tokenBMint: outputTokenMint,\n tokenAProgram: inputTokenProgram,\n tokenBProgram: outputTokenProgram,\n });\n\n if (inputTokenMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n inputTokenAccount,\n BigInt(amountIn.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(payer);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n return await this._program.methods\n .swap({\n amountIn,\n minimumAmountOut,\n })\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n payer,\n inputTokenAccount,\n outputTokenAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n referralTokenAccount,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to lock a position with vesting schedule.\n * @param {LockPositionParams} params - Locking parameters.\n * @returns Transaction builder.\n */\n async lockPosition(params: LockPositionParams): TxBuilder {\n const {\n owner,\n pool,\n payer,\n vestingAccount,\n position,\n positionNftAccount,\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n } = params;\n const lockPositionParams = {\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n };\n return await this._program.methods\n .lockPosition(lockPositionParams)\n .accountsPartial({\n position,\n positionNftAccount,\n vesting: vestingAccount,\n pool: pool,\n owner: owner,\n payer: payer,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to permanently lock a position.\n * @param {PermanentLockParams} params - Parameters for permanent locking.\n * @returns Transaction builder.\n */\n async permanentLockPosition(params: PermanentLockParams): TxBuilder {\n const { owner, position, positionNftAccount, pool, unlockedLiquidity } =\n params;\n\n return await this._program.methods\n .permanentLockPosition(unlockedLiquidity)\n .accountsPartial({\n position,\n positionNftAccount,\n pool: pool,\n owner: owner,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to refresh vesting status of a position.\n * @param {RefreshVestingParams} params - Refresh vesting parameters.\n * @returns Transaction builder.\n */\n async refreshVesting(params: RefreshVestingParams): TxBuilder {\n const instruction = await this.buildRefreshVestingInstruction(params);\n\n return new Transaction().add(instruction);\n }\n\n async closePosition(params: ClosePositionParams): TxBuilder {\n const { owner, pool, position, positionNftMint, positionNftAccount } =\n params;\n\n const instruction = await this.buildClosePositionInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftMint,\n positionNftAccount,\n });\n\n return new Transaction().add(instruction);\n }\n\n /**\n * Builds a transaction to remove all liquidity from a position and close it.\n * This combines several operations in a single transaction:\n * 1. Claims any accumulated fees\n * 2. Removes all liquidity\n * 3. Closes the position\n *\n * @param {RemoveAllLiquidityAndClosePositionParams} params - Combined parameters\n * @returns {TxBuilder} Transaction builder with all required instructions\n * @throws {Error} If the position is locked or cannot be closed\n */\n async removeAllLiquidityAndClosePosition(\n params: RemoveAllLiquidityAndClosePositionParams\n ): TxBuilder {\n const {\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n vestings,\n currentPoint,\n } = params;\n\n const { pool } = positionState;\n const { tokenAMint, tokenBMint } = poolState;\n\n const { canUnlock, reason } = this.canUnlockPosition(\n positionState,\n vestings,\n currentPoint\n );\n\n if (!canUnlock) {\n throw new Error(`Cannot remove liquidity: ${reason}`);\n }\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n // 1. refresh vesting if vesting account provided\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n const transaction = new Transaction();\n\n if (preInstructions.length > 0) {\n transaction.add(...preInstructions);\n }\n\n // 2. claim fee, remove liquidity and close position\n const liquidatePositionInstructions =\n await this.buildLiquidatePositionInstruction({\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n });\n\n transaction.add(...liquidatePositionInstructions);\n\n if (postInstructions.length > 0) {\n transaction.add(...postInstructions);\n }\n\n return transaction;\n }\n\n /**\n * Builds a transaction to merge liquidity from one position into another.\n * This process:\n * 1. Claims fees from the source position\n * 2. Removes all liquidity from the source position\n * 3. Adds that liquidity to the target position\n * 4. Closes the source position\n *\n * @param {MergePositionParams} params - Parameters for merging positions\n * @returns {TxBuilder} Transaction builder with all required instructions\n * @throws {Error} If either position is locked or incompatible\n */\n async mergePosition(params: MergePositionParams): TxBuilder {\n const {\n owner,\n positionA,\n positionB,\n positionBState,\n poolState,\n positionBNftAccount,\n positionANftAccount,\n tokenAAmountAddLiquidityThreshold,\n tokenBAmountAddLiquidityThreshold,\n tokenAAmountRemoveLiquidityThreshold,\n tokenBAmountRemoveLiquidityThreshold,\n positionBVestings,\n currentPoint,\n } = params;\n\n const { canUnlock, reason } = this.canUnlockPosition(\n positionBState,\n positionBVestings,\n currentPoint\n );\n\n if (!canUnlock) {\n throw new Error(`Cannot remove liquidity: ${reason}`);\n }\n\n const pool = positionBState.pool;\n const { tokenAMint, tokenBMint, tokenAVault, tokenBVault } = poolState;\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n let positionBLiquidityDelta = positionBState.unlockedLiquidity;\n // 1. refresh vesting position B if vesting account provided\n if (positionBVestings.length > 0) {\n // accumulate all liquidity delta of position b (unlocked + available vesting)\n const totalAvailableVestingLiquidity = positionBVestings.reduce(\n (total, position) => {\n const available = getAvailableVestingLiquidity(\n position.vestingState,\n currentPoint\n );\n return total.add(available);\n },\n new BN(0)\n );\n\n positionBLiquidityDelta = positionBLiquidityDelta.add(\n totalAvailableVestingLiquidity\n );\n\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position: positionB,\n positionNftAccount: positionBNftAccount,\n pool,\n vestingAccounts: positionBVestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n // recalculate liquidity delta\n const tokenAWithdrawAmount = getAmountAFromLiquidityDelta(\n positionBLiquidityDelta,\n poolState.sqrtPrice,\n poolState.sqrtMaxPrice,\n Rounding.Down\n );\n\n const tokenBWithdrawAmount = getAmountBFromLiquidityDelta(\n positionBLiquidityDelta,\n poolState.sqrtPrice,\n poolState.sqrtMinPrice,\n Rounding.Down\n );\n\n const newLiquidityDelta = this.getLiquidityDelta({\n maxAmountTokenA: tokenAWithdrawAmount,\n maxAmountTokenB: tokenBWithdrawAmount,\n sqrtMaxPrice: poolState.sqrtMaxPrice,\n sqrtMinPrice: poolState.sqrtMinPrice,\n sqrtPrice: poolState.sqrtPrice,\n });\n\n const transaction = new Transaction();\n\n if (preInstructions.length > 0) {\n transaction.add(...preInstructions);\n }\n\n // 2. claim fee, remove liquidity and close position\n const liquidatePositionInstructions =\n await this.buildLiquidatePositionInstruction({\n owner,\n position: positionB,\n positionNftAccount: positionBNftAccount,\n positionState: positionBState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold: tokenAAmountRemoveLiquidityThreshold,\n tokenBAmountThreshold: tokenBAmountRemoveLiquidityThreshold,\n });\n\n transaction.add(...liquidatePositionInstructions);\n\n // 3. add liquidity from position B to positon A\n const addLiquidityInstruction = await this.buildAddLiquidityInstruction({\n pool,\n position: positionA,\n positionNftAccount: positionANftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta: newLiquidityDelta,\n tokenAAmountThreshold: tokenAAmountAddLiquidityThreshold,\n tokenBAmountThreshold: tokenBAmountAddLiquidityThreshold,\n });\n\n transaction.add(addLiquidityInstruction);\n\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && transaction.add(closeWrappedSOLIx);\n }\n\n return transaction;\n }\n\n /**\n * Builds a transaction to update reward duration.\n * @param {UpdateRewardDurationParams} params - Parameters including pool and new duration.\n * @returns Transaction builder.\n */\n async updateRewardDuration(params: UpdateRewardDurationParams): TxBuilder {\n const { pool, admin, rewardIndex, newDuration } = params;\n return await this._program.methods\n .updateRewardDuration(rewardIndex, newDuration)\n .accountsPartial({\n pool,\n admin: admin,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to update reward funder address.\n * @param {UpdateRewardFunderParams} params - Parameters including pool and new funder address.\n * @returns Transaction builder.\n */\n async updateRewardFunder(params: UpdateRewardFunderParams): TxBuilder {\n const { pool, admin, rewardIndex, newFunder } = params;\n return await this._program.methods\n .updateRewardFunder(rewardIndex, newFunder)\n .accountsPartial({\n pool,\n admin: admin,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to fund rewards in a pool.\n * @param {FundRewardParams} params - Funding parameters.\n * @returns Transaction builder.\n */\n async fundReward(params: FundRewardParams): TxBuilder {\n const { rewardIndex, carryForward, pool, funder, amount } = params;\n\n const poolState = await this.fetchPoolState(pool);\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const { vault, mint } = rewardInfo;\n const tokenProgram = getTokenProgram(rewardIndex);\n\n const preInstructions: TransactionInstruction[] = [];\n\n const { ataPubkey: funderTokenAccount, ix: createFunderTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n mint,\n funder,\n funder,\n true,\n tokenProgram\n );\n\n createFunderTokenAccountIx &&\n preInstructions.push(createFunderTokenAccountIx);\n\n // TODO: check case reward mint is wSOL && carryForward is true => total amount > amount\n if (mint.equals(NATIVE_MINT) && !amount.isZero()) {\n const wrapSOLIx = wrapSOLInstruction(\n funder,\n funderTokenAccount,\n BigInt(amount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n return await this._program.methods\n .fundReward(rewardIndex, amount, carryForward)\n .accountsPartial({\n pool,\n rewardVault: vault,\n rewardMint: mint,\n funderTokenAccount,\n funder: funder,\n tokenProgram,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to withdraw ineligible rewards from a pool.\n * @param {WithdrawIneligibleRewardParams} params - Parameters for withdrawal.\n * @returns Transaction builder.\n */\n async withdrawIneligibleReward(\n params: WithdrawIneligibleRewardParams\n ): TxBuilder {\n const { rewardIndex, pool, funder } = params;\n const poolState = await this.fetchPoolState(pool);\n\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const { mint, vault, rewardTokenFlag } = rewardInfo;\n const tokenProgram = getTokenProgram(rewardTokenFlag);\n\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: TransactionInstruction[] = [];\n const { ataPubkey: funderTokenAccount, ix: createFunderTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n mint,\n funder,\n funder,\n true,\n tokenProgram\n );\n createFunderTokenAccountIx &&\n preInstructions.push(createFunderTokenAccountIx);\n\n if (mint.equals(NATIVE_MINT)) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(funder);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n return await this._program.methods\n .withdrawIneligibleReward(rewardIndex)\n .accountsPartial({\n pool,\n rewardVault: vault,\n rewardMint: mint,\n poolAuthority: this.poolAuthority,\n funderTokenAccount,\n funder: funder,\n tokenProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to claim partner fee rewards.\n * @param {ClaimPartnerFeeParams} params - Claim parameters including amounts and partner address.\n * @returns Transaction builder.\n */\n async claimPartnerFee(params: ClaimPartnerFeeParams): TxBuilder {\n const {\n feePayer,\n receiver,\n tempWSolAccount,\n partner,\n pool,\n maxAmountA,\n maxAmountB,\n } = params;\n const poolState = await this.fetchPoolState(pool);\n const {\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAFlag,\n tokenBFlag,\n } = poolState;\n\n const tokenAProgram = getTokenProgram(tokenAFlag);\n const tokenBProgram = getTokenProgram(tokenBFlag);\n\n const payer = feePayer ?? partner;\n const { tokenAAccount, tokenBAccount, preInstructions, postInstructions } =\n await this.setupFeeClaimAccounts({\n payer,\n owner: partner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n receiver,\n tempWSolAccount,\n });\n\n return await this._program.methods\n .claimPartnerFee(maxAmountA, maxAmountB)\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n partner,\n tokenAProgram,\n tokenBProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to claim position fee rewards.\n * @param {ClaimPositionFeeParams} params - Parameters for claiming position fee.\n * @returns Transaction builder.\n */\n async claimPositionFee(params: ClaimPositionFeeParams): TxBuilder {\n const {\n receiver,\n tempWSolAccount,\n feePayer,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const payer = feePayer ?? owner;\n const { tokenAAccount, tokenBAccount, preInstructions, postInstructions } =\n await this.setupFeeClaimAccounts({\n payer,\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n receiver,\n tempWSolAccount,\n });\n const claimPositionFeeInstruction =\n await this.buildClaimPositionFeeInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n claimPositionFeeInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to claim reward from a position.\n * @param {ClaimRewardParams} params - Parameters for claiming reward.\n * @returns Transaction builder.\n */\n async claimReward(params: ClaimRewardParams): TxBuilder {\n const {\n feePayer,\n user,\n position,\n positionNftAccount,\n rewardIndex,\n poolState,\n positionState,\n } = params;\n\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const tokenProgram = getTokenProgram(rewardInfo.rewardTokenFlag);\n\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: TransactionInstruction[] = [];\n const { ataPubkey: userTokenAccount, ix: createUserTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n rewardInfo.mint,\n user,\n feePayer ?? user,\n true,\n tokenProgram\n );\n createUserTokenAccountIx && preInstructions.push(createUserTokenAccountIx);\n\n if (rewardInfo.mint.equals(NATIVE_MINT)) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n return await this._program.methods\n .claimReward(rewardIndex)\n .accountsPartial({\n pool: positionState.pool,\n positionNftAccount,\n rewardVault: rewardInfo.vault,\n rewardMint: rewardInfo.mint,\n poolAuthority: this.poolAuthority,\n position,\n userTokenAccount,\n owner: user,\n tokenProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n}\n","{\n \"address\": \"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG\",\n \"metadata\": {\n \"name\": \"cp_amm\",\n \"version\": \"0.1.1\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"add_liquidity\",\n \"discriminator\": [\n 181,\n 157,\n 89,\n 67,\n 143,\n 182,\n 52,\n 72\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddLiquidityParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"claim_partner_fee\",\n \"discriminator\": [\n 97,\n 206,\n 39,\n 105,\n 94,\n 94,\n 126,\n 148\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"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\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"partner\",\n \"signer\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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\": \"claim_position_fee\",\n \"discriminator\": [\n 180,\n 38,\n 154,\n 17,\n 133,\n 33,\n 162,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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_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 \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_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_a_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_a_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_b_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_b_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_b_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_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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_reward\",\n \"discriminator\": [\n 149,\n 95,\n 181,\n 242,\n 94,\n 90,\n 158,\n 162\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"docs\": [\n \"The vault token account for reward token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"user_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\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\": \"reward_index\",\n \"type\": \"u8\"\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\": \"close_config\",\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 \"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\": \"close_position\",\n \"discriminator\": [\n 123,\n 134,\n 81,\n 0,\n 49,\n 68,\n 98,\n 98\n ],\n \"accounts\": [\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\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 \"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 \"docs\": [\n \"ADMIN FUNCTIONS /////\"\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 \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"index\"\n }\n ]\n }\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 \"name\": \"index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"config_parameters\",\n \"type\": {\n \"defined\": {\n \"name\": \"StaticConfigParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"create_dynamic_config\",\n \"discriminator\": [\n 81,\n 251,\n 122,\n 78,\n 66,\n 57,\n 208,\n 82\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"index\"\n }\n ]\n }\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 \"name\": \"index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"config_parameters\",\n \"type\": {\n \"defined\": {\n \"name\": \"DynamicConfigParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"create_position\",\n \"discriminator\": [\n 48,\n 215,\n 197,\n 153,\n 96,\n 203,\n 180,\n 133\n ],\n \"accounts\": [\n {\n \"name\": \"owner\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"payer\",\n \"docs\": [\n \"Address paying to create the position. Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\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 {\n \"name\": \"create_token_badge\",\n \"discriminator\": [\n 88,\n 206,\n 0,\n 91,\n 60,\n 175,\n 151,\n 118\n ],\n \"accounts\": [\n {\n \"name\": \"token_badge\",\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 98,\n 97,\n 100,\n 103,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_mint\"\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\": \"fund_reward\",\n \"discriminator\": [\n 188,\n 50,\n 249,\n 165,\n 93,\n 151,\n 38,\n 63\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"funder_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\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\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"carry_forward\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"initialize_customizable_pool\",\n \"discriminator\": [\n 20,\n 161,\n 241,\n 24,\n 189,\n 221,\n 180,\n 2\n ],\n \"accounts\": [\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\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\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token a mint\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token b mint\"\n ]\n },\n {\n \"name\": \"token_a_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\": \"token_a_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"token_b_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\": \"token_b_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"payer token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"creator token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_2022_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\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\": \"InitializeCustomizablePoolParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_pool\",\n \"docs\": [\n \"USER FUNCTIONS ////\"\n ],\n \"discriminator\": [\n 95,\n 180,\n 10,\n 172,\n 84,\n 174,\n 232,\n 40\n ],\n \"accounts\": [\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\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\": \"config\",\n \"docs\": [\n \"Which config the pool belongs to.\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token a mint\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token b mint\"\n ]\n },\n {\n \"name\": \"token_a_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\": \"token_a_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"token_b_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\": \"token_b_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"payer token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"creator token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_2022_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\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\": \"initialize_pool_with_dynamic_config\",\n \"discriminator\": [\n 149,\n 82,\n 72,\n 197,\n 253,\n 252,\n 68,\n 15\n ],\n \"accounts\": [\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\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\": \"pool_creator_authority\",\n \"signer\": true,\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"Which config the pool belongs to.\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token a mint\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token b mint\"\n ]\n },\n {\n \"name\": \"token_a_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\": \"token_a_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"token_b_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\": \"token_b_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"payer token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"creator token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_2022_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\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\": \"InitializeCustomizablePoolParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_reward\",\n \"discriminator\": [\n 95,\n 135,\n 192,\n 196,\n 242,\n 129,\n 230,\n 68\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 119,\n 97,\n 114,\n 100,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"reward_index\"\n }\n ]\n }\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\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\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"lock_position\",\n \"discriminator\": [\n 227,\n 62,\n 2,\n 252,\n 247,\n 10,\n 171,\n 185\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"vesting\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\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\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"VestingParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"permanent_lock_position\",\n \"discriminator\": [\n 165,\n 176,\n 125,\n 6,\n 231,\n 171,\n 186,\n 213\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\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 \"name\": \"permanent_lock_liquidity\",\n \"type\": \"u128\"\n }\n ]\n },\n {\n \"name\": \"refresh_vesting\",\n \"discriminator\": [\n 9,\n 94,\n 216,\n 14,\n 116,\n 204,\n 247,\n 0\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_all_liquidity\",\n \"discriminator\": [\n 10,\n 51,\n 61,\n 35,\n 112,\n 105,\n 24,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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\": \"token_a_amount_threshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"remove_liquidity\",\n \"discriminator\": [\n 80,\n 85,\n 209,\n 72,\n 24,\n 206,\n 177,\n 108\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemoveLiquidityParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"set_pool_status\",\n \"discriminator\": [\n 112,\n 87,\n 135,\n 223,\n 83,\n 204,\n 132,\n 53\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\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 \"name\": \"status\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"swap\",\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 \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"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\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ]\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"The user performing the swap\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b 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\": \"update_reward_duration\",\n \"discriminator\": [\n 138,\n 174,\n 196,\n 169,\n 213,\n 235,\n 254,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\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 \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"new_duration\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"update_reward_funder\",\n \"discriminator\": [\n 211,\n 28,\n 48,\n 32,\n 215,\n 160,\n 35,\n 23\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\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 \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"new_funder\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"withdraw_ineligible_reward\",\n \"discriminator\": [\n 148,\n 206,\n 42,\n 195,\n 247,\n 49,\n 103,\n 8\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"funder_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\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\": \"reward_index\",\n \"type\": \"u8\"\n }\n ]\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\": \"Pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"Position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"TokenBadge\",\n \"discriminator\": [\n 116,\n 219,\n 204,\n 229,\n 249,\n 116,\n 255,\n 150\n ]\n },\n {\n \"name\": \"Vesting\",\n \"discriminator\": [\n 100,\n 149,\n 66,\n 138,\n 95,\n 200,\n 128,\n 241\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"EvtAddLiquidity\",\n \"discriminator\": [\n 175,\n 242,\n 8,\n 157,\n 30,\n 247,\n 185,\n 169\n ]\n },\n {\n \"name\": \"EvtClaimPartnerFee\",\n \"discriminator\": [\n 118,\n 99,\n 77,\n 10,\n 226,\n 1,\n 1,\n 87\n ]\n },\n {\n \"name\": \"EvtClaimPositionFee\",\n \"discriminator\": [\n 198,\n 182,\n 183,\n 52,\n 97,\n 12,\n 49,\n 56\n ]\n },\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\": \"EvtClaimReward\",\n \"discriminator\": [\n 218,\n 86,\n 147,\n 200,\n 235,\n 188,\n 215,\n 231\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\": \"EvtCloseConfig\",\n \"discriminator\": [\n 36,\n 30,\n 239,\n 45,\n 58,\n 132,\n 14,\n 5\n ]\n },\n {\n \"name\": \"EvtClosePosition\",\n \"discriminator\": [\n 20,\n 145,\n 144,\n 68,\n 143,\n 142,\n 214,\n 178\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\": \"EvtCreateDynamicConfig\",\n \"discriminator\": [\n 231,\n 197,\n 13,\n 164,\n 248,\n 213,\n 133,\n 152\n ]\n },\n {\n \"name\": \"EvtCreatePosition\",\n \"discriminator\": [\n 156,\n 15,\n 119,\n 198,\n 29,\n 181,\n 221,\n 55\n ]\n },\n {\n \"name\": \"EvtCreateTokenBadge\",\n \"discriminator\": [\n 141,\n 120,\n 134,\n 116,\n 34,\n 28,\n 114,\n 160\n ]\n },\n {\n \"name\": \"EvtFundReward\",\n \"discriminator\": [\n 104,\n 233,\n 237,\n 122,\n 199,\n 191,\n 121,\n 85\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\": \"EvtInitializeReward\",\n \"discriminator\": [\n 129,\n 91,\n 188,\n 3,\n 246,\n 52,\n 185,\n 249\n ]\n },\n {\n \"name\": \"EvtLockPosition\",\n \"discriminator\": [\n 168,\n 63,\n 108,\n 83,\n 219,\n 82,\n 2,\n 200\n ]\n },\n {\n \"name\": \"EvtPermanentLockPosition\",\n \"discriminator\": [\n 145,\n 143,\n 162,\n 218,\n 218,\n 80,\n 67,\n 11\n ]\n },\n {\n \"name\": \"EvtRemoveLiquidity\",\n \"discriminator\": [\n 87,\n 46,\n 88,\n 98,\n 175,\n 96,\n 34,\n 91\n ]\n },\n {\n \"name\": \"EvtSetPoolStatus\",\n \"discriminator\": [\n 100,\n 213,\n 74,\n 3,\n 95,\n 91,\n 228,\n 146\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\": \"EvtUpdateRewardDuration\",\n \"discriminator\": [\n 149,\n 135,\n 65,\n 231,\n 129,\n 153,\n 65,\n 57\n ]\n },\n {\n \"name\": \"EvtUpdateRewardFunder\",\n \"discriminator\": [\n 76,\n 154,\n 208,\n 13,\n 40,\n 115,\n 246,\n 146\n ]\n },\n {\n \"name\": \"EvtWithdrawIneligibleReward\",\n \"discriminator\": [\n 248,\n 215,\n 184,\n 78,\n 31,\n 180,\n 179,\n 168\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\": \"PoolDisabled\",\n \"msg\": \"Pool disabled\"\n },\n {\n \"code\": 6004,\n \"name\": \"ExceedMaxFeeBps\",\n \"msg\": \"Exceeded max fee bps\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidAdmin\",\n \"msg\": \"Invalid admin\"\n },\n {\n \"code\": 6006,\n \"name\": \"AmountIsZero\",\n \"msg\": \"Amount is zero\"\n },\n {\n \"code\": 6007,\n \"name\": \"TypeCastFailed\",\n \"msg\": \"Type cast error\"\n },\n {\n \"code\": 6008,\n \"name\": \"UnableToModifyActivationPoint\",\n \"msg\": \"Unable to modify activation point\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidAuthorityToCreateThePool\",\n \"msg\": \"Invalid authority to create the pool\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidActivationType\",\n \"msg\": \"Invalid activation type\"\n },\n {\n \"code\": 6011,\n \"name\": \"InvalidActivationPoint\",\n \"msg\": \"Invalid activation point\"\n },\n {\n \"code\": 6012,\n \"name\": \"InvalidQuoteMint\",\n \"msg\": \"Quote token must be SOL,USDC\"\n },\n {\n \"code\": 6013,\n \"name\": \"InvalidFeeCurve\",\n \"msg\": \"Invalid fee curve\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidPriceRange\",\n \"msg\": \"Invalid Price Range\"\n },\n {\n \"code\": 6015,\n \"name\": \"PriceRangeViolation\",\n \"msg\": \"Trade is over price range\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidParameters\",\n \"msg\": \"Invalid parameters\"\n },\n {\n \"code\": 6017,\n \"name\": \"InvalidCollectFeeMode\",\n \"msg\": \"Invalid collect fee mode\"\n },\n {\n \"code\": 6018,\n \"name\": \"InvalidInput\",\n \"msg\": \"Invalid input\"\n },\n {\n \"code\": 6019,\n \"name\": \"CannotCreateTokenBadgeOnSupportedMint\",\n \"msg\": \"Cannot create token badge on supported mint\"\n },\n {\n \"code\": 6020,\n \"name\": \"InvalidTokenBadge\",\n \"msg\": \"Invalid token badge\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidMinimumLiquidity\",\n \"msg\": \"Invalid minimum liquidity\"\n },\n {\n \"code\": 6022,\n \"name\": \"InvalidVestingInfo\",\n \"msg\": \"Invalid vesting information\"\n },\n {\n \"code\": 6023,\n \"name\": \"InsufficientLiquidity\",\n \"msg\": \"Insufficient liquidity\"\n },\n {\n \"code\": 6024,\n \"name\": \"InvalidVestingAccount\",\n \"msg\": \"Invalid vesting account\"\n },\n {\n \"code\": 6025,\n \"name\": \"InvalidPoolStatus\",\n \"msg\": \"Invalid pool status\"\n },\n {\n \"code\": 6026,\n \"name\": \"UnsupportNativeMintToken2022\",\n \"msg\": \"Unsupported native mint token2022\"\n },\n {\n \"code\": 6027,\n \"name\": \"InvalidRewardIndex\",\n \"msg\": \"Invalid reward index\"\n },\n {\n \"code\": 6028,\n \"name\": \"InvalidRewardDuration\",\n \"msg\": \"Invalid reward duration\"\n },\n {\n \"code\": 6029,\n \"name\": \"RewardInitialized\",\n \"msg\": \"Reward already initialized\"\n },\n {\n \"code\": 6030,\n \"name\": \"RewardUninitialized\",\n \"msg\": \"Reward not initialized\"\n },\n {\n \"code\": 6031,\n \"name\": \"InvalidRewardVault\",\n \"msg\": \"Invalid reward vault\"\n },\n {\n \"code\": 6032,\n \"name\": \"MustWithdrawnIneligibleReward\",\n \"msg\": \"Must withdraw ineligible reward\"\n },\n {\n \"code\": 6033,\n \"name\": \"IdenticalRewardDuration\",\n \"msg\": \"Reward duration is the same\"\n },\n {\n \"code\": 6034,\n \"name\": \"RewardCampaignInProgress\",\n \"msg\": \"Reward campaign in progress\"\n },\n {\n \"code\": 6035,\n \"name\": \"IdenticalFunder\",\n \"msg\": \"Identical funder\"\n },\n {\n \"code\": 6036,\n \"name\": \"InvalidFunder\",\n \"msg\": \"Invalid funder\"\n },\n {\n \"code\": 6037,\n \"name\": \"RewardNotEnded\",\n \"msg\": \"Reward not ended\"\n },\n {\n \"code\": 6038,\n \"name\": \"FeeInverseIsIncorrect\",\n \"msg\": \"Fee inverse is incorrect\"\n },\n {\n \"code\": 6039,\n \"name\": \"PositionIsNotEmpty\",\n \"msg\": \"Position is not empty\"\n },\n {\n \"code\": 6040,\n \"name\": \"InvalidPoolCreatorAuthority\",\n \"msg\": \"Invalid pool creator authority\"\n },\n {\n \"code\": 6041,\n \"name\": \"InvalidConfigType\",\n \"msg\": \"Invalid config type\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AddLiquidityParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity_delta\",\n \"docs\": [\n \"delta liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_a_amount_threshold\",\n \"docs\": [\n \"maximum token a amount\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"docs\": [\n \"maximum token b amount\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\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\": \"fee_scheduler_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\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 }\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\": \"BaseFeeStruct\",\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\": \"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 \"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\": \"padding_1\",\n \"type\": \"u64\"\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 \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"vault_config_key\",\n \"docs\": [\n \"Vault config key\"\n ],\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\": \"pool_fees\",\n \"docs\": [\n \"Pool fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeesConfig\"\n }\n }\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"Activation type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"Collect fee mode\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"config_type\",\n \"docs\": [\n \"Config type mode, 0 for static, 1 for dynamic\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding 0\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"index\",\n \"docs\": [\n \"config index\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"sqrt min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"sqrt max price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Fee curve point\",\n \"Padding for further use\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 10\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"DynamicConfigParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_creator_authority\",\n \"type\": \"pubkey\"\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\": \"padding_1\",\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\": \"DynamicFeeStruct\",\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\": \"last_update_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bin_step_u128\",\n \"type\": \"u128\"\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 \"name\": \"EvtAddLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddLiquidityParameters\"\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 \"name\": \"total_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_b\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimPartnerFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\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\": \"EvtClaimPositionFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_a_claimed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_b_claimed\",\n \"type\": \"u64\"\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_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_reward\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"total_reward\",\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\": \"EvtCloseConfig\",\n \"docs\": [\n \"Close config\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"config\",\n \"docs\": [\n \"Config pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"admin pk\"\n ],\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClosePosition\",\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\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_nft_mint\",\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 static config\"\n ],\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\": \"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\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateDynamicConfig\",\n \"docs\": [\n \"Create dynamic config\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreatePosition\",\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\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateTokenBadge\",\n \"docs\": [\n \"Create token badge\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtFundReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_reward\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"transfer_fee_excluded_amount_in\",\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\": \"token_a_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"payer\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"alpha_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_a_flag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_b_flag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_b\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool_type\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtInitializeReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_duration\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtLockPosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vesting\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"cliff_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtPermanentLockPosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lock_liquidity_amount\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_permanent_locked_liquidity\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtRemoveLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemoveLiquidityParameters\"\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 {\n \"name\": \"EvtSetPoolStatus\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"status\",\n \"type\": \"u8\"\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\": \"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\": \"actual_amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_timestamp\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtUpdateRewardDuration\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"old_reward_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_reward_duration\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtUpdateRewardFunder\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"old_funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_funder\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtWithdrawIneligibleReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"InitializeCustomizablePoolParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"pool fees\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"sqrt min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"sqrt max price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"has_alpha_vault\",\n \"docs\": [\n \"has alpha vault\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"initialize liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"The init price of the pool as a sqrt(token_b/token_a) Q64.64 value\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"activation type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"collect fee mode\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"activation point\"\n ],\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"InitializePoolParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"initialize liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"The init price of the pool as a sqrt(token_b/token_a) Q64.64 value\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"activation point\"\n ],\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"Pool\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"Pool fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeesStruct\"\n }\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"token a mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"token b mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"token a vault\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"token b vault\"\n ],\n \"type\": \"pubkey\"\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\": \"partner\",\n \"docs\": [\n \"partner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"liquidity share\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\n \"padding, previous reserve amount, be careful to use that field\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"protocol_a_fee\",\n \"docs\": [\n \"protocol a fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_b_fee\",\n \"docs\": [\n \"protocol b fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_a_fee\",\n \"docs\": [\n \"partner a fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_b_fee\",\n \"docs\": [\n \"partner b fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"max price\"\n ],\n \"type\": \"u128\"\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, can be slot or timestamp\"\n ],\n \"type\": \"u64\"\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 \"name\": \"pool_status\",\n \"docs\": [\n \"pool status, 0: enable, 1 disable\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_a_flag\",\n \"docs\": [\n \"token a flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_b_flag\",\n \"docs\": [\n \"token b flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"0 is collect fee in both token, 1 only collect fee in token a, 2 only collect fee in token b\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"pool_type\",\n \"docs\": [\n \"pool type\"\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\": \"fee_a_per_liquidity\",\n \"docs\": [\n \"cumulative\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_b_per_liquidity\",\n \"docs\": [\n \"cumulative\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"permanent_lock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"metrics\",\n \"docs\": [\n \"metrics\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolMetrics\"\n }\n }\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Padding for further use\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 10\n ]\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"RewardInfo\"\n }\n },\n 2\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\": \"protocol_fee_percent\",\n \"docs\": [\n \"Protocol trade fee percent\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"docs\": [\n \"partner fee percent\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"docs\": [\n \"referral fee percent\"\n ],\n \"type\": \"u8\"\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\": \"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\": \"protocol_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"padding_1\",\n \"type\": {\n \"array\": [\n \"u64\",\n 5\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolFeesStruct\",\n \"docs\": [\n \"Information regarding fee charges\",\n \"trading_fee = amount * trade_fee_numerator / denominator\",\n \"protocol_fee = trading_fee * protocol_fee_percentage / 100\",\n \"referral_fee = protocol_fee * referral_percentage / 100\",\n \"partner_fee = (protocol_fee - referral_fee) * partner_fee_percentage / denominator\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_fee\",\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\": {\n \"defined\": {\n \"name\": \"BaseFeeStruct\"\n }\n }\n },\n {\n \"name\": \"protocol_fee_percent\",\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\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"docs\": [\n \"partner fee\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"docs\": [\n \"referral fee\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"dynamic_fee\",\n \"docs\": [\n \"dynamic fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"DynamicFeeStruct\"\n }\n }\n },\n {\n \"name\": \"padding_1\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\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_lp_a_fee\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_lp_b_fee\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_protocol_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_protocol_b_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_partner_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_partner_b_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_position\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"nft_mint\",\n \"docs\": [\n \"nft mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_a_per_token_checkpoint\",\n \"docs\": [\n \"fee a checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_b_per_token_checkpoint\",\n \"docs\": [\n \"fee b checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_a_pending\",\n \"docs\": [\n \"fee a pending\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_b_pending\",\n \"docs\": [\n \"fee b pending\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"unlocked_liquidity\",\n \"docs\": [\n \"unlock liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"vested_liquidity\",\n \"docs\": [\n \"vesting liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"permanent_locked_liquidity\",\n \"docs\": [\n \"permanent locked liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"metrics\",\n \"docs\": [\n \"metrics\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PositionMetrics\"\n }\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"UserRewardInfo\"\n }\n },\n 2\n ]\n }\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"padding for future usage\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 6\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PositionMetrics\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_claimed_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_b_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoveLiquidityParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity_delta\",\n \"docs\": [\n \"delta liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_a_amount_threshold\",\n \"docs\": [\n \"minimum token a amount\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"docs\": [\n \"minimum token b amount\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardInfo\",\n \"docs\": [\n \"Stores the state relevant for tracking liquidity mining rewards\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"initialized\",\n \"docs\": [\n \"Indicates if the reward has been initialized\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_token_flag\",\n \"docs\": [\n \"reward token flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Padding to ensure `reward_rate: u128` is 16-byte aligned\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Reward token mint.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Reward vault token account.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"docs\": [\n \"Authority account that allows to fund rewards\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_duration\",\n \"docs\": [\n \"reward duration\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_duration_end\",\n \"docs\": [\n \"reward duration end\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_rate\",\n \"docs\": [\n \"reward rate\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reward_per_token_stored\",\n \"docs\": [\n \"Reward per token stored\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"last_update_time\",\n \"docs\": [\n \"The last time reward states were updated.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulative_seconds_with_empty_liquidity_reward\",\n \"docs\": [\n \"Accumulated seconds when the farm distributed rewards but the bin was empty.\",\n \"These rewards will be carried over to the next reward time window.\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"StaticConfigParameters\",\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\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\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\": \"collect_fee_mode\",\n \"type\": \"u8\"\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\": \"output_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"next_sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"lp_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"referral_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenBadge\",\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\": \"token_mint\",\n \"docs\": [\n \"token mint\"\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\": \"UserRewardInfo\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"reward_per_token_checkpoint\",\n \"docs\": [\n \"The latest update reward checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"reward_pendings\",\n \"docs\": [\n \"Current pending rewards\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_rewards\",\n \"docs\": [\n \"Total claimed rewards\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Vesting\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"cliff_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_released_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 14\n ]\n }\n },\n {\n \"name\": \"padding2\",\n \"type\": {\n \"array\": [\n \"u128\",\n 4\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"VestingParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_point\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n }\n ]\n }\n }\n ]\n}","import { IdlAccounts, IdlTypes, Program, BN } from \"@coral-xyz/anchor\";\nimport { PublicKey, Transaction } from \"@solana/web3.js\";\nimport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport { Mint } from \"@solana/spl-token\";\n\nexport type AmmProgram = Program<CpAmmTypes>;\n\nexport type TxBuilder = Promise<Transaction>;\n\nexport enum Rounding {\n Up,\n Down,\n}\n\nexport enum ActivationPoint {\n Timestamp,\n Slot,\n}\n\nexport enum FeeSchedulerMode {\n Linear,\n Exponential,\n}\n\nexport enum CollectFeeMode {\n BothToken,\n OnlyB,\n}\n\nexport enum TradeDirection {\n AtoB,\n BtoA,\n}\n\nexport enum ActivationType {\n Slot,\n Timestamp,\n}\n\nexport type FeeMode = {\n feeOnInput: boolean;\n feesOnTokenA: boolean;\n};\n\n// Account state types\nexport type PoolState = IdlAccounts<CpAmmTypes>[\"pool\"];\nexport type PositionState = IdlAccounts<CpAmmTypes>[\"position\"];\nexport type VestingState = IdlAccounts<CpAmmTypes>[\"vesting\"];\nexport type ConfigState = IdlAccounts<CpAmmTypes>[\"config\"];\nexport type TokenBadgeState = IdlAccounts<CpAmmTypes>[\"tokenBadge\"];\n\n// Program params types\n// export type LockPositionParams = IdlTypes<CpAmm>[\"VestingParameters\"];\n// export type AddLiquidityParams = IdlTypes<CpAmm>[\"AddLiquidityParameters\"];\n// export type RemoveLiquidityParams =\n// IdlTypes<CpAmm>[\"RemoveLiquidityParameters\"];\n// export type SwapParams = IdlTypes<CpAmm>[\"SwapParameters\"];\n// export type InitPoolParams = IdlTypes<CpAmm>[\"InitializePoolParameters\"];\n// export type InitCustomizePoolParams =\n// IdlTypes<CpAmm>[\"InitializeCustomizablePoolParameters\"];\nexport type RewardInfo = IdlTypes<CpAmmTypes>[\"rewardInfo\"];\n\nexport type DynamicFee = {\n binStep: number;\n binStepU128: BN;\n filterPeriod: number;\n decayPeriod: number;\n reductionFactor: number;\n maxVolatilityAccumulator: number;\n variableFeeControl: number;\n};\n\nexport type BaseFee = {\n cliffFeeNumerator: BN;\n numberOfPeriod: number;\n periodFrequency: BN;\n reductionFactor: BN;\n feeSchedulerMode: number;\n};\n\nexport type PoolFeesParams = {\n baseFee: BaseFee;\n protocolFeePercent: number;\n partnerFeePercent: number;\n referralFeePercent: number;\n dynamicFee: DynamicFee | null;\n};\n\nexport type PrepareTokenAccountParams = {\n payer: PublicKey;\n tokenAOwner: PublicKey;\n tokenBOwner: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type PrepareCustomizablePoolParams = {\n pool: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAAmount: BN;\n tokenBAmount: BN;\n payer: PublicKey;\n positionNft: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type InitializeCustomizeablePoolParams = {\n payer: PublicKey;\n creator: PublicKey;\n positionNft: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAAmount: BN;\n tokenBAmount: BN;\n sqrtMinPrice: BN;\n sqrtMaxPrice: BN;\n liquidityDelta: BN;\n initSqrtPrice: BN;\n poolFees: PoolFeesParams;\n hasAlphaVault: boolean;\n activationType: number;\n collectFeeMode: number;\n activationPoint: BN | null;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n isLockLiquidity?: boolean;\n};\n\nexport type InitializeCustomizeablePoolWithDynamicConfigParams =\n InitializeCustomizeablePoolParams & {\n config: PublicKey;\n poolCreatorAuthority: PublicKey;\n };\n\nexport type PreparePoolCreationParams = {\n tokenAAmount: BN;\n tokenBAmount: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type PreparedPoolCreation = {\n initSqrtPrice: BN;\n liquidityDelta: BN;\n};\n\nexport type PreparePoolCreationSingleSide = {\n tokenAAmount: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n initSqrtPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type CreatePoolParams = {\n creator: PublicKey;\n payer: PublicKey;\n config: PublicKey;\n positionNft: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n initSqrtPrice: BN;\n liquidityDelta: BN;\n tokenAAmount: BN;\n tokenBAmount: BN;\n activationPoint: BN | null;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n isLockLiquidity?: boolean;\n};\n\nexport type CreatePositionParams = {\n owner: PublicKey;\n payer: PublicKey;\n pool: PublicKey;\n positionNft: PublicKey;\n};\n\nexport type AddLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n maxAmountTokenA: BN;\n maxAmountTokenB: BN;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type CreatePositionAndAddLiquidity = {\n owner: PublicKey;\n pool: PublicKey;\n positionNft: PublicKey;\n liquidityDelta: BN;\n maxAmountTokenA: BN;\n maxAmountTokenB: BN;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type LiquidityDeltaParams = {\n maxAmountTokenA: BN;\n maxAmountTokenB: BN;\n sqrtPrice: BN;\n sqrtMinPrice: BN;\n sqrtMaxPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type RemoveLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n vestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type RemoveAllLiquidityParams = Omit<\n RemoveLiquidityParams,\n \"liquidityDelta\"\n>;\n\nexport type BuildAddLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type BuildLiquidatePositionInstructionParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n positionState: PositionState;\n poolState: PoolState;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n};\n\nexport type BuildRemoveAllLiquidityInstructionParams = {\n poolAuthority: PublicKey;\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type ClosePositionParams = {\n owner: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftMint: PublicKey;\n positionNftAccount: PublicKey;\n};\n\nexport type RemoveAllLiquidityAndClosePositionParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n poolState: PoolState;\n positionState: PositionState;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n vestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type MergePositionParams = {\n owner: PublicKey;\n positionA: PublicKey;\n positionB: PublicKey;\n poolState: PoolState;\n positionBNftAccount: PublicKey;\n positionANftAccount: PublicKey;\n positionBState: PositionState;\n tokenAAmountAddLiquidityThreshold: BN;\n tokenBAmountAddLiquidityThreshold: BN;\n tokenAAmountRemoveLiquidityThreshold: BN;\n tokenBAmountRemoveLiquidityThreshold: BN;\n positionBVestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type GetQuoteParams = {\n inAmount: BN;\n inputTokenMint: PublicKey;\n slippage: number;\n poolState: PoolState;\n currentTime: number;\n currentSlot: number;\n inputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n outputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type SwapQuotes = {\n totalFee: BN;\n minOutAmount: BN;\n actualAmount: BN;\n};\n\nexport type SwapParams = {\n payer: PublicKey;\n pool: PublicKey;\n inputTokenMint: PublicKey;\n outputTokenMint: PublicKey;\n amountIn: BN;\n minimumAmountOut: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n referralTokenAccount: PublicKey | null;\n};\n\nexport type LockPositionParams = {\n owner: PublicKey;\n payer: PublicKey;\n vestingAccount: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n cliffPoint: BN | null;\n periodFrequency: BN;\n cliffUnlockLiquidity: BN;\n liquidityPerPeriod: BN;\n numberOfPeriod: number;\n};\n\nexport type SetupFeeClaimAccountsParams = {\n payer: PublicKey;\n owner: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n receiver?: PublicKey;\n tempWSolAccount?: PublicKey;\n};\n\nexport type ClaimPositionFeeInstructionParams = {\n owner: PublicKey;\n poolAuthority: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type ClaimPositionFeeParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n receiver?: PublicKey;\n feePayer?: PublicKey;\n tempWSolAccount?: PublicKey;\n};\n\nexport type ClosePositionInstructionParams = {\n owner: PublicKey;\n poolAuthority: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftMint: PublicKey;\n positionNftAccount: PublicKey;\n};\n\nexport type InitializeRewardParams = {\n rewardIndex: number;\n rewardDuration: BN;\n pool: PublicKey;\n rewardMint: PublicKey;\n payer: PublicKey;\n};\n\nexport type UpdateRewardDurationParams = {\n pool: PublicKey;\n admin: PublicKey;\n rewardIndex: number;\n newDuration: BN;\n};\n\nexport type UpdateRewardFunderParams = {\n pool: PublicKey;\n admin: PublicKey;\n rewardIndex: number;\n newFunder: PublicKey;\n};\n\nexport type FundRewardParams = {\n funder: PublicKey;\n rewardIndex: number;\n pool: PublicKey;\n carryForward: boolean;\n amount: BN;\n};\n\nexport type WithdrawIneligibleRewardParams = {\n rewardIndex: number;\n pool: PublicKey;\n funder: PublicKey;\n};\n\nexport type ClaimPartnerFeeParams = {\n partner: PublicKey;\n pool: PublicKey;\n maxAmountA: BN;\n maxAmountB: BN;\n receiver?: PublicKey;\n feePayer?: PublicKey;\n tempWSolAccount?: PublicKey;\n};\n\nexport type ClaimRewardParams = {\n user: PublicKey;\n position: PublicKey;\n poolState: PoolState;\n positionState: PositionState;\n positionNftAccount: PublicKey;\n rewardIndex: number;\n feePayer?: PublicKey;\n};\n\nexport type RefreshVestingParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n vestingAccounts: PublicKey[];\n};\n\nexport type PermanentLockParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n unlockedLiquidity: BN;\n};\n\nexport type GetDepositQuoteParams = {\n inAmount: BN;\n isTokenA: boolean;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n sqrtPrice: BN;\n inputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n outputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type GetWithdrawQuoteParams = {\n liquidityDelta: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n sqrtPrice: BN;\n tokenATokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type DepositQuote = {\n actualInputAmount: BN;\n consumedInputAmount: BN;\n outputAmount: BN;\n liquidityDelta: BN;\n};\n\nexport type WithdrawQuote = {\n liquidityDelta: BN;\n outAmountA: BN;\n outAmountB: BN;\n};\n\nexport type DynamicFeeParams = {\n volatilityAccumulator: BN;\n binStep: number;\n variableFeeControl: number;\n};\n","import { PublicKey } from \"@solana/web3.js\";\nimport { BN } from \"@coral-xyz/anchor\";\nimport { CP_AMM_PROGRAM_ID } from \"./constants\";\n\n// Private function: Only use to derive pool account\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\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 derivePoolAuthority(): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"pool_authority\")],\n CP_AMM_PROGRAM_ID\n )[0];\n}\nexport function deriveConfigAddress(index: BN): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"config\"), index.toArrayLike(Buffer, \"le\", 8)],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePoolAddress(\n config: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"pool\"),\n config.toBuffer(),\n getFirstKey(tokenAMint, tokenBMint),\n getSecondKey(tokenAMint, tokenBMint),\n ],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePositionAddress(positionNft: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position\"), positionNft.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveTokenVaultAddress(\n tokenMint: PublicKey,\n pool: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"token_vault\"), tokenMint.toBuffer(), pool.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveRewardVaultAddress(\n pool: PublicKey,\n rewardIndex: number\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"reward_vault\"), pool.toBuffer(), Buffer.from([rewardIndex])],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveCustomizablePoolAddress(\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"cpool\"),\n getFirstKey(tokenAMint, tokenBMint),\n getSecondKey(tokenAMint, tokenBMint),\n ],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveTokenBadgeAddress(tokenMint: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"token_badge\"), tokenMint.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveClaimFeeOperatorAddress(operator: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"cf_operator\"), operator.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePositionNftAccount(\n positionNftMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position_nft_account\"), positionNftMint.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nexport const CP_AMM_PROGRAM_ID = new PublicKey(\n \"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG\"\n);\n\nexport const LIQUIDITY_SCALE = 128;\nexport const SCALE_OFFSET = 64;\nexport const BASIS_POINT_MAX = 10_000;\nexport const MAX_FEE_NUMERATOR = 500_000_000;\nexport const FEE_DENOMINATOR = 1_000_000_000;\n\nexport const MIN_SQRT_PRICE = new BN(\"4295048016\");\nexport const MAX_SQRT_PRICE = new BN(\"79226673521066979257578248091\");\nexport const MIN_CU_BUFFER = 50_000;\nexport const MAX_CU_BUFFER = 200_000;\n\nexport const DYNAMIC_FEE_FILTER_PERIOD_DEFAULT = 10;\nexport const DYNAMIC_FEE_DECAY_PERIOD_DEFAULT = 120;\nexport const DYNAMIC_FEE_REDUCTION_FACTOR_DEFAULT = 5000; // 50%\nexport const BIN_STEP_BPS_DEFAULT = 1;\n// bin_step << 64 / BASIS_POINT_MAX\nexport const BIN_STEP_BPS_U128_DEFAULT = new BN(\"1844674407370955\");\nexport const MAX_PRICE_CHANGE_BPS_DEFAULT = 1500; // 15%\n","import { bs58 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\nimport {\n AccountLayout,\n createAssociatedTokenAccountIdempotentInstruction,\n createCloseAccountInstruction,\n getAccount,\n getAssociatedTokenAddressSync,\n getMint,\n NATIVE_MINT,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n TokenAccountNotFoundError,\n TokenInvalidAccountOwnerError,\n} from \"@solana/spl-token\";\nimport {\n Connection,\n GetProgramAccountsFilter,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\n\nexport function getTokenProgram(flag: number): PublicKey {\n return flag == 0 ? TOKEN_PROGRAM_ID : TOKEN_2022_PROGRAM_ID;\n}\nexport const getTokenDecimals = async (\n connection: Connection,\n mint: PublicKey\n): Promise<number> => {\n return (await getMint(connection, mint)).decimals;\n};\n\nexport const getOrCreateATAInstruction = async (\n connection: Connection,\n tokenMint: PublicKey,\n owner: PublicKey,\n payer: PublicKey = owner,\n allowOwnerOffCurve = true,\n tokenProgram: PublicKey\n): Promise<{ ataPubkey: PublicKey; ix?: TransactionInstruction }> => {\n const toAccount = getAssociatedTokenAddressSync(\n tokenMint,\n owner,\n allowOwnerOffCurve,\n tokenProgram\n );\n\n try {\n await getAccount(connection, toAccount);\n return { ataPubkey: toAccount, ix: undefined };\n } catch (e) {\n if (\n e instanceof TokenAccountNotFoundError ||\n e instanceof TokenInvalidAccountOwnerError\n ) {\n const ix = createAssociatedTokenAccountIdempotentInstruction(\n payer,\n toAccount,\n owner,\n tokenMint,\n tokenProgram\n );\n\n return { ataPubkey: toAccount, ix };\n } else {\n /* handle error */\n console.error(\"Error::getOrCreateATAInstruction\", e);\n throw e;\n }\n }\n};\n\nexport const 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\nexport const unwrapSOLInstruction = async (\n owner: PublicKey,\n receiver: PublicKey = owner,\n allowOwnerOffCurve = true\n) => {\n const wSolATAAccount = getAssociatedTokenAddressSync(\n NATIVE_MINT,\n owner,\n allowOwnerOffCurve\n );\n if (wSolATAAccount) {\n const closedWrappedSolInstruction = createCloseAccountInstruction(\n wSolATAAccount,\n receiver,\n owner,\n [],\n TOKEN_PROGRAM_ID\n );\n return closedWrappedSolInstruction;\n }\n return null;\n};\n\nexport async function getAllUserPositionNftAccount(\n connection: Connection,\n user: PublicKey\n): Promise<\n Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }>\n> {\n const filters: GetProgramAccountsFilter[] = [\n {\n memcmp: {\n offset: 32,\n bytes: user.toBase58(),\n },\n },\n {\n memcmp: {\n offset: 64,\n bytes: bs58.encode(Buffer.from([1, 0, 0, 0, 0, 0, 0, 0])), // 1\n },\n },\n ];\n\n const tokenAccountsRaw = await connection.getProgramAccounts(\n TOKEN_2022_PROGRAM_ID,\n {\n filters,\n }\n );\n\n const userPositionNftAccount: Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }> = [];\n for (const { account, pubkey } of tokenAccountsRaw) {\n const tokenAccountData = AccountLayout.decode(account.data);\n userPositionNftAccount.push({\n positionNft: tokenAccountData.mint,\n positionNftAccount: pubkey,\n });\n }\n\n return userPositionNftAccount;\n}\n\nexport async function getAllPositionNftAccountByOwner(\n connection: Connection,\n user: PublicKey\n): Promise<\n Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }>\n> {\n const tokenAccounts = await connection.getTokenAccountsByOwner(user, {\n programId: TOKEN_2022_PROGRAM_ID,\n });\n\n const userPositionNftAccount: Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }> = [];\n for (const { account, pubkey } of tokenAccounts.value) {\n const tokenAccountData = AccountLayout.decode(account.data);\n if (tokenAccountData.amount.toString() === \"1\") {\n userPositionNftAccount.push({\n positionNft: tokenAccountData.mint,\n positionNftAccount: pubkey,\n });\n }\n }\n\n return userPositionNftAccount;\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport {\n BaseFee,\n CollectFeeMode,\n DynamicFee,\n FeeMode,\n FeeSchedulerMode,\n Rounding,\n} from \"../types\";\nimport {\n BASIS_POINT_MAX,\n BIN_STEP_BPS_DEFAULT,\n BIN_STEP_BPS_U128_DEFAULT,\n DYNAMIC_FEE_DECAY_PERIOD_DEFAULT,\n DYNAMIC_FEE_FILTER_PERIOD_DEFAULT,\n DYNAMIC_FEE_REDUCTION_FACTOR_DEFAULT,\n FEE_DENOMINATOR,\n MAX_FEE_NUMERATOR,\n MAX_PRICE_CHANGE_BPS_DEFAULT,\n SCALE_OFFSET,\n} from \"../constants\";\nimport { ONE, pow } from \"../math/feeMath\";\nimport { mulDiv } from \"../math\";\nimport {\n getAmountAFromLiquidityDelta,\n getAmountBFromLiquidityDelta,\n getNextSqrtPrice,\n} from \"./curve\";\nimport Decimal from \"decimal.js\";\n\n// Fee scheduler\n// Linear: cliffFeeNumerator - period * reductionFactor\n// Exponential: cliffFeeNumerator * (1 -reductionFactor/BASIS_POINT_MAX)^period\nexport function getBaseFeeNumerator(\n feeSchedulerMode: FeeSchedulerMode,\n cliffFeeNumerator: BN,\n period: BN,\n reductionFactor: BN\n): BN {\n let feeNumerator: BN;\n if (feeSchedulerMode == FeeSchedulerMode.Linear) {\n feeNumerator = cliffFeeNumerator.sub(period.mul(reductionFactor));\n } else {\n const bps = reductionFactor.shln(SCALE_OFFSET).div(new BN(BASIS_POINT_MAX));\n const base = ONE.sub(bps);\n const result = pow(base, period);\n feeNumerator = cliffFeeNumerator.mul(result).shrn(SCALE_OFFSET);\n }\n\n return feeNumerator;\n}\n\n/**\n * Calculates the dynamic fee numerator based on market volatility metrics\n *\n * @param volatilityAccumulator - A measure of accumulated market volatility (BN)\n * @param binStep - The size of price bins in the liquidity distribution (BN)\n * @param variableFeeControl - Parameter controlling the impact of volatility on fees (BN)\n * @returns The calculated dynamic fee numerator (BN)\n */\nexport function getDynamicFeeNumerator(\n volatilityAccumulator: BN,\n binStep: BN,\n variableFeeControl: BN\n): BN {\n if (variableFeeControl.isZero()) {\n return new BN(0);\n }\n const squareVfaBin = volatilityAccumulator\n .mul(new BN(binStep))\n .pow(new BN(2));\n const vFee = variableFeeControl.mul(squareVfaBin);\n\n return vFee.add(new BN(99_999_999_999)).div(new BN(100_000_000_000));\n}\n\n/**\n * Calculates the fee numerator based on current market conditions and fee schedule configuration\n *\n * @param currentPoint - The current price point in the liquidity curve\n * @param activationPoint - The price point at which the fee schedule is activated (BN)\n * @param numberOfPeriod - The total number of periods in the fee schedule\n * @param periodFrequency - The frequency at which periods change (BN)\n * @param feeSchedulerMode - The mode determining how fees are calculated (0 = constant, 1 = linear, etc.)\n * @param cliffFeeNumerator - The initial fee numerator at the cliff point (BN)\n * @param reductionFactor - The factor by which fees are reduced in each period (BN)\n * @param dynamicFeeParams - Optional parameters for dynamic fee calculation\n * @param dynamicFeeParams.volatilityAccumulator - Measure of accumulated market volatility (BN)\n * @param dynamicFeeParams.binStep - Size of price bins in the liquidity distribution (BN)\n * @param dynamicFeeParams.variableFeeControl - Parameter controlling the impact of volatility (BN)\n * @returns The calculated fee numerator (BN), capped at MAX_FEE_NUMERATOR\n */\nexport function getFeeNumerator(\n currentPoint: number,\n activationPoint: BN,\n numberOfPeriod: number,\n periodFrequency: BN,\n feeSchedulerMode: number,\n cliffFeeNumerator: BN,\n reductionFactor: BN,\n dynamicFeeParams?: {\n volatilityAccumulator: BN;\n binStep: number;\n variableFeeControl: number;\n }\n): BN {\n if (\n Number(periodFrequency) == 0 ||\n new BN(currentPoint).lt(activationPoint)\n ) {\n return cliffFeeNumerator;\n }\n const period = BN.min(\n new BN(numberOfPeriod),\n new BN(currentPoint).sub(activationPoint).div(periodFrequency)\n );\n\n let feeNumerator = getBaseFeeNumerator(\n feeSchedulerMode,\n cliffFeeNumerator,\n period,\n reductionFactor\n );\n\n if (dynamicFeeParams) {\n const { volatilityAccumulator, binStep, variableFeeControl } =\n dynamicFeeParams;\n const dynamicFeeNumberator = getDynamicFeeNumerator(\n volatilityAccumulator,\n new BN(binStep),\n new BN(variableFeeControl)\n );\n feeNumerator = feeNumerator.add(dynamicFeeNumberator);\n }\n return feeNumerator.gt(new BN(MAX_FEE_NUMERATOR))\n ? new BN(MAX_FEE_NUMERATOR)\n : feeNumerator;\n}\n\n/**\n * Determines the fee mode based on the swap direction and fee collection configuration\n *\n * @param collectFeeMode - The fee collection mode (e.g., OnlyB, BothToken)\n * @param btoA - Boolean indicating if the swap is from token B to token A\n * @returns { feeOnInput, feesOnTokenA }\n */\nfunction getFeeMode(collectFeeMode: CollectFeeMode, btoA: boolean): FeeMode {\n const feeOnInput = btoA && collectFeeMode === CollectFeeMode.OnlyB;\n const feesOnTokenA = btoA && collectFeeMode === CollectFeeMode.BothToken;\n\n return {\n feeOnInput,\n feesOnTokenA,\n };\n}\n\n/**\n * Calculates the total fee amount based on the transaction amount and fee numerator\n *\n * @param amount - The transaction amount (BN)\n * @param tradeFeeNumerator - The fee numerator to apply (BN)\n * @returns The calculated fee amount (BN), rounded up\n */\nfunction getTotalFeeOnAmount(amount: BN, tradeFeeNumerator: BN) {\n return mulDiv(\n amount,\n tradeFeeNumerator,\n new BN(FEE_DENOMINATOR),\n Rounding.Up\n );\n}\n\n/**\n *\n * Calculates the output amount and fees for a swap operation in a concentrated liquidity pool.\n *\n * @param inAmount - The input amount of tokens the user is swapping\n * @param sqrtPrice - The current square root price of the pool\n * @param liquidity - The current liquidity available in the pool\n * @param tradeFeeNumerator - The fee numerator used to calculate trading fees\n * @param aToB - Direction of the swap: true for token A to token B, false for token B to token A\n * @param collectFeeMode - Determines how fees are collected (0: both tokens, 1: only token B)\n * @returns Object containing the actual output amount after fees and the total fee amount\n */\nexport function getSwapAmount(\n inAmount: BN,\n sqrtPrice: BN,\n liquidity: BN,\n tradeFeeNumerator: BN,\n aToB: boolean,\n collectFeeMode: number\n): { amountOut: BN; totalFee: BN; nextSqrtPrice: BN } {\n let feeMode = getFeeMode(collectFeeMode, !aToB);\n let actualInAmount = inAmount;\n let totalFee = new BN(0);\n\n if (feeMode.feeOnInput) {\n totalFee = getTotalFeeOnAmount(inAmount, tradeFeeNumerator);\n actualInAmount = inAmount.sub(totalFee);\n }\n\n const nextSqrtPrice = getNextSqrtPrice(\n actualInAmount,\n sqrtPrice,\n liquidity,\n aToB\n );\n // Calculate the output amount based on swap direction\n const outAmount = aToB\n ? getAmountBFromLiquidityDelta(\n liquidity,\n sqrtPrice,\n nextSqrtPrice,\n Rounding.Down\n )\n : getAmountAFromLiquidityDelta(\n liquidity,\n sqrtPrice,\n nextSqrtPrice,\n Rounding.Down\n );\n\n // Apply fees to output amount if fee is taken on output\n const amountOut = feeMode.feeOnInput\n ? outAmount\n : ((totalFee = getTotalFeeOnAmount(outAmount, tradeFeeNumerator)),\n outAmount.sub(totalFee));\n\n return { amountOut, totalFee, nextSqrtPrice };\n}\n\n/**\n * Converts basis points (bps) to a fee numerator\n * 1 bps = 0.01% = 0.0001 in decimal\n *\n * @param bps - The value in basis points [1-10_000]\n * @returns The equivalent fee numerator\n */\nexport function bpsToFeeNumerator(bps: number): BN {\n return new BN(bps * FEE_DENOMINATOR).divn(BASIS_POINT_MAX);\n}\n\n/**\n * Converts a fee numerator back to basis points (bps)\n *\n * @param feeNumerator - The fee numerator to convert\n * @returns The equivalent value in basis points [1-10_000]\n */\nexport function feeNumeratorToBps(feeNumerator: BN): number {\n return feeNumerator\n .muln(BASIS_POINT_MAX)\n .div(new BN(FEE_DENOMINATOR))\n .toNumber();\n}\n\n/**\n * Calculates base fee parameters for a fee scheduler system.\n * @param {number} maxBaseFeeBps - Maximum fee in basis points\n * @param {number} minBaseFeeBps - Minimum fee in basis points\n * @param {FeeSchedulerMode} feeSchedulerMode - Mode for fee reduction (Linear or Exponential)\n * @param {number} numberOfPeriod - Number of periods over which to schedule fee reduction\n * @param {BN} periodFrequency - Time interval between fee reductions\n *\n * @returns {BaseFee}\n */\nexport function getBaseFeeParams(\n maxBaseFeeBps: number,\n minBaseFeeBps: number,\n feeSchedulerMode: FeeSchedulerMode,\n numberOfPeriod: number,\n totalDuration: number\n): BaseFee {\n if (maxBaseFeeBps == minBaseFeeBps) {\n if (numberOfPeriod != 0 || totalDuration != 0) {\n throw new Error(\"numberOfPeriod and totalDuration must both be zero\");\n }\n\n return {\n cliffFeeNumerator: bpsToFeeNumerator(maxBaseFeeBps),\n numberOfPeriod: 0,\n periodFrequency: new BN(0),\n reductionFactor: new BN(0),\n feeSchedulerMode: 0,\n };\n }\n\n if (numberOfPeriod <= 0) {\n throw new Error(\"Total periods must be greater than zero\");\n }\n\n if (maxBaseFeeBps > feeNumeratorToBps(new BN(MAX_FEE_NUMERATOR))) {\n throw new Error(\n `maxBaseFeeBps (${maxBaseFeeBps} bps) exceeds maximum allowed value of ${feeNumeratorToBps(\n new BN(MAX_FEE_NUMERATOR)\n )} bps`\n );\n }\n\n if (minBaseFeeBps > maxBaseFeeBps) {\n throw new Error(\n \"minBaseFee bps must be less than or equal to maxBaseFee bps\"\n );\n }\n\n if (numberOfPeriod == 0 || totalDuration == 0) {\n throw new Error(\n \"numberOfPeriod and totalDuration must both greater than zero\"\n );\n }\n\n const maxBaseFeeNumerator = bpsToFeeNumerator(maxBaseFeeBps);\n\n const minBaseFeeNumerator = bpsToFeeNumerator(minBaseFeeBps);\n\n const periodFrequency = new BN(totalDuration / numberOfPeriod);\n\n let reductionFactor: BN;\n if (feeSchedulerMode == FeeSchedulerMode.Linear) {\n const totalReduction = maxBaseFeeNumerator.sub(minBaseFeeNumerator);\n reductionFactor = totalReduction.divn(numberOfPeriod);\n } else {\n const ratio =\n minBaseFeeNumerator.toNumber() / maxBaseFeeNumerator.toNumber();\n const decayBase = Math.pow(ratio, 1 / numberOfPeriod);\n reductionFactor = new BN(BASIS_POINT_MAX * (1 - decayBase));\n }\n\n return {\n cliffFeeNumerator: maxBaseFeeNumerator,\n numberOfPeriod,\n periodFrequency,\n reductionFactor,\n feeSchedulerMode,\n };\n}\n\n/**\n * Calculate dynamic fee parameters\n * @param {number} baseFeeBps - Base fee in basis points\n * @param {number} [maxPriceChangeBps=1500] - Maximum price change to consider for fee calculation (in basis points)\n *\n * @returns {DynamicFee}\n */\nexport function getDynamicFeeParams(\n baseFeeBps: number,\n maxPriceChangeBps: number = MAX_PRICE_CHANGE_BPS_DEFAULT // default 15%\n): DynamicFee {\n if (maxPriceChangeBps > MAX_PRICE_CHANGE_BPS_DEFAULT) {\n throw new Error(\n `maxPriceChangeBps (${maxPriceChangeBps} bps) must be less than or equal to ${MAX_PRICE_CHANGE_BPS_DEFAULT}`\n );\n }\n\n const priceRatio = maxPriceChangeBps / BASIS_POINT_MAX + 1;\n // Q64\n const sqrtPriceRatioQ64 = new BN(\n Decimal.sqrt(priceRatio.toString())\n .mul(Decimal.pow(2, 64))\n .floor()\n .toFixed()\n );\n const deltaBinId = sqrtPriceRatioQ64\n .sub(ONE)\n .div(BIN_STEP_BPS_U128_DEFAULT)\n .muln(2);\n\n const maxVolatilityAccumulator = new BN(deltaBinId.muln(BASIS_POINT_MAX));\n\n const squareVfaBin = maxVolatilityAccumulator\n .mul(new BN(BIN_STEP_BPS_DEFAULT))\n .pow(new BN(2));\n\n const baseFeeNumerator = new BN(bpsToFeeNumerator(baseFeeBps));\n const maxDynamicFeeNumerator = baseFeeNumerator.muln(20).divn(100); // default max dynamic fee = 20% of base fee.\n const vFee = maxDynamicFeeNumerator\n .mul(new BN(100_000_000_000))\n .sub(new BN(99_999_999_999));\n\n const variableFeeControl = vFee.div(squareVfaBin);\n\n return {\n binStep: BIN_STEP_BPS_DEFAULT,\n binStepU128: BIN_STEP_BPS_U128_DEFAULT,\n filterPeriod: DYNAMIC_FEE_FILTER_PERIOD_DEFAULT,\n decayPeriod: DYNAMIC_FEE_DECAY_PERIOD_DEFAULT,\n reductionFactor: DYNAMIC_FEE_REDUCTION_FACTOR_DEFAULT,\n maxVolatilityAccumulator: maxVolatilityAccumulator.toNumber(),\n variableFeeControl: variableFeeControl.toNumber(),\n };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { SCALE_OFFSET } from \"../constants\";\n\nconst MAX_EXPONENTIAL = new BN(0x80000);\n\nexport const ONE = new BN(1).shln(SCALE_OFFSET);\nconst MAX = new BN(2).pow(new BN(128)).sub(new BN(1));\n\nexport function pow(base: BN, exp: BN): BN {\n let invert = exp.isNeg();\n\n if (exp.isZero()) {\n return ONE;\n }\n\n exp = invert ? exp.abs() : exp;\n\n if (exp.gt(MAX_EXPONENTIAL)) {\n return new BN(0);\n }\n\n let squaredBase = base;\n let result = ONE;\n\n if (squaredBase.gte(result)) {\n squaredBase = MAX.div(squaredBase);\n invert = !invert;\n }\n\n if (!exp.and(new BN(0x1)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x2)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x4)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x8)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x10)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x20)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x40)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x80)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x100)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x200)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x400)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x800)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x1000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x2000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x4000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x8000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x10000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x20000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x40000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n if (result.isZero()) {\n return new BN(0);\n }\n\n if (invert) {\n result = MAX.div(result);\n }\n\n return result;\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport Decimal from \"decimal.js\";\nimport { Rounding } from \"../types\";\n\nexport function mulDiv(x: BN, y: BN, denominator: BN, rounding: Rounding): BN {\n const { div, mod } = x.mul(y).divmod(denominator);\n\n if (rounding == Rounding.Up && !mod.isZero()) {\n return div.add(new BN(1));\n }\n return div;\n}\n\nexport function q64ToDecimal(num: BN, decimalPlaces?: number): Decimal {\n return new Decimal(num.toString())\n .div(Decimal.pow(2, 64))\n .toDecimalPlaces(decimalPlaces);\n}\n\nexport function decimalToQ64(num: Decimal): BN {\n return new BN(num.mul(Decimal.pow(2, 64)).floor().toFixed());\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { Rounding } from \"../types\";\nimport { mulDiv } from \"../math\";\nimport { SCALE_OFFSET } from \"../constants\";\n\n// aToB\n// √P' = √P * L / (L + Δx*√P)\n// bToA\n// √P' = √P + Δy / L\nexport function getNextSqrtPrice(\n amount: BN,\n sqrtPrice: BN,\n liquidity: BN,\n aToB: boolean\n): BN {\n let result: BN;\n if (aToB) {\n const product = amount.mul(sqrtPrice);\n const denominator = liquidity.add(product);\n const numerator = liquidity.mul(sqrtPrice);\n result = numerator.add(denominator.sub(new BN(1))).div(denominator);\n } else {\n const quotient = amount.shln(SCALE_OFFSET * 2).div(liquidity);\n result = sqrtPrice.add(quotient);\n }\n\n return result;\n}\n\n// Δa = L * (1 / √P_lower - 1 / √P_upper)\n//\n// Δa = L * (√P_upper - √P_lower) / (√P_upper * √P_lower)\n//\n// L = Δa * √P_upper * √P_lower / (√P_upper - √P_lower)\n//\nexport function getLiquidityDeltaFromAmountA(\n amountA: BN,\n lowerSqrtPrice: BN, // current sqrt price\n upperSqrtPrice: BN // max sqrt price\n): BN {\n const product = amountA.mul(lowerSqrtPrice).mul(upperSqrtPrice); // Q128.128\n const denominator = upperSqrtPrice.sub(lowerSqrtPrice); // Q64.64\n\n return product.div(denominator);\n}\n\n// Δb = L (√P_upper - √P_lower)\n// L = Δb / (√P_upper - √P_lower)\nexport function getLiquidityDeltaFromAmountB(\n amountB: BN,\n lowerSqrtPrice: BN, // min sqrt price\n upperSqrtPrice: BN // current sqrt price,\n): BN {\n const denominator = upperSqrtPrice.sub(lowerSqrtPrice);\n const product = amountB.shln(128);\n return product.div(denominator);\n}\n\n// L = Δa * √P_upper * √P_lower / (√P_upper - √P_lower)\n// Δa = L * (√P_upper - √P_lower) / √P_upper * √P_lower\nexport function getAmountAFromLiquidityDelta(\n liquidity: BN,\n currentSqrtPrice: BN, // current sqrt price\n maxSqrtPrice: BN,\n rounding: Rounding\n): BN {\n // Q128.128\n const product = liquidity.mul(maxSqrtPrice.sub(currentSqrtPrice));\n // Q128.128\n const denominator = currentSqrtPrice.mul(maxSqrtPrice);\n // Q64.64\n if (rounding == Rounding.Up) {\n return product.add(denominator.sub(new BN(1))).div(denominator);\n }\n return product.div(denominator);\n}\n\n// L = Δb / (√P_upper - √P_lower)\n// Δb = L * (√P_upper - √P_lower)\nexport function getAmountBFromLiquidityDelta(\n liquidity: BN,\n currentSqrtPrice: BN, // current sqrt price,\n minSqrtPrice: BN,\n rounding: Rounding\n): BN {\n const one = new BN(1).shln(128);\n const deltaPrice = currentSqrtPrice.sub(minSqrtPrice);\n const result = liquidity.mul(deltaPrice); // Q128\n if (rounding == Rounding.Up) {\n return result.add(one.sub(new BN(1))).div(one);\n }\n return result.shrn(128);\n}\n","import {\n AddressLookupTableAccount,\n Commitment,\n ComputeBudgetProgram,\n Connection,\n PublicKey,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { MAX_CU_BUFFER, MIN_CU_BUFFER } from \"../constants\";\n\nexport const getSimulationComputeUnits = async (\n connection: Connection,\n instructions: Array<TransactionInstruction>,\n payer: PublicKey,\n lookupTables: Array<AddressLookupTableAccount> | [],\n commitment: Commitment = \"confirmed\"\n): Promise<number | null> => {\n const testInstructions = [\n // Set an arbitrarily high number in simulation\n // so we can be sure the transaction will succeed\n // and get the real compute units used\n ComputeBudgetProgram.setComputeUnitLimit({ units: 1_400_000 }),\n ...instructions,\n ];\n\n const testTransaction = new VersionedTransaction(\n new TransactionMessage({\n instructions: testInstructions,\n payerKey: payer,\n // RecentBlockhash can by any public key during simulation\n // since 'replaceRecentBlockhash' is set to 'true' below\n recentBlockhash: PublicKey.default.toString(),\n }).compileToV0Message(lookupTables)\n );\n\n const rpcResponse = await connection.simulateTransaction(testTransaction, {\n replaceRecentBlockhash: true,\n sigVerify: false,\n commitment,\n });\n\n if (rpcResponse?.value?.err) {\n const logs = rpcResponse.value.logs?.join(\"\\n • \") || \"No logs available\";\n throw new Error(\n `Transaction simulation failed:\\n •${logs}` +\n JSON.stringify(rpcResponse?.value?.err)\n );\n }\n\n return rpcResponse.value.unitsConsumed || null;\n};\n\n/**\n * Gets the estimated compute unit usage with a buffer.\n * @param connection A Solana connection object.\n * @param instructions The instructions of the transaction to simulate.\n * @param feePayer The public key of the fee payer.\n * @param buffer The buffer to add to the estimated compute unit usage. Max value is 1. Default value is 0.1 if not provided, and will be capped between 50k - 200k.\n * @returns The estimated compute unit usage with the buffer.\n */\nexport const getEstimatedComputeUnitUsageWithBuffer = async (\n connection: Connection,\n instructions: TransactionInstruction[],\n feePayer: PublicKey,\n buffer?: number\n) => {\n if (!buffer) {\n buffer = 0.1;\n }\n // Avoid negative value\n buffer = Math.max(0, buffer);\n // Limit buffer to 1\n buffer = Math.min(1, buffer);\n\n const estimatedComputeUnitUsage = await getSimulationComputeUnits(\n connection,\n instructions,\n feePayer,\n []\n );\n\n if (!estimatedComputeUnitUsage) {\n return 0;\n }\n\n let extraComputeUnitBuffer = estimatedComputeUnitUsage * buffer;\n if (extraComputeUnitBuffer > MAX_CU_BUFFER) {\n extraComputeUnitBuffer = MAX_CU_BUFFER;\n } else if (extraComputeUnitBuffer < MIN_CU_BUFFER) {\n extraComputeUnitBuffer = MIN_CU_BUFFER;\n }\n\n return estimatedComputeUnitUsage + extraComputeUnitBuffer;\n};\n\n/**\n * Gets the estimated compute unit usage with a buffer and converts it to a SetComputeUnitLimit instruction.\n * If the estimated compute unit usage cannot be retrieved, returns a SetComputeUnitLimit instruction with the fallback unit.\n * @param connection A Solana connection object.\n * @param instructions The instructions of the transaction to simulate.\n * @param feePayer The public key of the fee payer.\n * @param buffer The buffer to add to the estimated compute unit usage. Max value is 1. Default value is 0.1 if not provided, and will be capped between 50k - 200k.\n * @returns A SetComputeUnitLimit instruction with the estimated compute unit usage.\n */\nexport const getEstimatedComputeUnitIxWithBuffer = async (\n connection: Connection,\n instructions: TransactionInstruction[],\n feePayer: PublicKey,\n buffer?: number\n) => {\n const units = await getEstimatedComputeUnitUsageWithBuffer(\n connection,\n instructions,\n feePayer,\n buffer\n ).catch((error) => {\n console.error(\"Error::getEstimatedComputeUnitUsageWithBuffer\", error);\n return 1_400_000;\n });\n\n return ComputeBudgetProgram.setComputeUnitLimit({ units });\n};\n","import { BN } from \"@coral-xyz/anchor\";\nimport { BASIS_POINT_MAX, LIQUIDITY_SCALE } from \"../constants\";\nimport Decimal from \"decimal.js\";\nimport { PoolState, PositionState } from \"../types\";\nimport { PublicKey } from \"@solana/web3.js\";\n/**\n * It takes an amount and a slippage rate, and returns the maximum amount that can be received with\n * that slippage rate\n * @param {BN} amount - The amount of tokens you want to buy.\n * @param {number} rate - The maximum percentage of slippage you're willing to accept. (Max to 2 decimal place)\n * @returns The maximum amount of tokens that can be bought with the given amount of ETH, given the\n * slippage rate.\n */\nexport const getMaxAmountWithSlippage = (amount: BN, rate: number) => {\n const slippage = ((100 + rate) / 100) * BASIS_POINT_MAX;\n return amount.mul(new BN(slippage)).div(new BN(BASIS_POINT_MAX));\n};\n\n/**\n * It takes an amount and a slippage rate, and returns the minimum amount that will be received after\n * slippage\n * @param {BN} amount - The amount of tokens you want to sell.\n * @param {number} rate - The percentage of slippage you're willing to accept. (Max to 2 decimal place)\n * @returns The minimum amount that can be received after slippage is applied.\n */\nexport const getMinAmountWithSlippage = (amount: BN, rate: number) => {\n const slippage = ((100 - rate) / 100) * BASIS_POINT_MAX;\n return amount.mul(new BN(slippage)).div(new BN(BASIS_POINT_MAX));\n};\n\n/**\n * Calculate price impact as a percentage\n * @param nextSqrtPrice sqrt price after swap\n * @param currentSqrtPrice current pool sqrt price\n * @returns Price impact as a percentage (e.g., 1.5 means 1.5%)\n */\nexport const getPriceImpact = (\n nextSqrtPrice: BN,\n currentSqrtPrice: BN\n): number => {\n // price = (sqrtPrice)^2 * 10 ** (base_decimal - quote_decimal) / 2^128\n // k = 10^(base_decimal - quote_decimal) / 2^128\n // priceA = (sqrtPriceA)^2 * k\n // priceB = (sqrtPriceB)^2 * k\n // => price_impact = k * abs ( (sqrtPriceA)^2 - (sqrtPriceB)^2 ) * 100 / (sqrtPriceB)^2 * k\n // => price_impact = abs ( (sqrtPriceA)^2 - (sqrtPriceB)^2 ) * 100 / (sqrtPriceB)^2\n const diff = nextSqrtPrice\n .pow(new BN(2))\n .sub(currentSqrtPrice.pow(new BN(2)))\n .abs();\n\n return new Decimal(diff.toString())\n .div(new Decimal(currentSqrtPrice.pow(new BN(2)).toString()))\n .mul(100)\n .toNumber();\n};\n\n// (sqrtPrice)^2 * 10 ** (base_decimal - quote_decimal) / 2^128\nexport const getPriceFromSqrtPrice = (\n sqrtPrice: BN,\n tokenADecimal: number,\n tokenBDecimal: number\n): string => {\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 .toString();\n\n return price;\n};\n\n// sqrt(price / 10^(tokenADecimal - tokenBDecimal)) * 2^64\nexport const getSqrtPriceFromPrice = (\n price: string,\n tokenADecimal: number,\n tokenBDecimal: number\n): BN => {\n const decimalPrice = new Decimal(price);\n\n const adjustedByDecimals = decimalPrice.div(\n new Decimal(10 ** (tokenADecimal - tokenBDecimal))\n );\n\n const sqrtValue = Decimal.sqrt(adjustedByDecimals);\n\n const sqrtValueQ64 = sqrtValue.mul(Decimal.pow(2, 64));\n\n return new BN(sqrtValueQ64.floor().toFixed());\n};\n\n// fee = totalLiquidity * feePerTokenStore\n// precision: (totalLiquidity * feePerTokenStore) >> 128\nexport const getUnClaimReward = (\n poolState: PoolState,\n positionState: PositionState\n): {\n feeTokenA: BN;\n feeTokenB: BN;\n rewards: BN[];\n} => {\n const totalPositionLiquidity = positionState.unlockedLiquidity\n .add(positionState.vestedLiquidity)\n .add(positionState.permanentLockedLiquidity);\n\n const feeAPerTokenStored = new BN(\n Buffer.from(poolState.feeAPerLiquidity).reverse()\n ).sub(new BN(Buffer.from(positionState.feeAPerTokenCheckpoint).reverse()));\n\n const feeBPerTokenStored = new BN(\n Buffer.from(poolState.feeBPerLiquidity).reverse()\n ).sub(new BN(Buffer.from(positionState.feeBPerTokenCheckpoint).reverse()));\n\n const feeA = totalPositionLiquidity\n .mul(feeAPerTokenStored)\n .shrn(LIQUIDITY_SCALE);\n const feeB = totalPositionLiquidity\n .mul(feeBPerTokenStored)\n .shrn(LIQUIDITY_SCALE);\n\n return {\n feeTokenA: positionState.feeAPending.add(feeA),\n feeTokenB: positionState.feeBPending.add(feeB),\n rewards:\n positionState.rewardInfos.length > 0\n ? positionState.rewardInfos.map((item) => item.rewardPendings)\n : [],\n };\n};\n","import { GetProgramAccountsFilter, PublicKey } from \"@solana/web3.js\";\n\nexport const positionByPoolFilter = (\n pool: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: pool.toBase58(),\n offset: 8,\n },\n };\n};\n\nexport const vestingByPositionFilter = (\n position: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: position.toBase58(),\n offset: 8,\n },\n };\n};\n","import { BN } from \"@coral-xyz/anchor\";\nimport Decimal from \"decimal.js\";\n\n// a = L * (1/s - 1/pb)\n// b = L * (s - pa)\n// b/a = (s - pa) / (1/s - 1/pb)\n// With: x = 1 / pb and y = b/a\n// => s ^ 2 + s * (-pa + x * y) - y = 0\n// s = [(pa - xy) + √((xy - pa)² + 4y)]/2\nexport function calculateInitSqrtPrice(\n tokenAAmount: BN,\n tokenBAmount: BN,\n minSqrtPrice: BN,\n maxSqrtPrice: BN\n): BN {\n if (tokenAAmount.isZero() || tokenBAmount.isZero()) {\n throw new Error(\"Amount cannot be zero\");\n }\n\n const amountADecimal = new Decimal(tokenAAmount.toString());\n const amountBDecimal = new Decimal(tokenBAmount.toString());\n const minSqrtPriceDecimal = new Decimal(minSqrtPrice.toString()).div(\n Decimal.pow(2, 64)\n );\n const maxSqrtPriceDecimal = new Decimal(maxSqrtPrice.toString()).div(\n Decimal.pow(2, 64)\n );\n\n const x = new Decimal(1).div(maxSqrtPriceDecimal);\n const y = amountBDecimal.div(amountADecimal);\n const xy = x.mul(y);\n\n const paMinusXY = minSqrtPriceDecimal.sub(xy);\n const xyMinusPa = xy.sub(minSqrtPriceDecimal);\n\n const fourY = new Decimal(4).mul(y);\n\n const discriminant = xyMinusPa.mul(xyMinusPa).add(fourY);\n\n // sqrt_discriminant = √discriminant\n const sqrtDiscriminant = discriminant.sqrt();\n const result = paMinusXY\n .add(sqrtDiscriminant)\n .div(new Decimal(2))\n .mul(Decimal.pow(2, 64));\n\n return new BN(result.floor().toFixed());\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport {\n calculateFee,\n getEpochFee,\n getTransferFeeConfig,\n MAX_FEE_BASIS_POINTS,\n Mint,\n TransferFee,\n} from \"@solana/spl-token\";\n\ninterface TransferFeeIncludedAmount {\n amount: BN;\n transferFee: BN;\n}\n\nfunction calculatePreFeeAmount(transferFee: TransferFee, postFeeAmount: BN) {\n if (postFeeAmount.isZero()) {\n return new BN(0);\n }\n\n if (transferFee.transferFeeBasisPoints === 0) {\n return postFeeAmount;\n }\n\n const maximumFee = new BN(transferFee.maximumFee.toString());\n\n if (transferFee.transferFeeBasisPoints === MAX_FEE_BASIS_POINTS) {\n return postFeeAmount.add(maximumFee);\n }\n\n const ONE_IN_BASIS_POINTS = new BN(MAX_FEE_BASIS_POINTS);\n const numerator = postFeeAmount.mul(ONE_IN_BASIS_POINTS);\n const denominator = ONE_IN_BASIS_POINTS.sub(\n new BN(transferFee.transferFeeBasisPoints)\n );\n\n const rawPreFeeAmount = numerator\n .add(denominator)\n .sub(new BN(1))\n .div(denominator);\n\n if (rawPreFeeAmount.sub(postFeeAmount).gte(maximumFee)) {\n return postFeeAmount.add(maximumFee);\n }\n\n return rawPreFeeAmount;\n}\n\nfunction calculateInverseFee(transferFee: TransferFee, postFeeAmount: BN) {\n const preFeeAmount = calculatePreFeeAmount(transferFee, postFeeAmount);\n return new BN(\n calculateFee(transferFee, BigInt(preFeeAmount.toString())).toString()\n );\n}\n\nexport function calculateTransferFeeIncludedAmount(\n transferFeeExcludedAmount: BN,\n mint: Mint,\n currentEpoch: number\n): TransferFeeIncludedAmount {\n if (transferFeeExcludedAmount.isZero()) {\n return {\n amount: new BN(0),\n transferFee: new BN(0),\n };\n }\n\n const transferFeeConfig = getTransferFeeConfig(mint);\n\n if (transferFeeConfig === null) {\n return {\n amount: transferFeeExcludedAmount,\n transferFee: new BN(0),\n };\n }\n\n const epochFee = getEpochFee(transferFeeConfig, BigInt(currentEpoch));\n\n const transferFee =\n epochFee.transferFeeBasisPoints == MAX_FEE_BASIS_POINTS\n ? new BN(epochFee.maximumFee.toString())\n : calculateInverseFee(epochFee, transferFeeExcludedAmount);\n\n const transferFeeIncludedAmount = transferFeeExcludedAmount.add(transferFee);\n\n return {\n amount: transferFeeIncludedAmount,\n transferFee,\n };\n}\n\ninterface TransferFeeExcludedAmount {\n amount: BN;\n transferFee: BN;\n}\n\nexport function calculateTransferFeeExcludedAmount(\n transferFeeIncludedAmount: BN,\n mint: Mint,\n currentEpoch: number\n): TransferFeeExcludedAmount {\n const transferFeeConfig = getTransferFeeConfig(mint);\n if (transferFeeConfig === null) {\n return {\n amount: transferFeeIncludedAmount,\n transferFee: new BN(0),\n };\n }\n\n const transferFeeIncludedAmountN = BigInt(\n transferFeeIncludedAmount.toString()\n );\n\n const transferFee = calculateFee(\n getEpochFee(transferFeeConfig, BigInt(currentEpoch)),\n transferFeeIncludedAmountN\n );\n\n const transferFeeExcludedAmount = new BN(\n (transferFeeIncludedAmountN - transferFee).toString()\n );\n\n return {\n amount: transferFeeExcludedAmount,\n transferFee: new BN(transferFee.toString()),\n };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { PositionState, VestingState } from \"../types\";\nimport { min } from \"bn.js\";\n\n/**\n * Checks if a vesting schedule is ready for full release\n * @param vestingData The vesting account data\n * @param currentPoint Current timestamp or slot\n * @returns True if the vesting is complete and all liquidity can be released\n */\nexport function isVestingComplete(\n vestingData: VestingState,\n currentPoint: BN\n): boolean {\n const cliffPoint = vestingData.cliffPoint;\n const periodFrequency = vestingData.periodFrequency;\n const numberOfPeriods = vestingData.numberOfPeriod;\n\n const endPoint = cliffPoint.add(periodFrequency.muln(numberOfPeriods));\n\n return currentPoint.gte(endPoint);\n}\n\n/**\n * Gets the total amount of liquidity in the vesting schedule\n * @param vestingData The vesting account data\n * @returns The total locked liquidity amount\n */\nexport function getTotalLockedLiquidity(vestingData: VestingState): BN {\n return vestingData.cliffUnlockLiquidity.add(\n vestingData.liquidityPerPeriod.mul(new BN(vestingData.numberOfPeriod))\n );\n}\n\n/**\n * Calculates the available liquidity to withdraw based on vesting schedule\n * @param vestingData The vesting account data\n * @param positionData The position account data\n * @param currentPoint Current timestamp or slot\n * @returns The amount of liquidity available to withdraw\n */\nexport function getAvailableVestingLiquidity(\n vestingData: VestingState,\n currentPoint: BN\n): BN {\n const {\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n totalReleasedLiquidity,\n } = vestingData;\n\n if (currentPoint.lt(cliffPoint)) {\n return new BN(0);\n }\n\n if (periodFrequency.isZero()) {\n return cliffUnlockLiquidity;\n }\n\n let passedPeriod = new BN(currentPoint).sub(cliffPoint).div(periodFrequency);\n\n passedPeriod = min(passedPeriod, new BN(numberOfPeriod));\n\n // total unlocked liquidity: cliff + (periods * per_period)\n const unlockedLiquidity = cliffUnlockLiquidity.add(\n passedPeriod.mul(liquidityPerPeriod)\n );\n const availableReleasingLiquidity = unlockedLiquidity.sub(\n totalReleasedLiquidity\n );\n\n return availableReleasingLiquidity;\n}\n","export * from \"./CpAmm\";\nexport * from \"./pda\";\nexport * from \"./types\";\nexport * from \"./constants\";\nexport * from \"./helpers\";\nexport * from \"./types\";\nexport * from \"./math\";\nexport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport CpAmmIDL from \"./idl/cp_amm.json\";\nexport default CpAmmIDL;\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/nguyennguyen/Repos/racoons/cp-amm-sdk/dist/index.js","../src/CpAmm.ts","../src/idl/cp_amm.json","../src/types.ts","../src/pda.ts","../src/constants.ts","../src/helpers/token.ts","../src/helpers/fee.ts","../src/math/feeMath.ts","../src/math/mathUtils.ts","../src/helpers/curve.ts","../src/helpers/computeUnits.ts","../src/helpers/utils.ts","../src/helpers/accountFilters.ts","../src/helpers/priceMath.ts","../src/helpers/token2022.ts","../src/helpers/vestings.ts","../src/index.ts"],"names":["Rounding","ActivationPoint","FeeSchedulerMode","CollectFeeMode","TradeDirection","ActivationType","PublicKey","BN"],"mappings":"AAAA,6KAAI,MAAM,EAAE,IAAI,CAAC,GAAG;AACpB,IAAI,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG;AAClD,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;AAC1C,IAAI,IAAI,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG;AAC/B,MAAM,IAAI;AACV,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE;AAClB,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,MAAM;AACN,IAAI,CAAC;AACL,IAAI,IAAI,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG;AAC9B,MAAM,IAAI;AACV,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACpC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE;AAClB,QAAQ,MAAM,CAAC,CAAC,CAAC;AACjB,MAAM;AACN,IAAI,CAAC;AACL,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;AACpG,IAAI,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,EAAE,CAAC,CAAC;AACJ,CAAC;AACD;AACA;ACtBA,2CAA4B;AAC5B,6CAAmD;AACnD,4FAAsB;ADwBtB;AACA;AE3BA,IAAA,eAAA,EAAA;AAAA,EACE,OAAA,EAAW,6CAAA;AAAA,EACX,QAAA,EAAY;AAAA,IACV,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW,OAAA;AAAA,IACX,IAAA,EAAQ,OAAA;AAAA,IACR,WAAA,EAAe;AAAA,EACjB,CAAA;AAAA,EACA,YAAA,EAAgB;AAAA,IACd;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,MAAA,EAAU,IAAA;AAAA,UACV,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,CAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF,CAAA;AAAA,YACA,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ,OAAA;AAAA,cACR,KAAA,EAAS;AAAA,gBACP,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,CAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,CAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF,CAAA;AAAA,YACA,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ,OAAA;AAAA,cACR,KAAA,EAAS;AAAA,gBACP,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,GAAA;AAAA,gBACA,CAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU,IAAA;AAAA,UACV,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,cAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,cAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,2BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,KAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,uBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,KAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,aAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,8BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qCAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,wBAAA;AAAA,UACR,MAAA,EAAU,IAAA;AAAA,UACV,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,KAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,QACb,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,yBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,0BAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ,CAAC;AAAA,IACX,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,0BAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,0BAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,MAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,qBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,SAAA,EAAa;AAAA,YACX;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,wBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,YAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,4BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,QAAA,EAAY;AAAA,QACd,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAU;AAAA,QACZ,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,iBAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,QAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,MAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,UAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,YAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,SAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EACA,MAAA,EAAU;AAAA,IACR;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,2BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,SAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,yBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,uBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,6BAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EACA,MAAA,EAAU;AAAA,IACR;AAAA,MACE,IAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,YAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,kBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,iBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,gBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,+BAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,iCAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,wBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,kBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,iBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uCAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,yBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,8BAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,+BAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,yBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,0BAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,iBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,eAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,gBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,6BAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EACA,KAAA,EAAS;AAAA,IACP;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,QAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,iBAAA;AAAA,cACA;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,KAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,yBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,uBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,2BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iCAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,uBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kCAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,yBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,uBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,6BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sCAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,MAAA,EAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,0BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,MAAA,EAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,MAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,KAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP;AAAA,kBACE,OAAA,EAAW;AAAA,oBACT,IAAA,EAAQ;AAAA,kBACV;AAAA,gBACF,CAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,MAAA,EAAU;AAAA,gBACR,OAAA,EAAW;AAAA,kBACT,IAAA,EAAQ;AAAA,gBACV;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,KAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,mCAAA;AAAA,QACA,0DAAA;AAAA,QACA,4DAAA;AAAA,QACA,yDAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,mEAAA;AAAA,cACA,qEAAA;AAAA,cACA;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,8EAAA;AAAA,cACA,uEAAA;AAAA,cACA,8BAAA;AAAA,cACA;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,KAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,UAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,4BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP;AAAA,kBACE,OAAA,EAAW;AAAA,oBACT,IAAA,EAAQ;AAAA,kBACV;AAAA,gBACF,CAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,MAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,2BAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,yBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gDAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,8EAAA;AAAA,cACA;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,MACF,CAAA;AAAA,MACA,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,6BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,uBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,SAAA;AAAA,MACR,aAAA,EAAiB,UAAA;AAAA,MACjB,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,KAAA,EAAS;AAAA,gBACP,MAAA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN,MAAA,EAAU;AAAA,YACZ;AAAA,UACF,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AF6BA;AACA;AClpNA;AAEE;AAGA;AAAA,yCAEK;ADgpNP;AACA;AGrpNO,IAAK,SAAA,kBAAL,CAAA,CAAKA,SAAAA,EAAAA,GAAL;AACL,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,IAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,MAAA,EAAA,EAAA,CAAA,EAAA,EAAA,MAAA;AAFU,EAAA,OAAAA,SAAAA;AAAA,CAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,gBAAA,kBAAL,CAAA,CAAKC,gBAAAA,EAAAA,GAAL;AACL,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,WAAA,EAAA,EAAA,CAAA,EAAA,EAAA,WAAA;AACA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,MAAA,EAAA,EAAA,CAAA,EAAA,EAAA,MAAA;AAFU,EAAA,OAAAA,gBAAAA;AAAA,CAAA,CAAA,CAAA,gBAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,iBAAA,kBAAL,CAAA,CAAKC,iBAAAA,EAAAA,GAAL;AACL,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,QAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,aAAA,EAAA,EAAA,CAAA,EAAA,EAAA,aAAA;AAFU,EAAA,OAAAA,iBAAAA;AAAA,CAAA,CAAA,CAAA,iBAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,eAAA,kBAAL,CAAA,CAAKC,eAAAA,EAAAA,GAAL;AACL,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,WAAA,EAAA,EAAA,CAAA,EAAA,EAAA,WAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,OAAA,EAAA,EAAA,CAAA,EAAA,EAAA,OAAA;AAFU,EAAA,OAAAA,eAAAA;AAAA,CAAA,CAAA,CAAA,eAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,eAAA,kBAAL,CAAA,CAAKC,eAAAA,EAAAA,GAAL;AACL,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,MAAA,EAAA,EAAA,CAAA,EAAA,EAAA,MAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,MAAA,EAAA,EAAA,CAAA,EAAA,EAAA,MAAA;AAFU,EAAA,OAAAA,eAAAA;AAAA,CAAA,CAAA,CAAA,eAAA,GAAA,CAAA,CAAA,CAAA;AAKL,IAAK,eAAA,kBAAL,CAAA,CAAKC,eAAAA,EAAAA,GAAL;AACL,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,MAAA,EAAA,EAAA,CAAA,EAAA,EAAA,MAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,WAAA,EAAA,EAAA,CAAA,EAAA,EAAA,WAAA;AAFU,EAAA,OAAAA,eAAAA;AAAA,CAAA,CAAA,CAAA,eAAA,GAAA,CAAA,CAAA,CAAA;AH2pNZ;AACA;AI9rNA;AJgsNA;AACA;AKjsNA;AACA;AAEO,IAAM,kBAAA,EAAoB,IAAI,sBAAA;AAAA,EACnC;AACF,CAAA;AAEO,IAAM,gBAAA,EAAkB,GAAA;AACxB,IAAM,aAAA,EAAe,EAAA;AACrB,IAAM,gBAAA,EAAkB,GAAA;AACxB,IAAM,kBAAA,EAAoB,GAAA;AAC1B,IAAM,gBAAA,EAAkB,GAAA;AAExB,IAAM,eAAA,EAAiB,IAAI,eAAA,CAAG,YAAY,CAAA;AAC1C,IAAM,eAAA,EAAiB,IAAI,eAAA,CAAG,+BAA+B,CAAA;AAC7D,IAAM,cAAA,EAAgB,GAAA;AACtB,IAAM,cAAA,EAAgB,GAAA;AAEtB,IAAM,kCAAA,EAAoC,EAAA;AAC1C,IAAM,iCAAA,EAAmC,GAAA;AACzC,IAAM,qCAAA,EAAuC,GAAA;AAC7C,IAAM,qBAAA,EAAuB,CAAA;AAE7B,IAAM,0BAAA,EAA4B,IAAI,eAAA,CAAG,kBAAkB,CAAA;AAC3D,IAAM,6BAAA,EAA+B,IAAA;AL8rN5C;AACA;AIltNO,SAAS,WAAA,CAAY,IAAA,EAAiB,IAAA,EAAiB;AAC5D,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,CAAA;AAC3B,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,CAAA;AAE3B,EAAA,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,IAAI,EAAA,IAAM,CAAA,EAAG;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,YAAA,CAAa,IAAA,EAAiB,IAAA,EAAiB;AAC7D,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,CAAA;AAC3B,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,CAAA;AAE3B,EAAA,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,IAAI,EAAA,IAAM,CAAA,EAAG;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,mBAAA,CAAA,EAAiC;AAC/C,EAAA,OAAOC,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AACO,SAAS,mBAAA,CAAoB,KAAA,EAAsB;AACxD,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,CAAM,WAAA,CAAY,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC1D;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,iBAAA,CACd,MAAA,EACA,UAAA,EACA,UAAA,EACW;AACX,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf;AAAA,MACE,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAAA,MAClB,MAAA,CAAO,QAAA,CAAS,CAAA;AAAA,MAChB,WAAA,CAAY,UAAA,EAAY,UAAU,CAAA;AAAA,MAClC,YAAA,CAAa,UAAA,EAAY,UAAU;AAAA,IACrC,CAAA;AAAA,IACA;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,qBAAA,CAAsB,WAAA,EAAmC;AACvE,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,EAAG,WAAA,CAAY,QAAA,CAAS,CAAC,CAAA;AAAA,IAChD;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,uBAAA,CACd,SAAA,EACA,IAAA,EACW;AACX,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAAG,SAAA,CAAU,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAAA,IAClE;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,wBAAA,CACd,IAAA,EACA,WAAA,EACW;AACX,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAC,WAAW,CAAC,CAAC,CAAA;AAAA,IACzE;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,6BAAA,CACd,UAAA,EACA,UAAA,EACW;AACX,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf;AAAA,MACE,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAAA,MACnB,WAAA,CAAY,UAAA,EAAY,UAAU,CAAA;AAAA,MAClC,YAAA,CAAa,UAAA,EAAY,UAAU;AAAA,IACrC,CAAA;AAAA,IACA;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,uBAAA,CAAwB,SAAA,EAAiC;AACvE,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAAG,SAAA,CAAU,QAAA,CAAS,CAAC,CAAA;AAAA,IACjD;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,6BAAA,CAA8B,QAAA,EAAgC;AAC5E,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAAG,QAAA,CAAS,QAAA,CAAS,CAAC,CAAA;AAAA,IAChD;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AAEO,SAAS,wBAAA,CACd,eAAA,EACW;AACX,EAAA,OAAOA,iBAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,sBAAsB,CAAA,EAAG,eAAA,CAAgB,QAAA,CAAS,CAAC,CAAA;AAAA,IAChE;AAAA,EACF,CAAA,CAAE,CAAC,CAAA;AACL;AJyrNA;AACA;AM9yNA,+DAAqB;AACrB;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AAIE;AACA;AAAA;AAGK,SAAS,eAAA,CAAgB,IAAA,EAAyB;AACvD,EAAA,OAAO,KAAA,GAAQ,EAAA,EAAI,2BAAA,EAAmB,+BAAA;AACxC;AACO,IAAM,iBAAA,EAAmB,CAC9B,UAAA,EACA,IAAA,EAAA,GACoB,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA;AACpB,EAAA,OAAA,CAAQ,MAAM,+BAAA,UAAQ,EAAY,IAAI,CAAA,CAAA,CAAG,QAAA;AAC3C,CAAA,CAAA;AAEO,IAAM,0BAAA,EAA4B,CACvC,EAAA,EACA,EAAA,EACA,EAAA,EAAA,GAImE,EAAA,EAAA,GAAA,OAAA,CAAA,IAAA,EAAA,CANnE,EAAA,EACA,EAAA,EACA,EAAA,EAImE,GAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CANnE,UAAA,EACA,SAAA,EACA,KAAA,EACA,MAAA,EAAmB,KAAA,EACnB,mBAAA,EAAqB,IAAA,EACrB,YAAA,EACmE;AACnE,EAAA,MAAM,UAAA,EAAY,qDAAA;AAAA,IAChB,SAAA;AAAA,IACA,KAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,EACF,CAAA;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,kCAAA,UAAW,EAAY,SAAS,CAAA;AACtC,IAAA,OAAO,EAAE,SAAA,EAAW,SAAA,EAAW,EAAA,EAAI,KAAA,EAAU,CAAA;AAAA,EAC/C,EAAA,MAAA,CAAS,CAAA,EAAG;AACV,IAAA,GAAA,CACE,EAAA,WAAa,oCAAA,GACb,EAAA,WAAa,uCAAA,EACb;AACA,MAAA,MAAM,GAAA,EAAK,yEAAA;AAAA,QACT,KAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,MACF,CAAA;AAEA,MAAA,OAAO,EAAE,SAAA,EAAW,SAAA,EAAW,GAAG,CAAA;AAAA,IACpC,EAAA,KAAO;AAEL,MAAA,OAAA,CAAQ,KAAA,CAAM,kCAAA,EAAoC,CAAC,CAAA;AACnD,MAAA,MAAM,CAAA;AAAA,IACR;AAAA,EACF;AACF,CAAA,CAAA;AAEO,IAAM,mBAAA,EAAqB,CAChC,IAAA,EACA,EAAA,EACA,MAAA,EAAA,GAC6B;AAC7B,EAAA,OAAO;AAAA,IACL,qBAAA,CAAc,QAAA,CAAS;AAAA,MACrB,UAAA,EAAY,IAAA;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,QAAA,EAAU;AAAA,IACZ,CAAC,CAAA;AAAA,IACD,IAAI,mCAAA,CAAuB;AAAA,MACzB,IAAA,EAAM;AAAA,QACJ;AAAA,UACE,MAAA,EAAQ,EAAA;AAAA,UACR,QAAA,EAAU,KAAA;AAAA,UACV,UAAA,EAAY;AAAA,QACd;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAI,UAAA,CAAW,CAAC,EAAE,CAAC,CAAC,CAAA;AAAA,MACtC,SAAA,EAAW;AAAA,IACb,CAAC;AAAA,EACH,CAAA;AACF,CAAA;AAEO,IAAM,qBAAA,EAAuB,CAClC,EAAA,EAAA,GAGG,EAAA,EAAA,GAAA,OAAA,CAAA,IAAA,EAAA,CAHH,EAAA,EAGG,GAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAHH,KAAA,EACA,SAAA,EAAsB,KAAA,EACtB,mBAAA,EAAqB,IAAA,EAClB;AACH,EAAA,MAAM,eAAA,EAAiB,qDAAA;AAAA,IACrB,qBAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,EACF,CAAA;AACA,EAAA,GAAA,CAAI,cAAA,EAAgB;AAClB,IAAA,MAAM,4BAAA,EAA8B,qDAAA;AAAA,MAClC,cAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAC,CAAA;AAAA,MACD;AAAA,IACF,CAAA;AACA,IAAA,OAAO,2BAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT,CAAA,CAAA;AAEA,SAAsB,4BAAA,CACpB,UAAA,EACA,IAAA,EAMA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA;AACA,IAAA,MAAM,QAAA,EAAsC;AAAA,MAC1C;AAAA,QACE,MAAA,EAAQ;AAAA,UACN,MAAA,EAAQ,EAAA;AAAA,UACR,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS;AAAA,QACvB;AAAA,MACF,CAAA;AAAA,MACA;AAAA,QACE,MAAA,EAAQ;AAAA,UACN,MAAA,EAAQ,EAAA;AAAA,UACR,KAAA,EAAO,WAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAC;AAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,iBAAA,EAAmB,MAAM,UAAA,CAAW,kBAAA;AAAA,MACxC,+BAAA;AAAA,MACA;AAAA,QACE;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,uBAAA,EAGD,CAAC,CAAA;AACN,IAAA,IAAA,CAAA,MAAW,EAAE,OAAA,EAAS,OAAO,EAAA,GAAK,gBAAA,EAAkB;AAClD,MAAA,MAAM,iBAAA,EAAmB,uBAAA,CAAc,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAC1D,MAAA,sBAAA,CAAuB,IAAA,CAAK;AAAA,QAC1B,WAAA,EAAa,gBAAA,CAAiB,IAAA;AAAA,QAC9B,kBAAA,EAAoB;AAAA,MACtB,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,sBAAA;AAAA,EACT,CAAA,CAAA;AAAA;AAEA,SAAsB,+BAAA,CACpB,UAAA,EACA,IAAA,EAMA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA;AACA,IAAA,MAAM,cAAA,EAAgB,MAAM,UAAA,CAAW,uBAAA,CAAwB,IAAA,EAAM;AAAA,MACnE,SAAA,EAAW;AAAA,IACb,CAAC,CAAA;AAED,IAAA,MAAM,uBAAA,EAGD,CAAC,CAAA;AACN,IAAA,IAAA,CAAA,MAAW,EAAE,OAAA,EAAS,OAAO,EAAA,GAAK,aAAA,CAAc,KAAA,EAAO;AACrD,MAAA,MAAM,iBAAA,EAAmB,uBAAA,CAAc,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAC1D,MAAA,GAAA,CAAI,gBAAA,CAAiB,MAAA,CAAO,QAAA,CAAS,EAAA,IAAM,GAAA,EAAK;AAC9C,QAAA,sBAAA,CAAuB,IAAA,CAAK;AAAA,UAC1B,WAAA,EAAa,gBAAA,CAAiB,IAAA;AAAA,UAC9B,kBAAA,EAAoB;AAAA,QACtB,CAAC,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAO,sBAAA;AAAA,EACT,CAAA,CAAA;AAAA;ANyvNA;AACA;AO57NA;AP87NA;AACA;AQ/7NA;AAGA,IAAM,gBAAA,EAAkB,IAAIC,eAAAA,CAAG,MAAO,CAAA;AAE/B,IAAM,IAAA,EAAM,IAAIA,eAAAA,CAAG,CAAC,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAC9C,IAAM,IAAA,EAAM,IAAIA,eAAAA,CAAG,CAAC,CAAA,CAAE,GAAA,CAAI,IAAIA,eAAAA,CAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAA;AAE7C,SAAS,GAAA,CAAI,IAAA,EAAU,GAAA,EAAa;AACzC,EAAA,IAAI,OAAA,EAAS,GAAA,CAAI,KAAA,CAAM,CAAA;AAEvB,EAAA,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,CAAA,EAAG;AAChB,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAA,EAAM,OAAA,EAAS,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,GAAA;AAE3B,EAAA,GAAA,CAAI,GAAA,CAAI,EAAA,CAAG,eAAe,CAAA,EAAG;AAC3B,IAAA,OAAO,IAAIA,eAAAA,CAAG,CAAC,CAAA;AAAA,EACjB;AAEA,EAAA,IAAI,YAAA,EAAc,IAAA;AAClB,EAAA,IAAI,OAAA,EAAS,GAAA;AAEb,EAAA,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,EAAG;AAC3B,IAAA,YAAA,EAAc,GAAA,CAAI,GAAA,CAAI,WAAW,CAAA;AACjC,IAAA,OAAA,EAAS,CAAC,MAAA;AAAA,EACZ;AAEA,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AAClC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AAClC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AAClC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AAClC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,EAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACnC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,EAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACnC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,EAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACnC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,GAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACnC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,GAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACpC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,GAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACpC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,IAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACpC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,IAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACpC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,IAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACrC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,IAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACrC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,KAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACrC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,KAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACrC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,KAAO,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACtC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,MAAO,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACtC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,YAAA,EAAc,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAE5D,EAAA,GAAA,CAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,MAAO,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG;AACtC,IAAA,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG;AACnB,IAAA,OAAO,IAAIA,eAAAA,CAAG,CAAC,CAAA;AAAA,EACjB;AAEA,EAAA,GAAA,CAAI,MAAA,EAAQ;AACV,IAAA,OAAA,EAAS,GAAA,CAAI,GAAA,CAAI,MAAM,CAAA;AAAA,EACzB;AAEA,EAAA,OAAO,MAAA;AACT;ARg5NA;AACA;ASviOA;AACA,6FAAoB;AAGb,SAAS,MAAA,CAAO,CAAA,EAAO,CAAA,EAAO,WAAA,EAAiB,QAAA,EAAwB;AAC5E,EAAA,MAAM,EAAE,GAAA,EAAK,IAAI,EAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,MAAA,CAAO,WAAW,CAAA;AAEhD,EAAA,GAAA,CAAI,SAAA,GAAA,WAAA,GAA2B,CAAC,GAAA,CAAI,MAAA,CAAO,CAAA,EAAG;AAC5C,IAAA,OAAO,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,YAAA,CAAa,GAAA,EAAS,aAAA,EAAiC;AACrE,EAAA,OAAO,IAAI,wBAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,CAAC,CAAA,CAC9B,GAAA,CAAI,mBAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,EAAE,CAAC,CAAA,CACtB,eAAA,CAAgB,aAAa,CAAA;AAClC;AAEO,SAAS,YAAA,CAAa,GAAA,EAAkB;AAC7C,EAAA,OAAO,IAAIA,eAAAA,CAAG,GAAA,CAAI,GAAA,CAAI,mBAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AAC7D;ATkiOA;AACA;AUxjOA;AASO,SAAS,gBAAA,CACd,MAAA,EACA,SAAA,EACA,SAAA,EACA,IAAA,EACI;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,GAAA,CAAI,IAAA,EAAM;AACR,IAAA,MAAM,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA;AACpC,IAAA,MAAM,YAAA,EAAc,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA;AACzC,IAAA,MAAM,UAAA,EAAY,SAAA,CAAU,GAAA,CAAI,SAAS,CAAA;AACzC,IAAA,OAAA,EAAS,SAAA,CAAU,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,WAAW,CAAA;AAAA,EACpE,EAAA,KAAO;AACL,IAAA,MAAM,SAAA,EAAW,MAAA,CAAO,IAAA,CAAK,aAAA,EAAe,CAAC,CAAA,CAAE,GAAA,CAAI,SAAS,CAAA;AAC5D,IAAA,OAAA,EAAS,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,4BAAA,CACd,OAAA,EACA,cAAA,EACA,cAAA,EACI;AACJ,EAAA,MAAM,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,CAAE,GAAA,CAAI,cAAc,CAAA;AAC9D,EAAA,MAAM,YAAA,EAAc,cAAA,CAAe,GAAA,CAAI,cAAc,CAAA;AAErD,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAChC;AAIO,SAAS,4BAAA,CACd,OAAA,EACA,cAAA,EACA,cAAA,EACI;AACJ,EAAA,MAAM,YAAA,EAAc,cAAA,CAAe,GAAA,CAAI,cAAc,CAAA;AACrD,EAAA,MAAM,QAAA,EAAU,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAChC,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAChC;AAIO,SAAS,4BAAA,CACd,SAAA,EACA,gBAAA,EACA,YAAA,EACA,QAAA,EACI;AAEJ,EAAA,MAAM,QAAA,EAAU,SAAA,CAAU,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,gBAAgB,CAAC,CAAA;AAEhE,EAAA,MAAM,YAAA,EAAc,gBAAA,CAAiB,GAAA,CAAI,YAAY,CAAA;AAErD,EAAA,GAAA,CAAI,SAAA,GAAA,UAAA,EAAyB;AAC3B,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,WAAW,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAChC;AAIO,SAAS,4BAAA,CACd,SAAA,EACA,gBAAA,EACA,YAAA,EACA,QAAA,EACI;AACJ,EAAA,MAAM,IAAA,EAAM,IAAIA,eAAAA,CAAG,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC9B,EAAA,MAAM,WAAA,EAAa,gBAAA,CAAiB,GAAA,CAAI,YAAY,CAAA;AACpD,EAAA,MAAM,OAAA,EAAS,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA;AACvC,EAAA,GAAA,CAAI,SAAA,GAAA,UAAA,EAAyB;AAC3B,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AACxB;AVsgOA;AACA;AOvkOA;AAKO,SAAS,mBAAA,CACd,gBAAA,EACA,iBAAA,EACA,MAAA,EACA,eAAA,EACI;AACJ,EAAA,IAAI,YAAA;AACJ,EAAA,GAAA,CAAI,iBAAA,GAAA,cAAA,EAA6C;AAC/C,IAAA,aAAA,EAAe,iBAAA,CAAkB,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,eAAe,CAAC,CAAA;AAAA,EAClE,EAAA,KAAO;AACL,IAAA,MAAM,IAAA,EAAM,eAAA,CAAgB,IAAA,CAAK,YAAY,CAAA,CAAE,GAAA,CAAI,IAAIA,eAAAA,CAAG,eAAe,CAAC,CAAA;AAC1E,IAAA,MAAM,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AACxB,IAAA,MAAM,OAAA,EAAS,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AAC/B,IAAA,aAAA,EAAe,iBAAA,CAAkB,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAAA,EAChE;AAEA,EAAA,OAAO,YAAA;AACT;AAUO,SAAS,sBAAA,CACd,qBAAA,EACA,OAAA,EACA,kBAAA,EACI;AACJ,EAAA,GAAA,CAAI,kBAAA,CAAmB,MAAA,CAAO,CAAA,EAAG;AAC/B,IAAA,OAAO,IAAIA,eAAAA,CAAG,CAAC,CAAA;AAAA,EACjB;AACA,EAAA,MAAM,aAAA,EAAe,qBAAA,CAClB,GAAA,CAAI,IAAIA,eAAAA,CAAG,OAAO,CAAC,CAAA,CACnB,GAAA,CAAI,IAAIA,eAAAA,CAAG,CAAC,CAAC,CAAA;AAChB,EAAA,MAAM,KAAA,EAAO,kBAAA,CAAmB,GAAA,CAAI,YAAY,CAAA;AAEhD,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAIA,eAAAA,CAAG,WAAc,CAAC,CAAA,CAAE,GAAA,CAAI,IAAIA,eAAAA,CAAG,IAAe,CAAC,CAAA;AACrE;AAkBO,SAAS,eAAA,CACd,YAAA,EACA,eAAA,EACA,cAAA,EACA,eAAA,EACA,gBAAA,EACA,iBAAA,EACA,eAAA,EACA,gBAAA,EAKI;AACJ,EAAA,GAAA,CACE,MAAA,CAAO,eAAe,EAAA,GAAK,EAAA,GAC3B,IAAIA,eAAAA,CAAG,YAAY,CAAA,CAAE,EAAA,CAAG,eAAe,CAAA,EACvC;AACA,IAAA,OAAO,iBAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,EAASA,UAAAA,CAAG,GAAA;AAAA,IAChB,IAAIA,eAAAA,CAAG,cAAc,CAAA;AAAA,IACrB,IAAIA,eAAAA,CAAG,YAAY,CAAA,CAAE,GAAA,CAAI,eAAe,CAAA,CAAE,GAAA,CAAI,eAAe;AAAA,EAC/D,CAAA;AAEA,EAAA,IAAI,aAAA,EAAe,mBAAA;AAAA,IACjB,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,EACF,CAAA;AAEA,EAAA,GAAA,CAAI,gBAAA,EAAkB;AACpB,IAAA,MAAM,EAAE,qBAAA,EAAuB,OAAA,EAAS,mBAAmB,EAAA,EACzD,gBAAA;AACF,IAAA,MAAM,qBAAA,EAAuB,sBAAA;AAAA,MAC3B,qBAAA;AAAA,MACA,IAAIA,eAAAA,CAAG,OAAO,CAAA;AAAA,MACd,IAAIA,eAAAA,CAAG,kBAAkB;AAAA,IAC3B,CAAA;AACA,IAAA,aAAA,EAAe,YAAA,CAAa,GAAA,CAAI,oBAAoB,CAAA;AAAA,EACtD;AACA,EAAA,OAAO,YAAA,CAAa,EAAA,CAAG,IAAIA,eAAAA,CAAG,iBAAiB,CAAC,EAAA,EAC5C,IAAIA,eAAAA,CAAG,iBAAiB,EAAA,EACxB,YAAA;AACN;AASA,SAAS,UAAA,CAAW,cAAA,EAAgC,IAAA,EAAwB;AAC1E,EAAA,MAAM,WAAA,EAAa,KAAA,GAAQ,eAAA,IAAA,aAAA;AAC3B,EAAA,MAAM,aAAA,EAAe,KAAA,GAAQ,eAAA,IAAA,iBAAA;AAE7B,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA;AAAA,EACF,CAAA;AACF;AASA,SAAS,mBAAA,CAAoB,MAAA,EAAY,iBAAA,EAAuB;AAC9D,EAAA,OAAO,MAAA;AAAA,IACL,MAAA;AAAA,IACA,iBAAA;AAAA,IACA,IAAIA,eAAAA,CAAG,eAAe,CAAA;AAAA,IAAA;AAAA,EAExB,CAAA;AACF;AAcO,SAAS,aAAA,CACd,QAAA,EACA,SAAA,EACA,SAAA,EACA,iBAAA,EACA,IAAA,EACA,cAAA,EACoD;AACpD,EAAA,IAAI,QAAA,EAAU,UAAA,CAAW,cAAA,EAAgB,CAAC,IAAI,CAAA;AAC9C,EAAA,IAAI,eAAA,EAAiB,QAAA;AACrB,EAAA,IAAI,SAAA,EAAW,IAAIA,eAAAA,CAAG,CAAC,CAAA;AAEvB,EAAA,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY;AACtB,IAAA,SAAA,EAAW,mBAAA,CAAoB,QAAA,EAAU,iBAAiB,CAAA;AAC1D,IAAA,eAAA,EAAiB,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA;AAAA,EACxC;AAEA,EAAA,MAAM,cAAA,EAAgB,gBAAA;AAAA,IACpB,cAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,EAAY,KAAA,EACd,4BAAA;AAAA,IACE,SAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IAAA;AAAA,EAEF,EAAA,EACA,4BAAA;AAAA,IACE,SAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IAAA;AAAA,EAEF,CAAA;AAGJ,EAAA,MAAM,UAAA,EAAY,OAAA,CAAQ,WAAA,EACtB,UAAA,EAAA,CACE,SAAA,EAAW,mBAAA,CAAoB,SAAA,EAAW,iBAAiB,CAAA,EAC7D,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,CAAA;AAE1B,EAAA,OAAO,EAAE,SAAA,EAAW,QAAA,EAAU,cAAc,CAAA;AAC9C;AASO,SAAS,iBAAA,CAAkB,GAAA,EAAiB;AACjD,EAAA,OAAO,IAAIA,eAAAA,CAAG,IAAA,EAAM,eAAe,CAAA,CAAE,IAAA,CAAK,eAAe,CAAA;AAC3D;AAQO,SAAS,iBAAA,CAAkB,YAAA,EAA0B;AAC1D,EAAA,OAAO,YAAA,CACJ,IAAA,CAAK,eAAe,CAAA,CACpB,GAAA,CAAI,IAAIA,eAAAA,CAAG,eAAe,CAAC,CAAA,CAC3B,QAAA,CAAS,CAAA;AACd;AAYO,SAAS,gBAAA,CACd,aAAA,EACA,aAAA,EACA,gBAAA,EACA,cAAA,EACA,aAAA,EACS;AACT,EAAA,GAAA,CAAI,cAAA,GAAiB,aAAA,EAAe;AAClC,IAAA,GAAA,CAAI,eAAA,GAAkB,EAAA,GAAK,cAAA,GAAiB,CAAA,EAAG;AAC7C,MAAA,MAAM,IAAI,KAAA,CAAM,oDAAoD,CAAA;AAAA,IACtE;AAEA,IAAA,OAAO;AAAA,MACL,iBAAA,EAAmB,iBAAA,CAAkB,aAAa,CAAA;AAAA,MAClD,cAAA,EAAgB,CAAA;AAAA,MAChB,eAAA,EAAiB,IAAIA,eAAAA,CAAG,CAAC,CAAA;AAAA,MACzB,eAAA,EAAiB,IAAIA,eAAAA,CAAG,CAAC,CAAA;AAAA,MACzB,gBAAA,EAAkB;AAAA,IACpB,CAAA;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,eAAA,GAAkB,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,KAAA,CAAM,yCAAyC,CAAA;AAAA,EAC3D;AAEA,EAAA,GAAA,CAAI,cAAA,EAAgB,iBAAA,CAAkB,IAAIA,eAAAA,CAAG,iBAAiB,CAAC,CAAA,EAAG;AAChE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,eAAA,EAAkB,aAAa,CAAA,uCAAA,EAA0C,iBAAA;AAAA,QACvE,IAAIA,eAAAA,CAAG,iBAAiB;AAAA,MAC1B,CAAC,CAAA,IAAA;AAAA,IACH,CAAA;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,cAAA,EAAgB,aAAA,EAAe;AACjC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,eAAA,GAAkB,EAAA,GAAK,cAAA,GAAiB,CAAA,EAAG;AAC7C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,EACF;AAEA,EAAA,MAAM,oBAAA,EAAsB,iBAAA,CAAkB,aAAa,CAAA;AAE3D,EAAA,MAAM,oBAAA,EAAsB,iBAAA,CAAkB,aAAa,CAAA;AAE3D,EAAA,MAAM,gBAAA,EAAkB,IAAIA,eAAAA,CAAG,cAAA,EAAgB,cAAc,CAAA;AAE7D,EAAA,IAAI,eAAA;AACJ,EAAA,GAAA,CAAI,iBAAA,GAAA,cAAA,EAA6C;AAC/C,IAAA,MAAM,eAAA,EAAiB,mBAAA,CAAoB,GAAA,CAAI,mBAAmB,CAAA;AAClE,IAAA,gBAAA,EAAkB,cAAA,CAAe,IAAA,CAAK,cAAc,CAAA;AAAA,EACtD,EAAA,KAAO;AACL,IAAA,MAAM,MAAA,EACJ,mBAAA,CAAoB,QAAA,CAAS,EAAA,EAAI,mBAAA,CAAoB,QAAA,CAAS,CAAA;AAChE,IAAA,MAAM,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,EAAA,EAAI,cAAc,CAAA;AACpD,IAAA,gBAAA,EAAkB,IAAIA,eAAAA,CAAG,gBAAA,EAAA,CAAmB,EAAA,EAAI,SAAA,CAAU,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO;AAAA,IACL,iBAAA,EAAmB,mBAAA;AAAA,IACnB,cAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,EACF,CAAA;AACF;AASO,SAAS,mBAAA,CACd,UAAA,EACA,kBAAA,EAA4B,4BAAA,EAChB;AACZ,EAAA,GAAA,CAAI,kBAAA,EAAoB,4BAAA,EAA8B;AACpD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,mBAAA,EAAsB,iBAAiB,CAAA,oCAAA,EAAuC,4BAA4B,CAAA;AAAA,IAAA;AAC5G,EAAA;AAGF,EAAA;AAEA,EAAA;AAA8B,IAAA;AAIjB,EAAA;AAEb,EAAA;AAKA,EAAA;AAEA,EAAA;AAIA,EAAA;AACA,EAAA;AACA,EAAA;AAIA,EAAA;AAEA,EAAA;AAAO,IAAA;AACI,IAAA;AACI,IAAA;AACC,IAAA;AACD,IAAA;AACI,IAAA;AAC2C,IAAA;AACZ,EAAA;AAEpD;AP+4NA;AACA;AWrxOA;AAAA;AAGE;AAEA;AAEA;AACA;AAIK;AAZP,EAAA;AAmBE,EAAA;AAAyB;AAAA;AAAA;AAAA,IAAA;AAIsC,IAAA;AAC1D,EAAA;AAGL,EAAA;AAA4B,IAAA;AACH,MAAA;AACP,MAAA;AACJ;AAAA;AAAA,MAAA;AAGkC,IAAA;AACZ,EAAA;AAGpC,EAAA;AAA0E,IAAA;AAChD,IAAA;AACb,IAAA;AACX,EAAA;AAGF,EAAA;AACE,IAAA;AACA,IAAA;AAAU,MAAA;AACR,QAAA;AACwC,IAAA;AAC1C,EAAA;AAGF,EAAA;AACF;AAUO;AAML,EAAA;AACE,IAAA;AAAS,EAAA;AAGX,EAAA;AAEA,EAAA;AAEA,EAAA;AAAwC,IAAA;AACtC,IAAA;AACA,IAAA;AACA,IAAA;AACC,EAAA;AAGH,EAAA;AACE,IAAA;AAAO,EAAA;AAGT,EAAA;AACA,EAAA;AACE,IAAA;AAAyB,EAAA;AAEzB,IAAA;AAAyB,EAAA;AAG3B,EAAA;AACF;AAWO;AAML,EAAA;AAAoB,IAAA;AAClB,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AAEA,IAAA;AACA,IAAA;AAAO,EAAA;AAGT,EAAA;AACF;AXouOA;AACA;AYh2OA;AAEA;AAWO;AACL,EAAA;AACA,EAAA;AACF;AASO;AACL,EAAA;AACA,EAAA;AACF;AAQO;AAUL,EAAA;AAKA,EAAA;AAIF;AAGO;AAKL,EAAA;AACA,EAAA;AAMA,EAAA;AACF;AAGO;AAKL,EAAA;AAEA,EAAA;AAAwC,IAAA;AACW,EAAA;AAGnD,EAAA;AAEA,EAAA;AAEA,EAAA;AACF;AAIO;AAQL,EAAA;AAIA,EAAA;AAA+B,IAAA;AACmB,EAAA;AAGlD,EAAA;AAA+B,IAAA;AACmB,EAAA;AAGlD,EAAA;AAGA,EAAA;AAIA,EAAA;AAAO,IAAA;AACwC,IAAA;AACA,IAAA;AAItC,EAAA;AAEX;AZ4wOA;AACA;Aa54OO;AAGL,EAAA;AAAO,IAAA;AACG,MAAA;AACe,MAAA;AACb,IAAA;AACV,EAAA;AAEJ;AAEO;AAGL,EAAA;AAAO,IAAA;AACG,MAAA;AACmB,MAAA;AACjB,IAAA;AACV,EAAA;AAEJ;Aby4OA;AACA;Ach6OA;AACA;AAQO;AAML,EAAA;AACE,IAAA;AAAuC,EAAA;AAGzC,EAAA;AACA,EAAA;AACA,EAAA;AAAiE,IAAA;AAC9C,EAAA;AAEnB,EAAA;AAAiE,IAAA;AAC9C,EAAA;AAGnB,EAAA;AACA,EAAA;AACA,EAAA;AAEA,EAAA;AACA,EAAA;AAEA,EAAA;AAEA,EAAA;AAGA,EAAA;AACA,EAAA;AAKA,EAAA;AACF;Ad24OA;AACA;Ae37OA;AACA;AAAA;AACE;AACA;AACA;AACA;AAUF;AACE,EAAA;AACE,IAAA;AAAe,EAAA;AAGjB,EAAA;AACE,IAAA;AAAO,EAAA;AAGT,EAAA;AAEA,EAAA;AACE,IAAA;AAAmC,EAAA;AAGrC,EAAA;AACA,EAAA;AACA,EAAA;AAAwC,IAAA;AACG,EAAA;AAG3C,EAAA;AAKA,EAAA;AACE,IAAA;AAAmC,EAAA;AAGrC,EAAA;AACF;AAEA;AACE,EAAA;AACA,EAAA;AAAW,IAAA;AAC2D,EAAA;AAExE;AAEO;AAKL,EAAA;AACE,IAAA;AAAO,MAAA;AACW,MAAA;AACK,IAAA;AACvB,EAAA;AAGF,EAAA;AAEA,EAAA;AACE,IAAA;AAAO,MAAA;AACG,MAAA;AACa,IAAA;AACvB,EAAA;AAGF,EAAA;AAEA,EAAA;AAKA,EAAA;AAEA,EAAA;AAAO,IAAA;AACG,IAAA;AACR,EAAA;AAEJ;AAOO;AAKL,EAAA;AACA,EAAA;AACE,IAAA;AAAO,MAAA;AACG,MAAA;AACa,IAAA;AACvB,EAAA;AAGF,EAAA;AAAmC,IAAA;AACE,EAAA;AAGrC,EAAA;AAAoB,IAAA;AACiC,IAAA;AACnD,EAAA;AAGF,EAAA;AAAsC,IAAA;AACgB,EAAA;AAGtD,EAAA;AAAO,IAAA;AACG,IAAA;AACkC,EAAA;AAE9C;Af84OA;AACA;AgB7gPA;AAEA;AAQO;AAIL,EAAA;AACA,EAAA;AACA,EAAA;AAEA,EAAA;AAEA,EAAA;AACF;AAOO;AACL,EAAA;AAAwC,IAAA;AAC+B,EAAA;AAEzE;AASO;AAIL,EAAA;AAAM,IAAA;AACJ,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AAGF,EAAA;AACE,IAAA;AAAe,EAAA;AAGjB,EAAA;AACE,IAAA;AAAO,EAAA;AAGT,EAAA;AAEA,EAAA;AAGA,EAAA;AAA+C,IAAA;AACV,EAAA;AAErC,EAAA;AAAsD,IAAA;AACpD,EAAA;AAGF,EAAA;AACF;AhB0+OA;AACA;ACt9OA;AAKO;AAAY,EAAA;AAIf,IAAA;AAAoD,MAAA;AAClD,IAAA;AAEF,IAAA;AAAyC,EAAA;AAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAoBG,IAAA;AACD,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEF,MAAA;AACA,MAAA;AAAM,QAAA;AACkD,QAAA;AACC,MAAA;AACnC,QAAA;AACpB,UAAA;AACyB,UAAA;AACvB,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACF,QAAA;AACA,UAAA;AACyB,UAAA;AACvB,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACF,MAAA;AAEF,MAAA;AACA,MAAA;AAEA,MAAA;AAA4C,IAAA;AAC9C,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAYE,IAAA;AAAO,MAAA;AACL,QAAA;AAC4C,QAAA;AAC9B,QAAA;AACF,MAAA;AACZ,MAAA;AACA,QAAA;AAC4C,QAAA;AAC9B,QAAA;AACF,MAAA;AACZ,IAAA;AACF,EAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAUmC,IAAA;AACjC,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEF,MAAA;AACgB,QAAA;AACZ,QAAA;AACA,QAAA;AACA,MAAA;AAEe,QAAA;AACf,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAUmC,IAAA;AACjC,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEF,MAAA;AAEmB,QAAA;AACf,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAUmC,IAAA;AACjC,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEF,MAAA;AAEmB,QAAA;AACf,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAUmC,IAAA;AACjC,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAEmB,QAAA;AACf,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACc,QAAA;AACd,QAAA;AACc,MAAA;AAEH,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAS0C,IAAA;AACxC,MAAA;AAGA,MAAA;AACE,QAAA;AAAO,MAAA;AAGT,MAAA;AAEmB,QAAA;AACf,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAED,QAAA;AAEG,UAAA;AAAO,YAAA;AACK,YAAA;AACE,YAAA;AACZ,UAAA;AACF,QAAA;AACD,MAAA;AAEU,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAUqC,IAAA;AACnC,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AAEA,MAAA;AAGA,MAAA;AAC8C,QAAA;AAC1C,QAAA;AACoB,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGJ,MAAA;AAGA,MAAA;AACgD,QAAA;AACxB,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEJ,MAAA;AAEA,MAAA;AAA0E,QAAA;AACxE,QAAA;AACoB,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEF,MAAA;AAEA,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAaG,IAAA;AACD,MAAA;AAEA,MAAA;AACA,MAAA;AAEA,MAAA;AAEmB,QAAA;AACf,QAAA;AACiB,QAAA;AACG,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACc,QAAA;AACe,MAAA;AAIjC,MAAA;AAAO,QAAA;AACL,QAAA;AACA,QAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAO6E,IAAA;AAC3E,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AAEA,MAAA;AAAM,QAAA;AACO,QAAA;AACA,QAAA;AACG,MAAA;AACoB,QAAA;AAClC,QAAA;AACa,QAAA;AACA,QAAA;AACb,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACE,QAAA;AAAkB,UAAA;AAChB,UAAA;AACA,UAAA;AAC8B,QAAA;AAGhC,QAAA;AAAiC,MAAA;AAGnC,MAAA;AACE,QAAA;AAAkB,UAAA;AAChB,UAAA;AACA,UAAA;AAC8B,QAAA;AAGhC,QAAA;AAAiC,MAAA;AAEnC,MAAA;AAAgC,QAAA;AAC9B,QAAA;AACA,MAAA;AAGF,MAAA;AAAO,QAAA;AACL,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAeG,IAAA;AACD,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AACA,MAAA;AACE,QAAA;AACA,QAAA;AAA8C,MAAA;AAGhD,MAAA;AACkC,QAAA;AAC9B,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGJ,MAAA;AACA,MAAA;AACA,MAAA;AAEA,MAAA;AACE,QAAA;AAAgC,UAAA;AACX,UAAA;AACP,QAAA;AAEd,QAAA;AAA4D,MAAA;AAE9D,MAAA;AAAO,QAAA;AACL,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AASgE,IAAA;AAC9D,MAAA;AAAuD,QAAA;AACrD,MAAA;AAEF,MAAA;AAEA,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAO0D,IAAA;AACxD,MAAA;AACA,MAAA;AAEA,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOsE,IAAA;AACpE,MAAA;AAA2D,QAAA;AACzD,MAAA;AAEF,MAAA;AAEA,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAQE,IAAA;AACA,MAAA;AAEA,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAQE,IAAA;AACA,MAAA;AAEA,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAWE,IAAA;AACA,MAAA;AAEA,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAYE,IAAA;AACA,MAAA;AAAgD,QAAA;AACrB,MAAA;AAC1B,IAAA;AACH,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAiBE,IAAA;AACA,MAAA;AACA,MAAA;AAAwB,QAAA;AACiB,MAAA;AACzC,IAAA;AACF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAaE,IAAA;AACA,MAAA;AAAmC,QAAA;AACV,QAAA;AACvB,MAAA;AAEF,MAAA;AACE,QAAA;AAAQ,MAAA;AAGV,MAAA;AAA+C,QAAA;AACJ,MAAA;AAG3C,MAAA;AAA4D,QAAA;AAC1D,MAAA;AAEF,MAAA;AAEI,QAAA;AACA,QAAA;AAEA,QAAA;AAAO,UAAA;AACuB,UAAA;AACK,UAAA;AACjC,QAAA;AACF,MAAA;AAKJ,MAAA;AACE,QAAA;AAIA,QAAA;AAIA,QAAA;AAA0C,MAAA;AAG5C,MAAA;AAAO,IAAA;AACT,EAAA;AAAA,EAAA;AAOE,IAAA;AACA,MAAA;AAAyD,QAAA;AACvB,MAAA;AAGlC,MAAA;AAAO,IAAA;AACT,EAAA;AAAA,EAAA;AAGE,IAAA;AAAsD,MAAA;AAC3C,IAAA;AAGX,IAAA;AAAiC,EAAA;AACnC,EAAA;AAGE,IAAA;AAAmD,EAAA;AACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAuBE,IAAA;AAEE,MAAA;AACE,QAAA;AAAO,UAAA;AACM,UAAA;AACH,QAAA;AACV,MAAA;AAKF,MAAA;AACE,QAAA;AACE,UAAA;AAAO,YAAA;AACM,YAAA;AACH,UAAA;AACV,QAAA;AACF,MAAA;AACF,IAAA;AAGF,IAAA;AAAyB,EAAA;AAC3B,EAAA;AAEqD,IAAA;AACnD,MAAA;AACA,MAAA;AAAqB,IAAA;AACvB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AASE,IAAA;AAAM,MAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AAAkC,MAAA;AAChC,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AAAkC,MAAA;AAChC,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AAA+D,EAAA;AACjE;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAeE,IAAA;AAAM,MAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAEF,IAAA;AAAM,MAAA;AACO,MAAA;AACA,MAAA;AACX,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAEF,IAAA;AAAM,MAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAEF,IAAA;AAEA,IAAA;AACA,IAAA;AACE,MAAA;AAAiB,QAAA;AACf,QAAA;AACe,QAAA;AACA,MAAA;AACf,IAAA;AAEJ,IAAA;AACA,IAAA;AAEA,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AAAwE,IAAA;AAG1E,IAAA;AAA0B,MAAA;AACxB,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AAA+C,MAAA;AAC7C,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AACA,IAAA;AACE,MAAA;AAAkB,QAAA;AAChB,QAAA;AACgB,QAAA;AACA,MAAA;AAChB,IAAA;AAGJ,IAAA;AAAyB,MAAA;AACvB,MAAA;AACA,IAAA;AAGF,IAAA;AAAO,MAAA;AACS,MAAA;AACI,MAAA;AACH,MAAA;AACf,MAAA;AACA,MAAA;AACuD,IAAA;AACzD,EAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAaE,IAAA;AAAM,MAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AACI,MAAA;AACE,MAAA;AACe,MAAA;AACA,IAAA;AAIrB,IAAA;AACI,MAAA;AACkB,QAAA;AACd,QAAA;AACA,QAAA;AACA,MAAA;AACF,MAAA;AAEE,QAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AAAA,MAAA;AAEF,IAAA;AAEJ,MAAA;AACkB,QAAA;AACd,QAAA;AACA,QAAA;AACA,MAAA;AACF,MAAA;AAEE,QAAA;AACE,QAAA;AACA,QAAA;AACA,QAAA;AAAA,MAAA;AAEF,IAAA;AAGR,IAAA;AACA,IAAA;AACI,MAAA;AACE,MAAA;AACgB,MAAA;AACA,IAAA;AAItB,IAAA;AAAO,MAAA;AACc,MAAA;AACE,MAAA;AACrB,MAAA;AACA,IAAA;AACF,EAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAgBE,IAAA;AAAM,MAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAEF,IAAA;AAAgB,MAAA;AACd,MAAA;AACA,MAAA;AACA,MAAA;AAAA,IAAA;AAGF,IAAA;AAAgB,MAAA;AACd,MAAA;AACA,MAAA;AACA,MAAA;AAAA,IAAA;AAIF,IAAA;AAAO,MAAA;AACL,MAAA;AAEI,QAAA;AACE,QAAA;AACgB,QAAA;AACA,MAAA;AAElB,MAAA;AAEA,QAAA;AACE,QAAA;AACgB,QAAA;AACA,MAAA;AAElB,IAAA;AACN,EAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AASE,IAAA;AAAM,MAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AACE,MAAA;AAA0D,IAAA;AAG5D,IAAA;AACiB,MAAA;AACX,QAAA;AACE,QAAA;AACW,QAAA;AACA,MAAA;AACX,IAAA;AAIR,IAAA;AAAuB,MAAA;AACrB,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AAAO,EAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAWE,IAAA;AAAM,MAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AACE,MAAA;AAAsC,IAAA;AAGxC,IAAA;AACiB,MAAA;AACX,QAAA;AACE,QAAA;AACW,QAAA;AACA,MAAA;AACX,IAAA;AAIR,IAAA;AACiB,MAAA;AACX,QAAA;AACE,QAAA;AACW,QAAA;AACA,MAAA;AACX,IAAA;AAIR,IAAA;AAAsB,MAAA;AACpB,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AAAkC,MAAA;AAChC,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AAAkC,MAAA;AAChC,MAAA;AACA,MAAA;AACA,IAAA;AAGF,IAAA;AAAuB,MAAA;AACrB,MAAA;AACA,IAAA;AAGF,IAAA;AAAO,MAAA;AACL,MAAA;AACA,IAAA;AACF,EAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAQsD,IAAA;AACpD,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACqC,QAAA;AACrC,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAEA,MAAA;AACE,QAAA;AAEmB,UAAA;AACf,UAAA;AACA,UAAA;AACA,UAAA;AACO,QAAA;AAGX,QAAA;AAAoC,MAAA;AAGtC,MAAA;AACkB,QAAA;AACH,QAAA;AACA,QAAA;AACX,MAAA;AAEe,QAAA;AACf,QAAA;AACA,QAAA;AACiB,QAAA;AACjB,QAAA;AACA,QAAA;AACoB,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACkB,QAAA;AAClB,QAAA;AACA,QAAA;AAC6B,MAAA;AAOjC,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAWG,IAAA;AACD,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEF,MAAA;AACA,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACqC,QAAA;AACrC,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AAGI,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAEA,MAAA;AACE,QAAA;AAEmB,UAAA;AACf,UAAA;AACA,UAAA;AACA,UAAA;AACO,QAAA;AAGX,QAAA;AAAoC,MAAA;AAGtC,MAAA;AAC8B,QAAA;AAC1B,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACW,QAAA;AACA,QAAA;AACX,QAAA;AACA,QAAA;AACA,MAAA;AAEe,QAAA;AACf,QAAA;AACA,QAAA;AACiB,QAAA;AACjB,QAAA;AACoB,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACkB,QAAA;AAClB,QAAA;AACA,QAAA;AAC6B,MAAA;AAOjC,MAAA;AAAyC,IAAA;AAC3C,EAAA;AAAA,EAAA;AAQG,IAAA;AACD,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACqC,QAAA;AACrC,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAEA,MAAA;AACE,QAAA;AAEmB,UAAA;AACf,UAAA;AACA,UAAA;AACA,UAAA;AACO,QAAA;AAGX,QAAA;AAAoC,MAAA;AAGtC,MAAA;AACmC,QAAA;AAC/B,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACW,QAAA;AACA,QAAA;AACX,QAAA;AACA,QAAA;AACA,MAAA;AAEe,QAAA;AACf,QAAA;AACA,QAAA;AACiB,QAAA;AACjB,QAAA;AACoB,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACkB,QAAA;AAClB,QAAA;AACA,QAAA;AAC6B,MAAA;AAOjC,MAAA;AAAyC,IAAA;AAC3C,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAO8D,IAAA;AAC5D,MAAA;AACA,MAAA;AAA+B,IAAA;AACjC,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAO0D,IAAA;AACxD,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAAM,QAAA;AACO,QAAA;AACA,QAAA;AACG,MAAA;AACoB,QAAA;AAC3B,QAAA;AACM,QAAA;AACA,QAAA;AACb,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACE,QAAA;AAAkB,UAAA;AAChB,UAAA;AACA,UAAA;AACiC,QAAA;AAGnC,QAAA;AAAiC,MAAA;AAGnC,MAAA;AACE,QAAA;AAAkB,UAAA;AAChB,UAAA;AACA,UAAA;AACiC,QAAA;AAGnC,QAAA;AAAiC,MAAA;AAGnC,MAAA;AACA,MAAA;AACiD,QAAA;AACxB,MAAA;AAGvB,QAAA;AACA,QAAA;AAA4D,MAAA;AAG9D,MAAA;AAAwE,QAAA;AACtE,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAAY,QAAA;AAC0C,QAAA;AACpD,QAAA;AACsD,MAAA;AAGxD,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAaa,IAAA;AACX,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAAM,QAAA;AACO,QAAA;AACA,QAAA;AACG,MAAA;AACoB,QAAA;AAC3B,QAAA;AACM,QAAA;AACA,QAAA;AACb,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAEA,MAAA;AACE,QAAA;AAAkB,UAAA;AAChB,UAAA;AACA,UAAA;AACiC,QAAA;AAGnC,QAAA;AAAiC,MAAA;AAGnC,MAAA;AACE,QAAA;AAAkB,UAAA;AAChB,UAAA;AACA,UAAA;AACiC,QAAA;AAGnC,QAAA;AAAiC,MAAA;AAGnC,MAAA;AACA,MAAA;AACiD,QAAA;AACxB,MAAA;AAGvB,QAAA;AACA,QAAA;AAA4D,MAAA;AAG9D,MAAA;AAAM,QAAA;AACA,QAAA;AACJ,QAAA;AACA,MAAA;AAC4C,QAAA;AAC5C,QAAA;AACO,QAAA;AACP,QAAA;AACA,MAAA;AAGF,MAAA;AAAwE,QAAA;AACtE,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AACA,MAAA;AAAY,QAAA;AAC0C,QAAA;AACpD,QAAA;AACsD,MAAA;AAGxD,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOgE,IAAA;AAC9D,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAAM,QAAA;AACO,QAAA;AACA,QAAA;AACG,MAAA;AACoB,QAAA;AAC3B,QAAA;AACM,QAAA;AACA,QAAA;AACb,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AACiD,QAAA;AACxB,MAAA;AAGvB,QAAA;AACA,QAAA;AAA4D,MAAA;AAG9D,MAAA;AACE,QAAA;AAC4C,UAAA;AACxC,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACoD,QAAA;AAExD,QAAA;AACgD,MAAA;AAGlD,MAAA;AACmB,QAAA;AACf,QAAA;AACA,QAAA;AACA,MAAA;AAEe,QAAA;AACK,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAIW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOsE,IAAA;AACpE,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAAM,QAAA;AACO,QAAA;AACA,QAAA;AACG,MAAA;AACoB,QAAA;AAC3B,QAAA;AACM,QAAA;AACA,QAAA;AACb,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AACiD,QAAA;AACxB,MAAA;AAGvB,QAAA;AACA,QAAA;AAA4D,MAAA;AAG9D,MAAA;AACE,QAAA;AAC4C,UAAA;AACxC,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACoD,QAAA;AAExD,QAAA;AACgD,MAAA;AAGlD,MAAA;AACgD,QAAA;AACxB,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGJ,MAAA;AACA,MAAA;AAAY,QAAA;AAC0C,QAAA;AACpD,QAAA;AACsD,MAAA;AAGxD,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAO0C,IAAA;AACxC,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAA+D,QAAA;AAC7D,MAAA;AAKF,MAAA;AAAM,QAAA;AACO,QAAA;AACA,QAAA;AACG,MAAA;AACoB,QAAA;AAClC,QAAA;AACa,QAAA;AACA,QAAA;AACD,QAAA;AACA,QAAA;AACG,QAAA;AACA,MAAA;AAGjB,MAAA;AACE,QAAA;AAAkB,UAAA;AAChB,UAAA;AACA,UAAA;AAC0B,QAAA;AAG5B,QAAA;AAAiC,MAAA;AAGnC,MAAA;AACA,MAAA;AACiD,QAAA;AACxB,MAAA;AAGvB,QAAA;AACA,QAAA;AAA4D,MAAA;AAG9D,MAAA;AACQ,QAAA;AACJ,QAAA;AACA,MAAA;AAEe,QAAA;AACK,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAIW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAO0D,IAAA;AACxD,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEF,MAAA;AAA2B,QAAA;AACzB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEF,MAAA;AAEmB,QAAA;AACf,QAAA;AACA,QAAA;AACS,QAAA;AACT,QAAA;AACA,QAAA;AACA,QAAA;AAC6B,MAAA;AAElB,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOoE,IAAA;AAClE,MAAA;AAGA,MAAA;AAEmB,QAAA;AACf,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAO8D,IAAA;AAC5D,MAAA;AAEA,MAAA;AAAwC,IAAA;AAC1C,EAAA;AAAA,EAAA;AAE4D,IAAA;AAC1D,MAAA;AAGA,MAAA;AAA6D,QAAA;AAC3D,QAAA;AACoB,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAAwC,IAAA;AAC1C,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAea,IAAA;AACX,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAEA,MAAA;AAAmC,QAAA;AACjC,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACE,QAAA;AAAoD,MAAA;AAGtD,MAAA;AACA,MAAA;AAEA,MAAA;AAAM,QAAA;AACO,QAAA;AACA,QAAA;AACG,MAAA;AACoB,QAAA;AAC3B,QAAA;AACM,QAAA;AACA,QAAA;AACb,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AACiD,QAAA;AACxB,MAAA;AAGvB,QAAA;AACA,QAAA;AAA4D,MAAA;AAI9D,MAAA;AACE,QAAA;AAC4C,UAAA;AACxC,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACoD,QAAA;AAGxD,QAAA;AACgD,MAAA;AAGlD,MAAA;AAEA,MAAA;AACE,QAAA;AAAkC,MAAA;AAIpC,MAAA;AAC+C,QAAA;AAC3C,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGJ,MAAA;AAEA,MAAA;AACE,QAAA;AAAmC,MAAA;AAGrC,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAc4D,IAAA;AAC1D,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAAmC,QAAA;AACjC,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACE,QAAA;AAAoD,MAAA;AAGtD,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AAEA,MAAA;AAAM,QAAA;AACO,QAAA;AACA,QAAA;AACG,MAAA;AACoB,QAAA;AAC3B,QAAA;AACM,QAAA;AACA,QAAA;AACb,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AAEA,MAAA;AAEE,QAAA;AAAyD,UAAA;AAErD,YAAA;AAAkB,cAAA;AACP,cAAA;AACT,YAAA;AAEF,YAAA;AAA0B,UAAA;AAC5B,UAAA;AACQ,QAAA;AAGV,QAAA;AAAkD,UAAA;AAChD,QAAA;AAGF,QAAA;AAC4C,UAAA;AACxC,UAAA;AACU,UAAA;AACU,UAAA;AACpB,UAAA;AAC6D,QAAA;AAEjE,QAAA;AACgD,MAAA;AAIlD,MAAA;AAA6B,QAAA;AAC3B,QAAA;AACU,QAAA;AACA,QAAA;AAAA,MAAA;AAIZ,MAAA;AAA6B,QAAA;AAC3B,QAAA;AACU,QAAA;AACA,QAAA;AAAA,MAAA;AAIZ,MAAA;AAAiD,QAAA;AAC9B,QAAA;AACA,QAAA;AACO,QAAA;AACA,QAAA;AACH,MAAA;AAGvB,MAAA;AAEA,MAAA;AACE,QAAA;AAAkC,MAAA;AAIpC,MAAA;AAC+C,QAAA;AAC3C,QAAA;AACU,QAAA;AACU,QAAA;AACL,QAAA;AACf,QAAA;AACA,QAAA;AACA,QAAA;AACuB,QAAA;AACA,MAAA;AAG3B,MAAA;AAGA,MAAA;AAAwE,QAAA;AACtE,QAAA;AACU,QAAA;AACU,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACgB,QAAA;AACO,QAAA;AACA,MAAA;AAGzB,MAAA;AAEA,MAAA;AACiD,QAAA;AACxB,MAAA;AAGvB,QAAA;AACA,QAAA;AAAsD,MAAA;AAGxD,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAO0E,IAAA;AACxE,MAAA;AACA,MAAA;AAEmB,QAAA;AACf,QAAA;AACA,MAAA;AAEW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOsE,IAAA;AACpE,MAAA;AACA,MAAA;AAEmB,QAAA;AACf,QAAA;AACA,MAAA;AAEW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOsD,IAAA;AACpD,MAAA;AAEA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AAEA,MAAA;AAEA,MAAA;AACQ,QAAA;AACmB,QAAA;AACvB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGJ,MAAA;AAIA,MAAA;AACE,QAAA;AAAkB,UAAA;AAChB,UAAA;AACA,UAAA;AACwB,QAAA;AAG1B,QAAA;AAAiC,MAAA;AAGnC,MAAA;AAEmB,QAAA;AACf,QAAA;AACa,QAAA;AACD,QAAA;AACZ,QAAA;AACA,QAAA;AACA,MAAA;AAEW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AASa,IAAA;AACX,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AACA,MAAA;AACQ,QAAA;AACmB,QAAA;AACvB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEJ,MAAA;AAGA,MAAA;AACE,QAAA;AACA,QAAA;AAA4D,MAAA;AAG9D,MAAA;AAEmB,QAAA;AACf,QAAA;AACa,QAAA;AACD,QAAA;AACQ,QAAA;AACpB,QAAA;AACA,QAAA;AACA,MAAA;AAIW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOgE,IAAA;AAC9D,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEF,MAAA;AACA,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AACmC,QAAA;AAC/B,QAAA;AACO,QAAA;AACP,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGJ,MAAA;AAEmB,QAAA;AACK,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAIW,IAAA;AACjB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOkE,IAAA;AAChE,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AACmC,QAAA;AAC/B,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAEJ,MAAA;AAC8C,QAAA;AAC1C,QAAA;AACoB,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGJ,MAAA;AACA,MAAA;AAAY,QAAA;AAC0C,QAAA;AACpD,QAAA;AACsD,MAAA;AAGxD,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOoE,IAAA;AAClE,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAAM,QAAA;AACO,QAAA;AACA,QAAA;AACG,MAAA;AACoB,QAAA;AAClC,QAAA;AACa,QAAA;AACA,QAAA;AACb,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAEE,QAAA;AACA,QAAA;AAA4D,MAAA;AAE9D,MAAA;AAC8C,QAAA;AAC1C,QAAA;AACoB,QAAA;AACpB,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGJ,MAAA;AACA,MAAA;AAAY,QAAA;AACwC,QAAA;AAClD,QAAA;AACsD,MAAA;AAGxD,MAAA;AAAO,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOwD,IAAA;AACtD,MAAA;AAAM,QAAA;AACJ,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AAGF,MAAA;AACA,MAAA;AAEA,MAAA;AACA,MAAA;AACA,MAAA;AACQ,QAAA;AACmB,QAAA;AACZ,QAAA;AACX,QAAA;AACY,QAAA;AACZ,QAAA;AACA,MAAA;AAEJ,MAAA;AAEA,MAAA;AACE,QAAA;AACA,QAAA;AAA4D,MAAA;AAE9D,MAAA;AAEmB,QAAA;AACK,QAAA;AACpB,QAAA;AACwB,QAAA;AACD,QAAA;AACH,QAAA;AACpB,QAAA;AACA,QAAA;AACO,QAAA;AACP,MAAA;AAIW,IAAA;AACjB,EAAA;AACF;ADijOA;AACA;AiB/yTA;AjBizTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/nguyennguyen/Repos/racoons/cp-amm-sdk/dist/index.js","sourcesContent":[null,"import { Program, BN } from \"@coral-xyz/anchor\";\nimport { NATIVE_MINT, TOKEN_2022_PROGRAM_ID } from \"@solana/spl-token\";\nimport invariant from \"invariant\";\n\nimport CpAmmIDL from \"./idl/cp_amm.json\";\nimport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport {\n Connection,\n Transaction,\n PublicKey,\n TransactionInstruction,\n SystemProgram,\n AccountMeta,\n} from \"@solana/web3.js\";\nimport {\n AddLiquidityParams,\n AmmProgram,\n BuildAddLiquidityParams,\n BuildLiquidatePositionInstructionParams,\n BuildRemoveAllLiquidityInstructionParams,\n ClaimPartnerFeeParams,\n ClaimPositionFeeInstructionParams,\n ClaimPositionFeeParams,\n ClaimPositionFeeParams2,\n ClaimRewardParams,\n ClosePositionInstructionParams,\n ClosePositionParams,\n ConfigState,\n CreatePoolParams,\n CreatePositionAndAddLiquidity,\n CreatePositionParams,\n DepositQuote,\n DynamicFeeParams,\n FundRewardParams,\n GetDepositQuoteParams,\n GetQuoteParams,\n GetWithdrawQuoteParams,\n InitializeCustomizeablePoolParams,\n InitializeCustomizeablePoolWithDynamicConfigParams,\n LiquidityDeltaParams,\n LockPositionParams,\n MergePositionParams,\n PermanentLockParams,\n PoolState,\n PositionState,\n PrepareCustomizablePoolParams,\n PreparedPoolCreation,\n PreparePoolCreationParams,\n PreparePoolCreationSingleSide,\n PrepareTokenAccountParams,\n RefreshVestingParams,\n RemoveAllLiquidityAndClosePositionParams,\n RemoveAllLiquidityParams,\n RemoveLiquidityParams,\n Rounding,\n SetupFeeClaimAccountsParams,\n SwapParams,\n TxBuilder,\n UpdateRewardDurationParams,\n UpdateRewardFunderParams,\n VestingState,\n WithdrawIneligibleRewardParams,\n WithdrawQuote,\n} from \"./types\";\nimport {\n deriveCustomizablePoolAddress,\n derivePoolAddress,\n derivePoolAuthority,\n derivePositionAddress,\n derivePositionNftAccount,\n deriveTokenBadgeAddress,\n deriveTokenVaultAddress,\n} from \"./pda\";\n\nimport {\n getFeeNumerator,\n getOrCreateATAInstruction,\n getTokenProgram,\n unwrapSOLInstruction,\n wrapSOLInstruction,\n getSwapAmount,\n getLiquidityDeltaFromAmountA,\n getLiquidityDeltaFromAmountB,\n getMinAmountWithSlippage,\n getPriceImpact,\n positionByPoolFilter,\n vestingByPositionFilter,\n calculateInitSqrtPrice,\n calculateTransferFeeExcludedAmount,\n calculateTransferFeeIncludedAmount,\n getAmountBFromLiquidityDelta,\n getAmountAFromLiquidityDelta,\n getAvailableVestingLiquidity,\n isVestingComplete,\n getAllPositionNftAccountByOwner,\n} from \"./helpers\";\nimport { min, max } from \"bn.js\";\n\n/**\n * CpAmm SDK class to interact with the Dynamic CP-AMM\n */\nexport class CpAmm {\n _program: AmmProgram;\n private poolAuthority: PublicKey;\n constructor(connection: Connection) {\n this._program = new Program(CpAmmIDL as CpAmmTypes, {\n connection: connection,\n });\n this.poolAuthority = derivePoolAuthority();\n }\n\n //// ANCHOR: PRIVATE FUNCTIONS //////\n /**\n * Prepares token accounts for a transaction by retrieving or creating associated token accounts.\n * @private\n * @param {PublicKey} owner - The owner of the token accounts\n * @param {PublicKey} tokenAMint - Mint address of token A\n * @param {PublicKey} tokenBMint - Mint address of token B\n * @param {PublicKey} tokenAProgram - Program ID for token A (Token or Token2022)\n * @param {PublicKey} tokenBProgram - Program ID for token B (Token or Token2022)\n * @returns {Promise<{tokenAAta: PublicKey, tokenBAta: PublicKey, instructions: TransactionInstruction[]}>}\n * The token account addresses and any instructions needed to create them\n */\n private async prepareTokenAccounts(\n params: PrepareTokenAccountParams\n ): Promise<{\n tokenAAta: PublicKey;\n tokenBAta: PublicKey;\n instructions: TransactionInstruction[];\n }> {\n const {\n payer,\n tokenAOwner,\n tokenBOwner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n const instructions: TransactionInstruction[] = [];\n const [\n { ataPubkey: tokenAAta, ix: createInputTokenAccountIx },\n { ataPubkey: tokenBAta, ix: createOutputTokenAccountIx },\n ] = await Promise.all([\n getOrCreateATAInstruction(\n this._program.provider.connection,\n tokenAMint,\n tokenAOwner,\n payer,\n true,\n tokenAProgram\n ),\n getOrCreateATAInstruction(\n this._program.provider.connection,\n tokenBMint,\n tokenBOwner,\n payer,\n true,\n tokenBProgram\n ),\n ]);\n createInputTokenAccountIx && instructions.push(createInputTokenAccountIx);\n createOutputTokenAccountIx && instructions.push(createOutputTokenAccountIx);\n\n return { tokenAAta, tokenBAta, instructions };\n }\n\n /**\n * Derives token badge account metadata\n * @param tokenAMint - Public key of token A mint\n * @param tokenBMint - Public key of token B mint\n * @returns Array of account metadata for token badges\n */\n private getTokenBadgeAccounts(\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n ): AccountMeta[] {\n return [\n {\n pubkey: deriveTokenBadgeAddress(tokenAMint),\n isWritable: false,\n isSigner: false,\n },\n {\n pubkey: deriveTokenBadgeAddress(tokenBMint),\n isWritable: false,\n isSigner: false,\n },\n ];\n }\n\n /**\n * Builds an instruction to add liquidity to a position.\n * @private\n * @param {BuildAddLiquidityParams} params - Parameters for adding liquidity\n * @returns {Promise<TransactionInstruction>} Instruction to add liquidity\n */\n private async buildAddLiquidityInstruction(\n params: BuildAddLiquidityParams\n ): Promise<TransactionInstruction> {\n const {\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n } = params;\n return await this._program.methods\n .addLiquidity({\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n })\n .accountsPartial({\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to remove all liquidity from a position.\n * @private\n * @param {BuildRemoveAllLiquidityInstructionParams} params - Parameters for removing all liquidity\n * @returns {Promise<TransactionInstruction>} Instruction to remove all liquidity\n */\n private async buildRemoveAllLiquidityInstruction(\n params: BuildRemoveAllLiquidityInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n } = params;\n return await this._program.methods\n .removeAllLiquidity(tokenAAmountThreshold, tokenBAmountThreshold)\n .accountsPartial({\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to claim fees accumulated by a position.\n * @private\n * @param {ClaimPositionFeeInstructionParams} params - Parameters for claiming position fees\n * @returns {Promise<TransactionInstruction>} Instruction to claim position fees\n */\n private async buildClaimPositionFeeInstruction(\n params: ClaimPositionFeeInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n owner,\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n return await this._program.methods\n .claimPositionFee()\n .accountsPartial({\n poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to close a position.\n * @private\n * @param {ClosePositionInstructionParams} params - Parameters for closing a position\n * @returns {Promise<TransactionInstruction>} Instruction to close the position\n */\n private async buildClosePositionInstruction(\n params: ClosePositionInstructionParams\n ): Promise<TransactionInstruction> {\n const {\n owner,\n poolAuthority,\n pool,\n position,\n positionNftAccount,\n positionNftMint,\n } = params;\n\n return await this._program.methods\n .closePosition()\n .accountsPartial({\n positionNftMint,\n positionNftAccount,\n pool,\n position,\n poolAuthority,\n rentReceiver: owner,\n owner,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n })\n .instruction();\n }\n\n /**\n * Builds an instruction to refresh vesting for a position\n * @param params Parameters required for the refresh vesting instruction\n * @returns Transaction instruction or null if no vestings to refresh\n */\n private async buildRefreshVestingInstruction(\n params: RefreshVestingParams\n ): Promise<TransactionInstruction | null> {\n const { owner, position, positionNftAccount, pool, vestingAccounts } =\n params;\n\n if (vestingAccounts.length == 0) {\n return null;\n }\n\n return await this._program.methods\n .refreshVesting()\n .accountsPartial({\n position,\n positionNftAccount,\n pool,\n owner,\n })\n .remainingAccounts(\n vestingAccounts.map((pubkey: PublicKey) => {\n return {\n isSigner: false,\n isWritable: true,\n pubkey,\n };\n })\n )\n .instruction();\n }\n\n /**\n * Helper function that builds instructions to claim fees, remove liquidity, and close a position\n * @param {BuildLiquidatePositionInstructionParams} params - Parameters for liquidating a position\n * @returns {Promise<TransactionInstruction[]>} Array of instructions\n * @private\n */\n private async buildLiquidatePositionInstruction(\n params: BuildLiquidatePositionInstructionParams\n ): Promise<TransactionInstruction[]> {\n const {\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n } = params;\n\n const { nftMint: positionNftMint, pool } = positionState;\n const { tokenAMint, tokenBMint, tokenAVault, tokenBVault } = poolState;\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const instructions: TransactionInstruction[] = [];\n\n // 1. claim position fee\n const claimPositionFeeInstruction =\n await this.buildClaimPositionFeeInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n instructions.push(claimPositionFeeInstruction);\n\n // 2. remove all liquidity\n const removeAllLiquidityInstruction =\n await this.buildRemoveAllLiquidityInstruction({\n poolAuthority: this.poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n });\n instructions.push(removeAllLiquidityInstruction);\n // 3. close position\n const closePositionInstruction = await this.buildClosePositionInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftMint,\n positionNftAccount,\n });\n instructions.push(closePositionInstruction);\n\n return instructions;\n }\n\n /**\n * Builds a instruction to create a position.\n * @param {CreatePositionParams} params - Parameters for position creation.\n * @returns Transaction instruction.\n */\n private async buildCreatePositionInstruction(\n params: CreatePositionParams\n ): Promise<{\n ix: TransactionInstruction;\n position: PublicKey;\n positionNftAccount: PublicKey;\n }> {\n const { owner, payer, pool, positionNft } = params;\n\n const position = derivePositionAddress(positionNft);\n const positionNftAccount = derivePositionNftAccount(positionNft);\n\n const ix = await this._program.methods\n .createPosition()\n .accountsPartial({\n owner,\n positionNftMint: positionNft,\n poolAuthority: this.poolAuthority,\n positionNftAccount,\n payer: payer,\n pool,\n position,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n\n return {\n ix,\n position,\n positionNftAccount,\n };\n }\n\n /**\n * Private helper method to prepare common customizable pool creation logic\n * @param {PrepareCustomizablePoolParams} params - Common parameters for pool creation\n * @returns Prepared transaction data including instructions and accounts\n */\n private async prepareCreatePoolParams(params: PrepareCustomizablePoolParams) {\n const {\n pool,\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n payer,\n positionNft,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const position = derivePositionAddress(positionNft);\n const positionNftAccount = derivePositionNftAccount(positionNft);\n\n const tokenAVault = deriveTokenVaultAddress(tokenAMint, pool);\n const tokenBVault = deriveTokenVaultAddress(tokenBMint, pool);\n\n const {\n tokenAAta: payerTokenA,\n tokenBAta: payerTokenB,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer,\n tokenAOwner: payer,\n tokenBOwner: payer,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenA,\n BigInt(tokenAAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n payerTokenB,\n BigInt(tokenBAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n const tokenBadgeAccounts = this.getTokenBadgeAccounts(\n tokenAMint,\n tokenBMint\n );\n\n return {\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n preInstructions,\n tokenBadgeAccounts,\n };\n }\n\n /**\n * Sets up token accounts and instructions for fee claim operations.\n * @private\n * @param {SetupFeeClaimAccountsParams} params - Parameters for setting up fee claim accounts.\n * @returns Token accounts and instructions for fee claiming.\n */\n private async setupFeeClaimAccounts(\n params: SetupFeeClaimAccountsParams\n ): Promise<{\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n preInstructions: TransactionInstruction[];\n postInstructions: TransactionInstruction[];\n }> {\n const {\n payer,\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n receiver,\n tempWSolAccount,\n } = params;\n\n const tokenAIsSOL = tokenAMint.equals(NATIVE_MINT);\n const tokenBIsSOL = tokenBMint.equals(NATIVE_MINT);\n const hasSolToken = tokenAIsSOL || tokenBIsSOL;\n\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: TransactionInstruction[] = [];\n let tokenAAccount: PublicKey;\n let tokenBAccount: PublicKey;\n\n let tokenAOwner = owner;\n let tokenBOwner = owner;\n if (receiver) {\n tokenAOwner = tokenAIsSOL ? tempWSolAccount : receiver;\n tokenBOwner = tokenBIsSOL ? tempWSolAccount : receiver;\n }\n\n const { tokenAAta, tokenBAta, instructions } =\n await this.prepareTokenAccounts({\n payer,\n tokenAOwner,\n tokenBOwner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n tokenAAccount = tokenAAta;\n tokenBAccount = tokenBAta;\n preInstructions.push(...instructions);\n\n if (hasSolToken) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(\n tempWSolAccount ?? owner,\n receiver ?? owner\n );\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n return {\n tokenAAccount,\n tokenBAccount,\n preInstructions,\n postInstructions,\n };\n }\n\n //// ANCHOR: GETTER/FETCHER FUNCTIONS //////\n\n /**\n * Fetches the Config state of the program.\n * @param config - Public key of the config account.\n * @returns Parsed ConfigState.\n */\n async fetchConfigState(config: PublicKey): Promise<ConfigState> {\n const configState = await this._program.account.config.fetchNullable(\n config\n );\n invariant(configState, `Config account: ${config} not found`);\n\n return configState;\n }\n\n /**\n * Fetches the Pool state.\n * @param pool - Public key of the pool.\n * @returns Parsed PoolState.\n */\n async fetchPoolState(pool: PublicKey): Promise<PoolState> {\n const poolState = await this._program.account.pool.fetchNullable(pool);\n invariant(poolState, `Pool account: ${pool} not found`);\n\n return poolState;\n }\n\n /**\n * Fetches the Position state.\n * @param position - Public key of the position.\n * @returns Parsed PositionState.\n */\n async fetchPositionState(position: PublicKey): Promise<PositionState> {\n const positionState = await this._program.account.position.fetchNullable(\n position\n );\n invariant(positionState, `Position account: ${position} not found`);\n\n return positionState;\n }\n\n /**\n * Retrieves all config accounts.\n * @returns Array of config public keys and their states.\n */\n async getAllConfigs(): Promise<\n Array<{ publicKey: PublicKey; account: ConfigState }>\n > {\n const configAccounts = await this._program.account.config.all();\n\n return configAccounts;\n }\n\n /**\n * Retrieves all pool accounts.\n * @returns Array of pool public keys and their states.\n */\n async getAllPools(): Promise<\n Array<{ publicKey: PublicKey; account: PoolState }>\n > {\n const poolAccounts = await this._program.account.pool.all();\n\n return poolAccounts;\n }\n\n /**\n * Retrieves all position accounts.\n * @returns Array of position public keys and their states.\n */\n async getAllPositions(): Promise<\n Array<{\n publicKey: PublicKey;\n account: PositionState;\n }>\n > {\n const poolAccounts = await this._program.account.position.all();\n\n return poolAccounts;\n }\n\n /**\n * Gets all positions a specific pool.\n * @param pool - Public key of the pool.\n * @returns List of user positions for the pool.\n */\n async getAllPositionsByPool(pool: PublicKey): Promise<\n Array<{\n publicKey: PublicKey;\n account: PositionState;\n }>\n > {\n return await this._program.account.position.all([\n positionByPoolFilter(pool),\n ]);\n }\n\n /**\n * Gets all positions of a user for a specific pool.\n * @param pool - Public key of the pool.\n * @param user - Public key of the user.\n * @returns List of user positions for the pool.\n */\n async getUserPositionByPool(\n pool: PublicKey,\n user: PublicKey\n ): Promise<\n Array<{\n positionNftAccount: PublicKey;\n position: PublicKey;\n positionState: PositionState;\n }>\n > {\n const allUserPositions = await this.getPositionsByUser(user);\n return allUserPositions.filter((position) =>\n position.positionState.pool.equals(pool)\n );\n }\n\n /**\n * Gets all positions of a user across all pools.\n * @param user - Public key of the user.\n * @returns Array of user positions already sorted by liquidity\n */\n async getPositionsByUser(user: PublicKey): Promise<\n Array<{\n positionNftAccount: PublicKey;\n position: PublicKey;\n positionState: PositionState;\n }>\n > {\n const userPositionAccounts = await getAllPositionNftAccountByOwner(\n this._program.provider.connection,\n user\n );\n if (userPositionAccounts.length === 0) {\n return [];\n }\n\n const positionAddresses = userPositionAccounts.map((account) =>\n derivePositionAddress(account.positionNft)\n );\n\n const positionStates = await this._program.account.position.fetchMultiple(\n positionAddresses\n );\n const positionResult = userPositionAccounts\n .map((account, index) => {\n const positionState = positionStates[index];\n if (!positionState) return null;\n\n return {\n positionNftAccount: account.positionNftAccount,\n position: positionAddresses[index],\n positionState,\n };\n })\n .filter(Boolean);\n\n // in-place sort\n positionResult.sort((a, b) => {\n const totalLiquidityA = a.positionState.vestedLiquidity\n .add(a.positionState.permanentLockedLiquidity)\n .add(a.positionState.unlockedLiquidity);\n\n const totalLiquidityB = b.positionState.vestedLiquidity\n .add(b.positionState.permanentLockedLiquidity)\n .add(b.positionState.unlockedLiquidity);\n\n return totalLiquidityB.cmp(totalLiquidityA);\n });\n\n return positionResult;\n }\n\n async getAllVestingsByPosition(position: PublicKey): Promise<\n Array<{\n publicKey: PublicKey;\n account: VestingState;\n }>\n > {\n const vestings = await this._program.account.vesting.all([\n vestingByPositionFilter(position),\n ]);\n\n return vestings;\n }\n\n isLockedPosition(position: PositionState): boolean {\n const totalLockedLiquidity = position.vestedLiquidity.add(\n position.permanentLockedLiquidity\n );\n\n return totalLockedLiquidity.gtn(0);\n }\n\n isPermanentLockedPosition(positionState: PositionState): boolean {\n return positionState.permanentLockedLiquidity.gtn(0);\n }\n\n /**\n * Checks if a position can be unlocked based on its locking state and vesting schedules.\n *\n * This method evaluates whether a position is eligible for operations that require\n * unlocked liquidity, such as removing all liquidity or closing the position. It checks both\n * permanent locks and time-based vesting schedules.\n *\n * @private\n * @param {PositionState} positionState - The current state of the position\n * @param {Array<{account: PublicKey; vestingState: VestingState}>} vestings - Array of vesting accounts and their states\n * @param {BN} currentPoint - Current timestamp or slot number (depending on activation type of pool)\n *\n * @returns {Object} Result object containing unlock status and reason\n * @returns {boolean} result.canUnlock - Whether the position can be unlocked\n * @returns {string|undefined} result.reason - Reason why position cannot be unlocked (if applicable)\n */\n canUnlockPosition(\n positionState: PositionState,\n vestings: Array<{ account: PublicKey; vestingState: VestingState }>,\n currentPoint: BN\n ): { canUnlock: boolean; reason?: string } {\n if (vestings.length > 0) {\n // Check if permanently locked\n if (this.isPermanentLockedPosition(positionState)) {\n return {\n canUnlock: false,\n reason: \"Position is permanently locked\",\n };\n }\n\n // Check each vesting\n // We expect that should have only one vesting per position\n for (const vesting of vestings) {\n if (!isVestingComplete(vesting.vestingState, currentPoint)) {\n return {\n canUnlock: false,\n reason: \"Position has incomplete vesting schedule\",\n };\n }\n }\n }\n\n return { canUnlock: true };\n }\n\n async isPoolExist(pool: PublicKey): Promise<boolean> {\n const poolState = await this._program.account.pool.fetchNullable(pool);\n return poolState !== null;\n }\n\n /**\n * Computes the liquidity delta based on the provided token amounts and sqrt price\n *\n * @param {LiquidityDeltaParams} params - The parameters for liquidity calculation\n * @returns {Promise<BN>} - The computed liquidity delta in Q64 value.\n */\n getLiquidityDelta(params: LiquidityDeltaParams): BN {\n const {\n maxAmountTokenA,\n maxAmountTokenB,\n sqrtMaxPrice,\n sqrtMinPrice,\n sqrtPrice,\n } = params;\n\n const liquidityDeltaFromAmountA = getLiquidityDeltaFromAmountA(\n maxAmountTokenA,\n sqrtPrice,\n sqrtMaxPrice\n );\n\n const liquidityDeltaFromAmountB = getLiquidityDeltaFromAmountB(\n maxAmountTokenB,\n sqrtMinPrice,\n sqrtPrice\n );\n\n return min(liquidityDeltaFromAmountA, liquidityDeltaFromAmountB);\n }\n\n /**\n * Calculates swap quote based on input amount and pool state.\n * @param params - Swap parameters including input amount, pool state, slippage, etc.\n * @returns Swap quote including expected output amount, fee, and price impact.\n */\n getQuote(params: GetQuoteParams): {\n swapInAmount: BN;\n consumedInAmount: BN;\n swapOutAmount: BN;\n minSwapOutAmount: BN;\n totalFee: BN;\n priceImpact: number;\n } {\n const {\n inAmount,\n inputTokenMint,\n slippage,\n poolState,\n currentTime,\n currentSlot,\n inputTokenInfo,\n outputTokenInfo,\n } = params;\n const {\n sqrtPrice: sqrtPriceQ64,\n liquidity: liquidityQ64,\n activationType,\n activationPoint,\n collectFeeMode,\n poolFees,\n } = poolState;\n const {\n feeSchedulerMode,\n cliffFeeNumerator,\n numberOfPeriod,\n reductionFactor,\n periodFrequency,\n } = poolFees.baseFee;\n const dynamicFee = poolFees.dynamicFee;\n\n let actualAmountIn = inAmount;\n if (inputTokenInfo) {\n actualAmountIn = calculateTransferFeeExcludedAmount(\n inAmount,\n inputTokenInfo.mint,\n inputTokenInfo.currentEpoch\n ).amount;\n }\n const aToB = poolState.tokenAMint.equals(inputTokenMint);\n const currentPoint = activationType ? currentTime : currentSlot;\n\n let dynamicFeeParams: DynamicFeeParams;\n if (dynamicFee.initialized) {\n const { volatilityAccumulator, binStep, variableFeeControl } = dynamicFee;\n dynamicFeeParams = { volatilityAccumulator, binStep, variableFeeControl };\n }\n\n const tradeFeeNumerator = getFeeNumerator(\n currentPoint,\n activationPoint,\n numberOfPeriod,\n periodFrequency,\n feeSchedulerMode,\n cliffFeeNumerator,\n reductionFactor,\n dynamicFeeParams\n );\n\n const { amountOut, totalFee, nextSqrtPrice } = getSwapAmount(\n actualAmountIn,\n sqrtPriceQ64,\n liquidityQ64,\n tradeFeeNumerator,\n aToB,\n collectFeeMode\n );\n\n let actualAmountOut = amountOut;\n if (outputTokenInfo) {\n actualAmountOut = calculateTransferFeeExcludedAmount(\n amountOut,\n outputTokenInfo.mint,\n outputTokenInfo.currentEpoch\n ).amount;\n }\n\n const minSwapOutAmount = getMinAmountWithSlippage(\n actualAmountOut,\n slippage\n );\n\n return {\n swapInAmount: inAmount,\n consumedInAmount: actualAmountIn,\n swapOutAmount: actualAmountOut,\n minSwapOutAmount,\n totalFee,\n priceImpact: getPriceImpact(nextSqrtPrice, sqrtPriceQ64),\n };\n }\n\n /**\n * Calculates the deposit quote for liquidity pool.\n *\n * @param {GetDepositQuoteParams} params - The parameters for calculating the deposit quote.\n *\n * @returns {Promise<Object>} Deposit quote results\n * @returns {BN} returns.actualInputAmount - The actual amount used as input (after deducting transfer fees).\n * @returns {BN} returns.outputAmount - The calculated corresponding amount of the other token.\n * @returns {BN} returns.liquidityDelta - The amount of liquidity that will be added to the pool.\n */\n getDepositQuote(params: GetDepositQuoteParams): DepositQuote {\n const {\n inAmount,\n isTokenA,\n inputTokenInfo,\n outputTokenInfo,\n minSqrtPrice,\n maxSqrtPrice,\n sqrtPrice,\n } = params;\n\n const actualAmountIn = inputTokenInfo\n ? calculateTransferFeeExcludedAmount(\n inAmount,\n inputTokenInfo.mint,\n inputTokenInfo.currentEpoch\n ).amount\n : inAmount;\n\n const { liquidityDelta, rawAmount } = isTokenA\n ? {\n liquidityDelta: getLiquidityDeltaFromAmountA(\n actualAmountIn,\n sqrtPrice,\n maxSqrtPrice\n ),\n rawAmount: (delta: BN) =>\n getAmountBFromLiquidityDelta(\n delta,\n sqrtPrice,\n minSqrtPrice,\n Rounding.Up\n ),\n }\n : {\n liquidityDelta: getLiquidityDeltaFromAmountB(\n actualAmountIn,\n minSqrtPrice,\n sqrtPrice\n ),\n rawAmount: (delta: BN) =>\n getAmountAFromLiquidityDelta(\n delta,\n sqrtPrice,\n maxSqrtPrice,\n Rounding.Up\n ),\n };\n\n const rawOutputAmount = new BN(rawAmount(liquidityDelta));\n const outputAmount = outputTokenInfo\n ? calculateTransferFeeIncludedAmount(\n rawOutputAmount,\n outputTokenInfo.mint,\n outputTokenInfo.currentEpoch\n ).amount\n : rawOutputAmount;\n\n return {\n actualInputAmount: actualAmountIn,\n consumedInputAmount: inAmount,\n liquidityDelta,\n outputAmount,\n };\n }\n\n /**\n * Calculates the withdrawal quote for removing liquidity from a concentrated liquidity pool.\n *\n * @param {GetWithdrawQuoteParams} params - The parameters for calculating the withdraw quote\n *\n * @param {Object|null} params.tokenATokenInfo - must provide if token a is token2022\n * @param {Object|null} params.tokenBTokenInfo - must provide if token b is token2022\n *\n * @returns {Promise<Object>} Withdrawal quote results\n * @returns {BN} returns.liquidityDelta - The amount of liquidity that will be removed from the pool\n * @returns {BN} returns.outAmountA - The calculated amount of token A to be received (after deducting transfer fees)\n * @returns {BN} returns.outAmountB - The calculated amount of token B to be received (after deducting transfer fees)\n */\n getWithdrawQuote(params: GetWithdrawQuoteParams): WithdrawQuote {\n const {\n liquidityDelta,\n sqrtPrice,\n maxSqrtPrice,\n minSqrtPrice,\n tokenATokenInfo,\n tokenBTokenInfo,\n } = params;\n const amountA = getAmountAFromLiquidityDelta(\n liquidityDelta,\n sqrtPrice,\n maxSqrtPrice,\n Rounding.Down\n );\n const amountB = getAmountBFromLiquidityDelta(\n liquidityDelta,\n sqrtPrice,\n minSqrtPrice,\n Rounding.Down\n );\n\n return {\n liquidityDelta,\n outAmountA: tokenATokenInfo\n ? calculateTransferFeeExcludedAmount(\n amountA,\n tokenATokenInfo.mint,\n tokenATokenInfo.currentEpoch\n ).amount\n : amountA,\n outAmountB: tokenBTokenInfo\n ? calculateTransferFeeExcludedAmount(\n amountB,\n tokenBTokenInfo.mint,\n tokenBTokenInfo.currentEpoch\n ).amount\n : amountB,\n };\n }\n\n /**\n * Calculates liquidity and corresponding token amounts for token A single-sided pool creation\n * Only supports initialization where initial price equals min sqrt price\n * @param params Parameters for single-sided pool creation\n * @returns Calculated liquidity delta\n */\n preparePoolCreationSingleSide(params: PreparePoolCreationSingleSide): BN {\n const {\n tokenAAmount,\n initSqrtPrice,\n minSqrtPrice,\n maxSqrtPrice,\n tokenAInfo,\n } = params;\n\n if (!initSqrtPrice.eq(minSqrtPrice)) {\n throw new Error(\"Only support single side for base token.\");\n }\n\n const actualAmountIn = tokenAInfo\n ? tokenAAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenAAmount,\n tokenAInfo.mint,\n tokenAInfo.currentEpoch\n ).transferFee\n )\n : tokenAAmount;\n\n const liquidityDelta = getLiquidityDeltaFromAmountA(\n actualAmountIn,\n initSqrtPrice,\n maxSqrtPrice\n );\n\n return liquidityDelta;\n }\n\n /**\n * Prepares parameters required for pool creation, including initial sqrt price and liquidity.\n * @private\n * @param {PreparePoolCreationParams} params - Initial token amounts for pool creation.\n * @returns init sqrt price and liquidity in Q64 format.\n */\n preparePoolCreationParams(\n params: PreparePoolCreationParams\n ): PreparedPoolCreation {\n const {\n tokenAAmount,\n tokenBAmount,\n minSqrtPrice,\n maxSqrtPrice,\n tokenAInfo,\n tokenBInfo,\n } = params;\n\n if (tokenAAmount.eq(new BN(0)) && tokenBAmount.eq(new BN(0))) {\n throw new Error(\"Invalid input amount\");\n }\n\n const actualAmountAIn = tokenAInfo\n ? tokenAAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenAAmount,\n tokenAInfo.mint,\n tokenAInfo.currentEpoch\n ).transferFee\n )\n : tokenAAmount;\n\n const actualAmountBIn = tokenBInfo\n ? tokenBAmount.sub(\n calculateTransferFeeIncludedAmount(\n tokenBAmount,\n tokenBInfo.mint,\n tokenBInfo.currentEpoch\n ).transferFee\n )\n : tokenBAmount;\n\n const initSqrtPrice = calculateInitSqrtPrice(\n tokenAAmount,\n tokenBAmount,\n minSqrtPrice,\n maxSqrtPrice\n );\n\n const liquidityDeltaFromAmountA = getLiquidityDeltaFromAmountA(\n actualAmountAIn,\n initSqrtPrice,\n maxSqrtPrice\n );\n\n const liquidityDeltaFromAmountB = getLiquidityDeltaFromAmountB(\n actualAmountBIn,\n minSqrtPrice,\n initSqrtPrice\n );\n\n const liquidityDelta = min(\n liquidityDeltaFromAmountA,\n liquidityDeltaFromAmountB\n );\n\n return {\n initSqrtPrice,\n liquidityDelta,\n };\n }\n\n //// ANCHOR: MAIN ENDPOINT //////\n /**\n * Builds a transaction to create a permissionless pool.\n * @param params - Parameters for pool creation.\n * @returns Transaction builder.\n */\n async createPool(params: CreatePoolParams): TxBuilder {\n const {\n payer,\n creator,\n config,\n positionNft,\n tokenAMint,\n tokenBMint,\n initSqrtPrice,\n liquidityDelta,\n activationPoint,\n tokenAAmount,\n tokenBAmount,\n tokenAProgram,\n tokenBProgram,\n isLockLiquidity,\n } = params;\n\n const pool = derivePoolAddress(config, tokenAMint, tokenBMint);\n const {\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n preInstructions,\n tokenBadgeAccounts,\n } = await this.prepareCreatePoolParams({\n pool,\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n payer,\n positionNft,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstruction: TransactionInstruction[] = [];\n\n if (isLockLiquidity) {\n const permanentLockIx = await this._program.methods\n .permanentLockPosition(liquidityDelta)\n .accountsPartial({\n position,\n positionNftAccount,\n pool: pool,\n owner: creator,\n })\n .instruction();\n postInstruction.push(permanentLockIx);\n }\n\n const tx = await this._program.methods\n .initializePool({\n liquidity: liquidityDelta,\n sqrtPrice: initSqrtPrice,\n activationPoint: activationPoint,\n })\n .accountsPartial({\n creator,\n positionNftAccount,\n positionNftMint: positionNft,\n payer,\n config,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n tokenAProgram,\n tokenBProgram,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstruction)\n .remainingAccounts(tokenBadgeAccounts)\n .transaction();\n\n return tx;\n }\n\n /**\n * Builds a transaction to create a customizable pool.\n * @param params - Parameters for customizable pool creation.\n * @returns Transaction and related addresses.\n */\n async createCustomPool(params: InitializeCustomizeablePoolParams): Promise<{\n tx: Transaction;\n pool: PublicKey;\n position: PublicKey;\n }> {\n const {\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n sqrtMinPrice,\n sqrtMaxPrice,\n liquidityDelta,\n initSqrtPrice,\n payer,\n creator,\n positionNft,\n poolFees,\n hasAlphaVault,\n collectFeeMode,\n activationPoint,\n activationType,\n tokenAProgram,\n tokenBProgram,\n isLockLiquidity,\n } = params;\n const pool = deriveCustomizablePoolAddress(tokenAMint, tokenBMint);\n const {\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n preInstructions,\n tokenBadgeAccounts,\n } = await this.prepareCreatePoolParams({\n pool,\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount: tokenBMint.equals(NATIVE_MINT)\n ? max(tokenBAmount, new BN(1))\n : tokenBAmount,\n payer,\n positionNft,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstruction: TransactionInstruction[] = [];\n\n if (isLockLiquidity) {\n const permanentLockIx = await this._program.methods\n .permanentLockPosition(liquidityDelta)\n .accountsPartial({\n position,\n positionNftAccount,\n pool: pool,\n owner: creator,\n })\n .instruction();\n postInstruction.push(permanentLockIx);\n }\n\n const transaction = await this._program.methods\n .initializeCustomizablePool({\n poolFees,\n sqrtMinPrice,\n sqrtMaxPrice,\n hasAlphaVault,\n liquidity: liquidityDelta,\n sqrtPrice: initSqrtPrice,\n activationType,\n collectFeeMode,\n activationPoint,\n })\n .accountsPartial({\n creator,\n positionNftAccount,\n positionNftMint: positionNft,\n payer: payer,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n tokenAProgram,\n tokenBProgram,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstruction)\n .remainingAccounts(tokenBadgeAccounts)\n .transaction();\n\n return { tx: transaction, pool, position };\n }\n\n async createCustomPoolWithDynamicConfig(\n params: InitializeCustomizeablePoolWithDynamicConfigParams\n ): Promise<{\n tx: Transaction;\n pool: PublicKey;\n position: PublicKey;\n }> {\n const {\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n sqrtMinPrice,\n sqrtMaxPrice,\n liquidityDelta,\n initSqrtPrice,\n payer,\n config,\n poolCreatorAuthority,\n creator,\n positionNft,\n poolFees,\n hasAlphaVault,\n collectFeeMode,\n activationPoint,\n activationType,\n tokenAProgram,\n tokenBProgram,\n isLockLiquidity,\n } = params;\n\n const pool = derivePoolAddress(config, tokenAMint, tokenBMint);\n const {\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n preInstructions,\n tokenBadgeAccounts,\n } = await this.prepareCreatePoolParams({\n pool,\n tokenAMint,\n tokenBMint,\n tokenAAmount,\n tokenBAmount,\n payer,\n positionNft,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstruction: TransactionInstruction[] = [];\n\n if (isLockLiquidity) {\n const permanentLockIx = await this._program.methods\n .permanentLockPosition(liquidityDelta)\n .accountsPartial({\n position,\n positionNftAccount,\n pool: pool,\n owner: creator,\n })\n .instruction();\n postInstruction.push(permanentLockIx);\n }\n\n const transaction = await this._program.methods\n .initializePoolWithDynamicConfig({\n poolFees,\n sqrtMinPrice,\n sqrtMaxPrice,\n hasAlphaVault,\n liquidity: liquidityDelta,\n sqrtPrice: initSqrtPrice,\n activationType,\n collectFeeMode,\n activationPoint,\n })\n .accountsPartial({\n creator,\n positionNftAccount,\n positionNftMint: positionNft,\n payer: payer,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n poolCreatorAuthority: poolCreatorAuthority,\n config: config,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n payerTokenA,\n payerTokenB,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n tokenAProgram,\n tokenBProgram,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstruction)\n .remainingAccounts(tokenBadgeAccounts)\n .transaction();\n\n return { tx: transaction, pool, position };\n }\n\n /**\n * Builds a transaction to create a position.\n * @param {CreatePositionParams} params - Parameters for position creation.\n * @returns Transaction builder.\n */\n async createPosition(params: CreatePositionParams): TxBuilder {\n const { ix } = await this.buildCreatePositionInstruction(params);\n return new Transaction().add(ix);\n }\n\n /**\n * Builds a transaction to add liquidity to an existing position.\n * @param {AddLiquidityParams} params - Parameters for adding liquidity.\n * @returns Transaction builder.\n */\n async addLiquidity(params: AddLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n liquidityDelta,\n maxAmountTokenA,\n maxAmountTokenB,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenAAccount,\n BigInt(maxAmountTokenA.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenBAccount,\n BigInt(maxAmountTokenB.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const addLiquidityInstruction = await this.buildAddLiquidityInstruction({\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n addLiquidityInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Creates a new position and add liquidity to position it in a single transaction.\n * Handles both native SOL and other tokens, automatically wrapping/unwrapping SOL as needed.\n *\n * @param {CreatePositionAndAddLiquidity} params - Parameters for creating position and adding liquidity\n *\n * @returns {Transaction} A transaction that creates a position and adds liquidity\n *\n **/\n async createPositionAndAddLiquidity(\n params: CreatePositionAndAddLiquidity\n ): TxBuilder {\n const {\n owner,\n pool,\n positionNft,\n liquidityDelta,\n maxAmountTokenA,\n maxAmountTokenB,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const tokenAVault = deriveTokenVaultAddress(tokenAMint, pool);\n const tokenBVault = deriveTokenVaultAddress(tokenBMint, pool);\n\n if (tokenAMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenAAccount,\n BigInt(maxAmountTokenA.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (tokenBMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n tokenBAccount,\n BigInt(maxAmountTokenB.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const {\n ix: createPositionIx,\n position,\n positionNftAccount,\n } = await this.buildCreatePositionInstruction({\n owner,\n payer: owner,\n pool,\n positionNft,\n });\n\n const addLiquidityInstruction = await this.buildAddLiquidityInstruction({\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n });\n\n const transaction = new Transaction();\n transaction.add(createPositionIx);\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n addLiquidityInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to remove liquidity from a position.\n * @param {RemoveLiquidityParams} params - Parameters for removing liquidity.\n * @returns Transaction builder.\n */\n async removeLiquidity(params: RemoveLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n vestings,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n return await this._program.methods\n .removeLiquidity({\n liquidityDelta,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n })\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to remove liquidity from a position.\n * @param {RemoveLiquidityParams} params - Parameters for removing liquidity.\n * @returns Transaction builder.\n */\n async removeAllLiquidity(params: RemoveAllLiquidityParams): TxBuilder {\n const {\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n vestings,\n } = params;\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n const removeAllLiquidityInstruction =\n await this.buildRemoveAllLiquidityInstruction({\n poolAuthority: this.poolAuthority,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n removeAllLiquidityInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to perform a swap in the pool.\n * @param {SwapParams} params - Parameters for swapping tokens.\n * @returns Transaction builder.\n */\n async swap(params: SwapParams): TxBuilder {\n const {\n payer,\n pool,\n inputTokenMint,\n outputTokenMint,\n amountIn,\n minimumAmountOut,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n referralTokenAccount,\n } = params;\n\n const [inputTokenProgram, outputTokenProgram] = inputTokenMint.equals(\n tokenAMint\n )\n ? [tokenAProgram, tokenBProgram]\n : [tokenBProgram, tokenAProgram];\n\n const {\n tokenAAta: inputTokenAccount,\n tokenBAta: outputTokenAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer,\n tokenAOwner: payer,\n tokenBOwner: payer,\n tokenAMint: inputTokenMint,\n tokenBMint: outputTokenMint,\n tokenAProgram: inputTokenProgram,\n tokenBProgram: outputTokenProgram,\n });\n\n if (inputTokenMint.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n payer,\n inputTokenAccount,\n BigInt(amountIn.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(payer);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n return await this._program.methods\n .swap({\n amountIn,\n minimumAmountOut,\n })\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n payer,\n inputTokenAccount,\n outputTokenAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n referralTokenAccount,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to lock a position with vesting schedule.\n * @param {LockPositionParams} params - Locking parameters.\n * @returns Transaction builder.\n */\n async lockPosition(params: LockPositionParams): TxBuilder {\n const {\n owner,\n pool,\n payer,\n vestingAccount,\n position,\n positionNftAccount,\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n } = params;\n const lockPositionParams = {\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n };\n return await this._program.methods\n .lockPosition(lockPositionParams)\n .accountsPartial({\n position,\n positionNftAccount,\n vesting: vestingAccount,\n pool: pool,\n owner: owner,\n payer: payer,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to permanently lock a position.\n * @param {PermanentLockParams} params - Parameters for permanent locking.\n * @returns Transaction builder.\n */\n async permanentLockPosition(params: PermanentLockParams): TxBuilder {\n const { owner, position, positionNftAccount, pool, unlockedLiquidity } =\n params;\n\n return await this._program.methods\n .permanentLockPosition(unlockedLiquidity)\n .accountsPartial({\n position,\n positionNftAccount,\n pool: pool,\n owner: owner,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to refresh vesting status of a position.\n * @param {RefreshVestingParams} params - Refresh vesting parameters.\n * @returns Transaction builder.\n */\n async refreshVesting(params: RefreshVestingParams): TxBuilder {\n const instruction = await this.buildRefreshVestingInstruction(params);\n\n return new Transaction().add(instruction);\n }\n\n async closePosition(params: ClosePositionParams): TxBuilder {\n const { owner, pool, position, positionNftMint, positionNftAccount } =\n params;\n\n const instruction = await this.buildClosePositionInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftMint,\n positionNftAccount,\n });\n\n return new Transaction().add(instruction);\n }\n\n /**\n * Builds a transaction to remove all liquidity from a position and close it.\n * This combines several operations in a single transaction:\n * 1. Claims any accumulated fees\n * 2. Removes all liquidity\n * 3. Closes the position\n *\n * @param {RemoveAllLiquidityAndClosePositionParams} params - Combined parameters\n * @returns {TxBuilder} Transaction builder with all required instructions\n * @throws {Error} If the position is locked or cannot be closed\n */\n async removeAllLiquidityAndClosePosition(\n params: RemoveAllLiquidityAndClosePositionParams\n ): TxBuilder {\n const {\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n vestings,\n currentPoint,\n } = params;\n\n const { pool } = positionState;\n const { tokenAMint, tokenBMint } = poolState;\n\n const { canUnlock, reason } = this.canUnlockPosition(\n positionState,\n vestings,\n currentPoint\n );\n\n if (!canUnlock) {\n throw new Error(`Cannot remove liquidity: ${reason}`);\n }\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstructions: TransactionInstruction[] = [];\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n // 1. refresh vesting if vesting account provided\n if (vestings.length > 0) {\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position,\n positionNftAccount,\n pool,\n vestingAccounts: vestings.map((item) => item.account),\n });\n\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n const transaction = new Transaction();\n\n if (preInstructions.length > 0) {\n transaction.add(...preInstructions);\n }\n\n // 2. claim fee, remove liquidity and close position\n const liquidatePositionInstructions =\n await this.buildLiquidatePositionInstruction({\n owner,\n position,\n positionNftAccount,\n positionState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold,\n tokenBAmountThreshold,\n });\n\n transaction.add(...liquidatePositionInstructions);\n\n if (postInstructions.length > 0) {\n transaction.add(...postInstructions);\n }\n\n return transaction;\n }\n\n /**\n * Builds a transaction to merge liquidity from one position into another.\n * This process:\n * 1. Claims fees from the source position\n * 2. Removes all liquidity from the source position\n * 3. Adds that liquidity to the target position\n * 4. Closes the source position\n *\n * @param {MergePositionParams} params - Parameters for merging positions\n * @returns {TxBuilder} Transaction builder with all required instructions\n * @throws {Error} If either position is locked or incompatible\n */\n async mergePosition(params: MergePositionParams): TxBuilder {\n const {\n owner,\n positionA,\n positionB,\n positionBState,\n poolState,\n positionBNftAccount,\n positionANftAccount,\n tokenAAmountAddLiquidityThreshold,\n tokenBAmountAddLiquidityThreshold,\n tokenAAmountRemoveLiquidityThreshold,\n tokenBAmountRemoveLiquidityThreshold,\n positionBVestings,\n currentPoint,\n } = params;\n\n const { canUnlock, reason } = this.canUnlockPosition(\n positionBState,\n positionBVestings,\n currentPoint\n );\n\n if (!canUnlock) {\n throw new Error(`Cannot remove liquidity: ${reason}`);\n }\n\n const pool = positionBState.pool;\n const { tokenAMint, tokenBMint, tokenAVault, tokenBVault } = poolState;\n\n const tokenAProgram = getTokenProgram(poolState.tokenAFlag);\n const tokenBProgram = getTokenProgram(poolState.tokenBFlag);\n\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstructions,\n } = await this.prepareTokenAccounts({\n payer: owner,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n let positionBLiquidityDelta = positionBState.unlockedLiquidity;\n // 1. refresh vesting position B if vesting account provided\n if (positionBVestings.length > 0) {\n // accumulate all liquidity delta of position b (unlocked + available vesting)\n const totalAvailableVestingLiquidity = positionBVestings.reduce(\n (total, position) => {\n const available = getAvailableVestingLiquidity(\n position.vestingState,\n currentPoint\n );\n return total.add(available);\n },\n new BN(0)\n );\n\n positionBLiquidityDelta = positionBLiquidityDelta.add(\n totalAvailableVestingLiquidity\n );\n\n const refreshVestingInstruction =\n await this.buildRefreshVestingInstruction({\n owner,\n position: positionB,\n positionNftAccount: positionBNftAccount,\n pool,\n vestingAccounts: positionBVestings.map((item) => item.account),\n });\n refreshVestingInstruction &&\n preInstructions.push(refreshVestingInstruction);\n }\n\n // recalculate liquidity delta\n const tokenAWithdrawAmount = getAmountAFromLiquidityDelta(\n positionBLiquidityDelta,\n poolState.sqrtPrice,\n poolState.sqrtMaxPrice,\n Rounding.Down\n );\n\n const tokenBWithdrawAmount = getAmountBFromLiquidityDelta(\n positionBLiquidityDelta,\n poolState.sqrtPrice,\n poolState.sqrtMinPrice,\n Rounding.Down\n );\n\n const newLiquidityDelta = this.getLiquidityDelta({\n maxAmountTokenA: tokenAWithdrawAmount,\n maxAmountTokenB: tokenBWithdrawAmount,\n sqrtMaxPrice: poolState.sqrtMaxPrice,\n sqrtMinPrice: poolState.sqrtMinPrice,\n sqrtPrice: poolState.sqrtPrice,\n });\n\n const transaction = new Transaction();\n\n if (preInstructions.length > 0) {\n transaction.add(...preInstructions);\n }\n\n // 2. claim fee, remove liquidity and close position\n const liquidatePositionInstructions =\n await this.buildLiquidatePositionInstruction({\n owner,\n position: positionB,\n positionNftAccount: positionBNftAccount,\n positionState: positionBState,\n poolState,\n tokenAAccount,\n tokenBAccount,\n tokenAAmountThreshold: tokenAAmountRemoveLiquidityThreshold,\n tokenBAmountThreshold: tokenBAmountRemoveLiquidityThreshold,\n });\n\n transaction.add(...liquidatePositionInstructions);\n\n // 3. add liquidity from position B to positon A\n const addLiquidityInstruction = await this.buildAddLiquidityInstruction({\n pool,\n position: positionA,\n positionNftAccount: positionANftAccount,\n owner,\n tokenAAccount,\n tokenBAccount,\n tokenAMint,\n tokenBMint,\n tokenAVault,\n tokenBVault,\n tokenAProgram,\n tokenBProgram,\n liquidityDelta: newLiquidityDelta,\n tokenAAmountThreshold: tokenAAmountAddLiquidityThreshold,\n tokenBAmountThreshold: tokenBAmountAddLiquidityThreshold,\n });\n\n transaction.add(addLiquidityInstruction);\n\n if (\n [tokenAMint.toBase58(), tokenBMint.toBase58()].includes(\n NATIVE_MINT.toBase58()\n )\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && transaction.add(closeWrappedSOLIx);\n }\n\n return transaction;\n }\n\n /**\n * Builds a transaction to update reward duration.\n * @param {UpdateRewardDurationParams} params - Parameters including pool and new duration.\n * @returns Transaction builder.\n */\n async updateRewardDuration(params: UpdateRewardDurationParams): TxBuilder {\n const { pool, admin, rewardIndex, newDuration } = params;\n return await this._program.methods\n .updateRewardDuration(rewardIndex, newDuration)\n .accountsPartial({\n pool,\n admin: admin,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to update reward funder address.\n * @param {UpdateRewardFunderParams} params - Parameters including pool and new funder address.\n * @returns Transaction builder.\n */\n async updateRewardFunder(params: UpdateRewardFunderParams): TxBuilder {\n const { pool, admin, rewardIndex, newFunder } = params;\n return await this._program.methods\n .updateRewardFunder(rewardIndex, newFunder)\n .accountsPartial({\n pool,\n admin: admin,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to fund rewards in a pool.\n * @param {FundRewardParams} params - Funding parameters.\n * @returns Transaction builder.\n */\n async fundReward(params: FundRewardParams): TxBuilder {\n const { rewardIndex, carryForward, pool, funder, amount } = params;\n\n const poolState = await this.fetchPoolState(pool);\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const { vault, mint } = rewardInfo;\n const tokenProgram = getTokenProgram(rewardIndex);\n\n const preInstructions: TransactionInstruction[] = [];\n\n const { ataPubkey: funderTokenAccount, ix: createFunderTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n mint,\n funder,\n funder,\n true,\n tokenProgram\n );\n\n createFunderTokenAccountIx &&\n preInstructions.push(createFunderTokenAccountIx);\n\n // TODO: check case reward mint is wSOL && carryForward is true => total amount > amount\n if (mint.equals(NATIVE_MINT) && !amount.isZero()) {\n const wrapSOLIx = wrapSOLInstruction(\n funder,\n funderTokenAccount,\n BigInt(amount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n return await this._program.methods\n .fundReward(rewardIndex, amount, carryForward)\n .accountsPartial({\n pool,\n rewardVault: vault,\n rewardMint: mint,\n funderTokenAccount,\n funder: funder,\n tokenProgram,\n })\n .transaction();\n }\n\n /**\n * Builds a transaction to withdraw ineligible rewards from a pool.\n * @param {WithdrawIneligibleRewardParams} params - Parameters for withdrawal.\n * @returns Transaction builder.\n */\n async withdrawIneligibleReward(\n params: WithdrawIneligibleRewardParams\n ): TxBuilder {\n const { rewardIndex, pool, funder } = params;\n const poolState = await this.fetchPoolState(pool);\n\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const { mint, vault, rewardTokenFlag } = rewardInfo;\n const tokenProgram = getTokenProgram(rewardTokenFlag);\n\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: TransactionInstruction[] = [];\n const { ataPubkey: funderTokenAccount, ix: createFunderTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n mint,\n funder,\n funder,\n true,\n tokenProgram\n );\n createFunderTokenAccountIx &&\n preInstructions.push(createFunderTokenAccountIx);\n\n if (mint.equals(NATIVE_MINT)) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(funder);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n return await this._program.methods\n .withdrawIneligibleReward(rewardIndex)\n .accountsPartial({\n pool,\n rewardVault: vault,\n rewardMint: mint,\n poolAuthority: this.poolAuthority,\n funderTokenAccount,\n funder: funder,\n tokenProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to claim partner fee rewards.\n * @param {ClaimPartnerFeeParams} params - Claim parameters including amounts and partner address.\n * @returns Transaction builder.\n */\n async claimPartnerFee(params: ClaimPartnerFeeParams): TxBuilder {\n const {\n feePayer,\n receiver,\n tempWSolAccount,\n partner,\n pool,\n maxAmountA,\n maxAmountB,\n } = params;\n const poolState = await this.fetchPoolState(pool);\n const {\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAFlag,\n tokenBFlag,\n } = poolState;\n\n const tokenAProgram = getTokenProgram(tokenAFlag);\n const tokenBProgram = getTokenProgram(tokenBFlag);\n\n const payer = feePayer ?? partner;\n const { tokenAAccount, tokenBAccount, preInstructions, postInstructions } =\n await this.setupFeeClaimAccounts({\n payer,\n owner: partner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n receiver,\n tempWSolAccount,\n });\n\n return await this._program.methods\n .claimPartnerFee(maxAmountA, maxAmountB)\n .accountsPartial({\n poolAuthority: this.poolAuthority,\n pool,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n partner,\n tokenAProgram,\n tokenBProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * Builds a transaction to claim position fee rewards.\n * @param {ClaimPositionFeeParams} params - Parameters for claiming position fee.\n * @returns Transaction builder.\n */\n async claimPositionFee(params: ClaimPositionFeeParams): TxBuilder {\n const {\n receiver,\n tempWSolAccount,\n feePayer,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const payer = feePayer ?? owner;\n const { tokenAAccount, tokenBAccount, preInstructions, postInstructions } =\n await this.setupFeeClaimAccounts({\n payer,\n owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n receiver,\n tempWSolAccount,\n });\n const claimPositionFeeInstruction =\n await this.buildClaimPositionFeeInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstructions.length > 0 ? preInstructions : []),\n claimPositionFeeInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to claim position fee rewards.\n * @param {ClaimPositionFeeParams} params - Parameters for claiming position fee.\n * @returns Transaction builder.\n */\n async claimPositionFee2(params: ClaimPositionFeeParams2): TxBuilder {\n const {\n receiver,\n feePayer,\n owner,\n pool,\n position,\n positionNftAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n } = params;\n\n const payer = feePayer ?? owner;\n const {\n tokenAAta: tokenAAccount,\n tokenBAta: tokenBAccount,\n instructions: preInstruction,\n } = await this.prepareTokenAccounts({\n payer,\n tokenAOwner: owner,\n tokenBOwner: owner,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const postInstructions: TransactionInstruction[] = [];\n if (tokenAMint.equals(NATIVE_MINT) || tokenBMint.equals(NATIVE_MINT)) {\n // unwarp sol to receiver\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner, receiver);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n const claimPositionFeeInstruction =\n await this.buildClaimPositionFeeInstruction({\n owner,\n poolAuthority: this.poolAuthority,\n pool,\n position,\n positionNftAccount,\n tokenAAccount,\n tokenBAccount,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenAProgram,\n tokenBProgram,\n });\n\n const transaction = new Transaction();\n transaction.add(\n ...(preInstruction.length > 0 ? preInstruction : []),\n claimPositionFeeInstruction,\n ...(postInstructions.length > 0 ? postInstructions : [])\n );\n\n return transaction;\n }\n\n /**\n * Builds a transaction to claim reward from a position.\n * @param {ClaimRewardParams} params - Parameters for claiming reward.\n * @returns Transaction builder.\n */\n async claimReward(params: ClaimRewardParams): TxBuilder {\n const {\n feePayer,\n user,\n position,\n positionNftAccount,\n rewardIndex,\n poolState,\n positionState,\n } = params;\n\n const rewardInfo = poolState.rewardInfos[rewardIndex];\n const tokenProgram = getTokenProgram(rewardInfo.rewardTokenFlag);\n\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: TransactionInstruction[] = [];\n const { ataPubkey: userTokenAccount, ix: createUserTokenAccountIx } =\n await getOrCreateATAInstruction(\n this._program.provider.connection,\n rewardInfo.mint,\n user,\n feePayer ?? user,\n true,\n tokenProgram\n );\n createUserTokenAccountIx && preInstructions.push(createUserTokenAccountIx);\n\n if (rewardInfo.mint.equals(NATIVE_MINT)) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n return await this._program.methods\n .claimReward(rewardIndex)\n .accountsPartial({\n pool: positionState.pool,\n positionNftAccount,\n rewardVault: rewardInfo.vault,\n rewardMint: rewardInfo.mint,\n poolAuthority: this.poolAuthority,\n position,\n userTokenAccount,\n owner: user,\n tokenProgram,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n}\n","{\n \"address\": \"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG\",\n \"metadata\": {\n \"name\": \"cp_amm\",\n \"version\": \"0.1.1\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"add_liquidity\",\n \"discriminator\": [\n 181,\n 157,\n 89,\n 67,\n 143,\n 182,\n 52,\n 72\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddLiquidityParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"claim_partner_fee\",\n \"discriminator\": [\n 97,\n 206,\n 39,\n 105,\n 94,\n 94,\n 126,\n 148\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"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\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"partner\",\n \"signer\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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\": \"claim_position_fee\",\n \"discriminator\": [\n 180,\n 38,\n 154,\n 17,\n 133,\n 33,\n 162,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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_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 \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_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_a_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_a_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_b_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_b_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_b_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_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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_reward\",\n \"discriminator\": [\n 149,\n 95,\n 181,\n 242,\n 94,\n 90,\n 158,\n 162\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"docs\": [\n \"The vault token account for reward token\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"user_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\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\": \"reward_index\",\n \"type\": \"u8\"\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\": \"close_config\",\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 \"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\": \"close_position\",\n \"discriminator\": [\n 123,\n 134,\n 81,\n 0,\n 49,\n 68,\n 98,\n 98\n ],\n \"accounts\": [\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\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 \"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 \"docs\": [\n \"ADMIN FUNCTIONS /////\"\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 \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"index\"\n }\n ]\n }\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 \"name\": \"index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"config_parameters\",\n \"type\": {\n \"defined\": {\n \"name\": \"StaticConfigParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"create_dynamic_config\",\n \"discriminator\": [\n 81,\n 251,\n 122,\n 78,\n 66,\n 57,\n 208,\n 82\n ],\n \"accounts\": [\n {\n \"name\": \"config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"index\"\n }\n ]\n }\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 \"name\": \"index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"config_parameters\",\n \"type\": {\n \"defined\": {\n \"name\": \"DynamicConfigParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"create_position\",\n \"discriminator\": [\n 48,\n 215,\n 197,\n 153,\n 96,\n 203,\n 180,\n 133\n ],\n \"accounts\": [\n {\n \"name\": \"owner\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"payer\",\n \"docs\": [\n \"Address paying to create the position. Can be anyone\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\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 {\n \"name\": \"create_token_badge\",\n \"discriminator\": [\n 88,\n 206,\n 0,\n 91,\n 60,\n 175,\n 151,\n 118\n ],\n \"accounts\": [\n {\n \"name\": \"token_badge\",\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 98,\n 97,\n 100,\n 103,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_mint\"\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\": \"fund_reward\",\n \"discriminator\": [\n 188,\n 50,\n 249,\n 165,\n 93,\n 151,\n 38,\n 63\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"funder_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\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\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"carry_forward\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"initialize_customizable_pool\",\n \"discriminator\": [\n 20,\n 161,\n 241,\n 24,\n 189,\n 221,\n 180,\n 2\n ],\n \"accounts\": [\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\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\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token a mint\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token b mint\"\n ]\n },\n {\n \"name\": \"token_a_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\": \"token_a_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"token_b_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\": \"token_b_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"payer token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"creator token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_2022_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\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\": \"InitializeCustomizablePoolParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_pool\",\n \"docs\": [\n \"USER FUNCTIONS ////\"\n ],\n \"discriminator\": [\n 95,\n 180,\n 10,\n 172,\n 84,\n 174,\n 232,\n 40\n ],\n \"accounts\": [\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\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\": \"config\",\n \"docs\": [\n \"Which config the pool belongs to.\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token a mint\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token b mint\"\n ]\n },\n {\n \"name\": \"token_a_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\": \"token_a_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"token_b_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\": \"token_b_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"payer token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"creator token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_2022_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\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\": \"initialize_pool_with_dynamic_config\",\n \"discriminator\": [\n 149,\n 82,\n 72,\n 197,\n 253,\n 252,\n 68,\n 15\n ],\n \"accounts\": [\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"docs\": [\n \"position_nft_mint\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"position nft account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110,\n 95,\n 110,\n 102,\n 116,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\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\": \"pool_creator_authority\",\n \"signer\": true,\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"Which config the pool belongs to.\"\n ]\n },\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"docs\": [\n \"Initialize an account to store the pool state\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_nft_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"Token a mint\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"Token b mint\"\n ]\n },\n {\n \"name\": \"token_a_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\": \"token_a_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"token_b_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\": \"token_b_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_token_a\",\n \"docs\": [\n \"payer token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"payer_token_b\",\n \"docs\": [\n \"creator token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Program to create mint account and mint tokens\"\n ]\n },\n {\n \"name\": \"token_2022_program\",\n \"docs\": [\n \"Program to create NFT mint/token account and transfer for token22 account\"\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\": \"InitializeCustomizablePoolParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_reward\",\n \"discriminator\": [\n 95,\n 135,\n 192,\n 196,\n 242,\n 129,\n 230,\n 68\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 119,\n 97,\n 114,\n 100,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"reward_index\"\n }\n ]\n }\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\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\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"lock_position\",\n \"discriminator\": [\n 227,\n 62,\n 2,\n 252,\n 247,\n 10,\n 171,\n 185\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"vesting\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\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\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"VestingParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"permanent_lock_position\",\n \"discriminator\": [\n 165,\n 176,\n 125,\n 6,\n 231,\n 171,\n 186,\n 213\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\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 \"name\": \"permanent_lock_liquidity\",\n \"type\": \"u128\"\n }\n ]\n },\n {\n \"name\": \"refresh_vesting\",\n \"discriminator\": [\n 9,\n 94,\n 216,\n 14,\n 116,\n 204,\n 247,\n 0\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_all_liquidity\",\n \"discriminator\": [\n 10,\n 51,\n 61,\n 35,\n 112,\n 105,\n 24,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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\": \"token_a_amount_threshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"remove_liquidity\",\n \"discriminator\": [\n 80,\n 85,\n 209,\n 72,\n 24,\n 206,\n 177,\n 108\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true,\n \"relations\": [\n \"position\"\n ]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"token_a_account\",\n \"docs\": [\n \"The user token a account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_b_account\",\n \"docs\": [\n \"The user token b account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ],\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"position_nft_account\",\n \"docs\": [\n \"The token account for nft\"\n ]\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"owner of position\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_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\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemoveLiquidityParameters\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"set_pool_status\",\n \"discriminator\": [\n 112,\n 87,\n 135,\n 223,\n 83,\n 204,\n 132,\n 53\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\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 \"name\": \"status\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"swap\",\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 \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"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\": \"token_a_vault\",\n \"docs\": [\n \"The vault token account for input token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"The vault token account for output token\"\n ],\n \"writable\": true,\n \"relations\": [\n \"pool\"\n ]\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"The mint of token a\"\n ]\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"The mint of token b\"\n ]\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"The user performing the swap\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"token_a_program\",\n \"docs\": [\n \"Token a program\"\n ]\n },\n {\n \"name\": \"token_b_program\",\n \"docs\": [\n \"Token b 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\": \"update_reward_duration\",\n \"discriminator\": [\n 138,\n 174,\n 196,\n 169,\n 213,\n 235,\n 254,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\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 \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"new_duration\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"update_reward_funder\",\n \"discriminator\": [\n 211,\n 28,\n 48,\n 32,\n 215,\n 160,\n 35,\n 23\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\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 \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"new_funder\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"withdraw_ineligible_reward\",\n \"discriminator\": [\n 148,\n 206,\n 42,\n 195,\n 247,\n 49,\n 103,\n 8\n ],\n \"accounts\": [\n {\n \"name\": \"pool_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108,\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\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"funder_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\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\": \"reward_index\",\n \"type\": \"u8\"\n }\n ]\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\": \"Pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"Position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"TokenBadge\",\n \"discriminator\": [\n 116,\n 219,\n 204,\n 229,\n 249,\n 116,\n 255,\n 150\n ]\n },\n {\n \"name\": \"Vesting\",\n \"discriminator\": [\n 100,\n 149,\n 66,\n 138,\n 95,\n 200,\n 128,\n 241\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"EvtAddLiquidity\",\n \"discriminator\": [\n 175,\n 242,\n 8,\n 157,\n 30,\n 247,\n 185,\n 169\n ]\n },\n {\n \"name\": \"EvtClaimPartnerFee\",\n \"discriminator\": [\n 118,\n 99,\n 77,\n 10,\n 226,\n 1,\n 1,\n 87\n ]\n },\n {\n \"name\": \"EvtClaimPositionFee\",\n \"discriminator\": [\n 198,\n 182,\n 183,\n 52,\n 97,\n 12,\n 49,\n 56\n ]\n },\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\": \"EvtClaimReward\",\n \"discriminator\": [\n 218,\n 86,\n 147,\n 200,\n 235,\n 188,\n 215,\n 231\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\": \"EvtCloseConfig\",\n \"discriminator\": [\n 36,\n 30,\n 239,\n 45,\n 58,\n 132,\n 14,\n 5\n ]\n },\n {\n \"name\": \"EvtClosePosition\",\n \"discriminator\": [\n 20,\n 145,\n 144,\n 68,\n 143,\n 142,\n 214,\n 178\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\": \"EvtCreateDynamicConfig\",\n \"discriminator\": [\n 231,\n 197,\n 13,\n 164,\n 248,\n 213,\n 133,\n 152\n ]\n },\n {\n \"name\": \"EvtCreatePosition\",\n \"discriminator\": [\n 156,\n 15,\n 119,\n 198,\n 29,\n 181,\n 221,\n 55\n ]\n },\n {\n \"name\": \"EvtCreateTokenBadge\",\n \"discriminator\": [\n 141,\n 120,\n 134,\n 116,\n 34,\n 28,\n 114,\n 160\n ]\n },\n {\n \"name\": \"EvtFundReward\",\n \"discriminator\": [\n 104,\n 233,\n 237,\n 122,\n 199,\n 191,\n 121,\n 85\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\": \"EvtInitializeReward\",\n \"discriminator\": [\n 129,\n 91,\n 188,\n 3,\n 246,\n 52,\n 185,\n 249\n ]\n },\n {\n \"name\": \"EvtLockPosition\",\n \"discriminator\": [\n 168,\n 63,\n 108,\n 83,\n 219,\n 82,\n 2,\n 200\n ]\n },\n {\n \"name\": \"EvtPermanentLockPosition\",\n \"discriminator\": [\n 145,\n 143,\n 162,\n 218,\n 218,\n 80,\n 67,\n 11\n ]\n },\n {\n \"name\": \"EvtRemoveLiquidity\",\n \"discriminator\": [\n 87,\n 46,\n 88,\n 98,\n 175,\n 96,\n 34,\n 91\n ]\n },\n {\n \"name\": \"EvtSetPoolStatus\",\n \"discriminator\": [\n 100,\n 213,\n 74,\n 3,\n 95,\n 91,\n 228,\n 146\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\": \"EvtUpdateRewardDuration\",\n \"discriminator\": [\n 149,\n 135,\n 65,\n 231,\n 129,\n 153,\n 65,\n 57\n ]\n },\n {\n \"name\": \"EvtUpdateRewardFunder\",\n \"discriminator\": [\n 76,\n 154,\n 208,\n 13,\n 40,\n 115,\n 246,\n 146\n ]\n },\n {\n \"name\": \"EvtWithdrawIneligibleReward\",\n \"discriminator\": [\n 248,\n 215,\n 184,\n 78,\n 31,\n 180,\n 179,\n 168\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\": \"PoolDisabled\",\n \"msg\": \"Pool disabled\"\n },\n {\n \"code\": 6004,\n \"name\": \"ExceedMaxFeeBps\",\n \"msg\": \"Exceeded max fee bps\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidAdmin\",\n \"msg\": \"Invalid admin\"\n },\n {\n \"code\": 6006,\n \"name\": \"AmountIsZero\",\n \"msg\": \"Amount is zero\"\n },\n {\n \"code\": 6007,\n \"name\": \"TypeCastFailed\",\n \"msg\": \"Type cast error\"\n },\n {\n \"code\": 6008,\n \"name\": \"UnableToModifyActivationPoint\",\n \"msg\": \"Unable to modify activation point\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidAuthorityToCreateThePool\",\n \"msg\": \"Invalid authority to create the pool\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidActivationType\",\n \"msg\": \"Invalid activation type\"\n },\n {\n \"code\": 6011,\n \"name\": \"InvalidActivationPoint\",\n \"msg\": \"Invalid activation point\"\n },\n {\n \"code\": 6012,\n \"name\": \"InvalidQuoteMint\",\n \"msg\": \"Quote token must be SOL,USDC\"\n },\n {\n \"code\": 6013,\n \"name\": \"InvalidFeeCurve\",\n \"msg\": \"Invalid fee curve\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidPriceRange\",\n \"msg\": \"Invalid Price Range\"\n },\n {\n \"code\": 6015,\n \"name\": \"PriceRangeViolation\",\n \"msg\": \"Trade is over price range\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidParameters\",\n \"msg\": \"Invalid parameters\"\n },\n {\n \"code\": 6017,\n \"name\": \"InvalidCollectFeeMode\",\n \"msg\": \"Invalid collect fee mode\"\n },\n {\n \"code\": 6018,\n \"name\": \"InvalidInput\",\n \"msg\": \"Invalid input\"\n },\n {\n \"code\": 6019,\n \"name\": \"CannotCreateTokenBadgeOnSupportedMint\",\n \"msg\": \"Cannot create token badge on supported mint\"\n },\n {\n \"code\": 6020,\n \"name\": \"InvalidTokenBadge\",\n \"msg\": \"Invalid token badge\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidMinimumLiquidity\",\n \"msg\": \"Invalid minimum liquidity\"\n },\n {\n \"code\": 6022,\n \"name\": \"InvalidVestingInfo\",\n \"msg\": \"Invalid vesting information\"\n },\n {\n \"code\": 6023,\n \"name\": \"InsufficientLiquidity\",\n \"msg\": \"Insufficient liquidity\"\n },\n {\n \"code\": 6024,\n \"name\": \"InvalidVestingAccount\",\n \"msg\": \"Invalid vesting account\"\n },\n {\n \"code\": 6025,\n \"name\": \"InvalidPoolStatus\",\n \"msg\": \"Invalid pool status\"\n },\n {\n \"code\": 6026,\n \"name\": \"UnsupportNativeMintToken2022\",\n \"msg\": \"Unsupported native mint token2022\"\n },\n {\n \"code\": 6027,\n \"name\": \"InvalidRewardIndex\",\n \"msg\": \"Invalid reward index\"\n },\n {\n \"code\": 6028,\n \"name\": \"InvalidRewardDuration\",\n \"msg\": \"Invalid reward duration\"\n },\n {\n \"code\": 6029,\n \"name\": \"RewardInitialized\",\n \"msg\": \"Reward already initialized\"\n },\n {\n \"code\": 6030,\n \"name\": \"RewardUninitialized\",\n \"msg\": \"Reward not initialized\"\n },\n {\n \"code\": 6031,\n \"name\": \"InvalidRewardVault\",\n \"msg\": \"Invalid reward vault\"\n },\n {\n \"code\": 6032,\n \"name\": \"MustWithdrawnIneligibleReward\",\n \"msg\": \"Must withdraw ineligible reward\"\n },\n {\n \"code\": 6033,\n \"name\": \"IdenticalRewardDuration\",\n \"msg\": \"Reward duration is the same\"\n },\n {\n \"code\": 6034,\n \"name\": \"RewardCampaignInProgress\",\n \"msg\": \"Reward campaign in progress\"\n },\n {\n \"code\": 6035,\n \"name\": \"IdenticalFunder\",\n \"msg\": \"Identical funder\"\n },\n {\n \"code\": 6036,\n \"name\": \"InvalidFunder\",\n \"msg\": \"Invalid funder\"\n },\n {\n \"code\": 6037,\n \"name\": \"RewardNotEnded\",\n \"msg\": \"Reward not ended\"\n },\n {\n \"code\": 6038,\n \"name\": \"FeeInverseIsIncorrect\",\n \"msg\": \"Fee inverse is incorrect\"\n },\n {\n \"code\": 6039,\n \"name\": \"PositionIsNotEmpty\",\n \"msg\": \"Position is not empty\"\n },\n {\n \"code\": 6040,\n \"name\": \"InvalidPoolCreatorAuthority\",\n \"msg\": \"Invalid pool creator authority\"\n },\n {\n \"code\": 6041,\n \"name\": \"InvalidConfigType\",\n \"msg\": \"Invalid config type\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AddLiquidityParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity_delta\",\n \"docs\": [\n \"delta liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_a_amount_threshold\",\n \"docs\": [\n \"maximum token a amount\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"docs\": [\n \"maximum token b amount\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\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\": \"fee_scheduler_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\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 }\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\": \"BaseFeeStruct\",\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\": \"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 \"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\": \"padding_1\",\n \"type\": \"u64\"\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 \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"vault_config_key\",\n \"docs\": [\n \"Vault config key\"\n ],\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\": \"pool_fees\",\n \"docs\": [\n \"Pool fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeesConfig\"\n }\n }\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"Activation type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"Collect fee mode\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"config_type\",\n \"docs\": [\n \"Config type mode, 0 for static, 1 for dynamic\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding 0\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"index\",\n \"docs\": [\n \"config index\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"sqrt min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"sqrt max price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Fee curve point\",\n \"Padding for further use\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 10\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"DynamicConfigParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_creator_authority\",\n \"type\": \"pubkey\"\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\": \"padding_1\",\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\": \"DynamicFeeStruct\",\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\": \"last_update_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bin_step_u128\",\n \"type\": \"u128\"\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 \"name\": \"EvtAddLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddLiquidityParameters\"\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 \"name\": \"total_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_b\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimPartnerFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\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\": \"EvtClaimPositionFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_a_claimed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_b_claimed\",\n \"type\": \"u64\"\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_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClaimReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_reward\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"total_reward\",\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\": \"EvtCloseConfig\",\n \"docs\": [\n \"Close config\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"config\",\n \"docs\": [\n \"Config pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"admin pk\"\n ],\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtClosePosition\",\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\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_nft_mint\",\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 static config\"\n ],\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\": \"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\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateDynamicConfig\",\n \"docs\": [\n \"Create dynamic config\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"config\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_creator_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreatePosition\",\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\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_nft_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtCreateTokenBadge\",\n \"docs\": [\n \"Create token badge\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtFundReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint_reward\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"transfer_fee_excluded_amount_in\",\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\": \"token_a_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"payer\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"alpha_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool_fees\",\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_a_flag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_b_flag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_a_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_a\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_amount_b\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool_type\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtInitializeReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_duration\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtLockPosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vesting\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"cliff_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtPermanentLockPosition\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lock_liquidity_amount\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_permanent_locked_liquidity\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtRemoveLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemoveLiquidityParameters\"\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 {\n \"name\": \"EvtSetPoolStatus\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"status\",\n \"type\": \"u8\"\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\": \"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\": \"actual_amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_timestamp\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtUpdateRewardDuration\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"old_reward_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_reward_duration\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtUpdateRewardFunder\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"old_funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_funder\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"EvtWithdrawIneligibleReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"InitializeCustomizablePoolParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"pool fees\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeeParameters\"\n }\n }\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"sqrt min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"sqrt max price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"has_alpha_vault\",\n \"docs\": [\n \"has alpha vault\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"initialize liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"The init price of the pool as a sqrt(token_b/token_a) Q64.64 value\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"activation type\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"collect fee mode\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"activation point\"\n ],\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"InitializePoolParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"initialize liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_price\",\n \"docs\": [\n \"The init price of the pool as a sqrt(token_b/token_a) Q64.64 value\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"activation point\"\n ],\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"Pool\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool_fees\",\n \"docs\": [\n \"Pool fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolFeesStruct\"\n }\n }\n },\n {\n \"name\": \"token_a_mint\",\n \"docs\": [\n \"token a mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_mint\",\n \"docs\": [\n \"token b mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_a_vault\",\n \"docs\": [\n \"token a vault\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_b_vault\",\n \"docs\": [\n \"token b vault\"\n ],\n \"type\": \"pubkey\"\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\": \"partner\",\n \"docs\": [\n \"partner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidity\",\n \"docs\": [\n \"liquidity share\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\n \"padding, previous reserve amount, be careful to use that field\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"protocol_a_fee\",\n \"docs\": [\n \"protocol a fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_b_fee\",\n \"docs\": [\n \"protocol b fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_a_fee\",\n \"docs\": [\n \"partner a fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_b_fee\",\n \"docs\": [\n \"partner b fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sqrt_min_price\",\n \"docs\": [\n \"min price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"docs\": [\n \"max price\"\n ],\n \"type\": \"u128\"\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, can be slot or timestamp\"\n ],\n \"type\": \"u64\"\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 \"name\": \"pool_status\",\n \"docs\": [\n \"pool status, 0: enable, 1 disable\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_a_flag\",\n \"docs\": [\n \"token a flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_b_flag\",\n \"docs\": [\n \"token b flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"collect_fee_mode\",\n \"docs\": [\n \"0 is collect fee in both token, 1 only collect fee in token a, 2 only collect fee in token b\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"pool_type\",\n \"docs\": [\n \"pool type\"\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\": \"fee_a_per_liquidity\",\n \"docs\": [\n \"cumulative\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_b_per_liquidity\",\n \"docs\": [\n \"cumulative\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"permanent_lock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"metrics\",\n \"docs\": [\n \"metrics\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolMetrics\"\n }\n }\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Padding for further use\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 10\n ]\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"RewardInfo\"\n }\n },\n 2\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\": \"protocol_fee_percent\",\n \"docs\": [\n \"Protocol trade fee percent\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"docs\": [\n \"partner fee percent\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"docs\": [\n \"referral fee percent\"\n ],\n \"type\": \"u8\"\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\": \"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\": \"protocol_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"padding_1\",\n \"type\": {\n \"array\": [\n \"u64\",\n 5\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolFeesStruct\",\n \"docs\": [\n \"Information regarding fee charges\",\n \"trading_fee = amount * trade_fee_numerator / denominator\",\n \"protocol_fee = trading_fee * protocol_fee_percentage / 100\",\n \"referral_fee = protocol_fee * referral_percentage / 100\",\n \"partner_fee = (protocol_fee - referral_fee) * partner_fee_percentage / denominator\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_fee\",\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\": {\n \"defined\": {\n \"name\": \"BaseFeeStruct\"\n }\n }\n },\n {\n \"name\": \"protocol_fee_percent\",\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\": \"u8\"\n },\n {\n \"name\": \"partner_fee_percent\",\n \"docs\": [\n \"partner fee\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"referral_fee_percent\",\n \"docs\": [\n \"referral fee\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"dynamic_fee\",\n \"docs\": [\n \"dynamic fee\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"DynamicFeeStruct\"\n }\n }\n },\n {\n \"name\": \"padding_1\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\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_lp_a_fee\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_lp_b_fee\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_protocol_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_protocol_b_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_partner_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_partner_b_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_position\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"padding\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"nft_mint\",\n \"docs\": [\n \"nft mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_a_per_token_checkpoint\",\n \"docs\": [\n \"fee a checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_b_per_token_checkpoint\",\n \"docs\": [\n \"fee b checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"fee_a_pending\",\n \"docs\": [\n \"fee a pending\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_b_pending\",\n \"docs\": [\n \"fee b pending\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"unlocked_liquidity\",\n \"docs\": [\n \"unlock liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"vested_liquidity\",\n \"docs\": [\n \"vesting liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"permanent_locked_liquidity\",\n \"docs\": [\n \"permanent locked liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"metrics\",\n \"docs\": [\n \"metrics\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PositionMetrics\"\n }\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"UserRewardInfo\"\n }\n },\n 2\n ]\n }\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"padding for future usage\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 6\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PositionMetrics\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_claimed_a_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_b_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoveLiquidityParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity_delta\",\n \"docs\": [\n \"delta liquidity\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"token_a_amount_threshold\",\n \"docs\": [\n \"minimum token a amount\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_b_amount_threshold\",\n \"docs\": [\n \"minimum token b amount\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardInfo\",\n \"docs\": [\n \"Stores the state relevant for tracking liquidity mining rewards\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"initialized\",\n \"docs\": [\n \"Indicates if the reward has been initialized\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"reward_token_flag\",\n \"docs\": [\n \"reward token flag\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"padding\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"Padding to ensure `reward_rate: u128` is 16-byte aligned\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Reward token mint.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Reward vault token account.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"docs\": [\n \"Authority account that allows to fund rewards\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_duration\",\n \"docs\": [\n \"reward duration\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_duration_end\",\n \"docs\": [\n \"reward duration end\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_rate\",\n \"docs\": [\n \"reward rate\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reward_per_token_stored\",\n \"docs\": [\n \"Reward per token stored\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"last_update_time\",\n \"docs\": [\n \"The last time reward states were updated.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulative_seconds_with_empty_liquidity_reward\",\n \"docs\": [\n \"Accumulated seconds when the farm distributed rewards but the bin was empty.\",\n \"These rewards will be carried over to the next reward time window.\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"StaticConfigParameters\",\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\": \"sqrt_min_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"sqrt_max_price\",\n \"type\": \"u128\"\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\": \"collect_fee_mode\",\n \"type\": \"u8\"\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\": \"output_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"next_sqrt_price\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"lp_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"partner_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"referral_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenBadge\",\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\": \"token_mint\",\n \"docs\": [\n \"token mint\"\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\": \"UserRewardInfo\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"reward_per_token_checkpoint\",\n \"docs\": [\n \"The latest update reward checkpoint\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"reward_pendings\",\n \"docs\": [\n \"Current pending rewards\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_rewards\",\n \"docs\": [\n \"Total claimed rewards\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Vesting\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"cliff_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_released_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 14\n ]\n }\n },\n {\n \"name\": \"padding2\",\n \"type\": {\n \"array\": [\n \"u128\",\n 4\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"VestingParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cliff_point\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"period_frequency\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"cliff_unlock_liquidity\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_per_period\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"number_of_period\",\n \"type\": \"u16\"\n }\n ]\n }\n }\n ]\n}","import { IdlAccounts, IdlTypes, Program, BN } from \"@coral-xyz/anchor\";\nimport { PublicKey, Transaction } from \"@solana/web3.js\";\nimport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport { Mint } from \"@solana/spl-token\";\n\nexport type AmmProgram = Program<CpAmmTypes>;\n\nexport type TxBuilder = Promise<Transaction>;\n\nexport enum Rounding {\n Up,\n Down,\n}\n\nexport enum ActivationPoint {\n Timestamp,\n Slot,\n}\n\nexport enum FeeSchedulerMode {\n Linear,\n Exponential,\n}\n\nexport enum CollectFeeMode {\n BothToken,\n OnlyB,\n}\n\nexport enum TradeDirection {\n AtoB,\n BtoA,\n}\n\nexport enum ActivationType {\n Slot,\n Timestamp,\n}\n\nexport type FeeMode = {\n feeOnInput: boolean;\n feesOnTokenA: boolean;\n};\n\n// Account state types\nexport type PoolState = IdlAccounts<CpAmmTypes>[\"pool\"];\nexport type PositionState = IdlAccounts<CpAmmTypes>[\"position\"];\nexport type VestingState = IdlAccounts<CpAmmTypes>[\"vesting\"];\nexport type ConfigState = IdlAccounts<CpAmmTypes>[\"config\"];\nexport type TokenBadgeState = IdlAccounts<CpAmmTypes>[\"tokenBadge\"];\n\n// Program params types\n// export type LockPositionParams = IdlTypes<CpAmm>[\"VestingParameters\"];\n// export type AddLiquidityParams = IdlTypes<CpAmm>[\"AddLiquidityParameters\"];\n// export type RemoveLiquidityParams =\n// IdlTypes<CpAmm>[\"RemoveLiquidityParameters\"];\n// export type SwapParams = IdlTypes<CpAmm>[\"SwapParameters\"];\n// export type InitPoolParams = IdlTypes<CpAmm>[\"InitializePoolParameters\"];\n// export type InitCustomizePoolParams =\n// IdlTypes<CpAmm>[\"InitializeCustomizablePoolParameters\"];\nexport type RewardInfo = IdlTypes<CpAmmTypes>[\"rewardInfo\"];\n\nexport type DynamicFee = {\n binStep: number;\n binStepU128: BN;\n filterPeriod: number;\n decayPeriod: number;\n reductionFactor: number;\n maxVolatilityAccumulator: number;\n variableFeeControl: number;\n};\n\nexport type BaseFee = {\n cliffFeeNumerator: BN;\n numberOfPeriod: number;\n periodFrequency: BN;\n reductionFactor: BN;\n feeSchedulerMode: number;\n};\n\nexport type PoolFeesParams = {\n baseFee: BaseFee;\n protocolFeePercent: number;\n partnerFeePercent: number;\n referralFeePercent: number;\n dynamicFee: DynamicFee | null;\n};\n\nexport type PrepareTokenAccountParams = {\n payer: PublicKey;\n tokenAOwner: PublicKey;\n tokenBOwner: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type PrepareCustomizablePoolParams = {\n pool: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAAmount: BN;\n tokenBAmount: BN;\n payer: PublicKey;\n positionNft: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type InitializeCustomizeablePoolParams = {\n payer: PublicKey;\n creator: PublicKey;\n positionNft: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAAmount: BN;\n tokenBAmount: BN;\n sqrtMinPrice: BN;\n sqrtMaxPrice: BN;\n liquidityDelta: BN;\n initSqrtPrice: BN;\n poolFees: PoolFeesParams;\n hasAlphaVault: boolean;\n activationType: number;\n collectFeeMode: number;\n activationPoint: BN | null;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n isLockLiquidity?: boolean;\n};\n\nexport type InitializeCustomizeablePoolWithDynamicConfigParams =\n InitializeCustomizeablePoolParams & {\n config: PublicKey;\n poolCreatorAuthority: PublicKey;\n };\n\nexport type PreparePoolCreationParams = {\n tokenAAmount: BN;\n tokenBAmount: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type PreparedPoolCreation = {\n initSqrtPrice: BN;\n liquidityDelta: BN;\n};\n\nexport type PreparePoolCreationSingleSide = {\n tokenAAmount: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n initSqrtPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type CreatePoolParams = {\n creator: PublicKey;\n payer: PublicKey;\n config: PublicKey;\n positionNft: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n initSqrtPrice: BN;\n liquidityDelta: BN;\n tokenAAmount: BN;\n tokenBAmount: BN;\n activationPoint: BN | null;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n isLockLiquidity?: boolean;\n};\n\nexport type CreatePositionParams = {\n owner: PublicKey;\n payer: PublicKey;\n pool: PublicKey;\n positionNft: PublicKey;\n};\n\nexport type AddLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n maxAmountTokenA: BN;\n maxAmountTokenB: BN;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type CreatePositionAndAddLiquidity = {\n owner: PublicKey;\n pool: PublicKey;\n positionNft: PublicKey;\n liquidityDelta: BN;\n maxAmountTokenA: BN;\n maxAmountTokenB: BN;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type LiquidityDeltaParams = {\n maxAmountTokenA: BN;\n maxAmountTokenB: BN;\n sqrtPrice: BN;\n sqrtMinPrice: BN;\n sqrtMaxPrice: BN;\n tokenAInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type RemoveLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n vestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type RemoveAllLiquidityParams = Omit<\n RemoveLiquidityParams,\n \"liquidityDelta\"\n>;\n\nexport type BuildAddLiquidityParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n liquidityDelta: BN;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type BuildLiquidatePositionInstructionParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n positionState: PositionState;\n poolState: PoolState;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n};\n\nexport type BuildRemoveAllLiquidityInstructionParams = {\n poolAuthority: PublicKey;\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type ClosePositionParams = {\n owner: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftMint: PublicKey;\n positionNftAccount: PublicKey;\n};\n\nexport type RemoveAllLiquidityAndClosePositionParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n poolState: PoolState;\n positionState: PositionState;\n tokenAAmountThreshold: BN;\n tokenBAmountThreshold: BN;\n vestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type MergePositionParams = {\n owner: PublicKey;\n positionA: PublicKey;\n positionB: PublicKey;\n poolState: PoolState;\n positionBNftAccount: PublicKey;\n positionANftAccount: PublicKey;\n positionBState: PositionState;\n tokenAAmountAddLiquidityThreshold: BN;\n tokenBAmountAddLiquidityThreshold: BN;\n tokenAAmountRemoveLiquidityThreshold: BN;\n tokenBAmountRemoveLiquidityThreshold: BN;\n positionBVestings: Array<{\n account: PublicKey;\n vestingState: VestingState;\n }>;\n currentPoint: BN;\n};\n\nexport type GetQuoteParams = {\n inAmount: BN;\n inputTokenMint: PublicKey;\n slippage: number;\n poolState: PoolState;\n currentTime: number;\n currentSlot: number;\n inputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n outputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type SwapQuotes = {\n totalFee: BN;\n minOutAmount: BN;\n actualAmount: BN;\n};\n\nexport type SwapParams = {\n payer: PublicKey;\n pool: PublicKey;\n inputTokenMint: PublicKey;\n outputTokenMint: PublicKey;\n amountIn: BN;\n minimumAmountOut: BN;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n referralTokenAccount: PublicKey | null;\n};\n\nexport type LockPositionParams = {\n owner: PublicKey;\n payer: PublicKey;\n vestingAccount: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n cliffPoint: BN | null;\n periodFrequency: BN;\n cliffUnlockLiquidity: BN;\n liquidityPerPeriod: BN;\n numberOfPeriod: number;\n};\n\nexport type SetupFeeClaimAccountsParams = {\n payer: PublicKey;\n owner: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n receiver?: PublicKey;\n tempWSolAccount?: PublicKey;\n};\n\nexport type ClaimPositionFeeInstructionParams = {\n owner: PublicKey;\n poolAuthority: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n tokenAAccount: PublicKey;\n tokenBAccount: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n};\n\nexport type ClaimPositionFeeParams = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n receiver?: PublicKey;\n feePayer?: PublicKey;\n tempWSolAccount?: PublicKey;\n};\n\nexport type ClaimPositionFeeParams2 = {\n owner: PublicKey;\n position: PublicKey;\n pool: PublicKey;\n positionNftAccount: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n tokenAVault: PublicKey;\n tokenBVault: PublicKey;\n tokenAProgram: PublicKey;\n tokenBProgram: PublicKey;\n receiver: PublicKey;\n feePayer?: PublicKey;\n};\n\nexport type ClosePositionInstructionParams = {\n owner: PublicKey;\n poolAuthority: PublicKey;\n pool: PublicKey;\n position: PublicKey;\n positionNftMint: PublicKey;\n positionNftAccount: PublicKey;\n};\n\nexport type InitializeRewardParams = {\n rewardIndex: number;\n rewardDuration: BN;\n pool: PublicKey;\n rewardMint: PublicKey;\n payer: PublicKey;\n};\n\nexport type UpdateRewardDurationParams = {\n pool: PublicKey;\n admin: PublicKey;\n rewardIndex: number;\n newDuration: BN;\n};\n\nexport type UpdateRewardFunderParams = {\n pool: PublicKey;\n admin: PublicKey;\n rewardIndex: number;\n newFunder: PublicKey;\n};\n\nexport type FundRewardParams = {\n funder: PublicKey;\n rewardIndex: number;\n pool: PublicKey;\n carryForward: boolean;\n amount: BN;\n};\n\nexport type WithdrawIneligibleRewardParams = {\n rewardIndex: number;\n pool: PublicKey;\n funder: PublicKey;\n};\n\nexport type ClaimPartnerFeeParams = {\n partner: PublicKey;\n pool: PublicKey;\n maxAmountA: BN;\n maxAmountB: BN;\n receiver?: PublicKey;\n feePayer?: PublicKey;\n tempWSolAccount?: PublicKey;\n};\n\nexport type ClaimRewardParams = {\n user: PublicKey;\n position: PublicKey;\n poolState: PoolState;\n positionState: PositionState;\n positionNftAccount: PublicKey;\n rewardIndex: number;\n feePayer?: PublicKey;\n};\n\nexport type RefreshVestingParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n vestingAccounts: PublicKey[];\n};\n\nexport type PermanentLockParams = {\n owner: PublicKey;\n position: PublicKey;\n positionNftAccount: PublicKey;\n pool: PublicKey;\n unlockedLiquidity: BN;\n};\n\nexport type GetDepositQuoteParams = {\n inAmount: BN;\n isTokenA: boolean;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n sqrtPrice: BN;\n inputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n outputTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type GetWithdrawQuoteParams = {\n liquidityDelta: BN;\n minSqrtPrice: BN;\n maxSqrtPrice: BN;\n sqrtPrice: BN;\n tokenATokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n tokenBTokenInfo?: {\n mint: Mint;\n currentEpoch: number;\n };\n};\n\nexport type DepositQuote = {\n actualInputAmount: BN;\n consumedInputAmount: BN;\n outputAmount: BN;\n liquidityDelta: BN;\n};\n\nexport type WithdrawQuote = {\n liquidityDelta: BN;\n outAmountA: BN;\n outAmountB: BN;\n};\n\nexport type DynamicFeeParams = {\n volatilityAccumulator: BN;\n binStep: number;\n variableFeeControl: number;\n};\n","import { PublicKey } from \"@solana/web3.js\";\nimport { BN } from \"@coral-xyz/anchor\";\nimport { CP_AMM_PROGRAM_ID } from \"./constants\";\n\n// Private function: Only use to derive pool account\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\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 derivePoolAuthority(): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"pool_authority\")],\n CP_AMM_PROGRAM_ID\n )[0];\n}\nexport function deriveConfigAddress(index: BN): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"config\"), index.toArrayLike(Buffer, \"le\", 8)],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePoolAddress(\n config: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"pool\"),\n config.toBuffer(),\n getFirstKey(tokenAMint, tokenBMint),\n getSecondKey(tokenAMint, tokenBMint),\n ],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePositionAddress(positionNft: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position\"), positionNft.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveTokenVaultAddress(\n tokenMint: PublicKey,\n pool: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"token_vault\"), tokenMint.toBuffer(), pool.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveRewardVaultAddress(\n pool: PublicKey,\n rewardIndex: number\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"reward_vault\"), pool.toBuffer(), Buffer.from([rewardIndex])],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveCustomizablePoolAddress(\n tokenAMint: PublicKey,\n tokenBMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"cpool\"),\n getFirstKey(tokenAMint, tokenBMint),\n getSecondKey(tokenAMint, tokenBMint),\n ],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveTokenBadgeAddress(tokenMint: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"token_badge\"), tokenMint.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function deriveClaimFeeOperatorAddress(operator: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"cf_operator\"), operator.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n\nexport function derivePositionNftAccount(\n positionNftMint: PublicKey\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position_nft_account\"), positionNftMint.toBuffer()],\n CP_AMM_PROGRAM_ID\n )[0];\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nexport const CP_AMM_PROGRAM_ID = new PublicKey(\n \"cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG\"\n);\n\nexport const LIQUIDITY_SCALE = 128;\nexport const SCALE_OFFSET = 64;\nexport const BASIS_POINT_MAX = 10_000;\nexport const MAX_FEE_NUMERATOR = 500_000_000;\nexport const FEE_DENOMINATOR = 1_000_000_000;\n\nexport const MIN_SQRT_PRICE = new BN(\"4295048016\");\nexport const MAX_SQRT_PRICE = new BN(\"79226673521066979257578248091\");\nexport const MIN_CU_BUFFER = 50_000;\nexport const MAX_CU_BUFFER = 200_000;\n\nexport const DYNAMIC_FEE_FILTER_PERIOD_DEFAULT = 10;\nexport const DYNAMIC_FEE_DECAY_PERIOD_DEFAULT = 120;\nexport const DYNAMIC_FEE_REDUCTION_FACTOR_DEFAULT = 5000; // 50%\nexport const BIN_STEP_BPS_DEFAULT = 1;\n// bin_step << 64 / BASIS_POINT_MAX\nexport const BIN_STEP_BPS_U128_DEFAULT = new BN(\"1844674407370955\");\nexport const MAX_PRICE_CHANGE_BPS_DEFAULT = 1500; // 15%\n","import { bs58 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\nimport {\n AccountLayout,\n createAssociatedTokenAccountIdempotentInstruction,\n createCloseAccountInstruction,\n getAccount,\n getAssociatedTokenAddressSync,\n getMint,\n NATIVE_MINT,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n TokenAccountNotFoundError,\n TokenInvalidAccountOwnerError,\n} from \"@solana/spl-token\";\nimport {\n Connection,\n GetProgramAccountsFilter,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\n\nexport function getTokenProgram(flag: number): PublicKey {\n return flag == 0 ? TOKEN_PROGRAM_ID : TOKEN_2022_PROGRAM_ID;\n}\nexport const getTokenDecimals = async (\n connection: Connection,\n mint: PublicKey\n): Promise<number> => {\n return (await getMint(connection, mint)).decimals;\n};\n\nexport const getOrCreateATAInstruction = async (\n connection: Connection,\n tokenMint: PublicKey,\n owner: PublicKey,\n payer: PublicKey = owner,\n allowOwnerOffCurve = true,\n tokenProgram: PublicKey\n): Promise<{ ataPubkey: PublicKey; ix?: TransactionInstruction }> => {\n const toAccount = getAssociatedTokenAddressSync(\n tokenMint,\n owner,\n allowOwnerOffCurve,\n tokenProgram\n );\n\n try {\n await getAccount(connection, toAccount);\n return { ataPubkey: toAccount, ix: undefined };\n } catch (e) {\n if (\n e instanceof TokenAccountNotFoundError ||\n e instanceof TokenInvalidAccountOwnerError\n ) {\n const ix = createAssociatedTokenAccountIdempotentInstruction(\n payer,\n toAccount,\n owner,\n tokenMint,\n tokenProgram\n );\n\n return { ataPubkey: toAccount, ix };\n } else {\n /* handle error */\n console.error(\"Error::getOrCreateATAInstruction\", e);\n throw e;\n }\n }\n};\n\nexport const 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\nexport const unwrapSOLInstruction = async (\n owner: PublicKey,\n receiver: PublicKey = owner,\n allowOwnerOffCurve = true\n) => {\n const wSolATAAccount = getAssociatedTokenAddressSync(\n NATIVE_MINT,\n owner,\n allowOwnerOffCurve\n );\n if (wSolATAAccount) {\n const closedWrappedSolInstruction = createCloseAccountInstruction(\n wSolATAAccount,\n receiver,\n owner,\n [],\n TOKEN_PROGRAM_ID\n );\n return closedWrappedSolInstruction;\n }\n return null;\n};\n\nexport async function getAllUserPositionNftAccount(\n connection: Connection,\n user: PublicKey\n): Promise<\n Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }>\n> {\n const filters: GetProgramAccountsFilter[] = [\n {\n memcmp: {\n offset: 32,\n bytes: user.toBase58(),\n },\n },\n {\n memcmp: {\n offset: 64,\n bytes: bs58.encode(Buffer.from([1, 0, 0, 0, 0, 0, 0, 0])), // 1\n },\n },\n ];\n\n const tokenAccountsRaw = await connection.getProgramAccounts(\n TOKEN_2022_PROGRAM_ID,\n {\n filters,\n }\n );\n\n const userPositionNftAccount: Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }> = [];\n for (const { account, pubkey } of tokenAccountsRaw) {\n const tokenAccountData = AccountLayout.decode(account.data);\n userPositionNftAccount.push({\n positionNft: tokenAccountData.mint,\n positionNftAccount: pubkey,\n });\n }\n\n return userPositionNftAccount;\n}\n\nexport async function getAllPositionNftAccountByOwner(\n connection: Connection,\n user: PublicKey\n): Promise<\n Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }>\n> {\n const tokenAccounts = await connection.getTokenAccountsByOwner(user, {\n programId: TOKEN_2022_PROGRAM_ID,\n });\n\n const userPositionNftAccount: Array<{\n positionNft: PublicKey;\n positionNftAccount: PublicKey;\n }> = [];\n for (const { account, pubkey } of tokenAccounts.value) {\n const tokenAccountData = AccountLayout.decode(account.data);\n if (tokenAccountData.amount.toString() === \"1\") {\n userPositionNftAccount.push({\n positionNft: tokenAccountData.mint,\n positionNftAccount: pubkey,\n });\n }\n }\n\n return userPositionNftAccount;\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport {\n BaseFee,\n CollectFeeMode,\n DynamicFee,\n FeeMode,\n FeeSchedulerMode,\n Rounding,\n} from \"../types\";\nimport {\n BASIS_POINT_MAX,\n BIN_STEP_BPS_DEFAULT,\n BIN_STEP_BPS_U128_DEFAULT,\n DYNAMIC_FEE_DECAY_PERIOD_DEFAULT,\n DYNAMIC_FEE_FILTER_PERIOD_DEFAULT,\n DYNAMIC_FEE_REDUCTION_FACTOR_DEFAULT,\n FEE_DENOMINATOR,\n MAX_FEE_NUMERATOR,\n MAX_PRICE_CHANGE_BPS_DEFAULT,\n SCALE_OFFSET,\n} from \"../constants\";\nimport { ONE, pow } from \"../math/feeMath\";\nimport { mulDiv } from \"../math\";\nimport {\n getAmountAFromLiquidityDelta,\n getAmountBFromLiquidityDelta,\n getNextSqrtPrice,\n} from \"./curve\";\nimport Decimal from \"decimal.js\";\n\n// Fee scheduler\n// Linear: cliffFeeNumerator - period * reductionFactor\n// Exponential: cliffFeeNumerator * (1 -reductionFactor/BASIS_POINT_MAX)^period\nexport function getBaseFeeNumerator(\n feeSchedulerMode: FeeSchedulerMode,\n cliffFeeNumerator: BN,\n period: BN,\n reductionFactor: BN\n): BN {\n let feeNumerator: BN;\n if (feeSchedulerMode == FeeSchedulerMode.Linear) {\n feeNumerator = cliffFeeNumerator.sub(period.mul(reductionFactor));\n } else {\n const bps = reductionFactor.shln(SCALE_OFFSET).div(new BN(BASIS_POINT_MAX));\n const base = ONE.sub(bps);\n const result = pow(base, period);\n feeNumerator = cliffFeeNumerator.mul(result).shrn(SCALE_OFFSET);\n }\n\n return feeNumerator;\n}\n\n/**\n * Calculates the dynamic fee numerator based on market volatility metrics\n *\n * @param volatilityAccumulator - A measure of accumulated market volatility (BN)\n * @param binStep - The size of price bins in the liquidity distribution (BN)\n * @param variableFeeControl - Parameter controlling the impact of volatility on fees (BN)\n * @returns The calculated dynamic fee numerator (BN)\n */\nexport function getDynamicFeeNumerator(\n volatilityAccumulator: BN,\n binStep: BN,\n variableFeeControl: BN\n): BN {\n if (variableFeeControl.isZero()) {\n return new BN(0);\n }\n const squareVfaBin = volatilityAccumulator\n .mul(new BN(binStep))\n .pow(new BN(2));\n const vFee = variableFeeControl.mul(squareVfaBin);\n\n return vFee.add(new BN(99_999_999_999)).div(new BN(100_000_000_000));\n}\n\n/**\n * Calculates the fee numerator based on current market conditions and fee schedule configuration\n *\n * @param currentPoint - The current price point in the liquidity curve\n * @param activationPoint - The price point at which the fee schedule is activated (BN)\n * @param numberOfPeriod - The total number of periods in the fee schedule\n * @param periodFrequency - The frequency at which periods change (BN)\n * @param feeSchedulerMode - The mode determining how fees are calculated (0 = constant, 1 = linear, etc.)\n * @param cliffFeeNumerator - The initial fee numerator at the cliff point (BN)\n * @param reductionFactor - The factor by which fees are reduced in each period (BN)\n * @param dynamicFeeParams - Optional parameters for dynamic fee calculation\n * @param dynamicFeeParams.volatilityAccumulator - Measure of accumulated market volatility (BN)\n * @param dynamicFeeParams.binStep - Size of price bins in the liquidity distribution (BN)\n * @param dynamicFeeParams.variableFeeControl - Parameter controlling the impact of volatility (BN)\n * @returns The calculated fee numerator (BN), capped at MAX_FEE_NUMERATOR\n */\nexport function getFeeNumerator(\n currentPoint: number,\n activationPoint: BN,\n numberOfPeriod: number,\n periodFrequency: BN,\n feeSchedulerMode: number,\n cliffFeeNumerator: BN,\n reductionFactor: BN,\n dynamicFeeParams?: {\n volatilityAccumulator: BN;\n binStep: number;\n variableFeeControl: number;\n }\n): BN {\n if (\n Number(periodFrequency) == 0 ||\n new BN(currentPoint).lt(activationPoint)\n ) {\n return cliffFeeNumerator;\n }\n const period = BN.min(\n new BN(numberOfPeriod),\n new BN(currentPoint).sub(activationPoint).div(periodFrequency)\n );\n\n let feeNumerator = getBaseFeeNumerator(\n feeSchedulerMode,\n cliffFeeNumerator,\n period,\n reductionFactor\n );\n\n if (dynamicFeeParams) {\n const { volatilityAccumulator, binStep, variableFeeControl } =\n dynamicFeeParams;\n const dynamicFeeNumberator = getDynamicFeeNumerator(\n volatilityAccumulator,\n new BN(binStep),\n new BN(variableFeeControl)\n );\n feeNumerator = feeNumerator.add(dynamicFeeNumberator);\n }\n return feeNumerator.gt(new BN(MAX_FEE_NUMERATOR))\n ? new BN(MAX_FEE_NUMERATOR)\n : feeNumerator;\n}\n\n/**\n * Determines the fee mode based on the swap direction and fee collection configuration\n *\n * @param collectFeeMode - The fee collection mode (e.g., OnlyB, BothToken)\n * @param btoA - Boolean indicating if the swap is from token B to token A\n * @returns { feeOnInput, feesOnTokenA }\n */\nfunction getFeeMode(collectFeeMode: CollectFeeMode, btoA: boolean): FeeMode {\n const feeOnInput = btoA && collectFeeMode === CollectFeeMode.OnlyB;\n const feesOnTokenA = btoA && collectFeeMode === CollectFeeMode.BothToken;\n\n return {\n feeOnInput,\n feesOnTokenA,\n };\n}\n\n/**\n * Calculates the total fee amount based on the transaction amount and fee numerator\n *\n * @param amount - The transaction amount (BN)\n * @param tradeFeeNumerator - The fee numerator to apply (BN)\n * @returns The calculated fee amount (BN), rounded up\n */\nfunction getTotalFeeOnAmount(amount: BN, tradeFeeNumerator: BN) {\n return mulDiv(\n amount,\n tradeFeeNumerator,\n new BN(FEE_DENOMINATOR),\n Rounding.Up\n );\n}\n\n/**\n *\n * Calculates the output amount and fees for a swap operation in a concentrated liquidity pool.\n *\n * @param inAmount - The input amount of tokens the user is swapping\n * @param sqrtPrice - The current square root price of the pool\n * @param liquidity - The current liquidity available in the pool\n * @param tradeFeeNumerator - The fee numerator used to calculate trading fees\n * @param aToB - Direction of the swap: true for token A to token B, false for token B to token A\n * @param collectFeeMode - Determines how fees are collected (0: both tokens, 1: only token B)\n * @returns Object containing the actual output amount after fees and the total fee amount\n */\nexport function getSwapAmount(\n inAmount: BN,\n sqrtPrice: BN,\n liquidity: BN,\n tradeFeeNumerator: BN,\n aToB: boolean,\n collectFeeMode: number\n): { amountOut: BN; totalFee: BN; nextSqrtPrice: BN } {\n let feeMode = getFeeMode(collectFeeMode, !aToB);\n let actualInAmount = inAmount;\n let totalFee = new BN(0);\n\n if (feeMode.feeOnInput) {\n totalFee = getTotalFeeOnAmount(inAmount, tradeFeeNumerator);\n actualInAmount = inAmount.sub(totalFee);\n }\n\n const nextSqrtPrice = getNextSqrtPrice(\n actualInAmount,\n sqrtPrice,\n liquidity,\n aToB\n );\n // Calculate the output amount based on swap direction\n const outAmount = aToB\n ? getAmountBFromLiquidityDelta(\n liquidity,\n sqrtPrice,\n nextSqrtPrice,\n Rounding.Down\n )\n : getAmountAFromLiquidityDelta(\n liquidity,\n sqrtPrice,\n nextSqrtPrice,\n Rounding.Down\n );\n\n // Apply fees to output amount if fee is taken on output\n const amountOut = feeMode.feeOnInput\n ? outAmount\n : ((totalFee = getTotalFeeOnAmount(outAmount, tradeFeeNumerator)),\n outAmount.sub(totalFee));\n\n return { amountOut, totalFee, nextSqrtPrice };\n}\n\n/**\n * Converts basis points (bps) to a fee numerator\n * 1 bps = 0.01% = 0.0001 in decimal\n *\n * @param bps - The value in basis points [1-10_000]\n * @returns The equivalent fee numerator\n */\nexport function bpsToFeeNumerator(bps: number): BN {\n return new BN(bps * FEE_DENOMINATOR).divn(BASIS_POINT_MAX);\n}\n\n/**\n * Converts a fee numerator back to basis points (bps)\n *\n * @param feeNumerator - The fee numerator to convert\n * @returns The equivalent value in basis points [1-10_000]\n */\nexport function feeNumeratorToBps(feeNumerator: BN): number {\n return feeNumerator\n .muln(BASIS_POINT_MAX)\n .div(new BN(FEE_DENOMINATOR))\n .toNumber();\n}\n\n/**\n * Calculates base fee parameters for a fee scheduler system.\n * @param {number} maxBaseFeeBps - Maximum fee in basis points\n * @param {number} minBaseFeeBps - Minimum fee in basis points\n * @param {FeeSchedulerMode} feeSchedulerMode - Mode for fee reduction (Linear or Exponential)\n * @param {number} numberOfPeriod - Number of periods over which to schedule fee reduction\n * @param {BN} periodFrequency - Time interval between fee reductions\n *\n * @returns {BaseFee}\n */\nexport function getBaseFeeParams(\n maxBaseFeeBps: number,\n minBaseFeeBps: number,\n feeSchedulerMode: FeeSchedulerMode,\n numberOfPeriod: number,\n totalDuration: number\n): BaseFee {\n if (maxBaseFeeBps == minBaseFeeBps) {\n if (numberOfPeriod != 0 || totalDuration != 0) {\n throw new Error(\"numberOfPeriod and totalDuration must both be zero\");\n }\n\n return {\n cliffFeeNumerator: bpsToFeeNumerator(maxBaseFeeBps),\n numberOfPeriod: 0,\n periodFrequency: new BN(0),\n reductionFactor: new BN(0),\n feeSchedulerMode: 0,\n };\n }\n\n if (numberOfPeriod <= 0) {\n throw new Error(\"Total periods must be greater than zero\");\n }\n\n if (maxBaseFeeBps > feeNumeratorToBps(new BN(MAX_FEE_NUMERATOR))) {\n throw new Error(\n `maxBaseFeeBps (${maxBaseFeeBps} bps) exceeds maximum allowed value of ${feeNumeratorToBps(\n new BN(MAX_FEE_NUMERATOR)\n )} bps`\n );\n }\n\n if (minBaseFeeBps > maxBaseFeeBps) {\n throw new Error(\n \"minBaseFee bps must be less than or equal to maxBaseFee bps\"\n );\n }\n\n if (numberOfPeriod == 0 || totalDuration == 0) {\n throw new Error(\n \"numberOfPeriod and totalDuration must both greater than zero\"\n );\n }\n\n const maxBaseFeeNumerator = bpsToFeeNumerator(maxBaseFeeBps);\n\n const minBaseFeeNumerator = bpsToFeeNumerator(minBaseFeeBps);\n\n const periodFrequency = new BN(totalDuration / numberOfPeriod);\n\n let reductionFactor: BN;\n if (feeSchedulerMode == FeeSchedulerMode.Linear) {\n const totalReduction = maxBaseFeeNumerator.sub(minBaseFeeNumerator);\n reductionFactor = totalReduction.divn(numberOfPeriod);\n } else {\n const ratio =\n minBaseFeeNumerator.toNumber() / maxBaseFeeNumerator.toNumber();\n const decayBase = Math.pow(ratio, 1 / numberOfPeriod);\n reductionFactor = new BN(BASIS_POINT_MAX * (1 - decayBase));\n }\n\n return {\n cliffFeeNumerator: maxBaseFeeNumerator,\n numberOfPeriod,\n periodFrequency,\n reductionFactor,\n feeSchedulerMode,\n };\n}\n\n/**\n * Calculate dynamic fee parameters\n * @param {number} baseFeeBps - Base fee in basis points\n * @param {number} [maxPriceChangeBps=1500] - Maximum price change to consider for fee calculation (in basis points)\n *\n * @returns {DynamicFee}\n */\nexport function getDynamicFeeParams(\n baseFeeBps: number,\n maxPriceChangeBps: number = MAX_PRICE_CHANGE_BPS_DEFAULT // default 15%\n): DynamicFee {\n if (maxPriceChangeBps > MAX_PRICE_CHANGE_BPS_DEFAULT) {\n throw new Error(\n `maxPriceChangeBps (${maxPriceChangeBps} bps) must be less than or equal to ${MAX_PRICE_CHANGE_BPS_DEFAULT}`\n );\n }\n\n const priceRatio = maxPriceChangeBps / BASIS_POINT_MAX + 1;\n // Q64\n const sqrtPriceRatioQ64 = new BN(\n Decimal.sqrt(priceRatio.toString())\n .mul(Decimal.pow(2, 64))\n .floor()\n .toFixed()\n );\n const deltaBinId = sqrtPriceRatioQ64\n .sub(ONE)\n .div(BIN_STEP_BPS_U128_DEFAULT)\n .muln(2);\n\n const maxVolatilityAccumulator = new BN(deltaBinId.muln(BASIS_POINT_MAX));\n\n const squareVfaBin = maxVolatilityAccumulator\n .mul(new BN(BIN_STEP_BPS_DEFAULT))\n .pow(new BN(2));\n\n const baseFeeNumerator = new BN(bpsToFeeNumerator(baseFeeBps));\n const maxDynamicFeeNumerator = baseFeeNumerator.muln(20).divn(100); // default max dynamic fee = 20% of base fee.\n const vFee = maxDynamicFeeNumerator\n .mul(new BN(100_000_000_000))\n .sub(new BN(99_999_999_999));\n\n const variableFeeControl = vFee.div(squareVfaBin);\n\n return {\n binStep: BIN_STEP_BPS_DEFAULT,\n binStepU128: BIN_STEP_BPS_U128_DEFAULT,\n filterPeriod: DYNAMIC_FEE_FILTER_PERIOD_DEFAULT,\n decayPeriod: DYNAMIC_FEE_DECAY_PERIOD_DEFAULT,\n reductionFactor: DYNAMIC_FEE_REDUCTION_FACTOR_DEFAULT,\n maxVolatilityAccumulator: maxVolatilityAccumulator.toNumber(),\n variableFeeControl: variableFeeControl.toNumber(),\n };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { SCALE_OFFSET } from \"../constants\";\n\nconst MAX_EXPONENTIAL = new BN(0x80000);\n\nexport const ONE = new BN(1).shln(SCALE_OFFSET);\nconst MAX = new BN(2).pow(new BN(128)).sub(new BN(1));\n\nexport function pow(base: BN, exp: BN): BN {\n let invert = exp.isNeg();\n\n if (exp.isZero()) {\n return ONE;\n }\n\n exp = invert ? exp.abs() : exp;\n\n if (exp.gt(MAX_EXPONENTIAL)) {\n return new BN(0);\n }\n\n let squaredBase = base;\n let result = ONE;\n\n if (squaredBase.gte(result)) {\n squaredBase = MAX.div(squaredBase);\n invert = !invert;\n }\n\n if (!exp.and(new BN(0x1)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x2)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x4)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x8)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x10)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x20)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x40)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x80)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x100)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x200)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x400)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x800)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x1000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x2000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x4000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x8000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x10000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x20000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x40000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n if (result.isZero()) {\n return new BN(0);\n }\n\n if (invert) {\n result = MAX.div(result);\n }\n\n return result;\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport Decimal from \"decimal.js\";\nimport { Rounding } from \"../types\";\n\nexport function mulDiv(x: BN, y: BN, denominator: BN, rounding: Rounding): BN {\n const { div, mod } = x.mul(y).divmod(denominator);\n\n if (rounding == Rounding.Up && !mod.isZero()) {\n return div.add(new BN(1));\n }\n return div;\n}\n\nexport function q64ToDecimal(num: BN, decimalPlaces?: number): Decimal {\n return new Decimal(num.toString())\n .div(Decimal.pow(2, 64))\n .toDecimalPlaces(decimalPlaces);\n}\n\nexport function decimalToQ64(num: Decimal): BN {\n return new BN(num.mul(Decimal.pow(2, 64)).floor().toFixed());\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { Rounding } from \"../types\";\nimport { mulDiv } from \"../math\";\nimport { SCALE_OFFSET } from \"../constants\";\n\n// aToB\n// √P' = √P * L / (L + Δx*√P)\n// bToA\n// √P' = √P + Δy / L\nexport function getNextSqrtPrice(\n amount: BN,\n sqrtPrice: BN,\n liquidity: BN,\n aToB: boolean\n): BN {\n let result: BN;\n if (aToB) {\n const product = amount.mul(sqrtPrice);\n const denominator = liquidity.add(product);\n const numerator = liquidity.mul(sqrtPrice);\n result = numerator.add(denominator.sub(new BN(1))).div(denominator);\n } else {\n const quotient = amount.shln(SCALE_OFFSET * 2).div(liquidity);\n result = sqrtPrice.add(quotient);\n }\n\n return result;\n}\n\n// Δa = L * (1 / √P_lower - 1 / √P_upper)\n//\n// Δa = L * (√P_upper - √P_lower) / (√P_upper * √P_lower)\n//\n// L = Δa * √P_upper * √P_lower / (√P_upper - √P_lower)\n//\nexport function getLiquidityDeltaFromAmountA(\n amountA: BN,\n lowerSqrtPrice: BN, // current sqrt price\n upperSqrtPrice: BN // max sqrt price\n): BN {\n const product = amountA.mul(lowerSqrtPrice).mul(upperSqrtPrice); // Q128.128\n const denominator = upperSqrtPrice.sub(lowerSqrtPrice); // Q64.64\n\n return product.div(denominator);\n}\n\n// Δb = L (√P_upper - √P_lower)\n// L = Δb / (√P_upper - √P_lower)\nexport function getLiquidityDeltaFromAmountB(\n amountB: BN,\n lowerSqrtPrice: BN, // min sqrt price\n upperSqrtPrice: BN // current sqrt price,\n): BN {\n const denominator = upperSqrtPrice.sub(lowerSqrtPrice);\n const product = amountB.shln(128);\n return product.div(denominator);\n}\n\n// L = Δa * √P_upper * √P_lower / (√P_upper - √P_lower)\n// Δa = L * (√P_upper - √P_lower) / √P_upper * √P_lower\nexport function getAmountAFromLiquidityDelta(\n liquidity: BN,\n currentSqrtPrice: BN, // current sqrt price\n maxSqrtPrice: BN,\n rounding: Rounding\n): BN {\n // Q128.128\n const product = liquidity.mul(maxSqrtPrice.sub(currentSqrtPrice));\n // Q128.128\n const denominator = currentSqrtPrice.mul(maxSqrtPrice);\n // Q64.64\n if (rounding == Rounding.Up) {\n return product.add(denominator.sub(new BN(1))).div(denominator);\n }\n return product.div(denominator);\n}\n\n// L = Δb / (√P_upper - √P_lower)\n// Δb = L * (√P_upper - √P_lower)\nexport function getAmountBFromLiquidityDelta(\n liquidity: BN,\n currentSqrtPrice: BN, // current sqrt price,\n minSqrtPrice: BN,\n rounding: Rounding\n): BN {\n const one = new BN(1).shln(128);\n const deltaPrice = currentSqrtPrice.sub(minSqrtPrice);\n const result = liquidity.mul(deltaPrice); // Q128\n if (rounding == Rounding.Up) {\n return result.add(one.sub(new BN(1))).div(one);\n }\n return result.shrn(128);\n}\n","import {\n AddressLookupTableAccount,\n Commitment,\n ComputeBudgetProgram,\n Connection,\n PublicKey,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { MAX_CU_BUFFER, MIN_CU_BUFFER } from \"../constants\";\n\nexport const getSimulationComputeUnits = async (\n connection: Connection,\n instructions: Array<TransactionInstruction>,\n payer: PublicKey,\n lookupTables: Array<AddressLookupTableAccount> | [],\n commitment: Commitment = \"confirmed\"\n): Promise<number | null> => {\n const testInstructions = [\n // Set an arbitrarily high number in simulation\n // so we can be sure the transaction will succeed\n // and get the real compute units used\n ComputeBudgetProgram.setComputeUnitLimit({ units: 1_400_000 }),\n ...instructions,\n ];\n\n const testTransaction = new VersionedTransaction(\n new TransactionMessage({\n instructions: testInstructions,\n payerKey: payer,\n // RecentBlockhash can by any public key during simulation\n // since 'replaceRecentBlockhash' is set to 'true' below\n recentBlockhash: PublicKey.default.toString(),\n }).compileToV0Message(lookupTables)\n );\n\n const rpcResponse = await connection.simulateTransaction(testTransaction, {\n replaceRecentBlockhash: true,\n sigVerify: false,\n commitment,\n });\n\n if (rpcResponse?.value?.err) {\n const logs = rpcResponse.value.logs?.join(\"\\n • \") || \"No logs available\";\n throw new Error(\n `Transaction simulation failed:\\n •${logs}` +\n JSON.stringify(rpcResponse?.value?.err)\n );\n }\n\n return rpcResponse.value.unitsConsumed || null;\n};\n\n/**\n * Gets the estimated compute unit usage with a buffer.\n * @param connection A Solana connection object.\n * @param instructions The instructions of the transaction to simulate.\n * @param feePayer The public key of the fee payer.\n * @param buffer The buffer to add to the estimated compute unit usage. Max value is 1. Default value is 0.1 if not provided, and will be capped between 50k - 200k.\n * @returns The estimated compute unit usage with the buffer.\n */\nexport const getEstimatedComputeUnitUsageWithBuffer = async (\n connection: Connection,\n instructions: TransactionInstruction[],\n feePayer: PublicKey,\n buffer?: number\n) => {\n if (!buffer) {\n buffer = 0.1;\n }\n // Avoid negative value\n buffer = Math.max(0, buffer);\n // Limit buffer to 1\n buffer = Math.min(1, buffer);\n\n const estimatedComputeUnitUsage = await getSimulationComputeUnits(\n connection,\n instructions,\n feePayer,\n []\n );\n\n if (!estimatedComputeUnitUsage) {\n return 0;\n }\n\n let extraComputeUnitBuffer = estimatedComputeUnitUsage * buffer;\n if (extraComputeUnitBuffer > MAX_CU_BUFFER) {\n extraComputeUnitBuffer = MAX_CU_BUFFER;\n } else if (extraComputeUnitBuffer < MIN_CU_BUFFER) {\n extraComputeUnitBuffer = MIN_CU_BUFFER;\n }\n\n return estimatedComputeUnitUsage + extraComputeUnitBuffer;\n};\n\n/**\n * Gets the estimated compute unit usage with a buffer and converts it to a SetComputeUnitLimit instruction.\n * If the estimated compute unit usage cannot be retrieved, returns a SetComputeUnitLimit instruction with the fallback unit.\n * @param connection A Solana connection object.\n * @param instructions The instructions of the transaction to simulate.\n * @param feePayer The public key of the fee payer.\n * @param buffer The buffer to add to the estimated compute unit usage. Max value is 1. Default value is 0.1 if not provided, and will be capped between 50k - 200k.\n * @returns A SetComputeUnitLimit instruction with the estimated compute unit usage.\n */\nexport const getEstimatedComputeUnitIxWithBuffer = async (\n connection: Connection,\n instructions: TransactionInstruction[],\n feePayer: PublicKey,\n buffer?: number\n) => {\n const units = await getEstimatedComputeUnitUsageWithBuffer(\n connection,\n instructions,\n feePayer,\n buffer\n ).catch((error) => {\n console.error(\"Error::getEstimatedComputeUnitUsageWithBuffer\", error);\n return 1_400_000;\n });\n\n return ComputeBudgetProgram.setComputeUnitLimit({ units });\n};\n","import { BN } from \"@coral-xyz/anchor\";\nimport { BASIS_POINT_MAX, LIQUIDITY_SCALE } from \"../constants\";\nimport Decimal from \"decimal.js\";\nimport { PoolState, PositionState } from \"../types\";\nimport { PublicKey } from \"@solana/web3.js\";\n/**\n * It takes an amount and a slippage rate, and returns the maximum amount that can be received with\n * that slippage rate\n * @param {BN} amount - The amount of tokens you want to buy.\n * @param {number} rate - The maximum percentage of slippage you're willing to accept. (Max to 2 decimal place)\n * @returns The maximum amount of tokens that can be bought with the given amount of ETH, given the\n * slippage rate.\n */\nexport const getMaxAmountWithSlippage = (amount: BN, rate: number) => {\n const slippage = ((100 + rate) / 100) * BASIS_POINT_MAX;\n return amount.mul(new BN(slippage)).div(new BN(BASIS_POINT_MAX));\n};\n\n/**\n * It takes an amount and a slippage rate, and returns the minimum amount that will be received after\n * slippage\n * @param {BN} amount - The amount of tokens you want to sell.\n * @param {number} rate - The percentage of slippage you're willing to accept. (Max to 2 decimal place)\n * @returns The minimum amount that can be received after slippage is applied.\n */\nexport const getMinAmountWithSlippage = (amount: BN, rate: number) => {\n const slippage = ((100 - rate) / 100) * BASIS_POINT_MAX;\n return amount.mul(new BN(slippage)).div(new BN(BASIS_POINT_MAX));\n};\n\n/**\n * Calculate price impact as a percentage\n * @param nextSqrtPrice sqrt price after swap\n * @param currentSqrtPrice current pool sqrt price\n * @returns Price impact as a percentage (e.g., 1.5 means 1.5%)\n */\nexport const getPriceImpact = (\n nextSqrtPrice: BN,\n currentSqrtPrice: BN\n): number => {\n // price = (sqrtPrice)^2 * 10 ** (base_decimal - quote_decimal) / 2^128\n // k = 10^(base_decimal - quote_decimal) / 2^128\n // priceA = (sqrtPriceA)^2 * k\n // priceB = (sqrtPriceB)^2 * k\n // => price_impact = k * abs ( (sqrtPriceA)^2 - (sqrtPriceB)^2 ) * 100 / (sqrtPriceB)^2 * k\n // => price_impact = abs ( (sqrtPriceA)^2 - (sqrtPriceB)^2 ) * 100 / (sqrtPriceB)^2\n const diff = nextSqrtPrice\n .pow(new BN(2))\n .sub(currentSqrtPrice.pow(new BN(2)))\n .abs();\n\n return new Decimal(diff.toString())\n .div(new Decimal(currentSqrtPrice.pow(new BN(2)).toString()))\n .mul(100)\n .toNumber();\n};\n\n// (sqrtPrice)^2 * 10 ** (base_decimal - quote_decimal) / 2^128\nexport const getPriceFromSqrtPrice = (\n sqrtPrice: BN,\n tokenADecimal: number,\n tokenBDecimal: number\n): string => {\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 .toString();\n\n return price;\n};\n\n// sqrt(price / 10^(tokenADecimal - tokenBDecimal)) * 2^64\nexport const getSqrtPriceFromPrice = (\n price: string,\n tokenADecimal: number,\n tokenBDecimal: number\n): BN => {\n const decimalPrice = new Decimal(price);\n\n const adjustedByDecimals = decimalPrice.div(\n new Decimal(10 ** (tokenADecimal - tokenBDecimal))\n );\n\n const sqrtValue = Decimal.sqrt(adjustedByDecimals);\n\n const sqrtValueQ64 = sqrtValue.mul(Decimal.pow(2, 64));\n\n return new BN(sqrtValueQ64.floor().toFixed());\n};\n\n// fee = totalLiquidity * feePerTokenStore\n// precision: (totalLiquidity * feePerTokenStore) >> 128\nexport const getUnClaimReward = (\n poolState: PoolState,\n positionState: PositionState\n): {\n feeTokenA: BN;\n feeTokenB: BN;\n rewards: BN[];\n} => {\n const totalPositionLiquidity = positionState.unlockedLiquidity\n .add(positionState.vestedLiquidity)\n .add(positionState.permanentLockedLiquidity);\n\n const feeAPerTokenStored = new BN(\n Buffer.from(poolState.feeAPerLiquidity).reverse()\n ).sub(new BN(Buffer.from(positionState.feeAPerTokenCheckpoint).reverse()));\n\n const feeBPerTokenStored = new BN(\n Buffer.from(poolState.feeBPerLiquidity).reverse()\n ).sub(new BN(Buffer.from(positionState.feeBPerTokenCheckpoint).reverse()));\n\n const feeA = totalPositionLiquidity\n .mul(feeAPerTokenStored)\n .shrn(LIQUIDITY_SCALE);\n const feeB = totalPositionLiquidity\n .mul(feeBPerTokenStored)\n .shrn(LIQUIDITY_SCALE);\n\n return {\n feeTokenA: positionState.feeAPending.add(feeA),\n feeTokenB: positionState.feeBPending.add(feeB),\n rewards:\n positionState.rewardInfos.length > 0\n ? positionState.rewardInfos.map((item) => item.rewardPendings)\n : [],\n };\n};\n","import { GetProgramAccountsFilter, PublicKey } from \"@solana/web3.js\";\n\nexport const positionByPoolFilter = (\n pool: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: pool.toBase58(),\n offset: 8,\n },\n };\n};\n\nexport const vestingByPositionFilter = (\n position: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: position.toBase58(),\n offset: 8,\n },\n };\n};\n","import { BN } from \"@coral-xyz/anchor\";\nimport Decimal from \"decimal.js\";\n\n// a = L * (1/s - 1/pb)\n// b = L * (s - pa)\n// b/a = (s - pa) / (1/s - 1/pb)\n// With: x = 1 / pb and y = b/a\n// => s ^ 2 + s * (-pa + x * y) - y = 0\n// s = [(pa - xy) + √((xy - pa)² + 4y)]/2\nexport function calculateInitSqrtPrice(\n tokenAAmount: BN,\n tokenBAmount: BN,\n minSqrtPrice: BN,\n maxSqrtPrice: BN\n): BN {\n if (tokenAAmount.isZero() || tokenBAmount.isZero()) {\n throw new Error(\"Amount cannot be zero\");\n }\n\n const amountADecimal = new Decimal(tokenAAmount.toString());\n const amountBDecimal = new Decimal(tokenBAmount.toString());\n const minSqrtPriceDecimal = new Decimal(minSqrtPrice.toString()).div(\n Decimal.pow(2, 64)\n );\n const maxSqrtPriceDecimal = new Decimal(maxSqrtPrice.toString()).div(\n Decimal.pow(2, 64)\n );\n\n const x = new Decimal(1).div(maxSqrtPriceDecimal);\n const y = amountBDecimal.div(amountADecimal);\n const xy = x.mul(y);\n\n const paMinusXY = minSqrtPriceDecimal.sub(xy);\n const xyMinusPa = xy.sub(minSqrtPriceDecimal);\n\n const fourY = new Decimal(4).mul(y);\n\n const discriminant = xyMinusPa.mul(xyMinusPa).add(fourY);\n\n // sqrt_discriminant = √discriminant\n const sqrtDiscriminant = discriminant.sqrt();\n const result = paMinusXY\n .add(sqrtDiscriminant)\n .div(new Decimal(2))\n .mul(Decimal.pow(2, 64));\n\n return new BN(result.floor().toFixed());\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport {\n calculateFee,\n getEpochFee,\n getTransferFeeConfig,\n MAX_FEE_BASIS_POINTS,\n Mint,\n TransferFee,\n} from \"@solana/spl-token\";\n\ninterface TransferFeeIncludedAmount {\n amount: BN;\n transferFee: BN;\n}\n\nfunction calculatePreFeeAmount(transferFee: TransferFee, postFeeAmount: BN) {\n if (postFeeAmount.isZero()) {\n return new BN(0);\n }\n\n if (transferFee.transferFeeBasisPoints === 0) {\n return postFeeAmount;\n }\n\n const maximumFee = new BN(transferFee.maximumFee.toString());\n\n if (transferFee.transferFeeBasisPoints === MAX_FEE_BASIS_POINTS) {\n return postFeeAmount.add(maximumFee);\n }\n\n const ONE_IN_BASIS_POINTS = new BN(MAX_FEE_BASIS_POINTS);\n const numerator = postFeeAmount.mul(ONE_IN_BASIS_POINTS);\n const denominator = ONE_IN_BASIS_POINTS.sub(\n new BN(transferFee.transferFeeBasisPoints)\n );\n\n const rawPreFeeAmount = numerator\n .add(denominator)\n .sub(new BN(1))\n .div(denominator);\n\n if (rawPreFeeAmount.sub(postFeeAmount).gte(maximumFee)) {\n return postFeeAmount.add(maximumFee);\n }\n\n return rawPreFeeAmount;\n}\n\nfunction calculateInverseFee(transferFee: TransferFee, postFeeAmount: BN) {\n const preFeeAmount = calculatePreFeeAmount(transferFee, postFeeAmount);\n return new BN(\n calculateFee(transferFee, BigInt(preFeeAmount.toString())).toString()\n );\n}\n\nexport function calculateTransferFeeIncludedAmount(\n transferFeeExcludedAmount: BN,\n mint: Mint,\n currentEpoch: number\n): TransferFeeIncludedAmount {\n if (transferFeeExcludedAmount.isZero()) {\n return {\n amount: new BN(0),\n transferFee: new BN(0),\n };\n }\n\n const transferFeeConfig = getTransferFeeConfig(mint);\n\n if (transferFeeConfig === null) {\n return {\n amount: transferFeeExcludedAmount,\n transferFee: new BN(0),\n };\n }\n\n const epochFee = getEpochFee(transferFeeConfig, BigInt(currentEpoch));\n\n const transferFee =\n epochFee.transferFeeBasisPoints == MAX_FEE_BASIS_POINTS\n ? new BN(epochFee.maximumFee.toString())\n : calculateInverseFee(epochFee, transferFeeExcludedAmount);\n\n const transferFeeIncludedAmount = transferFeeExcludedAmount.add(transferFee);\n\n return {\n amount: transferFeeIncludedAmount,\n transferFee,\n };\n}\n\ninterface TransferFeeExcludedAmount {\n amount: BN;\n transferFee: BN;\n}\n\nexport function calculateTransferFeeExcludedAmount(\n transferFeeIncludedAmount: BN,\n mint: Mint,\n currentEpoch: number\n): TransferFeeExcludedAmount {\n const transferFeeConfig = getTransferFeeConfig(mint);\n if (transferFeeConfig === null) {\n return {\n amount: transferFeeIncludedAmount,\n transferFee: new BN(0),\n };\n }\n\n const transferFeeIncludedAmountN = BigInt(\n transferFeeIncludedAmount.toString()\n );\n\n const transferFee = calculateFee(\n getEpochFee(transferFeeConfig, BigInt(currentEpoch)),\n transferFeeIncludedAmountN\n );\n\n const transferFeeExcludedAmount = new BN(\n (transferFeeIncludedAmountN - transferFee).toString()\n );\n\n return {\n amount: transferFeeExcludedAmount,\n transferFee: new BN(transferFee.toString()),\n };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { PositionState, VestingState } from \"../types\";\nimport { min } from \"bn.js\";\n\n/**\n * Checks if a vesting schedule is ready for full release\n * @param vestingData The vesting account data\n * @param currentPoint Current timestamp or slot\n * @returns True if the vesting is complete and all liquidity can be released\n */\nexport function isVestingComplete(\n vestingData: VestingState,\n currentPoint: BN\n): boolean {\n const cliffPoint = vestingData.cliffPoint;\n const periodFrequency = vestingData.periodFrequency;\n const numberOfPeriods = vestingData.numberOfPeriod;\n\n const endPoint = cliffPoint.add(periodFrequency.muln(numberOfPeriods));\n\n return currentPoint.gte(endPoint);\n}\n\n/**\n * Gets the total amount of liquidity in the vesting schedule\n * @param vestingData The vesting account data\n * @returns The total locked liquidity amount\n */\nexport function getTotalLockedLiquidity(vestingData: VestingState): BN {\n return vestingData.cliffUnlockLiquidity.add(\n vestingData.liquidityPerPeriod.mul(new BN(vestingData.numberOfPeriod))\n );\n}\n\n/**\n * Calculates the available liquidity to withdraw based on vesting schedule\n * @param vestingData The vesting account data\n * @param positionData The position account data\n * @param currentPoint Current timestamp or slot\n * @returns The amount of liquidity available to withdraw\n */\nexport function getAvailableVestingLiquidity(\n vestingData: VestingState,\n currentPoint: BN\n): BN {\n const {\n cliffPoint,\n periodFrequency,\n cliffUnlockLiquidity,\n liquidityPerPeriod,\n numberOfPeriod,\n totalReleasedLiquidity,\n } = vestingData;\n\n if (currentPoint.lt(cliffPoint)) {\n return new BN(0);\n }\n\n if (periodFrequency.isZero()) {\n return cliffUnlockLiquidity;\n }\n\n let passedPeriod = new BN(currentPoint).sub(cliffPoint).div(periodFrequency);\n\n passedPeriod = min(passedPeriod, new BN(numberOfPeriod));\n\n // total unlocked liquidity: cliff + (periods * per_period)\n const unlockedLiquidity = cliffUnlockLiquidity.add(\n passedPeriod.mul(liquidityPerPeriod)\n );\n const availableReleasingLiquidity = unlockedLiquidity.sub(\n totalReleasedLiquidity\n );\n\n return availableReleasingLiquidity;\n}\n","export * from \"./CpAmm\";\nexport * from \"./pda\";\nexport * from \"./types\";\nexport * from \"./constants\";\nexport * from \"./helpers\";\nexport * from \"./types\";\nexport * from \"./math\";\nexport type { CpAmm as CpAmmTypes } from \"./idl/cp_amm\";\nimport CpAmmIDL from \"./idl/cp_amm.json\";\nexport default CpAmmIDL;\n"]}
|