{"version":3,"sources":["../src/utils/decimal.ts","../src/types/clmmpool.ts","../src/types/constants.ts","../src/idls/clmmpool.ts","../src/math/address.ts","../src/math/clmm.ts","../src/errors/errors.ts","../src/utils/pda.ts","../src/math/tick.ts","../src/math/utils.ts","../src/utils/address-util.ts","../src/utils/tick.ts","../src/math/swap.ts","../src/math/percentage.ts","../src/index.ts"],"sourcesContent":["import Decimal from 'decimal.js'\n\nDecimal.config({\n  precision: 64,\n  rounding: Decimal.ROUND_DOWN,\n  toExpNeg: -64,\n  toExpPos: 64,\n})\n\nexport default Decimal","import type { AnchorTypes } from \"@cremafinance/anchor-contrib\";\nimport type { PublicKey } from \"@solana/web3.js\";\nimport type BN from \"bn.js\";\n\nimport type { clmmpool } from \"../idls/clmmpool\";\n\n// export * from \"../idls/clmmpool\";\n\nexport type ClmmpoolTypes = AnchorTypes<clmmpool>;\n\ntype Accounts = ClmmpoolTypes[\"Accounts\"];\n\nexport enum AccountName {\n  ClmmConfig = \"ClmmConfig\",\n  ClmmPool = \"Clmmpool\",\n  FeeTier = \"FeeTier\",\n  Partner = \"Partner\",\n  Position = \"Position\",\n  TickArrayMap = \"TickArrayMap\",\n  TickArray = \"TickArray\",\n  Rewarder = \"Rewarder\",\n}\n\nexport type RewarderData = {\n  mintWrapper: PublicKey;\n  minter: PublicKey;\n  mint: PublicKey;\n  authority: PublicKey;\n  emissionsPerSecond: BN;\n  growthGlobal: BN;\n};\n\nexport type ClmmpoolData = Accounts[\"clmmpool\"];\nexport type ClmmConfigData = Accounts[\"clmmConfig\"];\nexport type PositionData = Accounts[\"position\"];\nexport type FeeTierData = Accounts[\"feeTier\"];\nexport type PartnerData = Accounts[\"partner\"];\nexport type TickArrayMapData = Accounts[\"tickArrayMap\"];\n\nexport type TickData = {\n  isInitialized: boolean;\n  index: number;\n  sqrtPrice: BN;\n  liquidityNet: BN;\n  liquidityGross: BN;\n  feeGrowthOutsideA: BN;\n  feeGrowthOutsideB: BN;\n  rewardGrowthOutside: BN[];\n};\n\nexport type TickArrayData = {\n  arrayIndex: number;\n  tickSpacing: number;\n  clmmpool: PublicKey;\n  ticks: TickData[];\n};\n\n// Program\nexport type ClmmpoolProgram = ClmmpoolTypes[\"Program\"];\n\n// Event\nexport type ClmmpoolEvent = ClmmpoolTypes[\"Events\"];\n","import { BN } from \"@project-serum/anchor\";\nimport * as anchor from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n/**\n * CLMM's config PublicKey.\n * @category Constants\n */\nexport const CLMMPOOLS_CONFIG = new PublicKey(\n  \"2LecshUwdy9xi7meFgHtFJQNSKk4KdTrcpvaB56dP2NQ\"\n);\n\nexport const CLMMPOOL_PROGRAM_ID = new PublicKey(\n  \"CLMM9tUoggJu2wagPkkqs9eFG4BWhVBZWkP1qv3Sp7tR\"\n);\n\nexport const MINT_WRAPPER_PROGRAM_ID = new PublicKey(\n  \"CMWr5a5feRxAeowwHcm1u5bYwmUvsAjcBbqLRcBshyAR\"\n);\n\n/**\n * The maximum tick index supported by the clmmpool program.\n * @category Constants\n */\nexport const MAX_TICK_INDEX = 443636;\n\n/**\n * The minimum tick index supported by the clmmpool program.\n * @category Constants\n */\nexport const MIN_TICK_INDEX = -443636;\n\n/**\n * The maximum sqrt-price supported by the clmmpool program.\n * @category Constants\n */\nexport const MAX_SQRT_PRICE = \"79226673515401279992447579055\";\n\n/**\n * The minimum sqrt-price supported by the clmmpool program.\n * @category Constants\n */\nexport const MIN_SQRT_PRICE = \"4295048016\";\n\n/**\n * The number of initialized ticks that a tick-array account can hold.\n * @category Constants\n */\nexport const TICK_ARRAY_SIZE = 64;\n\n/**\n * @category Constants\n */\nexport const METADATA_PROGRAM_ADDRESS = new PublicKey(\n  \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\n);\n\n/**\n * The denominator which the protocol fee rate is divided on.\n * @category Constants\n */\nexport const PROTOCOL_FEE_RATE_DENOMINATOR = new BN(10_000);\n\n/**\n * The denominator which the fee rate is divided on.\n * @category Constants\n */\nexport const FEE_RATE_DENOMINATOR = new BN(1_000_000);\n\n/**\n * The max and min number of tick arrays that tick array map holds.\n * @category Constants\n */\nexport const TICK_ARRAY_MAP_MAX_BIT_INDEX = 868 * 8 - 1;\nexport const TICK_ARRAY_MAP_MIN_BIT_INDEX = 0;\n\nexport const MAX_TICK_ARRAY = 3;\nexport const TICK_ARRAY_AMOUNT = 6943;\n\nexport const POSITION_NFT_UPDATE_AUTHORITY = new PublicKey(\n  \"5QW9BCx6oZKjSWCVyBZaVU8N4jwtFnged9TsiaXvDj8Q\"\n);\n\nexport const ZERO_BN = new anchor.BN(0);\n","export type clmmpool = {\n  \"version\": \"0.1.0\",\n  \"name\": \"clmmpool\",\n  \"instructions\": [\n    {\n      \"name\": \"initializeClmmConfig\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"protocolAuthority\",\n          \"type\": \"publicKey\"\n        },\n        {\n          \"name\": \"protocolFeeClaimAuthority\",\n          \"type\": \"publicKey\"\n        },\n        {\n          \"name\": \"createPoolAuthority\",\n          \"type\": \"publicKey\"\n        },\n        {\n          \"name\": \"protocolFeeRate\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"createFeeTier\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"feeTier\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"tickSpacing\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"feeRate\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"updateConfig\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"newProtocolFeeRate\",\n          \"type\": {\n            \"option\": \"u16\"\n          }\n        },\n        {\n          \"name\": \"createPoolAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          }\n        },\n        {\n          \"name\": \"claimAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"updateFeeRate\",\n      \"accounts\": [\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"newFeeRate\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"transferProtocolAuthority\",\n      \"accounts\": [\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"newAuthority\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"acceptProtocolAuthority\",\n      \"accounts\": [\n        {\n          \"name\": \"newAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"createClmmpool\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"feeTier\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenA\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenB\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"associatedTokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"initSqrtPrice\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"createTickArray\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArray\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"arrayIndex\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"createTickArrayMap\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"openPosition\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"positionMetadataAccount\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionEdition\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"associatedTokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"metadataProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"tickLowerIndex\",\n          \"type\": \"i32\"\n        },\n        {\n          \"name\": \"tickUpperIndex\",\n          \"type\": \"i32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"removePosition\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionMetadataAccount\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionEdition\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"metadataProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"increaseLiquidity\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayLower\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayUpper\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"deltaLiquidity\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"tokenAMax\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"tokenBMax\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"increaseLiquidityWithFixedToken\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayLower\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayUpper\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"tokenA\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"tokenB\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"isAFixed\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"decreaseLiquidity\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayLower\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayUpper\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"deltaLiquidity\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"tokenAMin\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"tokenBMin\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"swap\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenA\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenB\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"accountA\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"accountB\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"aToB\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"byAmountIn\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"amountLimit\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"sqrtPriceLimit\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"collectFee\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayLower\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayUpper\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"collectProtocolFee\",\n      \"accounts\": [\n        {\n          \"name\": \"protocolFeeClaimAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"createPartner\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"base\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"partnerFeeClaimAuthority\",\n          \"type\": \"publicKey\"\n        },\n        {\n          \"name\": \"feeRate\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"startTime\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"endTime\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ]\n    },\n    {\n      \"name\": \"updatePartner\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"authority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"newFeeRate\",\n          \"type\": {\n            \"option\": \"u16\"\n          }\n        },\n        {\n          \"name\": \"newClaimAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          }\n        },\n        {\n          \"name\": \"startTime\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        },\n        {\n          \"name\": \"endTime\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"collectPartnerFee\",\n      \"accounts\": [\n        {\n          \"name\": \"partnerFeeClaimAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAPartnerFeeVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBPartnerFeeVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"swapWithPartner\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenA\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenB\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"accountA\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"accountB\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"partnerAtaA\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"partnerAtaB\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"aToB\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"byAmountIn\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"amountLimit\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"sqrtPriceLimit\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initializeRewarder\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rewarderAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"rewarderTokenMint\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"rewarderIndex\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"mintWrapper\",\n          \"type\": \"publicKey\"\n        },\n        {\n          \"name\": \"minter\",\n          \"type\": \"publicKey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"updateRewarderEmission\",\n      \"accounts\": [\n        {\n          \"name\": \"rewarderAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"rewarderIndex\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"emissionsPerSecond\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"collectRewarder\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rewarderAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"mintWrapper\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"minter\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"mintWrapperProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rewardsTokenMint\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayLower\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayUpper\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"rewarderIndex\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"transferPartnerClaimAuthority\",\n      \"accounts\": [\n        {\n          \"name\": \"partnerClaimAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"newAuthority\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"acceptPartnerClaimAuthority\",\n      \"accounts\": [\n        {\n          \"name\": \"newAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"pauseClmmpool\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"unpauseClmmpool\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"createClmmpoolMetadata\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpoolMetadata\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"uri\",\n          \"type\": \"string\"\n        }\n      ]\n    }\n  ],\n  \"accounts\": [\n    {\n      \"name\": \"clmmConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"protocolAuthority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"protocolFeeClaimAuthority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"protocolFeeRate\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"pendingAuthority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"createPoolAuthority\",\n            \"type\": \"publicKey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"clmmpoolMetadata\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"clmmpool\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"positionNums\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"name\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"symbol\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uri\",\n            \"type\": \"string\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"clmmpool\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"clmmConfig\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"tokenA\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"tokenB\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"tokenAVault\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"tokenBVault\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"tickSpacing\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"tickSpacingSeed\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                2\n              ]\n            }\n          },\n          {\n            \"name\": \"feeRate\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"liquidity\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"currentSqrtPrice\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"currentTickIndex\",\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"feeGrowthGlobalA\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeGrowthGlobalB\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeProtocolTokenA\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"feeProtocolTokenB\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1\n              ]\n            }\n          },\n          {\n            \"name\": \"rewarderInfos\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": \"Rewarder\"\n                },\n                3\n              ]\n            }\n          },\n          {\n            \"name\": \"rewarderLastUpdatedTime\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"isPause\",\n            \"type\": \"bool\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"feeTier\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"feeRate\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"tickSpacing\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"partner\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"partnerFeeClaimAuthority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"pendingAuthority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"base\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"feeRate\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1\n              ]\n            }\n          },\n          {\n            \"name\": \"startTime\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"endTime\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"name\",\n            \"type\": \"string\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"position\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"clmmpool\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"positionNftMint\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"liquidity\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"tickLowerIndex\",\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"tickUpperIndex\",\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"feeGrowthInsideA\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeOwedA\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"feeGrowthInsideB\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeOwedB\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"rewarderInfos\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": \"PositionReward\"\n                },\n                3\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"tickArray\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"arrayIndex\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"tickSpacing\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"clmmpool\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"ticks\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": \"Tick\"\n                },\n                64\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"tickArrayMap\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"bitmap\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                868\n              ]\n            }\n          }\n        ]\n      }\n    }\n  ],\n  \"types\": [\n    {\n      \"name\": \"Rewarder\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mintWrapper\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"minter\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"authority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"emissionsPerSecond\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"growthGlobal\",\n            \"type\": \"u128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PositionReward\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"growthInside\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"amountOwed\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Tick\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"isInitialized\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"index\",\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"sqrtPrice\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"liquidityNet\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"liquidityGross\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeGrowthOutsideA\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeGrowthOutsideB\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"rewardGrowthOutside\",\n            \"type\": {\n              \"array\": [\n                \"u128\",\n                3\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ErrorCode\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"LOK\"\n          },\n          {\n            \"name\": \"NumberCastError\"\n          },\n          {\n            \"name\": \"ZeroMintAmount\"\n          },\n          {\n            \"name\": \"IntegerDowncastOverflow\"\n          },\n          {\n            \"name\": \"MultiplicationOverflow\"\n          },\n          {\n            \"name\": \"DivisorIsZero\"\n          },\n          {\n            \"name\": \"TokenAmountMinSubceeded\"\n          },\n          {\n            \"name\": \"TokenAmountMaxExceeded\"\n          },\n          {\n            \"name\": \"SqrtPriceOutOfBounds\"\n          },\n          {\n            \"name\": \"ProtocolFeeRateIllegal\"\n          },\n          {\n            \"name\": \"FeeRateIllegal\"\n          },\n          {\n            \"name\": \"TokenMintPairIllgal\"\n          },\n          {\n            \"name\": \"TickArrayStartIndexIllegal\"\n          },\n          {\n            \"name\": \"InvalidTickSpacing\"\n          },\n          {\n            \"name\": \"InvalidTickIndex\"\n          },\n          {\n            \"name\": \"InvalidTickArrayAccount\"\n          },\n          {\n            \"name\": \"PositionIsNotEmpty\"\n          },\n          {\n            \"name\": \"InvalidTokenAccountOwner\"\n          },\n          {\n            \"name\": \"TickNotFound\"\n          },\n          {\n            \"name\": \"TickNotInArray\"\n          },\n          {\n            \"name\": \"InvalidTokenAccount\"\n          },\n          {\n            \"name\": \"InvalidMint\"\n          },\n          {\n            \"name\": \"InvalidAuthority\"\n          },\n          {\n            \"name\": \"PositionAndClmmpoolNotMatch\"\n          },\n          {\n            \"name\": \"PositionIllegal\"\n          },\n          {\n            \"name\": \"InvalidDeltaLiquidity\"\n          },\n          {\n            \"name\": \"ConfigAndPoolNotMatch\"\n          },\n          {\n            \"name\": \"WrongSqrtPriceLimit\"\n          },\n          {\n            \"name\": \"TickArrayNotFound\"\n          },\n          {\n            \"name\": \"InvalidTickArrayIndex\"\n          },\n          {\n            \"name\": \"NextTickNotFound\"\n          },\n          {\n            \"name\": \"FeeGrowthIllegal\"\n          },\n          {\n            \"name\": \"LiquidityOverflow\"\n          },\n          {\n            \"name\": \"LiquidityUnderflow\"\n          },\n          {\n            \"name\": \"RemainerAmountUnderflow\"\n          },\n          {\n            \"name\": \"SwapAmountInOverflow\"\n          },\n          {\n            \"name\": \"SwapAmountOutOverflow\"\n          },\n          {\n            \"name\": \"SwapFeeAmountOverflow\"\n          },\n          {\n            \"name\": \"InvalidTime\"\n          },\n          {\n            \"name\": \"AmountInAboveMaximumLimit\"\n          },\n          {\n            \"name\": \"AmountOutBelowMaximumLimit\"\n          },\n          {\n            \"name\": \"InvalidFixedTokenType\"\n          },\n          {\n            \"name\": \"InvalidRewarderIndex\"\n          },\n          {\n            \"name\": \"InvalidPartner\"\n          },\n          {\n            \"name\": \"InvalidClmmpoolStatus\"\n          },\n          {\n            \"name\": \"InvalidClmmpoolMetadataAccount\"\n          }\n        ]\n      }\n    }\n  ],\n  \"events\": [\n    {\n      \"name\": \"AcceptPartnerClaimAuthorityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"newAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"oldAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"AcceptProtocolAuthorityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"newAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"oldAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CollectFeeEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CollectPartnerFeeEvent\",\n      \"fields\": [\n        {\n          \"name\": \"claimAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CollectProtocolFeeEvent\",\n      \"fields\": [\n        {\n          \"name\": \"claimAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CollectRewarderEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"rewarderMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreateClmmPoolEvent\",\n      \"fields\": [\n        {\n          \"name\": \"payer\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeTier\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tokenA\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tokenB\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreateClmmpoolMetadataEvent\",\n      \"fields\": [\n        {\n          \"name\": \"clmmpool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"clmmpoolMetadata\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreateFeeTierEvent\",\n      \"fields\": [\n        {\n          \"name\": \"payer\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeTier\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreatePartnerEvent\",\n      \"fields\": [\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreateTickArrayEvent\",\n      \"fields\": [\n        {\n          \"name\": \"payer\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tickArray\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"arrayIndex\",\n          \"type\": \"u16\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreateTickArrayMapEvent\",\n      \"fields\": [\n        {\n          \"name\": \"payer\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"DecreaseLiquidityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"deltaLiquidity\",\n          \"type\": \"u128\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"IncreaseLiquidityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"deltaLiquidity\",\n          \"type\": \"u128\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"IncreaseLiquidityWithFixedTokenEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"deltaLiquidity\",\n          \"type\": \"u128\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"InitializeClmmConfigEvent\",\n      \"fields\": [\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"claimAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"createPoolAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeRate\",\n          \"type\": \"u16\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"OpenPositionEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"position\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tickLowerIndex\",\n          \"type\": \"i32\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tickUpperIndex\",\n          \"type\": \"i32\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"RemovePositionEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"position\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"SwapEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"aToB\",\n          \"type\": \"bool\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountIn\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountOut\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"refAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"protocolAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"vaultAAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"vaultBAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"SwapWithPartnerEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"aToB\",\n          \"type\": \"bool\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountIn\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountOut\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"refAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"protocolAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"vaultAAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"vaultBAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"TransferPartnerClaimAuthorityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"newAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"oldAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"TransferProtocolAuthorityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"newAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"oldAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"UpdateConfigEvent\",\n      \"fields\": [\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"newProtocolFeeRate\",\n          \"type\": {\n            \"option\": \"u16\"\n          },\n          \"index\": false\n        },\n        {\n          \"name\": \"createPoolAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          },\n          \"index\": false\n        },\n        {\n          \"name\": \"claimAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          },\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"UpdateFeeRateEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"UpdatePartnerEvent\",\n      \"fields\": [\n        {\n          \"name\": \"authority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"newFeeRate\",\n          \"type\": {\n            \"option\": \"u16\"\n          },\n          \"index\": false\n        },\n        {\n          \"name\": \"newClaimAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          },\n          \"index\": false\n        }\n      ]\n    }\n  ]\n};\n\nexport const IDL: clmmpool = {\n  \"version\": \"0.1.0\",\n  \"name\": \"clmmpool\",\n  \"instructions\": [\n    {\n      \"name\": \"initializeClmmConfig\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"protocolAuthority\",\n          \"type\": \"publicKey\"\n        },\n        {\n          \"name\": \"protocolFeeClaimAuthority\",\n          \"type\": \"publicKey\"\n        },\n        {\n          \"name\": \"createPoolAuthority\",\n          \"type\": \"publicKey\"\n        },\n        {\n          \"name\": \"protocolFeeRate\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"createFeeTier\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"feeTier\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"tickSpacing\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"feeRate\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"updateConfig\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"newProtocolFeeRate\",\n          \"type\": {\n            \"option\": \"u16\"\n          }\n        },\n        {\n          \"name\": \"createPoolAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          }\n        },\n        {\n          \"name\": \"claimAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"updateFeeRate\",\n      \"accounts\": [\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"newFeeRate\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"transferProtocolAuthority\",\n      \"accounts\": [\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"newAuthority\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"acceptProtocolAuthority\",\n      \"accounts\": [\n        {\n          \"name\": \"newAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"createClmmpool\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"feeTier\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenA\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenB\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"associatedTokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"initSqrtPrice\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"createTickArray\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArray\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"arrayIndex\",\n          \"type\": \"u16\"\n        }\n      ]\n    },\n    {\n      \"name\": \"createTickArrayMap\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"openPosition\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"positionMetadataAccount\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionEdition\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"associatedTokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"metadataProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"tickLowerIndex\",\n          \"type\": \"i32\"\n        },\n        {\n          \"name\": \"tickUpperIndex\",\n          \"type\": \"i32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"removePosition\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionMetadataAccount\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionEdition\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"metadataProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"increaseLiquidity\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayLower\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayUpper\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"deltaLiquidity\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"tokenAMax\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"tokenBMax\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"increaseLiquidityWithFixedToken\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayLower\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayUpper\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"tokenA\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"tokenB\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"isAFixed\",\n          \"type\": \"bool\"\n        }\n      ]\n    },\n    {\n      \"name\": \"decreaseLiquidity\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayLower\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayUpper\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"deltaLiquidity\",\n          \"type\": \"u128\"\n        },\n        {\n          \"name\": \"tokenAMin\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"tokenBMin\",\n          \"type\": \"u64\"\n        }\n      ]\n    },\n    {\n      \"name\": \"swap\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenA\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenB\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"accountA\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"accountB\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"aToB\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"byAmountIn\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"amountLimit\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"sqrtPriceLimit\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"collectFee\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayLower\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayUpper\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"collectProtocolFee\",\n      \"accounts\": [\n        {\n          \"name\": \"protocolFeeClaimAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"createPartner\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"base\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"partnerFeeClaimAuthority\",\n          \"type\": \"publicKey\"\n        },\n        {\n          \"name\": \"feeRate\",\n          \"type\": \"u16\"\n        },\n        {\n          \"name\": \"startTime\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"endTime\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ]\n    },\n    {\n      \"name\": \"updatePartner\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"authority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"newFeeRate\",\n          \"type\": {\n            \"option\": \"u16\"\n          }\n        },\n        {\n          \"name\": \"newClaimAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          }\n        },\n        {\n          \"name\": \"startTime\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        },\n        {\n          \"name\": \"endTime\",\n          \"type\": {\n            \"option\": \"u64\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"collectPartnerFee\",\n      \"accounts\": [\n        {\n          \"name\": \"partnerFeeClaimAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAPartnerFeeVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBPartnerFeeVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"swapWithPartner\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenA\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenB\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"accountA\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"accountB\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenAVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenBVault\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"partnerAtaA\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"partnerAtaB\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"aToB\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"byAmountIn\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"amountLimit\",\n          \"type\": \"u64\"\n        },\n        {\n          \"name\": \"sqrtPriceLimit\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"initializeRewarder\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rewarderAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"rewarderTokenMint\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"rewarderIndex\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"mintWrapper\",\n          \"type\": \"publicKey\"\n        },\n        {\n          \"name\": \"minter\",\n          \"type\": \"publicKey\"\n        }\n      ]\n    },\n    {\n      \"name\": \"updateRewarderEmission\",\n      \"accounts\": [\n        {\n          \"name\": \"rewarderAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"rewarderIndex\",\n          \"type\": \"u8\"\n        },\n        {\n          \"name\": \"emissionsPerSecond\",\n          \"type\": \"u128\"\n        }\n      ]\n    },\n    {\n      \"name\": \"collectRewarder\",\n      \"accounts\": [\n        {\n          \"name\": \"owner\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"position\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"positionAta\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rewarderAta\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"mintWrapper\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"minter\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"mintWrapperProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"rewardsTokenMint\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayLower\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tickArrayUpper\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"tokenProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"rewarderIndex\",\n          \"type\": \"u8\"\n        }\n      ]\n    },\n    {\n      \"name\": \"transferPartnerClaimAuthority\",\n      \"accounts\": [\n        {\n          \"name\": \"partnerClaimAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"newAuthority\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"acceptPartnerClaimAuthority\",\n      \"accounts\": [\n        {\n          \"name\": \"newAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"partner\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"pauseClmmpool\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"unpauseClmmpool\",\n      \"accounts\": [\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": true,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": []\n    },\n    {\n      \"name\": \"createClmmpoolMetadata\",\n      \"accounts\": [\n        {\n          \"name\": \"payer\",\n          \"isMut\": true,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"clmmConfig\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpool\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"clmmpoolMetadata\",\n          \"isMut\": true,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"isMut\": false,\n          \"isSigner\": true\n        },\n        {\n          \"name\": \"rent\",\n          \"isMut\": false,\n          \"isSigner\": false\n        },\n        {\n          \"name\": \"systemProgram\",\n          \"isMut\": false,\n          \"isSigner\": false\n        }\n      ],\n      \"args\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"uri\",\n          \"type\": \"string\"\n        }\n      ]\n    }\n  ],\n  \"accounts\": [\n    {\n      \"name\": \"clmmConfig\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"protocolAuthority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"protocolFeeClaimAuthority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"protocolFeeRate\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"pendingAuthority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"createPoolAuthority\",\n            \"type\": \"publicKey\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"clmmpoolMetadata\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"clmmpool\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"positionNums\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"name\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"symbol\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"uri\",\n            \"type\": \"string\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"clmmpool\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"clmmConfig\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"tokenA\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"tokenB\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"tokenAVault\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"tokenBVault\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"tickSpacing\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"tickSpacingSeed\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                2\n              ]\n            }\n          },\n          {\n            \"name\": \"feeRate\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"liquidity\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"currentSqrtPrice\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"currentTickIndex\",\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"feeGrowthGlobalA\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeGrowthGlobalB\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeProtocolTokenA\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"feeProtocolTokenB\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1\n              ]\n            }\n          },\n          {\n            \"name\": \"rewarderInfos\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": \"Rewarder\"\n                },\n                3\n              ]\n            }\n          },\n          {\n            \"name\": \"rewarderLastUpdatedTime\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"isPause\",\n            \"type\": \"bool\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"feeTier\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"feeRate\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"tickSpacing\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": \"u8\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"partner\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"partnerFeeClaimAuthority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"pendingAuthority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"base\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"feeRate\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"bump\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                1\n              ]\n            }\n          },\n          {\n            \"name\": \"startTime\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"endTime\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"name\",\n            \"type\": \"string\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"position\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"clmmpool\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"positionNftMint\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"liquidity\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"tickLowerIndex\",\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"tickUpperIndex\",\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"feeGrowthInsideA\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeOwedA\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"feeGrowthInsideB\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeOwedB\",\n            \"type\": \"u64\"\n          },\n          {\n            \"name\": \"rewarderInfos\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": \"PositionReward\"\n                },\n                3\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"tickArray\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"arrayIndex\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"tickSpacing\",\n            \"type\": \"u16\"\n          },\n          {\n            \"name\": \"clmmpool\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"ticks\",\n            \"type\": {\n              \"array\": [\n                {\n                  \"defined\": \"Tick\"\n                },\n                64\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"tickArrayMap\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"bitmap\",\n            \"type\": {\n              \"array\": [\n                \"u8\",\n                868\n              ]\n            }\n          }\n        ]\n      }\n    }\n  ],\n  \"types\": [\n    {\n      \"name\": \"Rewarder\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"mintWrapper\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"minter\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"mint\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"authority\",\n            \"type\": \"publicKey\"\n          },\n          {\n            \"name\": \"emissionsPerSecond\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"growthGlobal\",\n            \"type\": \"u128\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"PositionReward\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"growthInside\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"amountOwed\",\n            \"type\": \"u64\"\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"Tick\",\n      \"type\": {\n        \"kind\": \"struct\",\n        \"fields\": [\n          {\n            \"name\": \"isInitialized\",\n            \"type\": \"bool\"\n          },\n          {\n            \"name\": \"index\",\n            \"type\": \"i32\"\n          },\n          {\n            \"name\": \"sqrtPrice\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"liquidityNet\",\n            \"type\": \"i128\"\n          },\n          {\n            \"name\": \"liquidityGross\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeGrowthOutsideA\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"feeGrowthOutsideB\",\n            \"type\": \"u128\"\n          },\n          {\n            \"name\": \"rewardGrowthOutside\",\n            \"type\": {\n              \"array\": [\n                \"u128\",\n                3\n              ]\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"name\": \"ErrorCode\",\n      \"type\": {\n        \"kind\": \"enum\",\n        \"variants\": [\n          {\n            \"name\": \"LOK\"\n          },\n          {\n            \"name\": \"NumberCastError\"\n          },\n          {\n            \"name\": \"ZeroMintAmount\"\n          },\n          {\n            \"name\": \"IntegerDowncastOverflow\"\n          },\n          {\n            \"name\": \"MultiplicationOverflow\"\n          },\n          {\n            \"name\": \"DivisorIsZero\"\n          },\n          {\n            \"name\": \"TokenAmountMinSubceeded\"\n          },\n          {\n            \"name\": \"TokenAmountMaxExceeded\"\n          },\n          {\n            \"name\": \"SqrtPriceOutOfBounds\"\n          },\n          {\n            \"name\": \"ProtocolFeeRateIllegal\"\n          },\n          {\n            \"name\": \"FeeRateIllegal\"\n          },\n          {\n            \"name\": \"TokenMintPairIllgal\"\n          },\n          {\n            \"name\": \"TickArrayStartIndexIllegal\"\n          },\n          {\n            \"name\": \"InvalidTickSpacing\"\n          },\n          {\n            \"name\": \"InvalidTickIndex\"\n          },\n          {\n            \"name\": \"InvalidTickArrayAccount\"\n          },\n          {\n            \"name\": \"PositionIsNotEmpty\"\n          },\n          {\n            \"name\": \"InvalidTokenAccountOwner\"\n          },\n          {\n            \"name\": \"TickNotFound\"\n          },\n          {\n            \"name\": \"TickNotInArray\"\n          },\n          {\n            \"name\": \"InvalidTokenAccount\"\n          },\n          {\n            \"name\": \"InvalidMint\"\n          },\n          {\n            \"name\": \"InvalidAuthority\"\n          },\n          {\n            \"name\": \"PositionAndClmmpoolNotMatch\"\n          },\n          {\n            \"name\": \"PositionIllegal\"\n          },\n          {\n            \"name\": \"InvalidDeltaLiquidity\"\n          },\n          {\n            \"name\": \"ConfigAndPoolNotMatch\"\n          },\n          {\n            \"name\": \"WrongSqrtPriceLimit\"\n          },\n          {\n            \"name\": \"TickArrayNotFound\"\n          },\n          {\n            \"name\": \"InvalidTickArrayIndex\"\n          },\n          {\n            \"name\": \"NextTickNotFound\"\n          },\n          {\n            \"name\": \"FeeGrowthIllegal\"\n          },\n          {\n            \"name\": \"LiquidityOverflow\"\n          },\n          {\n            \"name\": \"LiquidityUnderflow\"\n          },\n          {\n            \"name\": \"RemainerAmountUnderflow\"\n          },\n          {\n            \"name\": \"SwapAmountInOverflow\"\n          },\n          {\n            \"name\": \"SwapAmountOutOverflow\"\n          },\n          {\n            \"name\": \"SwapFeeAmountOverflow\"\n          },\n          {\n            \"name\": \"InvalidTime\"\n          },\n          {\n            \"name\": \"AmountInAboveMaximumLimit\"\n          },\n          {\n            \"name\": \"AmountOutBelowMaximumLimit\"\n          },\n          {\n            \"name\": \"InvalidFixedTokenType\"\n          },\n          {\n            \"name\": \"InvalidRewarderIndex\"\n          },\n          {\n            \"name\": \"InvalidPartner\"\n          },\n          {\n            \"name\": \"InvalidClmmpoolStatus\"\n          },\n          {\n            \"name\": \"InvalidClmmpoolMetadataAccount\"\n          }\n        ]\n      }\n    }\n  ],\n  \"events\": [\n    {\n      \"name\": \"AcceptPartnerClaimAuthorityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"newAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"oldAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"AcceptProtocolAuthorityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"newAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"oldAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CollectFeeEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CollectPartnerFeeEvent\",\n      \"fields\": [\n        {\n          \"name\": \"claimAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CollectProtocolFeeEvent\",\n      \"fields\": [\n        {\n          \"name\": \"claimAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CollectRewarderEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"rewarderMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreateClmmPoolEvent\",\n      \"fields\": [\n        {\n          \"name\": \"payer\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeTier\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tokenA\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tokenB\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreateClmmpoolMetadataEvent\",\n      \"fields\": [\n        {\n          \"name\": \"clmmpool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"clmmpoolMetadata\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreateFeeTierEvent\",\n      \"fields\": [\n        {\n          \"name\": \"payer\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeTier\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreatePartnerEvent\",\n      \"fields\": [\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"protocolAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreateTickArrayEvent\",\n      \"fields\": [\n        {\n          \"name\": \"payer\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tickArray\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"arrayIndex\",\n          \"type\": \"u16\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"CreateTickArrayMapEvent\",\n      \"fields\": [\n        {\n          \"name\": \"payer\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tickArrayMap\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"DecreaseLiquidityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"deltaLiquidity\",\n          \"type\": \"u128\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"IncreaseLiquidityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"deltaLiquidity\",\n          \"type\": \"u128\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"IncreaseLiquidityWithFixedTokenEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"deltaLiquidity\",\n          \"type\": \"u128\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountA\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountB\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"InitializeClmmConfigEvent\",\n      \"fields\": [\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"claimAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"createPoolAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeRate\",\n          \"type\": \"u16\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"OpenPositionEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"position\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tickLowerIndex\",\n          \"type\": \"i32\",\n          \"index\": false\n        },\n        {\n          \"name\": \"tickUpperIndex\",\n          \"type\": \"i32\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"RemovePositionEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"positionNftMint\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"position\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"SwapEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"aToB\",\n          \"type\": \"bool\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountIn\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountOut\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"refAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"protocolAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"vaultAAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"vaultBAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"SwapWithPartnerEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"owner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"aToB\",\n          \"type\": \"bool\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountIn\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"amountOut\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"refAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"feeAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"protocolAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"vaultAAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        },\n        {\n          \"name\": \"vaultBAmount\",\n          \"type\": \"u64\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"TransferPartnerClaimAuthorityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"newAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"oldAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"TransferProtocolAuthorityEvent\",\n      \"fields\": [\n        {\n          \"name\": \"newAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"oldAuthority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"UpdateConfigEvent\",\n      \"fields\": [\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"newProtocolFeeRate\",\n          \"type\": {\n            \"option\": \"u16\"\n          },\n          \"index\": false\n        },\n        {\n          \"name\": \"createPoolAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          },\n          \"index\": false\n        },\n        {\n          \"name\": \"claimAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          },\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"UpdateFeeRateEvent\",\n      \"fields\": [\n        {\n          \"name\": \"pool\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"config\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"UpdatePartnerEvent\",\n      \"fields\": [\n        {\n          \"name\": \"authority\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"partner\",\n          \"type\": \"publicKey\",\n          \"index\": false\n        },\n        {\n          \"name\": \"newFeeRate\",\n          \"type\": {\n            \"option\": \"u16\"\n          },\n          \"index\": false\n        },\n        {\n          \"name\": \"newClaimAuthority\",\n          \"type\": {\n            \"option\": \"publicKey\"\n          },\n          \"index\": false\n        }\n      ]\n    }\n  ]\n};","import type { Address } from \"@project-serum/anchor\";\nimport { translateAddress } from \"@project-serum/anchor\";\nimport { findProgramAddressSync } from \"@project-serum/anchor/dist/cjs/utils/pubkey\";\nimport type { PublicKey } from \"@solana/web3.js\";\n\nexport declare type PDA = {\n  publicKey: PublicKey;\n  bump: number;\n};\n/**\n * AddressUtil - the utils set for address struct.\n */\nexport class AddressUtil {\n  /**\n   * Transforms an address to a PublicKey.\n   * \n   * @param address \n   * @returns \n   */\n  static toPubKey(address: Address): PublicKey {\n    return translateAddress(address);\n  }\n\n  /**\n   * Transform many address to a PublicKey.\n   * \n   * @param addresses \n   * @returns \n   */\n  static toPubKeys(addresses: Address[]): PublicKey[] {\n    return addresses.map((address) => AddressUtil.toPubKey(address));\n  }\n\n  /**\n   * Get the PDA for a given program address.\n   * \n   * @param seeds \n   * @param programId \n   * @returns \n   */\n  static findProgramAddress(\n    seeds: (Uint8Array | Buffer)[],\n    programId: PublicKey\n  ): PDA {\n    const [publicKey, bump] = findProgramAddressSync(seeds, programId);\n    return { publicKey, bump };\n  }\n}\n","import { u64 } from \"@solana/spl-token\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport {\n  ClmmpoolsError,\n  MathErrorCode,\n  TokenErrorCode,\n} from \"../errors/errors\";\n\nimport type {\n  ClmmpoolData,\n  TickArrayMapData,\n  TickData,\n} from \"../types/clmmpool\";\nimport {\n  CLMMPOOL_PROGRAM_ID,\n  FEE_RATE_DENOMINATOR,\n  MAX_SQRT_PRICE,\n  MIN_SQRT_PRICE,\n  TICK_ARRAY_MAP_MAX_BIT_INDEX,\n  TICK_ARRAY_MAP_MIN_BIT_INDEX,\n  ZERO_BN,\n} from \"../types/constants\";\nimport { PDAUtil, TickUtil } from \"../utils\";\nimport { SwapUtils } from \"./swap\";\nimport { MathUtil, ONE, U64_MAX, ZERO } from \"./utils\";\n\nexport type SwapStepResult = {\n  amountIn: BN;\n  amountOut: BN;\n  nextSqrtPrice: BN;\n  feeAmount: BN;\n};\n\nexport type SwapResult = {\n  amountIn: BN;\n  amountOut: BN;\n  feeAmount: BN;\n  refAmount: BN;\n  nextSqrtPrice: BN;\n  crossTickNum: number;\n  swapTickArrays: PublicKey[];\n};\n\n/**\n * Get the amount A delta about two prices, for give amount of liquidity.\n * `delta_a = (liquidity * delta_sqrt_price) / sqrt_price_upper * sqrt_price_lower)`\n *\n * @param sqrtPrice0 - A sqrt price\n * @param sqrtPrice1 - Another sqrt price\n * @param liquidity - The amount of usable liquidity\n * @param roundUp - Whether to round the amount up or down\n * @returns\n */\nexport function getDeltaA(\n  sqrtPrice0: BN,\n  sqrtPrice1: BN,\n  liquidity: BN,\n  roundUp: boolean\n): BN {\n  const sqrtPriceDiff = sqrtPrice0.gt(sqrtPrice1)\n    ? sqrtPrice0.sub(sqrtPrice1)\n    : sqrtPrice1.sub(sqrtPrice0);\n  const numberator = liquidity.mul(sqrtPriceDiff).shln(64);\n  const denomminator = sqrtPrice0.mul(sqrtPrice1);\n  const quotient = numberator.div(denomminator);\n  const remainder = numberator.mod(denomminator);\n  const result =\n    roundUp && !remainder.eq(ZERO) ? quotient.add(new BN(1)) : quotient;\n  if (MathUtil.isOverflow(result, 64)) {\n    throw new ClmmpoolsError(\n      \"Result large than u64 max\",\n      MathErrorCode.IntegerDowncastOverflow\n    );\n  }\n  return result;\n}\n\n/**\n * Get the amount B delta about two prices, for give amount of liquidity.\n * `delta_a = (liquidity * delta_sqrt_price) / sqrt_price_upper * sqrt_price_lower)`\n *\n * @param sqrtPrice0 - A sqrt price\n * @param sqrtPrice1 - Another sqrt price\n * @param liquidity - The amount of usable liquidity\n * @param roundUp - Whether to round the amount up or down\n * @returns\n */\nexport function getDeltaB(\n  sqrtPrice0: BN,\n  sqrtPrice1: BN,\n  liquidity: BN,\n  roundUp: boolean\n): BN {\n  const sqrtPriceDiff = sqrtPrice0.gt(sqrtPrice1)\n    ? sqrtPrice0.sub(sqrtPrice1)\n    : sqrtPrice1.sub(sqrtPrice0);\n  if (liquidity.eq(ZERO) || sqrtPriceDiff.eq(ZERO)) {\n    return ZERO;\n  }\n  const p = liquidity.mul(sqrtPriceDiff);\n  const shoudRoundUp = roundUp && p.and(U64_MAX).gt(ZERO);\n  const result = shoudRoundUp ? p.shrn(64).add(ONE) : p.shrn(64);\n  if (MathUtil.isOverflow(result, 64)) {\n    throw new ClmmpoolsError(\n      \"Result large than u64 max\",\n      MathErrorCode.IntegerDowncastOverflow\n    );\n  }\n  return result;\n}\n\n/**\n * Get the next sqrt price from give a delta of token_a.\n * `new_sqrt_price = (sqrt_price * liquidity) / (liquidity +/- amount * sqrt_price)`\n *\n * @param sqrtPrice - The start sqrt price\n * @param liquidity - The amount of usable liquidity\n * @param amount - The amount of token_a\n * @param byAmountIn - Weather to fixed input\n */\nexport function getNextSqrtPriceAUp(\n  sqrtPrice: BN,\n  liquidity: BN,\n  amount: BN,\n  byAmountIn: boolean\n): BN {\n  if (amount.eq(ZERO)) {\n    return sqrtPrice;\n  }\n  const numberator = MathUtil.checkMulShiftLeft(sqrtPrice, liquidity, 64, 256);\n  const liquidityShl64 = liquidity.shln(64);\n  const product = MathUtil.checkMul(sqrtPrice, amount, 256);\n  if (!byAmountIn && liquidityShl64.lte(product)) {\n    throw new ClmmpoolsError(\n      \"getNextSqrtPriceAUp - Unable to divide liquidityShl64 by product\",\n      MathErrorCode.DivideByZero\n    );\n  }\n  const nextSqrtPrice = byAmountIn\n    ? MathUtil.checkDivRoundUpIf(numberator, liquidityShl64.add(product), true)\n    : MathUtil.checkDivRoundUpIf(numberator, liquidityShl64.sub(product), true);\n  if (nextSqrtPrice.lt(new BN(MIN_SQRT_PRICE))) {\n    throw new ClmmpoolsError(\n      \"getNextSqrtPriceAUp - Next sqrt price less than min sqrt price\",\n      TokenErrorCode.TokenAmountMinSubceeded\n    );\n  }\n  if (nextSqrtPrice.gt(new BN(MAX_SQRT_PRICE))) {\n    throw new ClmmpoolsError(\n      \"getNextSqrtPriceAUp - Next sqrt price greater than max sqrt price\",\n      TokenErrorCode.TokenAmountMaxExceeded\n    );\n  }\n\n  return nextSqrtPrice;\n}\n\n/**\n * Get the next sqrt price from give a delta of token_b.\n * `new_sqrt_price = (sqrt_price +(delta_b / liquidity)`\n *\n * @param sqrtPrice - The start sqrt price\n * @param liquidity - The amount of usable liquidity\n * @param amount - The amount of token_a\n * @param byAmountIn - Weather to fixed input\n */\nexport function getNextSqrtPriceBDown(\n  sqrtPrice: BN,\n  liquidity: BN,\n  amount: BN,\n  byAmountIn: boolean\n): BN {\n  const deltaSqrtPrice = MathUtil.checkDivRoundUpIf(\n    amount.shln(64),\n    liquidity,\n    !byAmountIn\n  );\n  const nextSqrtPrice = byAmountIn\n    ? sqrtPrice.add(deltaSqrtPrice)\n    : sqrtPrice.sub(deltaSqrtPrice);\n\n  if (\n    nextSqrtPrice.lt(new BN(MIN_SQRT_PRICE)) ||\n    nextSqrtPrice.gt(new BN(MAX_SQRT_PRICE))\n  ) {\n    throw new ClmmpoolsError(\n      \"getNextSqrtPriceAUp - Next sqrt price out of bounds\",\n      TokenErrorCode.SqrtPriceOutOfBounds\n    );\n  }\n\n  return nextSqrtPrice;\n}\n\n/**\n * Get next sqrt price from input parameter.\n *\n * @param sqrtPrice\n * @param liquidity\n * @param amount\n * @param aToB\n * @returns\n */\nexport function getNextSqrtPriceFromInput(\n  sqrtPrice: BN,\n  liquidity: BN,\n  amount: BN,\n  aToB: boolean\n): BN {\n  return aToB\n    ? getNextSqrtPriceAUp(sqrtPrice, liquidity, amount, true)\n    : getNextSqrtPriceBDown(sqrtPrice, liquidity, amount, true);\n}\n\n/**\n * Get the next sqrt price from output parameters.\n *\n * @param sqrtPrice\n * @param liquidity\n * @param amount\n * @param aToB\n * @returns\n */\nexport function getNextSqrtPriceFromOutput(\n  sqrtPrice: BN,\n  liquidity: BN,\n  amount: BN,\n  aToB: boolean\n): BN {\n  return aToB\n    ? getNextSqrtPriceBDown(sqrtPrice, liquidity, amount, false)\n    : getNextSqrtPriceAUp(sqrtPrice, liquidity, amount, false);\n}\n\n/**\n * Get the amount of delta_a or delta_b from input parameters, and round up result.\n *\n * @param currentSqrtPrice\n * @param targetSqrtPrice\n * @param liquidity\n * @param aToB\n * @returns\n */\nexport function getDeltaUpFromInput(\n  currentSqrtPrice: BN,\n  targetSqrtPrice: BN,\n  liquidity: BN,\n  aToB: boolean\n): BN {\n  return aToB\n    ? getDeltaA(targetSqrtPrice, currentSqrtPrice, liquidity, true)\n    : getDeltaB(currentSqrtPrice, targetSqrtPrice, liquidity, true);\n}\n\n/**\n * Get the amount of delta_a or delta_b from output parameters, and round down result.\n *\n * @param currentSqrtPrice\n * @param targetSqrtPrice\n * @param liquidity\n * @param aTob\n * @returns\n */\nexport function getDeltaDownFromOutput(\n  currentSqrtPrice: BN,\n  targetSqrtPrice: BN,\n  liquidity: BN,\n  aTob: boolean\n): BN {\n  return aTob\n    ? getDeltaB(targetSqrtPrice, currentSqrtPrice, liquidity, false)\n    : getDeltaA(currentSqrtPrice, targetSqrtPrice, liquidity, false);\n}\n\n/**\n * Simulate per step of swap on every tick.\n *\n * @param currentSqrtPrice\n * @param targetSqrtPrice\n * @param liquidity\n * @param amount\n * @param feeRate\n * @param byAmountIn\n * @returns\n */\nexport function computeSwapStep(\n  currentSqrtPrice: BN,\n  targetSqrtPrice: BN,\n  liquidity: BN,\n  amount: BN,\n  feeRate: BN,\n  byAmountIn: boolean\n): SwapStepResult {\n  if (liquidity === ZERO) {\n    return {\n      amountIn: ZERO_BN,\n      amountOut: ZERO_BN,\n      nextSqrtPrice: targetSqrtPrice,\n      feeAmount: ZERO_BN,\n    };\n  }\n\n  const aToB = currentSqrtPrice.gte(targetSqrtPrice);\n\n  let amountIn: BN;\n  let amountOut: BN;\n  let nextSqrtPrice: BN;\n  let feeAmount: BN;\n\n  if (byAmountIn) {\n    const amountRemain = MathUtil.checkMulDivFloor(\n      amount,\n      MathUtil.checkUnsignedSub(FEE_RATE_DENOMINATOR, feeRate),\n      FEE_RATE_DENOMINATOR,\n      64\n    );\n    const maxAmountIn = getDeltaUpFromInput(\n      currentSqrtPrice,\n      targetSqrtPrice,\n      liquidity,\n      aToB\n    );\n\n    if (maxAmountIn.gt(amountRemain)) {\n      amountIn = amountRemain;\n      feeAmount = MathUtil.checkUnsignedSub(amount, amountRemain);\n      nextSqrtPrice = getNextSqrtPriceFromInput(\n        currentSqrtPrice,\n        liquidity,\n        amountRemain,\n        aToB\n      );\n    } else {\n      amountIn = maxAmountIn;\n      feeAmount = MathUtil.checkMulDivCeil(\n        amountIn,\n        feeRate,\n        FEE_RATE_DENOMINATOR.sub(feeRate),\n        64\n      );\n      nextSqrtPrice = targetSqrtPrice;\n    }\n    amountOut = getDeltaDownFromOutput(\n      currentSqrtPrice,\n      nextSqrtPrice,\n      liquidity,\n      aToB\n    );\n  } else {\n    const maxAmountOut = getDeltaDownFromOutput(\n      currentSqrtPrice,\n      targetSqrtPrice,\n      liquidity,\n      aToB\n    );\n    if (maxAmountOut.gt(amount)) {\n      amountOut = amount;\n      nextSqrtPrice = getNextSqrtPriceFromOutput(\n        currentSqrtPrice,\n        liquidity,\n        amount,\n        aToB\n      );\n    } else {\n      amountOut = maxAmountOut;\n      nextSqrtPrice = targetSqrtPrice;\n    }\n    amountIn = getDeltaUpFromInput(\n      currentSqrtPrice,\n      nextSqrtPrice,\n      liquidity,\n      aToB\n    );\n    feeAmount = MathUtil.checkMulDivCeil(\n      amountIn,\n      feeRate,\n      FEE_RATE_DENOMINATOR.sub(feeRate),\n      64\n    );\n  }\n\n  return {\n    amountIn,\n    amountOut,\n    nextSqrtPrice,\n    feeAmount,\n  };\n}\n\n/**\n * Simulate swap by imput lots of ticks.\n *\n * @param aToB\n * @param byAmountIn\n * @param amount\n * @param poolData\n * @param swapTicks\n * @returns\n */\nexport function computeSwap(\n  aToB: boolean,\n  byAmountIn: boolean,\n  amount: BN,\n  poolData: ClmmpoolData,\n  swapTicks: Array<TickData>,\n  clmmpool?: PublicKey,\n  tickArrayMap?: TickArrayMapData\n): SwapResult {\n  let remainerAmount = amount;\n  let currentLiquidity = poolData.liquidity;\n  let currentSqrtPrice = poolData.currentSqrtPrice;\n\n  const swapResult: SwapResult = {\n    amountIn: ZERO,\n    amountOut: ZERO,\n    feeAmount: ZERO,\n    refAmount: ZERO,\n    nextSqrtPrice: ZERO,\n    crossTickNum: 0,\n    swapTickArrays: [],\n  };\n\n  let targetSqrtPrice, signedLiquidityChange;\n  const sqrtPriceLimit = SwapUtils.getDefaultSqrtPriceLimit(aToB);\n\n  let firstTickIndex = 0;\n\n  if (aToB) {\n    firstTickIndex = poolData.currentTickIndex\n  } else {\n    firstTickIndex = poolData.currentTickIndex + 1;\n  }\n\n  for (const tick of swapTicks) {\n    if (aToB) {\n      if (\n        poolData.currentTickIndex < tick.index ||\n        tick.sqrtPrice.eq(currentSqrtPrice)\n      ) {\n        continue;\n      }\n    } else {\n      if (poolData.currentTickIndex >= tick.index) {\n        continue;\n      }\n    }\n\n    if (tick === null) {\n      continue;\n    }\n\n    if (\n      (aToB && sqrtPriceLimit.gt(tick.sqrtPrice)) ||\n      (!aToB && sqrtPriceLimit.lt(tick.sqrtPrice))\n    ) {\n      targetSqrtPrice = sqrtPriceLimit;\n    } else {\n      targetSqrtPrice = tick.sqrtPrice;\n    }\n\n    const stepResult = computeSwapStep(\n      currentSqrtPrice,\n      targetSqrtPrice,\n      currentLiquidity,\n      remainerAmount,\n      new BN(poolData.feeRate),\n      byAmountIn\n    );\n\n    if (!stepResult.amountIn.eq(ZERO)) {\n      remainerAmount = byAmountIn\n        ? remainerAmount.sub(stepResult.amountIn.add(stepResult.feeAmount))\n        : remainerAmount.sub(stepResult.amountOut);\n    }\n\n    swapResult.amountIn = swapResult.amountIn.add(stepResult.amountIn);\n    swapResult.amountOut = swapResult.amountOut.add(stepResult.amountOut);\n    swapResult.feeAmount = swapResult.feeAmount.add(stepResult.feeAmount);\n\n    if (stepResult.nextSqrtPrice.eq(tick.sqrtPrice)) {\n      signedLiquidityChange = aToB\n        ? tick.liquidityNet.mul(new BN(-1))\n        : tick.liquidityNet;\n      currentLiquidity = signedLiquidityChange.gt(ZERO)\n        ? currentLiquidity.add(signedLiquidityChange)\n        : currentLiquidity.sub(signedLiquidityChange.abs());\n      currentSqrtPrice = tick.sqrtPrice;\n    } else {\n      currentSqrtPrice = stepResult.nextSqrtPrice;\n    }\n\n    swapResult.crossTickNum++;\n    if (remainerAmount.eq(ZERO)) {\n      break;\n    }\n  }\n\n  swapResult.amountIn = swapResult.amountIn.add(swapResult.feeAmount);\n  swapResult.nextSqrtPrice = currentSqrtPrice;\n\n  if (tickArrayMap && clmmpool) {\n    const startArrayIndex = TickUtil.getArrayIndex(\n      firstTickIndex,\n      poolData.tickSpacing\n    );\n\n    const swapTickArrays = getSwapTickArrays(\n      clmmpool,\n      aToB,\n      startArrayIndex,\n      tickArrayMap\n    );\n    swapResult.swapTickArrays = swapTickArrays;\n  }\n\n  return swapResult;\n}\n\nexport function getSwapTickArrays(\n  clmmpool: PublicKey,\n  a2b: boolean,\n  startArrayIndex: number,\n  tickArrayMap: TickArrayMapData\n): PublicKey[] {\n  let arrayIndexs: boolean[] = [];\n  for (let index = 0; index < 868; index++) {\n    let word: number = tickArrayMap.bitmap[index];\n    for (let shift = 0; shift < 8; shift++) {\n      if (((word >> shift) & 0x01) > 0) {\n        arrayIndexs.push(true);\n      } else {\n        arrayIndexs.push(false);\n      }\n    }\n  }\n\n  const array_count = 3;\n  const tickArrays: PublicKey[] = [];\n\n  if (a2b) {\n    for (\n      let index = startArrayIndex;\n      index >= TICK_ARRAY_MAP_MIN_BIT_INDEX;\n      index -= 1\n    ) {\n      if (arrayIndexs[index]) {\n        const tickArray_i = PDAUtil.getTickArrayPDA(\n          CLMMPOOL_PROGRAM_ID,\n          clmmpool,\n          index\n        );\n        tickArrays.push(tickArray_i.publicKey);\n      }\n      if (tickArrays.length >= array_count) {\n        break;\n      }\n    }\n  } else {\n    for (\n      let index = startArrayIndex;\n      index < TICK_ARRAY_MAP_MAX_BIT_INDEX;\n      index += 1\n    ) {\n      if (arrayIndexs[index]) {\n        const tickArray_i = PDAUtil.getTickArrayPDA(\n          CLMMPOOL_PROGRAM_ID,\n          clmmpool,\n          index\n        );\n        tickArrays.push(tickArray_i.publicKey);\n      }\n      if (tickArrays.length >= array_count) {\n        break;\n      }\n    }\n  }\n\n  return tickArrays;\n}\n\n/**\n * @category TokenAmounts.\n */\nexport type TokenAmounts = {\n  tokenA: u64;\n  tokenB: u64;\n};\n\n/**\n * Create two token to token amount\n *\n * @param a - token A amount\n * @param b - token B amount\n * @return\n */\nexport function toTokenAmount(a: number, b: number): TokenAmounts {\n  return {\n    tokenA: new u64(a.toString()),\n    tokenB: new u64(b.toString()),\n  };\n}\n\n/**\n * Estimate liquidity for token A\n *\n * @param sqrt_price_x - token A sqrtprice\n * @param sqrt_price_y - token B sqrtprice\n * @param tokenAmount - token amount\n * @return\n */\nexport function estimateLiquidityForTokenA(\n  sqrt_price_x: BN,\n  sqrt_price_y: BN,\n  tokenAmount: u64\n) {\n  const lowerSqrtPriceX64 = BN.min(sqrt_price_x, sqrt_price_y);\n  const upperSqrtPriceX64 = BN.max(sqrt_price_x, sqrt_price_y);\n\n  const num = MathUtil.fromX64_BN(\n    tokenAmount.mul(upperSqrtPriceX64).mul(lowerSqrtPriceX64)\n  );\n  const dem = upperSqrtPriceX64.sub(lowerSqrtPriceX64);\n\n  return num.div(dem);\n}\n\n/**\n * Estimate liquidity for token B\n *\n * @param sqrt_price_x - token A sqrtprice\n * @param sqrt_price_y - token B sqrtprice\n * @param token_amount - token amount\n *\n * @return\n */\nexport function estimateLiquidityForTokenB(\n  sqrtPrice0: BN,\n  sqrtPrice1: BN,\n  token_amount: u64\n) {\n  const lowerSqrtPriceX64 = BN.min(sqrtPrice0, sqrtPrice1);\n  const upperSqrtPriceX64 = BN.max(sqrtPrice0, sqrtPrice1);\n\n  const delta = upperSqrtPriceX64.sub(lowerSqrtPriceX64);\n\n  return token_amount.shln(64).div(delta);\n}\n\n// Only clmmpool accounts in this program has 748 length.\n/**\n * Get all clmmpools\n *\n * @param connection - Solana connection\n * @return\n */\nexport function getAllClmmpools(connection: Connection) {\n  const clmmpools = connection.getProgramAccounts(CLMMPOOL_PROGRAM_ID, {\n    filters: [\n      {\n        dataSize: 748,\n      },\n    ],\n  });\n  return clmmpools;\n}\n","export enum MathErrorCode {\n  IntegerDowncastOverflow = `IntegerDowncastOverflow`,\n  MulOverflow = `MultiplicationOverflow`,\n  MulDivOverflow = `MulDivOverflow`,\n  MulShiftRightOverflow = `MulShiftRightOverflow`,\n  MulShiftLeftOverflow = `MulShiftLeftOverflow`,\n  DivideByZero = `DivideByZero`,\n  UnsignedIntegerOverflow = `UnsignedIntegerOverflow`,\n}\n\nexport enum TokenErrorCode {\n  TokenAmountMaxExceeded = `TokenAmountMaxExceeded`,\n  TokenAmountMinSubceeded = `TokenAmountMinSubceeded `,\n  SqrtPriceOutOfBounds = `SqrtPriceOutOfBounds`,\n}\n\nexport enum SwapErrorCode {\n  InvalidSqrtPriceLimitDirection = `InvalidSqrtPriceLimitDirection`,\n  SqrtPriceOutOfBounds = `SqrtPriceOutOfBounds`,\n  ZeroTradableAmount = `ZeroTradableAmount`,\n  AmountOutBelowMinimum = `AmountOutBelowMinimum`,\n  AmountInAboveMaximum = `AmountInAboveMaximum`,\n  NextTickNotFound = `NextTickNoutFound`,\n  TickArraySequenceInvalid = `TickArraySequenceInvalid`,\n  TickArrayCrossingAboveMax = `TickArrayCrossingAboveMax`,\n  TickArrayIndexNotInitialized = `TickArrayIndexNotInitialized`,\n}\n\nexport type ClmmpoolsErrorCode = MathErrorCode | SwapErrorCode | TokenErrorCode;\n\nexport class ClmmpoolsError extends Error {\n  override message: string;\n  errorCode?: ClmmpoolsErrorCode;\n  constructor(message: string, errorCode?: ClmmpoolsErrorCode) {\n    super(message);\n    this.message = message;\n    this.errorCode = errorCode;\n  }\n\n  static isClmmpoolsErrorCode(e: any, code: ClmmpoolsErrorCode): boolean {\n    return e instanceof ClmmpoolsError && e.errorCode === code;\n  }\n}\n","import BN from \"bn.js\";\nimport type { PublicKey } from \"@solana/web3.js\";\n\nimport { TickMath } from \"../math/tick\";\nimport { METADATA_PROGRAM_ADDRESS } from \"../types\";\nimport { AddressUtil, PDA } from \"../utils/address-util\";\nimport { TickUtil } from \"./tick\";\n\nconst CLMM_CONFIG_SEED = \"clmmconfig\";\nconst PDA_CLMMPOOL_SEED = \"clmmpool\";\nconst PDA_POSITION_SEED = \"position\";\nconst PDA_TICK_ARRAY_SEED = \"tick_array\";\nconst PDA_TICK_ARRAY_MAP_SEED = \"tick_array_map\";\nconst PDA_FEE_TIER_SEED = \"fee_tier\";\nconst PDA_PARTNER_SEED = \"partner\";\nconst PDA_METADATA_SEED = \"metadata\";\nconst PDA_CLMMPOOL_METADATA_SEED = \"clmmpool_metadata\";\nconst PDA_EDITION_SEED = \"edition\";\n\n/**\n * @category PDA Utils\n */\nexport class PDAUtil {\n  /**\n   * Get clmm config pda.\n   * \n   * @param programId \n   * @returns \n   */\n  static getClmmConfigPDA(programId: PublicKey): PDA {\n    return AddressUtil.findProgramAddress(\n      [Buffer.from(CLMM_CONFIG_SEED)],\n      programId\n    );\n  }\n\n  /**\n   * Get clmmpool pda.\n   * @param programId\n   * @param clmmConfigKey\n   * @param tokenMintAKey\n   * @param tokenMintBKey\n   * @param tickSpacing\n   * @returns\n   */\n  static getClmmpoolPDA(\n    programId: PublicKey,\n    clmmConfigKey: PublicKey,\n    tokenMintAKey: PublicKey,\n    tokenMintBKey: PublicKey,\n    tickSpacing: number\n  ): PDA {\n    const [mintA, mintB] = tokenMintAKey.toBuffer() < tokenMintBKey.toBuffer() ? [tokenMintAKey, tokenMintBKey] : [tokenMintBKey, tokenMintAKey];\n\n    return AddressUtil.findProgramAddress(\n      [\n        Buffer.from(PDA_CLMMPOOL_SEED),\n        clmmConfigKey.toBuffer(),\n        mintA.toBuffer(),\n        mintB.toBuffer(),\n        new BN(tickSpacing).toArrayLike(Buffer, \"le\", 2),\n      ],\n      programId\n    );\n  }\n\n  /**\n   * Get position pda.\n   * \n   * @param programId\n   * @param positionNFTMintKey\n   * @returns\n   */\n  static getPositionPDA(programId: PublicKey, positionNFTMintKey: PublicKey): PDA {\n    return AddressUtil.findProgramAddress(\n      [Buffer.from(PDA_POSITION_SEED), positionNFTMintKey.toBuffer()],\n      programId\n    );\n  }\n\n  /**\n   * Get position mint key.\n   * \n   * @param positionMintKey\n   * @returns\n   */\n  static getPositionMetadataPDA(positionMintKey: PublicKey): PDA {\n    return AddressUtil.findProgramAddress(\n      [\n        Buffer.from(PDA_METADATA_SEED),\n        METADATA_PROGRAM_ADDRESS.toBuffer(),\n        positionMintKey.toBuffer(),\n      ],\n      METADATA_PROGRAM_ADDRESS\n    );\n  }\n\n  /**\n   * Get opsition edition pda.\n   * \n   * @param positionMintKey \n   * @returns \n   */\n  static getPositionEditionPDA(positionMintKey: PublicKey): PDA {\n    return AddressUtil.findProgramAddress(\n      [\n        Buffer.from(PDA_METADATA_SEED),\n        METADATA_PROGRAM_ADDRESS.toBuffer(),\n        positionMintKey.toBuffer(),\n        Buffer.from(PDA_EDITION_SEED),\n      ],\n      METADATA_PROGRAM_ADDRESS\n    );\n  }\n\n  /**\n   * Get tick array pda.\n   * \n   * @param programId\n   * @param clmmpoolKey\n   * @param arrayIndex\n   * @returns\n   */\n  static getTickArrayPDA(\n    programId: PublicKey,\n    clmmpoolKey: PublicKey,\n    arrayIndex: number\n  ): PDA {\n    return AddressUtil.findProgramAddress(\n      [\n        Buffer.from(PDA_TICK_ARRAY_SEED),\n        clmmpoolKey.toBuffer(),\n        new BN(arrayIndex).toArrayLike(Buffer, \"le\", 2),\n      ],\n      programId\n    );\n  }\n\n  /**\n   * Get tick array map pda.\n   * \n   * @param programId\n   * @param clmmpoolKey\n   * @returns\n   */\n  static getTickArrayMapPDA(programId: PublicKey, clmmpoolKey: PublicKey): PDA {\n    return AddressUtil.findProgramAddress(\n      [Buffer.from(PDA_TICK_ARRAY_MAP_SEED), clmmpoolKey.toBuffer()],\n      programId\n    );\n  }\n\n  /**\n   * Get tick array from tick index PDA.\n   *\n   * @param tickIndex\n   * @param tickSpacing\n   * @param clmmpool\n   * @param programId\n   * @returns\n   */\n  static getTickArrayFromTickIndexPDA(\n    tickIndex: number,\n    tickSpacing: number,\n    clmmpool: PublicKey,\n    programId: PublicKey\n  ): PDA {\n    const arrayIndex = TickUtil.getArrayIndex(tickIndex, tickSpacing);\n    return PDAUtil.getTickArrayPDA(\n      AddressUtil.toPubKey(programId),\n      AddressUtil.toPubKey(clmmpool),\n      arrayIndex\n    );\n  }\n\n  /**\n   * Get the PDA of the tick array containing tickIndex.\n   * tickArrayOffset can be used to get neighboring tick arrays.\n   *\n   * @param sqrtPriceX64\n   * @param tickSpacing\n   * @param clmmpool\n   * @param programId\n   * @returns\n   */\n  static getTickArrayFromSqrtPricePDA(\n    sqrtPriceX64: BN,\n    tickSpacing: number,\n    clmmpool: PublicKey,\n    programId: PublicKey\n  ): PDA {\n    const tickIndex = TickMath.sqrtPriceX64ToTickIndex(sqrtPriceX64);\n    return PDAUtil.getTickArrayFromTickIndexPDA(\n      tickIndex,\n      tickSpacing,\n      clmmpool,\n      programId\n    );\n  }\n\n  /**\n   * @category Program Derived Addresses\n   * @param programId\n   * @param clmmConfigKey\n   * @param tickSpacing\n   * @returns\n   */\n  static getFeeTierPDA(\n    programId: PublicKey,\n    clmmConfigKey: PublicKey,\n    tickSpacing: number\n  ): PDA {\n    return AddressUtil.findProgramAddress(\n      [\n        Buffer.from(PDA_FEE_TIER_SEED),\n        clmmConfigKey.toBuffer(),\n        new BN(tickSpacing).toArrayLike(Buffer, \"le\", 2),\n      ],\n      programId\n    );\n  }\n\n  /**\n   * @category Get Program Derived Addresses\n   * @param programId\n   * @param baseKey\n   * @returns\n   */\n  static getPartnerPDA(programId: PublicKey, baseKey: PublicKey): PDA {\n    return AddressUtil.findProgramAddress(\n      [Buffer.from(PDA_PARTNER_SEED), baseKey.toBuffer()],\n      programId\n    );\n  }\n\n  /**\n   * @category Get Program Derived Addresses\n   * @param programId\n   * @param clmmpoolKey\n   * @returns\n   */\n  static getClmmpoolMetadataPDA(programId: PublicKey, clmmpoolKey: PublicKey): PDA {\n    return AddressUtil.findProgramAddress(\n      [\n        Buffer.from(PDA_CLMMPOOL_METADATA_SEED),\n        clmmpoolKey.toBuffer()\n      ],\n      programId\n    );\n  }\n}\n","import { BN } from \"@project-serum/anchor\";\nimport Decimal from \"../utils/decimal\";\nimport invariant from \"tiny-invariant\";\n\nimport {\n  MAX_SQRT_PRICE,\n  MAX_TICK_INDEX,\n  MIN_SQRT_PRICE,\n  MIN_TICK_INDEX,\n  TICK_ARRAY_SIZE,\n} from \"../types/constants\";\nimport { MathUtil } from \"./utils\";\n\nconst BIT_PRECISION = 14;\nconst LOG_B_2_X32 = \"59543866431248\";\nconst LOG_B_P_ERR_MARGIN_LOWER_X64 = \"184467440737095516\";\nconst LOG_B_P_ERR_MARGIN_UPPER_X64 = \"15793534762490258745\";\n\n/**\n * TickMath - the math util set of tick.\n */\nexport class TickMath {\n  static priceToSqrtPriceX64(\n    price: Decimal,\n    decimalsA: number,\n    decimalsB: number\n  ): BN {\n    return MathUtil.toX64(\n      price.mul(Decimal.pow(10, decimalsB - decimalsA)).sqrt()\n    );\n  }\n\n  static sqrtPriceX64ToPrice(\n    sqrtPriceX64: BN,\n    decimalsA: number,\n    decimalsB: number\n  ): Decimal {\n    return MathUtil.fromX64(sqrtPriceX64)\n      .pow(2)\n      .mul(Decimal.pow(10, decimalsA - decimalsB));\n  }\n\n  /**\n   * @param tickIndex\n   * @returns\n   */\n  static tickIndexToSqrtPriceX64(tickIndex: number): BN {\n    if (tickIndex > 0) {\n      return new BN(tickIndexToSqrtPricePositive(tickIndex));\n    } else {\n      return new BN(tickIndexToSqrtPriceNegative(tickIndex));\n    }\n  }\n\n  /**\n   *\n   * @param sqrtPriceX64\n   * @returns\n   */\n  static sqrtPriceX64ToTickIndex(sqrtPriceX64: BN): number {\n    if (\n      sqrtPriceX64.gt(new BN(MAX_SQRT_PRICE)) ||\n      sqrtPriceX64.lt(new BN(MIN_SQRT_PRICE))\n    ) {\n      throw new Error(\n        \"Provided sqrtPrice is not within the supported sqrtPrice range.\"\n      );\n    }\n\n    const msb = sqrtPriceX64.bitLength() - 1;\n    const adjustedMsb = new BN(msb - 64);\n    const log2pIntegerX32 = signedShiftLeft(adjustedMsb, 32, 128);\n\n    let bit = new BN(\"8000000000000000\", \"hex\");\n    let precision = 0;\n    let log2pFractionX64 = new BN(0);\n\n    let r =\n      msb >= 64 ? sqrtPriceX64.shrn(msb - 63) : sqrtPriceX64.shln(63 - msb);\n\n    while (bit.gt(new BN(0)) && precision < BIT_PRECISION) {\n      r = r.mul(r);\n      const rMoreThanTwo = r.shrn(127);\n      r = r.shrn(63 + rMoreThanTwo.toNumber());\n      log2pFractionX64 = log2pFractionX64.add(bit.mul(rMoreThanTwo));\n      bit = bit.shrn(1);\n      precision += 1;\n    }\n\n    const log2pFractionX32 = log2pFractionX64.shrn(32);\n\n    const log2pX32 = log2pIntegerX32.add(log2pFractionX32);\n    const logbpX64 = log2pX32.mul(new BN(LOG_B_2_X32));\n\n    const tickLow = signedShiftRight(\n      logbpX64.sub(new BN(LOG_B_P_ERR_MARGIN_LOWER_X64)),\n      64,\n      128\n    ).toNumber();\n    const tickHigh = signedShiftRight(\n      logbpX64.add(new BN(LOG_B_P_ERR_MARGIN_UPPER_X64)),\n      64,\n      128\n    ).toNumber();\n\n    if (tickLow === tickHigh) {\n      return tickLow;\n    } else {\n      const derivedTickHighSqrtPriceX64 =\n        TickMath.tickIndexToSqrtPriceX64(tickHigh);\n      if (derivedTickHighSqrtPriceX64.lte(sqrtPriceX64)) {\n        return tickHigh;\n      } else {\n        return tickLow;\n      }\n    }\n  }\n\n  static tickIndexToPrice(\n    tickIndex: number,\n    decimalsA: number,\n    decimalsB: number\n  ): Decimal {\n    return TickMath.sqrtPriceX64ToPrice(\n      TickMath.tickIndexToSqrtPriceX64(tickIndex),\n      decimalsA,\n      decimalsB\n    );\n  }\n\n  static priceToTickIndex(\n    price: Decimal,\n    decimalsA: number,\n    decimalsB: number\n  ): number {\n    return TickMath.sqrtPriceX64ToTickIndex(\n      TickMath.priceToSqrtPriceX64(price, decimalsA, decimalsB)\n    );\n  }\n\n  static priceToInitializableTickIndex(\n    price: Decimal,\n    decimalsA: number,\n    decimalsB: number,\n    tickSpacing: number\n  ): number {\n    return TickMath.getInitializableTickIndex(\n      TickMath.priceToTickIndex(price, decimalsA, decimalsB),\n      tickSpacing\n    );\n  }\n\n  static getStartTickIndex(\n    tickIndex: number,\n    tickSpacing: number,\n    offset = 0\n  ): number {\n    const realIndex = Math.floor(tickIndex / tickSpacing / TICK_ARRAY_SIZE);\n    const startTickIndex = (realIndex + offset) * tickSpacing * TICK_ARRAY_SIZE;\n\n    const ticksInArray = TICK_ARRAY_SIZE * tickSpacing;\n    const minTickIndex =\n      MIN_TICK_INDEX - ((MIN_TICK_INDEX % ticksInArray) + ticksInArray);\n    invariant(\n      startTickIndex >= minTickIndex,\n      `startTickIndex is too small - - ${startTickIndex}`\n    );\n    invariant(\n      startTickIndex <= MAX_TICK_INDEX,\n      `startTickIndex is too large - ${startTickIndex}`\n    );\n    return startTickIndex;\n  }\n\n  static getInitializableTickIndex(\n    tickIndex: number,\n    tickSpacing: number\n  ): number {\n    return tickIndex - (tickIndex % tickSpacing);\n  }\n\n  static getNextInitializableTickIndex(tickIndex: number, tickSpacing: number) {\n    return (\n      TickMath.getInitializableTickIndex(tickIndex, tickSpacing) + tickSpacing\n    );\n  }\n\n  static getPrevInitializableTickIndex(tickIndex: number, tickSpacing: number) {\n    return (\n      TickMath.getInitializableTickIndex(tickIndex, tickSpacing) - tickSpacing\n    );\n  }\n}\n\nfunction tickIndexToSqrtPricePositive(tick: number) {\n  let ratio: BN;\n\n  if ((tick & 1) !== 0) {\n    ratio = new BN(\"79232123823359799118286999567\");\n  } else {\n    ratio = new BN(\"79228162514264337593543950336\");\n  }\n\n  if ((tick & 2) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"79236085330515764027303304731\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 4) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"79244008939048815603706035061\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 8) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"79259858533276714757314932305\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 16) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"79291567232598584799939703904\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 32) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"79355022692464371645785046466\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 64) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"79482085999252804386437311141\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 128) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"79736823300114093921829183326\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 256) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"80248749790819932309965073892\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 512) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"81282483887344747381513967011\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 1024) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"83390072131320151908154831281\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 2048) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"87770609709833776024991924138\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 4096) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"97234110755111693312479820773\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 8192) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"119332217159966728226237229890\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 16384) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"179736315981702064433883588727\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 32768) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"407748233172238350107850275304\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 65536) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"2098478828474011932436660412517\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 131072) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"55581415166113811149459800483533\")),\n      96,\n      256\n    );\n  }\n  if ((tick & 262144) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"38992368544603139932233054999993551\")),\n      96,\n      256\n    );\n  }\n\n  return signedShiftRight(ratio, 32, 256);\n}\n\nfunction tickIndexToSqrtPriceNegative(tickIndex: number) {\n  const tick = Math.abs(tickIndex);\n  let ratio: BN;\n\n  if ((tick & 1) !== 0) {\n    ratio = new BN(\"18445821805675392311\");\n  } else {\n    ratio = new BN(\"18446744073709551616\");\n  }\n\n  if ((tick & 2) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"18444899583751176498\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 4) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"18443055278223354162\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 8) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"18439367220385604838\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 16) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"18431993317065449817\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 32) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"18417254355718160513\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 64) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"18387811781193591352\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 128) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"18329067761203520168\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 256) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"18212142134806087854\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 512) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"17980523815641551639\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 1024) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"17526086738831147013\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 2048) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"16651378430235024244\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 4096) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"15030750278693429944\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 8192) !== 0) {\n    ratio = signedShiftRight(\n      ratio.mul(new BN(\"12247334978882834399\")),\n      64,\n      256\n    );\n  }\n  if ((tick & 16384) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN(\"8131365268884726200\")), 64, 256);\n  }\n  if ((tick & 32768) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN(\"3584323654723342297\")), 64, 256);\n  }\n  if ((tick & 65536) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN(\"696457651847595233\")), 64, 256);\n  }\n  if ((tick & 131072) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN(\"26294789957452057\")), 64, 256);\n  }\n  if ((tick & 262144) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN(\"37481735321082\")), 64, 256);\n  }\n\n  return ratio;\n}\n\nfunction signedShiftLeft(n0: BN, shiftBy: number, bitWidth: number) {\n  const twosN0 = n0.toTwos(bitWidth).shln(shiftBy);\n  twosN0.imaskn(bitWidth + 1);\n  return twosN0.fromTwos(bitWidth);\n}\n\nfunction signedShiftRight(n0: BN, shiftBy: number, bitWidth: number) {\n  const twoN0 = n0.toTwos(bitWidth).shrn(shiftBy);\n  twoN0.imaskn(bitWidth - shiftBy + 1);\n  return twoN0.fromTwos(bitWidth - shiftBy);\n}\n","import BN from \"bn.js\";\nimport Decimal from \"../utils/decimal\";\n\nimport { ClmmpoolsError, MathErrorCode } from \"../errors/errors\";\n\nexport const ZERO = new BN(0);\n\nexport const ONE = new BN(1);\n\nexport const TWO = new BN(2);\n\nexport const U128 = TWO.pow(new BN(128));\n\nexport const U64_MAX = TWO.pow(new BN(64)).sub(ONE);\n\nexport const U128_MAX = TWO.pow(new BN(128)).sub(ONE);\n\n/**\n * @category MathUtil\n */\nexport class MathUtil {\n  static toX64_BN(num: BN): BN {\n    return num.mul(new BN(2).pow(new BN(64)));\n  }\n\n  static toX64_Decimal(num: Decimal): Decimal {\n    return num.mul(Decimal.pow(2, 64));\n  }\n\n  static toX64(num: Decimal): BN {\n    return new BN(num.mul(Decimal.pow(2, 64)).floor().toFixed());\n  }\n\n  static fromX64(num: BN): Decimal {\n    return new Decimal(num.toString()).mul(Decimal.pow(2, -64));\n  }\n\n  static fromX64_Decimal(num: Decimal): Decimal {\n    return num.mul(Decimal.pow(2, -64));\n  }\n\n  static fromX64_BN(num: BN): BN {\n    return num.div(new BN(2).pow(new BN(64)));\n  }\n\n  static shiftRightRoundUp(n: BN): BN {\n    let result = n.shrn(64);\n\n    if (n.mod(U64_MAX).gt(ZERO)) {\n      result = result.add(ONE);\n    }\n\n    return result;\n  }\n\n  static divRoundUp(n0: BN, n1: BN): BN {\n    const hasRemainder = !n0.mod(n1).eq(ZERO);\n    if (hasRemainder) {\n      return n0.div(n1).add(new BN(1));\n    } else {\n      return n0.div(n1);\n    }\n  }\n\n  static subUnderflowU128(n0: BN, n1: BN): BN {\n    return n0.add(U128).sub(n1).mod(U128);\n  }\n\n  static checkUnsignedSub(n0: BN, n1: BN): BN {\n    const n = n0.sub(n1);\n    if (n.isNeg()) {\n      throw new ClmmpoolsError(\n        \"Unsigned integer sub overflow\",\n        MathErrorCode.UnsignedIntegerOverflow\n      );\n    }\n    return n;\n  }\n\n  static checkMul(n0: BN, n1: BN, limit: number): BN {\n    const n = n0.mul(n1);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError(\n        \"Multiplication overflow\",\n        MathErrorCode.MulOverflow\n      );\n    }\n    return n;\n  }\n\n  static checkMulDivFloor(n0: BN, n1: BN, denom: BN, limit: number): BN {\n    if (denom.eq(ZERO)) {\n      throw new ClmmpoolsError(\"Devide by zero\", MathErrorCode.DivideByZero);\n    }\n    const n = n0.mul(n1).div(denom);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError(\n        \"Multiplication div overflow\",\n        MathErrorCode.MulDivOverflow\n      );\n    }\n    return n;\n  }\n\n  static checkMulDivCeil(n0: BN, n1: BN, denom: BN, limit: number): BN {\n    if (denom.eq(ZERO)) {\n      throw new ClmmpoolsError(\"Devide by zero\", MathErrorCode.DivideByZero);\n    }\n    const n = n0.mul(n1).add(denom.sub(ONE)).div(denom);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError(\n        \"Multiplication div overflow\",\n        MathErrorCode.MulDivOverflow\n      );\n    }\n    return n;\n  }\n\n  static checkMulDivRound(n0: BN, n1: BN, denom: BN, limit: number): BN {\n    if (denom.eq(ZERO)) {\n      throw new ClmmpoolsError(\"Devide by zero\", MathErrorCode.DivideByZero);\n    }\n    const n = n0.mul(n1.add(denom.shrn(1))).div(denom);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError(\n        \"Multiplication div overflow\",\n        MathErrorCode.MulDivOverflow\n      );\n    }\n    return n;\n  }\n\n  static checkMulShiftRight(n0: BN, n1: BN, shift: number, limit: number): BN {\n    const n = n0.mul(n1).shrn(shift);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError(\n        \"Multiplication shift right overflow\",\n        MathErrorCode.MulShiftRightOverflow\n      );\n    }\n    return n;\n  }\n\n  static checkMulShiftRight64RoundUpIf(\n    n0: BN,\n    n1: BN,\n    limit: number,\n    roundUp: boolean\n  ): BN {\n    const p = n0.mul(n1);\n    const shoudRoundUp = roundUp && p.and(U64_MAX).gt(ZERO);\n    const result = shoudRoundUp ? p.shrn(64).add(ONE) : p.shrn(64);\n    if (this.isOverflow(result, limit)) {\n      throw new ClmmpoolsError(\n        \"Multiplication shift right overflow\",\n        MathErrorCode.MulShiftRightOverflow\n      );\n    }\n    return result;\n  }\n\n  static checkMulShiftLeft(n0: BN, n1: BN, shift: number, limit: number): BN {\n    const n = n0.mul(n1).shln(shift);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError(\n        \"Multiplication shift left overflow\",\n        MathErrorCode.MulShiftLeftOverflow\n      );\n    }\n    return n;\n  }\n\n  static checkDivRoundUpIf(n0: BN, n1: BN, roundUp: boolean): BN {\n    if (n1.eq(ZERO)) {\n      throw new ClmmpoolsError(\"Devide by zero\", MathErrorCode.DivideByZero);\n    }\n    if (roundUp) {\n      return this.divRoundUp(n0, n1);\n    }\n    return n0.div(n1);\n  }\n\n  static isOverflow(n: BN, bit: number): boolean {\n    return n.gte(TWO.pow(new BN(bit)));\n  }\n}\n","import type { Address } from \"@project-serum/anchor\";\nimport { translateAddress, utils } from \"@project-serum/anchor\";\nimport type { PublicKey } from \"@solana/web3.js\";\n\nexport type PDA = { publicKey: PublicKey; bump: number };\n\n/**\n * @category Address Util\n */\nexport class AddressUtil {\n  static toPubKey(address: Address): PublicKey {\n    return translateAddress(address);\n  }\n\n  static toPubKeys(addresses: Address[]): PublicKey[] {\n    return addresses.map((address) => AddressUtil.toPubKey(address));\n  }\n\n  static findProgramAddress(\n    seeds: (Uint8Array | Buffer)[],\n    programId: PublicKey\n  ): PDA {\n    const [publicKey, bump] = utils.publicKey.findProgramAddressSync(\n      seeds,\n      programId\n    );\n    return { publicKey, bump };\n  }\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport { BN } from \"bn.js\";\nimport invariant from \"tiny-invariant\";\n\nimport type { ClmmpoolContext } from \"../context\";\nimport { ZERO } from \"../math/utils\";\nimport type { AccountFetcher } from \"../network\";\nimport type { ClmmpoolData, TickArrayData, TickData } from \"../types/clmmpool\";\nimport {\n  MAX_TICK_INDEX,\n  MIN_TICK_INDEX,\n  TICK_ARRAY_SIZE,\n} from \"../types/constants\";\nimport { PDAUtil } from \"./pda\";\n\n/**\n * A collection of utility functions when interacting with a Tick.\n * There are some functions already initialized in tick math.\n * @category Tick Utils\n */\nexport class TickUtil {\n  /**\n   * Verify is tick initializeable.\n   *\n   * @param tick\n   * @param tickSpacing\n   * @returns\n   */\n  static isTickInitializable(tick: number, tickSpacing: number): boolean {\n    return tick % tickSpacing === 0;\n  }\n\n  /**\n   * Check if the tick is in bounds.\n   *\n   * @param tick - tick index\n   * @retruns true or false\n   */\n  static checkTickInBounds(tick: number): boolean {\n    return tick <= MAX_TICK_INDEX && tick >= MIN_TICK_INDEX;\n  }\n\n  /**\n   * Check if the tick is valid.\n   *\n   * @param tick_index - tick index\n   * @param tick_spacing - tick spacing\n   * @retruns\n   */\n  static checkIsValidTick(tick_index: number, tick_spacing: number): void {\n    const min = this.getMinIndex(tick_spacing);\n    const max = this.getMaxIndex(tick_spacing);\n    invariant(tick_index >= min && tick_index <= max, `tick index invalid`);\n    invariant(tick_index % tick_spacing === 0, `tick index invalid`);\n  }\n\n  /**\n   * Get min tick index.\n   *\n   * @param tick_spacing - tick spacing\n   * @retruns min tick index\n   */\n  static getMinIndex(tick_spacing: number): number {\n    return MIN_TICK_INDEX + (Math.abs(MIN_TICK_INDEX) % tick_spacing);\n  }\n\n  /**\n   * Get max tick index.\n   * @param tick_spacing - tick spacing\n   * @retruns max tick index\n   */\n  static getMaxIndex(tick_spacing: number): number {\n    return MAX_TICK_INDEX - (MAX_TICK_INDEX % tick_spacing);\n  }\n\n  /**\n   * Get array index.\n   *\n   * @param tick_index - tick index\n   * @param tick_spacing - tick spacing\n   * @retruns max tick index\n   */\n  static getArrayIndex(tick_index: number, tick_spacing: number): number {\n    const min = this.getMinIndex(tick_spacing);\n    const max = this.getMaxIndex(tick_spacing);\n\n    invariant(tick_index >= min && tick_index <= max, `tick index invalid`);\n\n    const array_spacing = TICK_ARRAY_SIZE * tick_spacing;\n    return Math.floor((tick_index - min) / array_spacing);\n  }\n\n  /**\n   * Get offset index.\n   *\n   * @param tick_index - tick index\n   * @param tick_spacing - tick spacing\n   * @retruns offset index\n   */\n  static getOffset(tick_index: number, tick_spacing: number): number {\n    const array_index = this.getArrayIndex(tick_index, tick_spacing);\n    const start_index = this.getStartTickIndex(array_index, tick_spacing);\n    return Math.floor((tick_index - start_index) / tick_spacing);\n  }\n\n  /**\n   * Get start tick index.\n   *\n   * @param array_index - tick index\n   * @param tick_spacing - tick spacing\n   * @retruns start tick index\n   */\n  static getStartTickIndex(array_index: number, tick_spacing: number): number {\n    const min = this.getMinIndex(tick_spacing);\n    const array_spacing = TICK_ARRAY_SIZE * tick_spacing;\n    return min + array_spacing * array_index;\n  }\n\n  /**\n   * Get end tick index.\n   *\n   * @param array_index - tick index\n   * @param tick_spacing - tick spacing\n   * @retruns end tick index\n   */\n  static getEndTickIndex(array_index: number, tick_spacing: number): number {\n    const start_index = this.getStartTickIndex(array_index, tick_spacing);\n    return start_index + (TICK_ARRAY_SIZE - 1) * tick_spacing;\n  }\n\n  /**\n   * Verify if the tickArray is min.\n   *\n   * @param array_index - array index\n   * @param tick_spacing - tick spacing\n   * @retruns true or false\n   */\n  static isMinTickArray(array_index: number, tick_spacing: number): boolean {\n    return (\n      this.getStartTickIndex(array_index, tick_spacing) ===\n      this.getMinIndex(tick_spacing)\n    );\n  }\n\n  /**\n   * Verify if the tickArray is max.\n   *\n   * @param array_index - array index\n   * @param tick_spacing - tick spacing\n   * @retruns true or false\n   */\n  static isMaxTickArray(array_index: number, tick_spacing: number): boolean {\n    return (\n      this.getEndTickIndex(array_index, tick_spacing) ===\n      this.getMaxIndex(tick_spacing)\n    );\n  }\n\n  /**\n   * Verify if the tick is in tickArray\n   *\n   * @param array_index - array index\n   * @param tick_spacing - tick spacing\n   * @param tick_index - tick index\n   * @retruns true or false\n   */\n  static isInArray(\n    array_index: number,\n    tick_spacing: number,\n    tick_index: number\n  ): boolean {\n    return (\n      tick_index >= this.getStartTickIndex(array_index, tick_spacing) &&\n      tick_index <= this.getEndTickIndex(array_index, tick_spacing)\n    );\n  }\n\n  /**\n   * Cross update.\n   *\n   * @param tick - index data\n   * @param pool - clmm pool address\n   * @param aToB - swap direcation\n   * @retruns true or false\n   */\n  static crossUpdate(tick: TickData, pool: ClmmpoolData, aToB: boolean) {\n    const liquidity = pool.liquidity;\n    const signedLiquidityChange = aToB\n      ? tick.liquidityNet.mul(new BN(-1))\n      : tick.liquidityNet;\n    const currentLiquidity = signedLiquidityChange.gt(ZERO)\n      ? liquidity.add(signedLiquidityChange)\n      : liquidity.sub(signedLiquidityChange.abs());\n\n    return currentLiquidity;\n  }\n\n  /**\n   * Get tick data from tick index.\n   *\n   * @param fetcher - solana fetcher\n   * @param clmmpool - clmm pool address\n   * @param programId - SPL Token program account\n   * @param tick_index - tick index\n   * @param tick_spacing - tick spacing\n   * @retruns tick data\n   */\n  static async getTickDataFromIndex(\n    fetcher: AccountFetcher,\n    clmmpool: PublicKey,\n    programId: PublicKey,\n    tick_index: number,\n    tick_spacing: number\n  ): Promise<TickData> {\n    const arrayIndex = this.getArrayIndex(tick_index, tick_spacing);\n    const offset = this.getOffset(tick_index, tick_spacing);\n    const tickArrayAddress = PDAUtil.getTickArrayPDA(\n      programId,\n      clmmpool,\n      arrayIndex\n    ).publicKey;\n    const tickArray = await fetcher.getTickArray(tickArrayAddress, false);\n\n    const tickData = tickArray!.ticks[offset];\n    return tickData!;\n  }\n}\n\n/**\n * A collection of utility functions when interacting with a TickArray.\n * @category TickArray Utils\n */\nexport class TickArrayUtil {\n  /**\n   * Evaluate a list of tick-array data and return the array of indices which the tick-arrays are not initialized.\n   * @param tickArrays - a list of TickArrayData or null objects from AccountFetcher.listTickArrays\n   * @returns an array of array-index for the input tickArrays that requires initialization.\n   */\n  static getUninitializedArrays(\n    tickArrays: (TickArrayData | null)[]\n  ): number[] {\n    return tickArrays\n      .map((value, index) => {\n        if (!value) {\n          return index;\n        }\n        return -1;\n      })\n      .filter((index) => index >= 0);\n  }\n}\n\n/**\n * Get all ticks.\n *\n * @param ctx\n * @param programId\n * @param tick_spacing\n * @param clmmpool\n * @returns all ticks\n */\nexport async function getAllTicks(\n  ctx: ClmmpoolContext,\n  programId: PublicKey,\n  tick_spacing: number,\n  clmmpool: PublicKey\n): Promise<TickData[]> {\n  const maxIndex = TickUtil.getMaxIndex(tick_spacing);\n  const maxTickArrayIndex = TickUtil.getArrayIndex(maxIndex, tick_spacing);\n  const tickArrayMapAddress = PDAUtil.getTickArrayMapPDA(\n    programId,\n    clmmpool\n  ).publicKey;\n\n  await ctx.fetcher.refreshAll();\n  const map = await ctx.fetcher.getTickArrayMap(tickArrayMapAddress);\n\n  const tickArrayAddresses = [];\n  for (let i = 0; i < maxTickArrayIndex; i++) {\n    if (map?.bitmap[i] && map?.bitmap[i] !== 0) {\n      for (let j = 0; j < 8; j++) {\n        if ((map.bitmap[i]! & (1 << j)) !== 0) {\n          const tickArrayAddress = PDAUtil.getTickArrayPDA(\n            programId,\n            clmmpool,\n            i * 8 + j\n          ).publicKey;\n          tickArrayAddresses.push(tickArrayAddress);\n        }\n      }\n    }\n  }\n\n  const ticks: TickData[] = [];\n  for (let i = 0; i < tickArrayAddresses.length; i++) {\n    const arrayAddress = tickArrayAddresses[i];\n    if (arrayAddress) {\n      await ctx.fetcher.refreshAll();\n      const ticksInArray = await ctx.fetcher.getTickArray(arrayAddress);\n      if (ticksInArray) {\n        for (let j = 0; j < ticksInArray.ticks.length; j++) {\n          const tick = ticksInArray.ticks[j];\n          if (tick) {\n            ticks.push(tick);\n          }\n        }\n      }\n    }\n  }\n\n  return ticks;\n}\n\n/**\n * Get all ticks price.\n *\n * @param ticks\n * @returns ticks price\n */\nexport async function getTicksPrice(ticks: TickData[]) {\n  const prices = [];\n  for (let i = 0; i < ticks.length; i++) {\n    const tick = ticks[i];\n    if (!tick!.isInitialized) {\n      throw new Error(`tick ${i} is not initialized`);\n    }\n    prices.push(tick!.sqrtPrice.mul(tick!.sqrtPrice));\n  }\n  return prices;\n}\n\n/**\n * Get nearest tick by current tick.\n *\n * @param tickIndex\n * @param tickSpacing\n * @returns\n */\nexport function getNearestTickByCurrentTick(\n  tickIndex: number,\n  tickSpacing: number\n): number {\n  const mod = Math.abs(tickIndex) % tickSpacing;\n  if (tickIndex > 0) {\n    if (mod > tickSpacing / 2) {\n      return tickIndex + tickSpacing - mod;\n    } else {\n      return tickIndex - mod;\n    }\n  } else {\n    if (mod > tickSpacing / 2) {\n      return tickIndex - tickSpacing + mod;\n    } else {\n      return tickIndex + mod;\n    }\n  }\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nimport type { SwapInput } from \"../ix\";\nimport { MathUtil, U64_MAX, ZERO } from \"../math/utils\";\nimport type { AccountFetcher } from \"../network/fetcher\";\nimport type { TickArray } from '../types';\nimport * as constants from \"../types/constants\";\nimport { PDAUtil, TickUtil } from '../utils';\nimport type { Percentage } from \"./percentage\";\n\n\n/**\n * Adjust the amount of token A or token B to swap for in a swap to account for slippage.\n * \n * @param n - The amount of token A or token B to swap for.\n * @param numerator - The numerator of the slippage percentage.\n * @param denominator - The denominator of the slippage percentage.\n * @param adjustUp - Adjust the amount up or down.\n * @returns The adjusted amount of token A or token B to swap for.\n */\n export function adjustForSlippage(\n  n: BN,\n  { numerator, denominator }: Percentage,\n  adjustUp: boolean\n  ): BN {\n  if (adjustUp) {\n      return n.mul(denominator.add(numerator)).div(denominator);\n  } else {\n      return n.mul(denominator).div(denominator.add(numerator));\n  }\n  }\n\nexport class SwapUtils {\n  /**\n   * Get the default sqrt price limit for a swap.\n   * \n   * @param a2b - true if the swap is A to B, false if the swap is B to A.\n   * @returns The default sqrt price limit for the swap.\n   */\n  static getDefaultSqrtPriceLimit(a2b: boolean): BN {\n    return new BN(a2b ? constants.MIN_SQRT_PRICE : constants.MAX_SQRT_PRICE);\n  }\n\n  /**\n   * Get the default values for the otherAmountThreshold in a swap.\n   * \n   * @param amountSpecifiedIsInput - The direction of a swap\n   * @returns The default values for the otherAmountThreshold parameter in a swap.\n   */\n  static getDefaultOtherAmountThreshold(amountSpecifiedIsInput: boolean): BN {\n    return amountSpecifiedIsInput ? ZERO : U64_MAX;\n  }\n\n  /**\n   * Get tick array publicKeys for a given tick index.\n   * \n   * @param currentTickIndex - The current tickIndex for the Clmmpool to swap on.\n   * @param tickSpacing - The tickSpacing for the Clmmpool.\n   * @param programId - The Clmmpool programId which the Clmmpool lives on.\n   * @param clmmpoolAddress - PublicKey of the clmmpool to swap on.\n   * @returns An array of PublicKey[] for the tickArray accounts that this swap may traverse across.\n   **/\n  static getTickArrayPublicKeys(\n    currentTickIndex: number,\n    tickSpacing: number,\n    programId: PublicKey,\n    clmmpoolAddress: PublicKey\n  ): PublicKey[] {\n    const tickArrayAddresses: PublicKey[] = [];\n    for (let i = 0; i < constants.TICK_ARRAY_MAP_MAX_BIT_INDEX; i++) {\n      let arrayIndex: number;\n      try {\n        arrayIndex = TickUtil.getArrayIndex(currentTickIndex, tickSpacing);\n      } catch {\n        return tickArrayAddresses;\n      }\n\n      const pda = PDAUtil.getTickArrayPDA(\n        programId,\n        clmmpoolAddress,\n        arrayIndex\n      );\n      tickArrayAddresses.push(pda.publicKey);\n    }\n\n    return tickArrayAddresses;\n  }\n\n  /**\n   * Given the current tick-index, returns TickArray objects that this swap may traverse across.\n   *\n   * @param currentTickIndex - The current tickIndex for the Clmmpool to swap on.\n   * @param tickSpacing - The tickSpacing for the Clmmpool.\n   * @param programId - The Clmmpool programId which the Clmmpool lives on.\n   * @param clmmpoolAddress - PublicKey of the clmmpool to swap on.\n   * @param fetcher - AccountFetcher object to fetch solana accounts\n   * @param refresh - If true, fetcher would default to fetching the latest accounts\n   * @returns An array of PublicKey[] for the tickArray accounts that this swap may traverse across.\n   */\n  static async getTickArrays(\n    currentTickIndex: number,\n    tickSpacing: number,\n    programId: PublicKey,\n    clmmpoolAddress: PublicKey,\n    fetcher: AccountFetcher,\n    refresh: boolean\n  ): Promise<TickArray[]> {\n    const addresses = SwapUtils.getTickArrayPublicKeys(\n      currentTickIndex,\n      tickSpacing,\n      programId,\n      clmmpoolAddress\n    );\n    const data = await fetcher.listTickArrays(addresses, refresh);\n    return addresses.map((addr, index) => {\n      return {\n        address: addr,\n        data: data[index]!,\n      };\n    });\n  }\n\n  /**\n   * Calculate the SwapInput parameters `amount` & `otherAmountThreshold` based on the amountIn & amountOut estimates from a quote.\n   * @param amount - The amount of tokens the user wanted to swap from.\n   * @param estAmountIn - The estimated amount of input tokens expected in a `SwapQuote`\n   * @param estAmountOut - The estimated amount of output tokens expected from a `SwapQuote`\n   * @param slippageTolerance - The amount of slippage to adjust for.\n   * @param amountSpecifiedIsInput - Specifies the token the parameter `amount`represents in the swap quote. If true, the amount represents\n   *                                 the input token of the swap.\n   * @returns A Partial `SwapInput` object containing the slippage adjusted 'amount' & 'otherAmountThreshold' parameters.\n   */\n  static calculateSwapAmountsFromQuote(\n    amount: BN,\n    estAmountIn: BN,\n    estAmountOut: BN,\n    slippageTolerance: Percentage,\n    amountSpecifiedIsInput: boolean\n  ): Pick<SwapInput, \"amount\" | \"amountLimit\"> {\n    if (amountSpecifiedIsInput) {\n      return {\n        amount,\n        amountLimit: adjustForSlippage(estAmountOut, slippageTolerance, false),\n      };\n    } else {\n      return {\n        amount,\n        amountLimit: adjustForSlippage(estAmountIn, slippageTolerance, true),\n      };\n    }\n  }\n}\n\n/**\n * Get lower sqrt price from token A.\n * \n * @param amount - The amount of tokens the user wanted to swap from.\n * @param liquidity - The liquidity of the pool.\n * @param sqrtPriceX64 - The sqrt price of the pool.\n * @returns LowesqrtPriceX64\n */\nexport function getLowerSqrtPriceFromTokenA(\n  amount: BN,\n  liquidity: BN,\n  sqrtPriceX64: BN\n): BN {\n  const numerator = liquidity.mul(sqrtPriceX64).shln(64);\n  const denominator = liquidity.shln(64).add(amount.mul(sqrtPriceX64));\n\n  // always round up\n  return MathUtil.divRoundUp(numerator, denominator);\n}\n\n/**\n * Get upper sqrt price from token A.\n * \n * @param amount - The amount of tokens the user wanted to swap from.\n * @param liquidity - The liquidity of the pool.\n * @param sqrtPriceX64 - The sqrt price of the pool.\n * @returns LowesqrtPriceX64\n */\nexport function getUpperSqrtPriceFromTokenA(\n  amount: BN,\n  liquidity: BN,\n  sqrtPriceX64: BN\n): BN {\n  const numerator = liquidity.mul(sqrtPriceX64).shln(64);\n  const denominator = liquidity.shln(64).sub(amount.mul(sqrtPriceX64));\n\n  // always round up\n  return MathUtil.divRoundUp(numerator, denominator);\n}\n\n/**\n * Get lower sqrt price from token B.\n * \n * @param amount - The amount of tokens the user wanted to swap from.\n * @param liquidity - The liquidity of the pool.\n * @param sqrtPriceX64 - The sqrt price of the pool.\n * @returns LowesqrtPriceX64\n */\nexport function getLowerSqrtPriceFromTokenB(\n  amount: BN,\n  liquidity: BN,\n  sqrtPriceX64: BN\n): BN {\n  // always round down(rounding up a negative number)\n  return sqrtPriceX64.sub(MathUtil.divRoundUp(amount.shln(64), liquidity));\n}\n\n/**\n * Get upper sqrt price from token B.\n * \n * @param amount - The amount of tokens the user wanted to swap from.\n * @param liquidity - The liquidity of the pool.\n * @param sqrtPriceX64 - The sqrt price of the pool.\n * @returns LowesqrtPriceX64\n */\nexport function getUpperSqrtPriceFromTokenB(\n  amount: BN,\n  liquidity: BN,\n  sqrtPriceX64: BN\n): BN {\n  // always round down (rounding up a negative number)\n  return sqrtPriceX64.add(amount.shln(64).div(liquidity));\n}\n","import { u64 } from \"@solana/spl-token\";\nimport type { Decimal } from \"decimal.js\";\n\n/**\n * Percentage - the util set for percentage struct.\n */\nexport class Percentage {\n  readonly numerator: u64;\n  readonly denominator: u64;\n\n  constructor(numerator: u64, denominator: u64) {\n    this.toString = () => {\n      return `${this.numerator.toString()}/${this.denominator.toString()}`;\n    };\n    this.numerator = numerator;\n    this.denominator = denominator;\n  }\n\n  /**\n   * Get the percentage of a number.\n   * \n   * @param number \n   * @returns \n   */\n  static fromDecimal(number: Decimal): Percentage {\n    return Percentage.fromFraction(\n      number.toDecimalPlaces(1).mul(10).toNumber(),\n      1000\n    );\n  }\n\n  /**\n   * Get the percentage of a fraction.\n   * \n   * @param numerator \n   * @param denominator \n   * @returns \n   */\n  static fromFraction(\n    numerator: u64 | number,\n    denominator: u64 | number\n  ): Percentage {\n    const num =\n      typeof numerator === \"number\" ? new u64(numerator.toString()) : numerator;\n    const denom =\n      typeof denominator === \"number\"\n        ? new u64(denominator.toString())\n        : denominator;\n    return new Percentage(num, denom);\n  }\n}\n","import Decimal from \"./utils/decimal\";\n\nexport * from \"./types/index\";\nexport { IDL, clmmpool } from \"./idls/clmmpool\";\nexport { computeSwap, TickMath } from \"./math\";\nexport { PDAUtil, TickUtil } from \"./utils\";\n\nDecimal.set({ precision: 40, toExpPos: 40, toExpNeg: -20, rounding: 1 });\n"],"mappings":"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","names":["AccountName","BN","BN","BN","BN","BN","BN","translateAddress","BN","invariant","invariant","BN","clmmpool","BN","clmmpool","BN","BN","BN","clmmpool","u64"]}