UNPKG

@raydium-io/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

2 lines 208 kB
var ir=Object.defineProperty,rr=Object.defineProperties;var ar=Object.getOwnPropertyDescriptors;var bn=Object.getOwnPropertySymbols;var Ro=Object.prototype.hasOwnProperty,Lo=Object.prototype.propertyIsEnumerable;var Co=(y,e,t)=>e in y?ir(y,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):y[e]=t,F=(y,e)=>{for(var t in e||(e={}))Ro.call(e,t)&&Co(y,t,e[t]);if(bn)for(var t of bn(e))Lo.call(e,t)&&Co(y,t,e[t]);return y},q=(y,e)=>rr(y,ar(e));var tt=(y,e)=>{var t={};for(var n in y)Ro.call(y,n)&&e.indexOf(n)<0&&(t[n]=y[n]);if(y!=null&&bn)for(var n of bn(y))e.indexOf(n)<0&&Lo.call(y,n)&&(t[n]=y[n]);return t};import{PublicKey as Mo}from"@solana/web3.js";import{get as Oo,set as sr}from"lodash";var Gn=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},No={},ur={};function ee(y){let e=Oo(No,y);if(!e){let t=Oo(ur,y);e=new Gn({name:y,logLevel:t}),sr(No,y,e)}return e}import{MINT_SIZE as cr,TOKEN_PROGRAM_ID as lr,getTransferFeeConfig as mr,unpackMint as dr}from"@solana/spl-token";var zn=ee("Raydium_accountInfo_util");async function ve(y,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=F({batchRequest:!1},t),r=Xn(e,i),a=new Array(r.length).fill([]);if(n){let s=r.map(d=>{let g=y._buildArgs([d.map(m=>m.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:g}}),c=Xn(s,10);a=(await(await Promise.all(c.map(async d=>await y._rpcBatchRequest(d)))).flat()).map(d=>(d.error&&zn.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${d.error.message}`),d.result.value.map(g=>{if(g){let{data:m,executable:p,lamports:f,owner:b,rentEpoch:w}=g;return m.length!==2&&m[1]!=="base64"&&zn.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(m[0],"base64"),executable:p,lamports:f,owner:new Mo(b),rentEpoch:w}}return null})))}else try{a=await Promise.all(r.map(s=>y.getMultipleAccountsInfo(s,o)))}catch(s){s instanceof Error&&zn.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${s.message}`)}return a.flat()}async function Ee(y,e,t){let n=await ve(y,e.map(o=>o.pubkey),t);return e.map((o,i)=>q(F({},o),{accountInfo:n[i]}))}async function Yt({connection:y,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await Ee(y,e.map(s=>({pubkey:at(s)})),t),o={};for(let s of n){if(!s.accountInfo||s.accountInfo.data.length<cr){console.log("invalid mint account",s.pubkey.toBase58());continue}let c=dr(s.pubkey,s.accountInfo,(i=s.accountInfo)==null?void 0:i.owner);o[s.pubkey.toString()]=q(F({},c),{programId:((r=s.accountInfo)==null?void 0:r.owner)||lr,feeConfig:(a=mr(c))!=null?a:void 0})}return o[Mo.default.toBase58()]=o[Y.toBase58()],o}import Ct from"bn.js";import sR from"decimal.js";import wr from"big.js";import An from"bn.js";import pr from"toformat";var fr=pr,Ht=fr;import Pn from"big.js";import br from"bn.js";import gr from"decimal.js-light";import Qt from"bn.js";var Fo=9007199254740991;function Be(y){let e=ee("Raydium_parseBigNumberish");if(y instanceof Qt)return y;if(typeof y=="string"){if(y.match(/^-?[0-9]+$/))return new Qt(y);e.logWithError(`invalid BigNumberish string: ${y}`)}return typeof y=="number"?(y%1&&e.logWithError(`BigNumberish number underflow: ${y}`),(y>=Fo||y<=-Fo)&&e.logWithError(`BigNumberish number overflow: ${y}`),new Qt(String(y))):typeof y=="bigint"?new Qt(y.toString()):(e.error(`invalid BigNumberish value: ${y}`),new Qt(0))}var gn=ee("module/fraction"),Yn=Ht(Pn),Zt=Ht(gr),Pr={[0]:Zt.ROUND_DOWN,[1]:Zt.ROUND_HALF_UP,[2]:Zt.ROUND_UP},Ar={[0]:Pn.roundDown,[1]:Pn.roundHalfUp,[2]:Pn.roundUp},ie=class{constructor(e,t=new br(1)){this.numerator=Be(e),this.denominator=Be(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new ie(this.denominator,this.numerator)}add(e){let t=e instanceof ie?e:new ie(Be(e));return this.denominator.eq(t.denominator)?new ie(this.numerator.add(t.numerator),this.denominator):new ie(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof ie?e:new ie(Be(e));return this.denominator.eq(t.denominator)?new ie(this.numerator.sub(t.numerator),this.denominator):new ie(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof ie?e:new ie(Be(e));return new ie(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof ie?e:new ie(Be(e));return new ie(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||gn.logWithError(`${e} is not an integer.`),e<=0&&gn.logWithError(`${e} is not positive.`),Zt.set({precision:e+1,rounding:Pr[n]});let o=new Zt(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||gn.logWithError(`${e} is not an integer.`),e<0&&gn.logWithError(`${e} is negative.`),Yn.DP=e,Yn.RM=Ar[n]||1,new Yn(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var kr=ee("Raydium_amount"),vo=Ht(wr);function Tr(y,e){let t="0",n="0";if(y.includes(".")){let o=y.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):kr.logWithError(`invalid number string, num: ${y}`)}else t=y;return[t,n.slice(0,e)||n]}var Se=class extends ie{constructor(t,n,o=!0,i){let r=new An(0),a=Hn.pow(new An(t.decimals));if(o)r=Be(n);else{let s=new An(0),c=new An(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[u,d]=Tr(n.toString(),t.decimals);s=Be(u),c=Be(d)}s=s.mul(a),r=s.add(c)}super(r,a);this.logger=ee(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new Se(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Se(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return vo.DP=this.token.decimals,new vo(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as hr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as _o}from"@solana/spl-token";var wn={chainId:101,address:hr.default.toBase58(),programId:_o.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},st={chainId:101,address:"So11111111111111111111111111111111111111112",programId:_o.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Zn}from"@solana/web3.js";import{PublicKey as pe,SystemProgram as Vo,SYSVAR_RENT_PUBKEY as Ir}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Br}from"@solana/spl-token";function Rt({pubkey:y,isSigner:e=!1,isWritable:t=!0}){return{pubkey:y,isWritable:t,isSigner:e}}var Sr=[Rt({pubkey:Br,isWritable:!1}),Rt({pubkey:Vo.programId,isWritable:!1}),Rt({pubkey:Ir,isWritable:!1})];function Qn({publicKey:y,transformSol:e}){let t=Eo(y.toString());if(t instanceof pe)return e&&t.equals(Tt)?Y:t;if(e&&t.toString()===Tt.toBase58())return Y;if(typeof t=="string"){if(t===pe.default.toBase58())return pe.default;try{return new pe(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Eo(y){try{return new pe(y)}catch{return y}}var gt=new pe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Xe=new pe("SysvarRent111111111111111111111111111111111"),Vu=new pe("SysvarC1ock11111111111111111111111111111111"),Pt=new pe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Kr=new pe("Sysvar1nstructions1111111111111111111111111"),xr=Vo.programId,Eu=new pe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Du=new pe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Wu=new pe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),qu=new pe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Uu=new pe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Gu=new pe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),zu=new pe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Xu=new pe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Yu=new pe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Hu=new pe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Qu=new pe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Y=new pe("So11111111111111111111111111111111111111112"),Tt=pe.default;function at(y){return Qn({publicKey:y,transformSol:!0})}var $n=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===Tt.toBase58()||e instanceof Zn&&Tt.equals(e)){this.decimals=st.decimals,this.symbol=st.symbol,this.name=st.name,this.mint=new Zn(st.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?Zn.default:Qn({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ce=$n;Ce.WSOL=new $n(q(F({},st),{mint:st.address}));var jn=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},kn=jn;kn.SOL=new jn(wn);import Cr from"bn.js";var Do=new ie(new Cr(100)),ut=class extends ie{toSignificant(e=5,t,n){return this.mul(Do).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Do).toFixed(e,t,n)}};var Rr=ee("Raydium_price"),Ye=class extends ie{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new ie(Jn(n.decimals),Jn(o.decimals))}get raw(){return new ie(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Ye({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Rr.logWithError("mul token not equals");let n=super.mul(t);return new Ye({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};import{merge as cC}from"lodash";import Ac from"axios";var Wo={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",TEMP_HOST:"https://temp-api-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",CLMM_DYNAMIC_CONFIG:"/main/clmm-dynamic-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://lite-api.jup.ag/tokens/v2/tag?query=verified",POOL_LIST:"/pools/info/list-v2",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/list-v2",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position",LAUNCH_AUTH_HOST:"https://launch-auth-v1.raydium.io",LAUNCH_COMMENT_HOST:"hhttps://launch-forum-v1.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1.raydium.io"},Lr=q(F({},Wo),{BASE_HOST:"https://api-v3-devnet.raydium.io",OWNER_BASE_HOST:"https://owner-v1-devnet.raydium.io",SWAP_HOST:"https://transaction-v1-devnet.raydium.io",CPMM_LOCK:"https://dynamic-ipfs-devnet.raydium.io/lock/cpmm/position",TEMP_HOST:"https://temp-api-v1-devnet.raydium.io",LAUNCH_AUTH_HOST:"https://launch-auth-v1-devnet.raydium.io",LAUNCH_COMMENT_HOST:"https://launch-forum-v1-devnet.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1-devnet.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1-devnet.raydium.io"});var qc=ee("Raydium_Api");import{PublicKey as sd,SystemProgram as ud}from"@solana/web3.js";import{AccountLayout as pd,createAssociatedTokenAccountIdempotentInstruction as fd,TOKEN_PROGRAM_ID as yd,TOKEN_2022_PROGRAM_ID as bd}from"@solana/spl-token";import{PublicKey as Ft,sendAndConfirmTransaction as ro,SystemProgram as _r,Transaction as Jt,TransactionMessage as en,VersionedTransaction as tn}from"@solana/web3.js";import Vr from"axios";import{PublicKey as eo,AddressLookupTableAccount as Nt}from"@solana/web3.js";async function to({connection:y,address:e,cluster:t="mainnet"}){let n=await ve(y,[...new Set(e.map(i=>i.toString()))].map(i=>new eo(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let s=new Nt({key:a,state:Nt.deserialize(r.data)});o[a.toString()]=s,t==="devnet"?Ot[a.toString()]=s:Lt[a.toString()]=s}return o}var Lt={},no=async y=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Lt[e])return Lt;let t=new eo(e),n=await y.getAccountInfo(t);return n&&(Lt[e]=new Nt({key:t,state:Nt.deserialize(n.data)})),Lt},Ot={},oo=async y=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Ot[e])return Ot;let t=new eo(e),n=await y.getAccountInfo(t);return n&&(Ot[e]=new Nt({key:t,state:Nt.deserialize(n.data)})),Ot};var J={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",ClmmLockPosition:"ClmmLockPosition",ClmmHarvestLockPosition:"ClmmHarvestLockPosition",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV4Withdraw:"FarmV4Withdraw",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut",CpmmLockLp:"CpmmLockLp",CpmmCollectLockFee:"CpmmCollectLockFee",TransferTip:"TransferTip"};import{ComputeBudgetProgram as qo,Keypair as Go,PublicKey as Or,Transaction as zo,TransactionMessage as Nr,VersionedTransaction as Xo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Mr}from"@solana/spl-token";var Uo=ee("Raydium_txUtil"),Yo=1644;function Tn(y){let e=[],t=[];return y.microLamports&&(e.push(qo.setComputeUnitPrice({microLamports:y.microLamports})),t.push(J.SetComputeUnitPrice)),y.units&&(e.push(qo.setComputeUnitLimit({units:y.units})),t.push(J.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Mt(y,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=y.getLatestBlockhash)==null?void 0:n.call(y,{commitment:t})))==null?void 0:o.blockhash}async function hn(y,e){return y.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);y.onSignature(e,i=>{if(clearTimeout(o),!i.err){t("");return}n(Object.assign(i.err,{txId:e}))},"confirmed")})}function io(y,e){y.length<1&&Uo.logWithError(`no instructions provided: ${y.toString()}`),e.length<1&&Uo.logWithError(`no signers provided:, ${e.toString()}`);let t=new zo;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...y);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Yo}catch{return!1}}function ae(y,e){let[t,n]=Or.findProgramAddressSync(y,e);return{publicKey:t,nonce:n}}function $t({instructions:y,payer:e,signers:t}){return io(y,[e,...t])}function jt({instructions:y,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Go.generate().publicKey.toString()}){let i=new Nr({payerKey:e,recentBlockhash:n,instructions:y}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Xo(i).serialize()).toString("base64").length<Yo}catch{return!1}}var Fr=y=>Buffer.isBuffer(y)?y:y instanceof Uint8Array?Buffer.from(y.buffer,y.byteOffset,y.byteLength):Buffer.from(y),vr=y=>{let e=y.serialize({requireAllSignatures:!1,verifySignatures:!1});y instanceof Xo&&(e=Fr(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function ht(y){let e=[];return y.forEach(t=>{t instanceof zo&&(t.recentBlockhash||(t.recentBlockhash=Mr.toBase58()),t.feePayer||(t.feePayer=Go.generate().publicKey)),e.push(vr(t))}),console.log("simulate tx string:",e),e}var In=2e3,Bn=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.loopMultiTxStatus=!!e.loopMultiTxStatus}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Vr.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=Tn(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(_r.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Ft(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(J.TransferTip),!0):!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:r=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...r.filter(a=>a!==Ft.default.toString())),this}async versionBuild({txVersion:e,extInfo:t,lookupTableAddress:n}){return e===0?await this.buildV0(q(F({},t||{}),{lookupTableAddress:n})):this.build(t)}build(e){var n;let t=new Jt;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var u;let{recentBlockHash:i,skipPreflight:r=!0,sendAndConfirm:a,notSendToRpc:s}=o||{},c=i!=null?i:await Mt(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),ht([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await ro(this.connection,t,this.signers.find(g=>g.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:r}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:r}),signedTx:t};if(this.signAllTransactions){let d=await this.signAllTransactions([t]);if(this.signers.length)for(let g of d)try{g.sign(...this.signers)}catch{}return{txId:s?"":await this.connection.sendRawTransaction(d[0].serialize(),{skipPreflight:r}),signedTx:d[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(u=>u.transaction.instructions.length>0),r=[o,...i.map(u=>u.transaction)],a=[this.signers,...i.map(u=>u.signers)],s=[...this.instructionTypes,...i.map(u=>u.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(u=>{u.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:s,execute:async u=>{var w;let{sequentially:d,onTxUpdate:g,skipTxCount:m=0,recentBlockHash:p,skipPreflight:f=!0}=u||{},b=p!=null?p:await Mt(this.connection,this.blockhashCommitment);if((w=this.owner)!=null&&w.isKeyPair){if(d){let A=[],T=0;for(let B of r){if(++T,T<=m)continue;let P=await ro(this.connection,B,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});A.push(P)}return{txIds:A,signedTxs:r}}return{txIds:await await Promise.all(r.map(async A=>(A.recentBlockhash=b,await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:f})))),signedTxs:r}}if(this.signAllTransactions){let A=r.map((B,P)=>(B.recentBlockhash=b,a[P].length&&B.sign(...a[P]),B));ht(A);let T=await this.signAllTransactions(A);if(d){let B=0,P=[],k=async()=>{if(!T[B])return;let S=await this.connection.sendRawTransaction(T[B].serialize(),{skipPreflight:f});P.push({txId:S,status:"sent",signedTx:T[B]}),g==null||g([...P]),B++;let I=!1,K=null,L=null,U=V=>{K!==null&&clearInterval(K),L!==null&&this.connection.removeSignatureListener(L);let v=P.findIndex(_=>_.txId===S);if(v>-1){if(P[v].status==="error"||P[v].status==="success")return;P[v].status=V.err?"error":"success"}g==null||g([...P]),V.err||k()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var V;if(I){clearInterval(K);return}try{let v=await this.connection.getTransaction(S,{commitment:"confirmed",maxSupportedTransactionVersion:1});v&&(I=!0,clearInterval(K),U({err:((V=v.meta)==null?void 0:V.err)||null}),console.log("tx status from getTransaction:",S))}catch(v){I=!0,clearInterval(K),console.error("getTransaction timeout:",v,S)}},In)),L=this.connection.onSignature(S,V=>{if(I){this.connection.removeSignatureListener(L);return}I=!0,U(V)},"confirmed"),this.connection.getSignatureStatus(S)};return await k(),{txIds:P.map(S=>S.txId),signedTxs:T}}else{let B=[];for(let P=0;P<T.length;P+=1){let k=await this.connection.sendRawTransaction(T[P].serialize(),{skipPreflight:f});B.push(k)}return{txIds:B,signedTxs:T}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let p=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:i}=p,r=tt(p,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=F(F({},this.cluster==="devnet"?await oo(this.connection):await no(this.connection)),t),s=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let b of s)a[b]===void 0&&c.push(new Ft(b));let u=await to({connection:this.connection,address:c});for(let[b,w]of Object.entries(u))a[b]=w;let d=o?Ft.default.toBase58():i!=null?i:await Mt(this.connection,this.blockhashCommitment),g=new en({payerKey:this.feePayer,recentBlockhash:d,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new tn(g);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var B;let{skipPreflight:w=!0,sendAndConfirm:A,notSendToRpc:T}=b||{};if(ht([m]),(B=this.owner)!=null&&B.isKeyPair){let P=await this.connection.sendTransaction(m,{skipPreflight:w});return A&&await hn(this.connection,P),{txId:P,signedTx:m}}if(this.signAllTransactions){let P=await this.signAllTransactions([m]);if(this.signers.length)for(let k of P)try{k.sign(this.signers)}catch{}return{txId:T?"":await this.connection.sendTransaction(P[0],{skipPreflight:w}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(u=>u.builder.instructions.length>0),r=[o,...i.map(u=>u.transaction)],a=[this.signers,...i.map(u=>u.signers)],s=[...this.instructionTypes,...i.map(u=>u.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(u=>{u.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),r.forEach(async(u,d)=>{u.sign(a[d])}),{builder:this,transactions:r,signers:a,instructionTypes:s,buildProps:n,execute:async u=>{var f;let{sequentially:d,onTxUpdate:g,recentBlockHash:m,skipPreflight:p=!0}=u||{};if(m&&r.forEach(b=>b.message.recentBlockhash=m),ht(r),(f=this.owner)!=null&&f.isKeyPair){if(d){let b=[];for(let w of r){let A=await this.connection.sendTransaction(w,{skipPreflight:p});await hn(this.connection,A),b.push(A)}return{txIds:b,signedTxs:r}}return{txIds:await Promise.all(r.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:p}))),signedTxs:r}}if(this.signAllTransactions){let b=await this.signAllTransactions(r);if(d){let w=0,A=[],T=async()=>{if(!b[w])return;let B=await this.connection.sendTransaction(b[w],{skipPreflight:p});A.push({txId:B,status:"sent",signedTx:b[w]}),g==null||g([...A]),w++;let P=!1,k=null,S=null,I=K=>{k!==null&&clearInterval(k),S!==null&&this.connection.removeSignatureListener(S);let L=A.findIndex(U=>U.txId===B);if(L>-1){if(A[L].status==="error"||A[L].status==="success")return;A[L].status=K.err?"error":"success"}g==null||g([...A]),K.err||T()};this.loopMultiTxStatus&&(k=setInterval(async()=>{var K;if(P){clearInterval(k);return}try{let L=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:1});L&&(P=!0,clearInterval(k),I({err:((K=L.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",B))}catch(L){P=!0,clearInterval(k),console.error("getTransaction timeout:",L,B)}},In)),S=this.connection.onSignature(B,K=>{if(P){this.connection.removeSignatureListener(S);return}P=!0,I(K)},"confirmed"),this.connection.getSignatureStatus(B)};return T(),{txIds:[],signedTxs:b}}else{let w=[];for(let A=0;A<b.length;A+=1){let T=await this.connection.sendTransaction(b[A],{skipPreflight:p});w.push(T)}return{txIds:w,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var g;let d=e||{},{splitIns:t=[],computeBudgetConfig:n}=d,o=tt(d,["splitIns","computeBudgetConfig"]),i=n?Tn(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((m,p)=>q(F({},m),{[p.publicKey.toBase58()]:p}),{}),a=[],s=[],c=[],u=0;if(this.allInstructions.forEach(m=>{let p=[...c,m],f=n?[...i.instructions,...p]:p,w=[...new Set(p.map(A=>A.keys.filter(T=>T.isSigner).map(T=>T.pubkey.toString())).flat()).values()].map(A=>new Ft(A));if(m!==t[u]&&c.length<12&&($t({instructions:f,payer:this.feePayer,signers:w})||$t({instructions:p,payer:this.feePayer,signers:w})))c.push(m);else{if(c.length===0)throw Error("item ins too big");u+=m===t[u]?1:0,$t({instructions:n?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:w})?a.push(new Jt().add(...i.instructions,...c)):a.push(new Jt().add(...c)),s.push(Array.from(new Set(c.map(A=>A.keys.filter(T=>T.isSigner).map(T=>T.pubkey.toString())).flat())).map(A=>r[A]).filter(A=>A!==void 0)),c=[m]}}),c.length>0){let p=[...new Set(c.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>r[f]).filter(f=>f!==void 0);$t({instructions:n?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:p.map(f=>f.publicKey)})?a.push(new Jt().add(...i.instructions,...c)):a.push(new Jt().add(...c)),s.push(p)}return a.forEach(m=>m.feePayer=this.feePayer),(g=this.owner)!=null&&g.signer&&s.forEach(m=>{m.some(p=>p.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:a,signers:s,instructionTypes:this.instructionTypes,execute:async m=>{var B;let{sequentially:p,onTxUpdate:f,skipTxCount:b=0,recentBlockHash:w,skipPreflight:A=!0}=m||{},T=w!=null?w:await Mt(this.connection,this.blockhashCommitment);if(a.forEach(async(P,k)=>{P.recentBlockhash=T,s[k].length&&P.sign(...s[k])}),ht(a),(B=this.owner)!=null&&B.isKeyPair){if(p){let P=0,k=[];for(let S of a){if(++P,P<=b){k.push("tx skipped");continue}let I=await ro(this.connection,S,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});k.push(I)}return{txIds:k,signedTxs:a}}return{txIds:await Promise.all(a.map(async P=>await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let P=await this.signAllTransactions(a.slice(b,a.length)),k=[...a.slice(0,b),...P];if(p){let S=0,I=[],K=async()=>{if(!k[S])return;S<b&&(I.push({txId:"",status:"success",signedTx:k[S]}),f==null||f([...I]),S++,K());let L=await this.connection.sendRawTransaction(k[S].serialize(),{skipPreflight:A});I.push({txId:L,status:"sent",signedTx:k[S]}),f==null||f([...I]),S++;let U=!1,V=null,v=null,_=E=>{V!==null&&clearInterval(V),v!==null&&this.connection.removeSignatureListener(v);let Z=I.findIndex(ce=>ce.txId===L);if(Z>-1){if(I[Z].status==="error"||I[Z].status==="success")return;I[Z].status=E.err?"error":"success"}f==null||f([...I]),E.err||K()};this.loopMultiTxStatus&&(V=setInterval(async()=>{var E;if(U){clearInterval(V);return}try{let Z=await this.connection.getTransaction(L,{commitment:"confirmed",maxSupportedTransactionVersion:1});Z&&(U=!0,clearInterval(V),_({err:((E=Z.meta)==null?void 0:E.err)||null}),console.log("tx status from getTransaction:",L))}catch(Z){U=!0,clearInterval(V),console.error("getTransaction timeout:",Z,L)}},In)),v=this.connection.onSignature(L,E=>{if(U){this.connection.removeSignatureListener(v);return}U=!0,_(E)},"confirmed"),this.connection.getSignatureStatus(L)};return await K(),{txIds:I.map(L=>L.txId),signedTxs:k}}else{let S=[];for(let I=0;I<k.length;I+=1){let K=await this.connection.sendRawTransaction(k[I].serialize(),{skipPreflight:A});S.push(K)}return{txIds:S,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var B;let T=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[],insCountLimit:r=12}=T,a=tt(T,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress","insCountLimit"]),s=F(F({},this.cluster==="devnet"?await oo(this.connection):await no(this.connection)),o),c=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let P of c)s[P]===void 0&&u.push(new Ft(P));let d=await to({connection:this.connection,address:u});for(let[P,k]of Object.entries(d))s[P]=k;let g=t?Tn(t):{instructions:[],instructionTypes:[]},m=await Mt(this.connection,this.blockhashCommitment),p=this.signers.reduce((P,k)=>q(F({},P),{[k.publicKey.toBase58()]:k}),{}),f=[],b=[],w=[],A=0;if(this.allInstructions.forEach(P=>{let k=[...w,P],S=t?[...g.instructions,...k]:k;if(P!==n[A]&&w.length<r&&(jt({instructions:S,payer:this.feePayer,lookupTableAddressAccount:s})||jt({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})))w.push(P);else{if(w.length===0)throw Error("item ins too big");A+=P===n[A]?1:0;let I={};for(let K of[...new Set(c)])s[K]!==void 0&&(I[K]=s[K]);if(t&&jt({instructions:[...g.instructions,...w],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let K=new en({payerKey:this.feePayer,recentBlockhash:m,instructions:[...g.instructions,...w]}).compileToV0Message(Object.values(s));f.push(new tn(K))}else{let K=new en({payerKey:this.feePayer,recentBlockhash:m,instructions:[...w]}).compileToV0Message(Object.values(s));f.push(new tn(K))}b.push(Array.from(new Set(w.map(K=>K.keys.filter(L=>L.isSigner).map(L=>L.pubkey.toString())).flat())).map(K=>p[K]).filter(K=>K!==void 0)),w=[P]}}),w.length>0){let k=[...new Set(w.map(S=>S.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(S=>p[S]).filter(S=>S!==void 0);if(t&&jt({instructions:[...g.instructions,...w],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let S=new en({payerKey:this.feePayer,recentBlockhash:m,instructions:[...g.instructions,...w]}).compileToV0Message(Object.values(s));f.push(new tn(S))}else{let S=new en({payerKey:this.feePayer,recentBlockhash:m,instructions:[...w]}).compileToV0Message(Object.values(s));f.push(new tn(S))}b.push(k)}return(B=this.owner)!=null&&B.signer&&b.forEach(P=>{P.some(k=>k.publicKey.equals(this.owner.publicKey))||P.push(this.owner.signer)}),f.forEach((P,k)=>{P.sign(b[k])}),{builder:this,transactions:f,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async P=>{var U;let{sequentially:k,onTxUpdate:S,skipTxCount:I=0,recentBlockHash:K,skipPreflight:L=!0}=P||{};if(f.map(async(V,v)=>{b[v].length&&V.sign(b[v]),K&&(V.message.recentBlockhash=K)}),ht(f),(U=this.owner)!=null&&U.isKeyPair){if(k){let V=0,v=[];for(let _ of f){if(++V,V<=I){console.log("skip tx: ",V),v.push("tx skipped");continue}let E=await this.connection.sendTransaction(_,{skipPreflight:L});await hn(this.connection,E),v.push(E)}return{txIds:v,signedTxs:f}}return{txIds:await Promise.all(f.map(async V=>await this.connection.sendTransaction(V,{skipPreflight:L}))),signedTxs:f}}if(this.signAllTransactions){let V=await this.signAllTransactions(f.slice(I,f.length)),v=[...f.slice(0,I),...V];if(k){let _=0,E=[],Z=async()=>{if(!v[_])return;if(_<I){E.push({txId:"",status:"success",signedTx:v[_]}),S==null||S([...E]),_++,Z();return}let ce=await this.connection.sendTransaction(v[_],{skipPreflight:L});E.push({txId:ce,status:"sent",signedTx:v[_]}),S==null||S([...E]),_++;let se=!1,de=null,bt=null,Fe=Ne=>{de!==null&&clearInterval(de),bt!==null&&this.connection.removeSignatureListener(bt);let Ie=E.findIndex(Un=>Un.txId===ce);if(Ie>-1){if(E[Ie].status==="error"||E[Ie].status==="success")return;E[Ie].status=Ne.err?"error":"success"}S==null||S([...E]),Ne.err||Z()};this.loopMultiTxStatus&&(de=setInterval(async()=>{var Ne;if(se){clearInterval(de);return}try{let Ie=await this.connection.getTransaction(ce,{commitment:"confirmed",maxSupportedTransactionVersion:1});Ie&&(se=!0,clearInterval(de),Fe({err:((Ne=Ie.meta)==null?void 0:Ne.err)||null}),console.log("tx status from getTransaction:",ce))}catch(Ie){se=!0,clearInterval(de),console.error("getTransaction timeout:",Ie,ce)}},In)),bt=this.connection.onSignature(ce,Ne=>{if(se){this.connection.removeSignatureListener(bt);return}se=!0,Fe(Ne)},"confirmed"),this.connection.getSignatureStatus(ce)};return Z(),{txIds:[],signedTxs:v}}else{let _=[];for(let E=0;E<v.length;E+=1){let Z=await this.connection.sendTransaction(v[E],{skipPreflight:L});_.push(Z)}return{txIds:_,signedTxs:v}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:a||{}}}};var ao=(...y)=>y.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),_e=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ee(t)}createTxBuilder(e){return this.scope.checkOwner(),new Bn({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,loopMultiTxStatus:this.scope.loopMultiTxStatus,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(ao(e))}logInfo(...e){this.logger.info(ao(e))}logAndCreateError(...e){let t=ao(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as Vm,SystemProgram as Dm}from"@solana/web3.js";import Um from"bn.js";import{createCloseAccountInstruction as Ym,createInitializeAccountInstruction as Hm,createTransferInstruction as Qm,TOKEN_PROGRAM_ID as Zm}from"@solana/spl-token";import{Keypair as Bm,PublicKey as Sm}from"@solana/web3.js";import Cm from"bn.js";import{TOKEN_PROGRAM_ID as Om}from"@solana/spl-token";import{PublicKey as Zr}from"@solana/web3.js";import jo,{isBN as Jo}from"bn.js";import{bits as Er,BitStructure as Rl,blob as Dr,Blob as Ll,cstr as Ol,f32 as Nl,f32be as Ml,f64 as Fl,f64be as vl,greedy as _l,Layout as Wr,ns64 as Vl,ns64be as El,nu64 as Dl,nu64be as Wl,offset as qr,s16 as ql,s16be as Ul,s24 as Gl,s24be as zl,s32 as Ur,s32be as Xl,s40 as Yl,s40be as Hl,s48 as Ql,s48be as Zl,s8 as $l,seq as Gr,struct as jl,Structure as zr,u16 as Xr,u16be as Jl,u24 as em,u24be as tm,u32 as Yr,u32be as nm,u40 as om,u40be as im,u48 as rm,u48be as am,u8 as Hr,UInt as Qr,union as sm,Union as um,unionLayoutDiscriminator as cm,utf8 as lm}from"@solana/buffer-layout";var Sn=Wr,Ho=zr;var so=Qr;var Qo=Hr,Pe=Xr;var Kn=Yr;var Te=Ur;var Zo=Gr;var $=Dr;var uo=Er,$o=qr;var Bt=class extends Sn{constructor(t,n,o){super(t,o);this.blob=$(t),this.signed=n}decode(t,n=0){let o=new jo(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new jo(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},xn=class extends Sn{constructor(t){super(8,t);this._lower=uo(Kn(),!1),this._upper=uo(Kn(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return F(F({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function N(y){return new so(1,y)}function fe(y){return new so(4,y)}function l(y){return new Bt(8,!1,y)}function z(y){return new Bt(16,!1,y)}function ei(y){return new Bt(1,!0,y)}function vt(y){return new Bt(8,!0,y)}function ti(y){return new Bt(16,!0,y)}var nn=class extends Sn{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function h(y){return new nn($(32),e=>new Zr(e),e=>e.toBuffer(),y)}function ye(y){return new nn(Qo(),$r,jr,y)}function $r(y){if(y===0)return!1;if(y===1)return!0;throw new Error("Invalid bool: "+y)}function jr(y){return y?1:0}function lo(y,e){let t=Kn("length"),n=O([t,D(y,$o(t,-t.span),"values")]);return new nn(n,({values:o})=>o,o=>({values:o}),e)}var co=class extends Ho{decode(e,t){return super.decode(e,t)}};function O(y,e,t){return new co(y,e,t)}function D(y,e,t){let n,o=typeof e=="number"?e:Jo(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=Jo(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,r)},set(i,r,a){return r==="count"&&(n=a),Reflect.set(i,r,a)}});return Zo(y,o,t)}var _t=O([h("mint"),h("owner"),l("amount"),fe("delegateOption"),h("delegate"),N("state"),fe("isNativeOption"),l("isNative"),l("delegatedAmount"),fe("closeAuthorityOption"),h("closeAuthority")]);import{PublicKey as ag,SystemProgram as sg}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as cg}from"@solana/spl-token";import{PublicKey as ea}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ta}from"@solana/spl-token";function Q(y,e,t){return ae([y.toBuffer(),(t!=null?t:ta).toBuffer(),e.toBuffer()],new ea("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as X}from"@solana/web3.js";var oi=new X("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),ii=new X("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),ri=new X("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),mo=new X("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Kd=new X("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),na=new X("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),ai=new X("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),si=new X("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),xd=new X("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),oa=new X("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),At=new X("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),on=new X("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Rn=new X("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),ui=new X("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Cd=new X("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),ia=new X("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),po=new X("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ra=new X("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Rd=new X("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),aa=new X("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),sa=new X("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),ua=new X("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Ld=new X("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),Od=new X("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),Nd=new X("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Md=new X("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Fd=new X("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX");var wt={OPEN_BOOK_PROGRAM:new X("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new X("Ray1111111111111111111111111111111111111111"),AMM_V4:new X("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new X("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new X("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new X("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new X("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new X("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new X("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new X("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new X("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new X("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:X.default,Router:new X("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new X("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new X("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new X("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new X("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new X("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new X("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new X("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new X("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new X("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new X("Ray1111111111111111111111111111111111111111")};import Ag from"decimal.js";import ne from"bn.js";var ue=new ne(1).shln(64),Vt=64,ca=new ne(1).shln(128),lt=new ne(1).shln(64).subn(1),la=new ne(1).shln(128).subn(1),He=-443636,Qe=443636,Ze=new ne("4295048016"),$e=new ne("79226673521066979257578248091"),ci=new ne("59543866431248"),li=new ne("184467440737095516"),mi=new ne("15793534762490258745"),di=16,Ln=512,De=60,Ud=new ne("18446743708227953217"),pi=[{bit:0,factor:new ne("fffcb933bd6fb800",16)},{bit:1,factor:new ne("fff97272373d4000",16)},{bit:2,factor:new ne("fff2e50f5f657000",16)},{bit:3,factor:new ne("ffe5caca7e10f000",16)},{bit:4,factor:new ne("ffcb9843d60f7000",16)},{bit:5,factor:new ne("ff973b41fa98e800",16)},{bit:6,factor:new ne("ff2ea16466c9b000",16)},{bit:7,factor:new ne("fe5dee046a9a3800",16)},{bit:8,factor:new ne("fcbe86c7900bb000",16)},{bit:9,factor:new ne("f987a7253ac65800",16)},{bit:10,factor:new ne("f3392b0822bb6000",16)},{bit:11,factor:new ne("e7159475a2caf000",16)},{bit:12,factor:new ne("d097f3bdfd2f2000",16)},{bit:13,factor:new ne("a9f746462d9f8000",16)},{bit:14,factor:new ne("70d869a156f31c00",16)},{bit:15,factor:new ne("31be135f97ed3200",16)},{bit:16,factor:new ne("9aa508b5b85a500",16)},{bit:17,factor:new ne("5d6af8dedc582c",16)},{bit:18,factor:new ne("2216e584f5fa",16)}],mt=1e6;var On=1e5,rn=1e4,fi=1e4,yi=1e5;var an=3,bi=100;var gi=10,Pi=100,Et=14;var W=new ne(0),je=new ne(1),Gd=new ne(-1),Nn={tvl:0,volumeQuote:0,mintAmountA:0,mintAmountB:0,rewardDefaultInfos:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,day:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},week:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},month:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},pooltype:[]};var zd=new ne("18446744073700000000");var fo=O([$(8),N("bump"),Pe("index"),h("owner"),fe("protocolFeeRate"),fe("tradeFeeRate"),Pe("tickSpacing"),fe("fundFeeRate"),D(fe(),1),h("fundOwner"),D(l(),3)]),ma=O([fe("blockTimestamp"),vt("tickCumulative"),D(l(),4)]),Ai=O([$(8),ye("initialized"),l("recentEpoch"),Pe("observationIndex"),h("poolId"),D(ma,bi,"observations"),D(l(),4)]),da=O([Pe("filterPeriod"),Pe("decayPeriod"),Pe("reductionFactor"),fe("dynamicFeeControl"),fe("maxVolatilityAccumulator"),Te("tickSpacingIndexReference"),fe("volatilityReference"),fe("volatilityAccumulator"),l("lastUpdateTimestamp"),D(N(),46)]),pa=O([N("state"),l("openTime"),l("endTime"),l("lastUpdateTime"),z("emissionsPerSecondX64"),l("totalEmissioned"),l("claimed"),h("mint"),h("vault"),h("creator"),z("growthGlobalX64")]),sn=O([$(8),N("bump"),h("configId"),h("creator"),h("mintA"),h("mintB"),h("vaultA"),h("vaultB"),h("observationId"),N("mintDecimalsA"),N("mintDecimalsB"),Pe("tickSpacing"),z("liquidity"),z("sqrtPriceX64"),Te("tickCurrent"),fe(),z("feeGrowthGlobalX64A"),z("feeGrowthGlobalX64B"),l("protocolFeesTokenA"),l("protocolFeesTokenB"),D(z(),4),N("status"),N("feeOn"),$(6),D(pa,an,"rewardInfos"),$(8*16,"tickArrayBitmap"),D(l(),4),l("fundFeesTokenA"),l("fundFeesTokenB"),l("startTime"),l("recentEpoch"),da.replicate("dynamicFeeInfo"),D(l(),46)]),fa=O([z("growthInsideLastX64"),l("rewardAmountOwed")]),Mn=O([$(8),N("bump"),h("nftMint"),h("poolId"),Te("tickLower"),Te("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),l("tokenFeesOwedA"),l("tokenFeesOwedB"),D(fa,an,"rewardInfos"),l("recentEpoch"),D(l(),7)]),Qd=O([$(8),N("bump"),h("poolId"),Te("tickLower"),Te("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),l("tokenFeesOwedA"),l("tokenFeesOwedB"),D(z(),an,"rewardGrowthInside"),l("recentEpoch"),D(l(),7)]),ya=O([Te("tick"),ti("liquidityNet"),z("liquidityGross"),z("feeGrowthOutsideX64A"),z("feeGrowthOutsideX64B"),D(z(),an,"rewardGrowthsOutsideX64"),l("orderPhase"),l("ordersAmount"),l("partFilledOrdersRemaining"),z("unfilledRatioX64"),D(fe(),3)]),Dt=O([$(8),h("poolId"),Te("startTickIndex"),D(ya,De,"ticks"),N("initializedTickCount"),l("recentEpoch"),D(N(),107)]),wi=O([$(8),N("bump"),D(h(),gi,"operationOwners"),D(h(),Pi,"whitelistMints")]),St=O([$(8),h("poolId"),h("owner"),Te("tick"),ye("zeroForOne"),l("orderPhase"),l("totalAmount"),l("filledAmount"),l("settleBase"),l("settleOutput"),l("openTime"),z("unfilledRatioX64"),D(l(),4)]),Fn=O([$(8),h("poolId"),$(8*8*Et,"positiveTickArrayBitmap"),$(8*8*Et,"negativeTickArrayBitmap")]),Zd=O([$(8),Pe("index"),Pe("filterPeriod"),Pe("decayPeriod"),Pe("reductionFactor"),fe("dynamicFeeControl"),fe("maxVolatilityAccumulator"),D(l(),8)]),ki=O([$(8),h("wallet"),N("nonceIndex"),l("orderNonce"),D(l(),4)]),$d=O([l(),N("bump"),h("owner"),h("poolId"),h("positionId"),h("nftAccount"),D(l(),8)]),Ti=O([$(8),N("bump"),h("lockOwner"),h("poolId"),h("positionId"),h("nftAccount"),h("lockNftMint"),l("recentEpoch"),D(l(),8)]);import{ASSOCIATED_TOKEN_PROGRAM_ID as ho,TOKEN_2022_PROGRAM_ID as we,TOKEN_PROGRAM_ID as re}from"@solana/spl-token";import{Keypair as Vn,PublicKey as M,SystemProgram as ct,TransactionInstruction as ge}from"@solana/web3.js";import En from"bn.js";import ba from"bn.js";function yo(y){let e=Buffer.alloc(2);return e.writeUInt16LE(y),e}function bo(y){let e=Buffer.alloc(4);return e.writeInt32LE(y),e}function hi(y){let e=Buffer.alloc(4);return e.writeInt32BE(y),e}function Ii(y){return(typeof y=="number"||typeof y=="bigint")&&(y=new ba(y.toString())),y.toArrayLike(Buffer,"be",8)}function Bi(y){let e=new ArrayBuffer(1);return new DataView(e).setUint8(0,y),new Uint8Array(e)}var ap=Buffer.from("amm_config","utf8"),go=Buffer.from("pool","utf8"),Si=Buffer.from("pool_vault","utf8"),ga=Buffer.from("pool_reward_vault","utf8"),Ki=Buffer.from("position","utf8"),Pa=Buffer.from("tick_array","utf8"),Aa=Buffer.from("operation","utf8"),wa=Buffer.from("pool_tick_array_bitmap_extension","utf8"),ka=Buffer.from("observation","utf8"),Ta=Buffer.from("support_mint","utf8"),sp=Buffer.from("dynamic_fee_config","utf8"),ha=Buffer.from("permission","utf8");function xi(y,e,t,n){return ae([go,e.toBuffer(),t.toBuffer(),n.toBuffer()],y)}function Ci(y,e){return ae([ha,e.toBuffer()],y)}function Ri(y,e,t,n,o){return ae([go,e.toBuffer(),t.toBuffer(),n.toBuffer(),yo(o)],y)}function Ue(y,e,t){return ae([Si,e.toBuffer(),t.toBuffer()],y)}function Li(y,e,t){return ae([ga,e.toBuffer(),t.toBuffer()],y)}function oe(y,e,t){return ae([Pa,e.toBuffer(),hi(t)],y)}function nt(y,e,t,n){return ae([Ki,e.toBuffer(),bo(t),bo(n)],y)}function Ge(y,e){return ae([Ki,e.toBuffer()],y)}function Kt(y){return ae([Buffer.from("metadata","utf8"),Pt.toBuffer(),y.toBuffer()],Pt)}function un(y){return ae([Aa],y)}function le(y,e){return ae([wa,e.toBuffer()],y)}function Po(y,e){return ae([ka,e.toBuffer()],y)}function xt(y,e){return ae([Ta,e.toBuffer()],y)}function Oi(y,e,t,n){return ae([e.toBuffer(),t.toBuffer(),Ii(n)],y)}function Ni(y,e,t){return ae([e.toBuffer(),Bi(t)],y)}var Mi=Buffer.from("locked_position","utf8");function Ao(y,e){return ae([Mi,e.toBuffer()],y)}function Wt(y,e){return ae([Mi,e.toBuffer()],y)}import{sha256 as Ka}from"js-sha256";import Fi from"bn.js";import wo from"decimal.js";function be(y,e,t){if(t.isZero())throw new Error("Division by zero");return y.mul(e).div(t)}function me(y,e,t){if(t.isZero())throw new Error("Division by zero");let n=y.mul(e),o=n.div(t);return n.mod(t).isZero()?o:o.addn(1)}function vn(y,e){return y.div(e).add(y.mod(e).isZero()?W:je)}var dp=new Fi(1).shln(256).subn(1);function vi(y){return y.isZero()?-1:y.bitLength()-1}function _i(y,e){return new wo(y.toString()).div(wo.pow(2,64)).toDecimalPlaces(e)}function qt(y){return new Fi(y.mul(wo.pow(2,64)).floor().toFixed())}import Ia from"bn.js";import Ke from"bn.js";import Ut from"decimal.js";var dt=class{static scanLinearBitmap({bitmap:e,tickSpacing:t,offset:n,checkInfo:o}){let i=[],r=e.length*8,a=0,s=r-1;if(o){let d=o.tick/(t*De)-n;o.valueType==="gte"?a=Math.max(0,Math.ceil(d)):s=Math.min(r-1,Math.floor(d))}if(a>s)return i;let c=Math.floor(a/8),u=Math.floor(s/8);for(let d=c;d<=u;d++){if(!e[d])continue;let g=d===c?a%8:0,m=d===u?s%8:7;for(let p=g;p<=m;p++)e[d]&1<<p&&i.push((d*8+p+n)*t*De)}return i}static findPoolBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/De/t);if(n.valueType==="lte"&&o<-512)return[];if(n.valueType==="gte"&&o>512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:-Ln,checkInfo:n})}static findPositiveTickArrayBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/De/t);if(n.valueType==="lte"&&o<512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:Ln,checkInfo:n})}static findNegativeTickArrayBitmap({bitmap:e,tickSpacing:t,count:n,checkInfo:o}){let i=[];if(o){let s=Math.floor(o.tick/De/t);if(o.valueType==="gte"&&s>=-512)return i}let r=(o==null?void 0:o.valueType)==="lte"?Math.floor(o.tick/(De*t))+7680:1/0,a=(o==null?void 0:o.valueType)==="gte"?Math.ceil(o.tick/(De*t))+7680:0;e:for(let s=0;s<Et;s++){let c=Et-1-s;for(let u=0;u<512;u++){let d=s*512+u;if(d>r)break e;if(d<a)continue;let g=c*64+Math.floor(u/8);if(!e[g]){u=Math.floor(u/8)*8+7;continue}if(e[g]&1<<u%8){let m=(s*512+u-7680)*De*t;if(i.push(m),n!==void 0&&i.length>=n)break e}}}return i}static findTickArrayStartIndex({tickSpacing:e,poolBitmap:t,tickArrayBitmap:n,findInfo:o}){if(o.type==="all")return[...this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap}),...this.findPoolBitmap({tickSpacing:e,bitmap:t}),...this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap})];let i=H.getTickArrayStartIndex(o.tickArrayCurrent,e),{count:r}=o;if(o.type==="oneForZero"){let a={tick:i,valueType:"gte"},s=[()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}),()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a})];return this.collectUntil(s,r)}if(o.type==="zeroForOne"){let a={tick:i,valueType:"lte"},s=[()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a}).sort((c,u)=>u-c),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}).sort((c,u)=>u-c),()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}).sort((c,u)=>u-c)];return this.collectUntil(s,r)}throw new Error("find info type check error")}static collectUntil(e,t){let n=[];for(let o of e){if(t!==void 0&&n.length>=t)break;n.push(...o())}return n.slice(0,t)}static findTickArrayAddress(e){return this.findTickArrayStartIndex(e).map(t=>oe(e.programId,e.poolId,t).publicKey)}static maxTickInTickarrayBitmap(e){return e*De*Ln}},H=class{static firstinitializedTick({data:e,zeroForOne:t}){if(t){for(let n=e.ticks.length-1;n>=0;n--)if(G.isInitialized({data:e.ticks[n]}))return e.ticks[n]}else for(let n=0;n<e.ticks.length;n++)if(G.isInitialized({data:e.ticks[n]}))return e.ticks[n]}static nextInitalizedTick({data:e,currentTickIndex:t,tickSpacing:n,zeroForOne:o}){if(this.getTickArrayStartIndex(t,n)!==e.startTickIndex)return;let r=Math.floor((t-e.startTickIndex)/n);if(o){for(let a=r;a>=0;a--)if(G.isInitialized({data:e.ticks[a]}))return e.ticks[a]}else for(let a=r+1;a<De;a++)if(G.isInitialized({data:e.ticks[a]}))return e.ticks[a]}static getTickArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=this.getTickArrayStartIndex(e,t);return Math.floor((e-n)/t)}static tickCount(e){return De*e}static getMinTick(e){return Math.ceil(He/e)*e}static getMaxTick(e){return Math.floor(Qe/e)*e}},G=class{static isInitialized({data:e}){return this.hasLiquidity({data:e})||this.hasLimitOrders({data:e})}static hasLimitOrders({data:e}){return!e.ordersAmount.isZero()||!e.partFilledOrdersRemaining.isZero()}static hasLiquidity({data:e}){return!e.liquidityGross.isZero()}static isValidTick(e){return e>=He&&e<=Qe}static checkTick(e){if(!this.isValidTick(e))throw new Error(`Tick ${e} is out of range [${He}, ${Qe}]`)}static getSqrtPriceAtTick(e){this.checkTick(e);let t=Math.abs(e),n=ue.clone();for(let{bit:o,factor:i}of pi)(t&1<<o)!==0&&(n=be(n,i,ue));return e>0&&(n=be(ue,ue,n)),n}static getLimitOrderOutput({amountIn:e,tick:t,zeroForOne:n}){if(n){let o=G.getPriceAtTick(t,!1);return be(e,o,ue)}else{let o=G.getPriceAtTick(t,!0);return be(e,ue,o)}}static getLimitOrderInput({amountOut:e,tick:t,zeroForOne:n}){if(n){let o=G.getPriceAtTick(t,!0);return me(e,o,ue)}else{let o=G.getPriceAtTick(t,!1);return me(e,ue,o)}}static limitOrderUnfilledAmount({tick:e}){return e.ordersAmount.add(e.partFilledOrdersRemaining)}static matchLimitOrder({tick:e,swapAmount:t,swapDirectionZeroForOne:n,isBaseInput:o,feeRate:i,isFeeOnInput:r}){let a={amountIn:W,amountOut:W,ammFeeAmount:W},s=this.limitOrderUnfilledAmount({tick:e});if(t.isZero()||s.isZero())return a;if(o)r?(a.ammFeeAmount=me(t,new Ke(i),Je),a.amountIn=t.sub(a.ammFeeAmount)):a.amountIn=t,a.amountOut=this.getLimitOrderOutput({amountIn:a.amountIn,tick:e.tick,zeroForOne:n}),a.amountOut.gt(s)&&(a.amountOut=s,a.amountIn=this.getLimitOrderInput({amountOut:s,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=me(a.amountIn,new Ke(i),Je.sub(new Ke(i)))));else{let d=Ke.min(t,s);r?a.amountOut=d:a.amountOut=Ke.min(me(d,Je,Je.sub(new Ke(i))),s),a.amountIn=this.getLimitOrderInput({amountOut:a.amountOut,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=me(a.amountIn,new Ke(i),Je.sub(new Ke(i))))}let c=W;e.partFilledOrdersRemaining.gt(W)&&(c=Ke.min(e.partFilledOrdersRemaining,a.amountOut),c.gt(W)&&(e.unfilledRatioX64=be(e.unfilledRatioX64,e.partFilledOrdersRemaining.sub(c),e.partFilledOrdersRemaining)),e.partFilledOrdersRemaining=e.partFilledOrdersRemaining.sub(c));let u=a.amountOut.sub(c);if(u.gt(W)){if(!e.partFilledOrdersRemaining.isZero())throw Error("!tick.partFilledOrdersRemaining.isZero()");if(e.ordersAmount.lt(u))throw Error("InvalidLimitOrderAmount");e.orderPhase=e.orderPhase.add(je),e.unfilledRatioX64=be(ue,e.ordersAmount.sub(u),e.ordersAmount),e.partFilledOrdersRemaining=e.ordersAmount.sub(u),e.ordersAmount=W}return r||(a.ammFeeAmount=me(a.amountOut,new Ke(i),Je),a.amountOut=a.amountOut.sub(a.ammFeeAmount)),a}static getPriceAtTick(e,t){let n=this.getSqrtPriceAtTick(e);return t?n.mul(n).add(ue.subn(1)).div(ue):n.mul(n).div(ue)}static getTickAtSqrtPrice(e){if(!(e.gte(Ze)&&e.lte($e)))throw Error("SqrtPriceX64");let t=vi(e),n=t-64,o;n>=0?o=new Ke(n).shln(32):o=new Ke(-n).shln(32).neg();let i;t>=64?i=e.shrn(t-63):i=e.shln(63-t);let r=new Ke(0),a=new Ke(1).shln(63);for(let b=0;b<di&&!a.isZero();b++){i=i.mul(i);let w=i.shrn(127).toNumber();i=i.shrn(63+w),w&&(r=r.add(a)),a=a.shrn(1)}let s=r.shrn(32),u=o.add(s).mul(ci),d=u.sub(li),g=u.add(mi),m=this.signedShrn64(d),p=this.signedShrn64(g);return m===p?m:G.getSqrtPriceAtTick(p).lte(e)?p:m}static signedShrn64(e){if(e.isNeg()){let t=new Ke(1).shln(64),n=e.div(t);return!e.mod(t).isZero()&&e.isNeg()?n.subn(1).toNumber():n.toNumber()}else return e.shrn(64).toNumber()}static sqrtPriceX64ToPrice(e,t,n){let o=e.mul(e),i=t-n,r=20,a=new Ke(10).pow(new Ke(r)),s=o.mul(a),c=new Ke(1).shln(128),d=s.div(c).toString();for(;d.length<=r;)d="0"+d;let g=d.slice(0,-r),m=d.slice(-r),p=g+"."+m;return new Ut(p).mul(new Ut(10).pow(i))}static tickToPrice(e,t,n){let o=G.getSqrtPriceAtTick(e);return this.sqrtPriceX64ToPrice(o,t,n)}static priceToTick(e,t,n){let i=e.div(Math.pow(10,t-n)).log().div(new Ut(1.0001).log()).floor();return Math.max(He,Math.min(Qe,i.toNumber()))}static priceToSqrtPriceX64(e,t,n){let r=e.div(Math.pow(10,t-n)).sqrt().mul(new Ut(2).pow(64));return new Ke(r.toFixed(0))}static toTickIndex(e,t){return e>=0?e-e%t:e-e%t-(e%t!==0?t:0)}static getPriceAndTick({price:e,mintADecimals:t,mintBDecimals:n,zeroForOne:o,tickSpacing:i}){let r=e.clamp(1/10**Math.max(t,n),Number.MAX_SAFE_INTEGER);o||(r=new Ut(1).div(r));let a=G.toTickIndex(G.priceToTick(r,t,n),i),s=G.tickToPrice(a,t,n);return{price:o?s:new Ut(1).div(s),tick:a}}};async function Vi(y,e,t,n,o,i,r=!0){let a=[],s=le(y,t).publicKey,c=await e.getAccountInfo(s),u=dt.findTickArrayAddress({programId:y,poolId:t,poolBitmap:i,tickArrayBitmap:Fn.decode(c.data),tickSpacing:o,findInfo:{type:r?"zeroForOne":"oneForZero",tickArrayCurrent:n}});return(await ve(e,u)).forEach((g,m)=>{g&&a.push({address:u[m],value:Dt.decode(g.data)})}),a}var kt=class{static isFullyFilled({orderInfo:e}){return e.totalAmount.eq(e.filledAmount)}static getUnFilledAmount({orderInfo:e}){return e.totalAmount.sub(e.filledAmount)}static settleFilledOrder({orderInfo:e,tickInfo:t}){if(e.settleBase.isZero())return W;if(e.orderPhase.eq(t.orderPhase))return W;if(e.orderPhase.add(je).eq(t.orderPhase)){let n=e.settleBase.mul(t.unfilledRatioX64),o=e.unfilledRatioX64,i=n.div(o),r=n.mod(o).isZero(),a=e.settleBase.sub(i);if(a.isZero())return W;let s=r?a:a.sub(je);return G.getLimitOrderOutput({amountIn:s,tick:t.tick,zeroForOne:e.zeroForOne}).sub(e.settleOutput)}else{if(e.orderPhase.add(new Ia(2)).lte(t.orderPhase))return G.getLimitOrderOutput({amountIn:e.settleBase,tick:t.tick,zeroForOne:e.zeroForOne}).sub(e.settleOutput);throw Error("invalid order phase")}}};import _n from"bn.js";import Ei from"decimal.js";var Ae=class{static getDeltaAmountAUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.shln(Vt),r=t.sub(e);if(!e.gt(W))throw Error("!sqrtPriceX64A.gt(BN_ZERO)");let a=o?vn(me(i,r,t),e):be(i,r,t).div(e);if(a.gt(lt))throw Error("MaxTokenOverflow");return a}static getDeltaAmountBUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=o?me(n,t.sub(e),ue):be(n,t.sub(e),ue);if(i.gt(lt))throw Error("MaxTokenOverflow");return i}static addDelta(e,t){if(t.isNeg()){let n=t.neg();if(e.lt(n))throw new Error("Liquidity underflow");return e.sub(n)}else return e.add(t)}static getLiquidityFromAmountA(e,t,n){if(n.isZero())return W;e.gt(t)&&([e,t]=[t,e]);let o=be(e,t,ue),i=t.sub(e);return be(n,o,i)}static getLiquidityFromAmountB(e,t,n){if(n.isZero())return W;e.gt(t)&&([e,t]=[t,e]);let o=t.sub(e);return be(n,ue,o)}static getLiquidityFromAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return this.getLiquidityFromAmountA(t,n,o);if(e.lt(n)){let r=this.getLiquidityFromAmountA(e,n,o),a=this.getLiquidityFromAmountB(t,e,i);return r.lt(a)?r:a}else return this.getLiquidityFromAmountB(t,n,i)}static getAmountsForLiquidity(e,t,n,o,i){t.gt(n)&&([t,n]=[n,t]);let r=W,a=W;return e.lte(t)?r=this.getDeltaAmountAUnsigned(t,n,o,i):e.lt(n)?(r=this.getDeltaAmountAUnsigned(e,n,o,i),a=this.getDeltaAmountBUnsigned(t,e,o,i)):a=this.getDeltaAmountBUnsigned(t,n,o,i),{amountA:r,amountB:a}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,r,a){let{amountA:s,amountB:c}=this.getAmountsForLiquidity(e,t,n,o,r),u=i?1+a:1-a,d=new _n(new Ei(s.toString()).mul(u).toFixed(0)),g=new _n(new Ei(c.toString()).mul(u).toFixed(0));return{amountSlippageA:d,amountSlippageB:g}}static getLiquidityAndAmountsFromAmount({sqrtPriceCurrentX64:e,sqrtPriceLowerX64:t,sqrtPriceUpperX64:n,amountInfo:o}){let i;if(o.type==="liquidity")i=o.amount;else if(o.type==="amountA")i=e.gte(n)?W:this.getLiquidityFromAmountA(_n.max(e,t),n,o.amount);else if(o.type==="amountB")i=e.lte(t)?W:this.getLiquidityFromAmountB(t,_n.min(e,n),o.amount);else throw Error("amount info type check error");return F({liquidity:i},this.getAmountsForLiquidity(e,t,n,o.amount,!0))}};import{PublicKey as Ve}from"@solana/web3.js";import Re from"bn.js";import{TOKEN_2022_PROGRAM_ID as Di,TOKEN_PROGRAM_ID as Sa}from"@solana/spl-token";import te from"decimal.js";import zt from"bn.js";import he from"bn.js";var cn=class{static getNextSqrtPriceFromAmountARoundingUp(e,t,n,o){if(n.isZero())return e;let i=t.shln(Vt);if(o){let r=n.mul(e),a=i.add(r);if(a.gte(i))return me(i,e,a);let s=be(i,je,e);return me(i,je,s.add(n))}else{let r=n.mul(e);if(i.lte(r))throw new Error("Insufficient liquidity for token0 removal");let a=i.sub(r);return me(i,e,a)}}static getNextSqrtPriceFromAmountBRoundingDown(e,t,n,o){if(n.isZero())return e;if(o){let i=n.shln(Vt).div(t);return e.add(i)}else{let i=vn(n.shln(Vt),t);return e.sub(i)}}static getNextSqrtPriceFromInput(e,t,n,o){if(!e.gt(W))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(W))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceFromOutput(e,t,n,o){if(!e.gt(W))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(W))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!1)}};var ot=class{static newValue({poolInfo:e,amountSpecified:t,zeroForOne:n,feeRate:o,blockTimestamp:i}){let r={amountSpecifiedRemaining:t,amountCalculated:W,sqrtPriceX64:e.sqrtPriceX64,tick:e.tickCurrent,feeGrowthGlobalX64:n?e.feeGrowthGlobalX64A:e.feeGrowthGlobalX64B,lpFee:W,protocolFee:W,fundFee:W,liquidity:e.liquidity,sqrtPriceNextX64:W,tickNext:0,baseFeeRate:o,tickSpacing:e.tickSpacing,tickSpacingIndex:0,dynamicFeeInfo:Gt.getDynamicFeeInfo({poolInfo:e})};return r.dynamicFeeInfo&&(r.tickSpacingIndex=mn.tickSpacingIndexFromTick(r.tick,r.tickSpacing),Gt.updateReference({dynamicFeeInfo:r.dynamicFeeInfo,tickSpacingIndex:r.tickSpacingIndex,currentTimestamp:i})),r}static getTargetPriceBasedOnNextTick({data:e,tickNext:t,zeroForOne:n,sqrtPriceLimitX64:o}){e.tickNext=t,e.tickNext<He?e.tickNext=He:e.tickNext>Qe&&(e.tickNext=Qe),e.sqrtPriceNextX64=G.getSqrtPriceAtTick(e.tickNext);let i;if(n&&e.sqrtPriceNextX64.lt(o)||!n&&e.sqrtPriceNextX64.gt(o)?i=o:i=e.sqrtPriceNextX64,n){if(e.tick<e.tickNext)throw Error("data.tick < data.tickNext");if(e.sqrtPriceX64.lt(e.sqrtPriceNextX64))throw Error("data.sqrtPriceX64.lt(data.sqrtPriceNextX64)");if(e.sqrtPriceX64.lt(i))throw Error("data.sqrtPriceX64.lt(targetPrice)")}else{if(e.tickNext<=e.tick)throw Error("data.tickNext <= data.tick");if(e.sqrtPriceNextX64.lt(e.sqrtPriceX64))throw Error("data.sqrtPriceNextX64.lt(data.sqrtPriceX64)");if(i.lt(e.sqrtPriceX64))throw Error("targetPrice.lt(data.sqrtPriceX64)")}return i}static updateVolatilityAccumulator({state:e}){!e.dynamicFeeInfo||Gt.updateVolatilityAccumulator({state:e.dynamicFeeInfo,tickSpacingIndex:e.tickSpacingIndex})}static computeDynamicFeeRate({data:e,tickSpacing:t}){let n=e.volatilityAccumulator*t,o=n*n,i=yi*rn*rn,r=me(new he(e.dynamicFeeControl),new he(o),new he(i)).toNumber();return r>On?On:r}static getTotalFeeRate({data:e}){if(e.dynamicFeeInfo){let t=this.computeDynamicFeeRate({data:e.dynamicFeeInfo,tickSpacing:e.tickSpacing}),n=e.baseFeeRate+t;return Math.min(On,n)}return e.baseFeeRate}static getSpacingBoundedPrice({data:e,targetPrice:t,zeroForOne:n}){if(e.dynamicFeeInfo===void 0)return{isSkipped:!0,boundedPrice:t};if(e.liquidity.isZero()||e.dynamicFeeInfo.volatilityAccumulator===e.dynamicFeeInfo.maxVolatilityAccumulator)return{isSkipped:!0,boundedPrice:t};let o=e.tickSpacing,i=n?e.tickSpacingIndex*o:(e.tickSpacingIndex+1)*o,r=Math.max(He,Math.min(Qe,i)),a=G.getSqrtPriceAtTick(r);return n?{isSkipped:!1,boundedPrice:he.max(t,a)}:{isSkipped:!1,boundedPrice:he.min(t,a)}}static applySwapAmounts({state:e,amountIn:t,amountOut:n,feeAmount:o,isBaseInput:i,isFeeOnInput:r,protocolFeeRate:a,fundFeeRate:s}){let c=r?t.add(o):t;i?(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(c),e.amountCalculated=e.amountCalculated.add(n)):(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(n),e.amountCalculated=e.amountCalculated.add(c)),this.splitFee({state:e,feeAmount:o,protocolFeeRate:a,fundFeeRate:s})}static updateDynamicFeeIndex({state:e,zeroForOne:t,isSkippedTickSpacing:n}){if(e.dynamicFeeInfo!==void 0){if(n){let o=e.sqrtPriceX64.eq(e.sqrtPriceNextX64)?e.tickNext:e.tick,i=mn.tickSpacingIndexFromTick(o,e.tickSpacing);!t&&o%e.tickSpacing===0&&(i=i-1),e.tickSpacingIndex=i,e.dynamicFeeInfo.volatilityAccumulator!==e.dynamicFeeInfo.maxVolatilityAccumulator&&this.updateVolatilityAccumulator({state:e})}e.tickSpacingIndex+=t?-1:1}}static splitFee({state:e,feeAmount:t,protocolFeeRate:n,fundFeeRate:o}){let i=t;if(n.gt(W)){let r=t.mul(n).div(new he(Je));e.protocolFee=e.protocolFee.add(r),i=i.sub(r)}if(o.gt(W)){let r=t.mul(o).div(new he(Je));e.fundFee=e.fundFee.add(r),i=i.sub(r)}if(e.liquidity.gt(W)){let r=be(i,ue,e.liquidity);e.feeGrowthGlobalX64=e.feeGrowthGlobalX64.add(r),e.lpFee=e.lpFee.add(i)}}},ln=class{static newSwapComputationResult({sqrtPriceNextX64:e}){return{sqrtPriceNextX64:e!=null?e:W,amountIn:W,amountOut:W,feeAmount:W}}static calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:o,isBaseInput:i}){if(i)try{return o?Ae.getDeltaAmountAUnsigned(t,e,n,!0):Ae.getDeltaAmountBUnsigned(e,t,n,!0)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}else try{return o?Ae.getDeltaAmountBUnsigned(t,e,n,!1):Ae.getDeltaAmountAUnsigned(e,t,n,!1)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}}static computeSwap(e,t,n,o,i,r,a,s){let c=this.newSwapComputationResult({});if(r){let d=s?be(o,new he(mt-i),new he(mt)):o,g=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});g!==null&&(c.amountIn=g),c.sqrtPriceNextX64=g!==null&&d.gte(c.amountIn)?t:cn.getNextSqrtPriceFromInput(e,n,d,a)}else{let d=s?o:me(o,new he(mt),new he(mt-i)),g=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});g!==null&&(c.amountOut=g),c.sqrtPriceNextX64=g!==null&&d.gte(c.amountOut)?t:cn.getNextSqrtPriceFromOutput(e,n,d,a)}if(a){if(!c.sqrtPriceNextX64.gte(t))throw Error("!result.sqrtPriceNextX64.gte(sqrtPriceTargetX64)")}else if(!t.gte(c.sqrtPriceNextX64))throw Error("!sqrtPriceTargetX64.gte(result.sqrtPriceNextX64)");let u=t.eq(c.sqrtPriceNextX64);if(a?(u&&r||(c.amountIn=Ae.getDeltaAmountAUnsigned(c.sqrtPriceNextX64,e,n,!0)),u&&!r||(c.amountOut=Ae.getDeltaAmountBUnsigned(c.sqrtPriceNextX64,e,n,!1))):(u&&r||(c.amountIn=Ae.getDeltaAmountBUnsigned(e,c.sqrtPriceNextX64,n,!0)),u&&!r||(c.amountOut=Ae.getDeltaAmountAUnsigned(e,c.sqrtPriceNextX64,n,!1))),r)s?c.sqrtPriceNextX64.eq(t)?c.feeAmount=me(c.amountIn,new he(i),new he(mt-i)):c.feeAmount=o.sub(c.amountIn):(c.feeAmount=me(c.amountOut,new he(i),new he(mt)),c.amountOut=c.amountOut.sub(c.feeAmount),u||(c.amountIn=o));else if(s)c.amountOut=he.min(c.amountOut,o),c.feeAmount=me(c.amountIn,new he(i),new he(mt-i));else{c.feeAmount=me(c.amountOut,new he(i),new he(mt));let d=c.amountOut.sub(c.feeAmount);d.gt(o)?(c.feeAmount=c.amountOut.sub(o),c.amountOut=o):c.amountOut=d}return c}};function ko({programId:y,poolId:e,poolInfo:t,tickArrays:n,configInfo:o,tickarrayBitmapExtension:i,amountSpecified:r,sqrtPriceLimitX64:a,zeroForOne:s,isBaseInput:c,blockTimestamp:u,includeExtraTickArrays:d}){a.isZero()&&(a=s?new zt(Ze).addn(1):new zt($e).subn(1));let g=0;if(n.length===0)return{allTrade:!1,amountSpecifiedRemaining:r,amountCalculated:W,feeAmount:W,sqrtPriceX64:t.sqrtPriceX64,liquidity:t.liquidity,tickCurrent:t.tickCurrent,accounts:[]};let m=d?dt.findTickArrayAddress({programId:y,poolId:e,tickSpacing:t.tickSpacing,poolBitmap:t.tickArrayBitmap,tickArrayBitmap:i,findInfo:{type:s?"oneForZero":"zeroForOne",count:2,tickArrayCurrent:t.tickCurrent}}).filter(k=>k.toString()!==n[0].address.toString()):[],p=H.getTickArrayStartIndex(t.tickCurrent,t.tickSpacing),{firstItckArrayContainsPoolTick:f,firstValidTickArrayStartIndex:b}={firstItckArrayContainsPoolTick:n[g].value.startTickIndex===p,firstValidTickArrayStartIndex:n[g].value.startTickIndex},w=f,A=b,T=n[g],B=We.isFeeOnInput(t.feeOn,s),P=ot.newValue({poolInfo:t,amountSpecified:r,zeroForOne:s,feeRate:o.tradeFeeRate,blockTimestamp:u});for(;!P.amountSpecifiedRemaining.isZero()&&!P.sqrtPriceX64.eq(a);){let k=(()=>{let K=H.nextInitalizedTick({data:T.value,tickSpacing:P.tickSpacing,zeroForOne:s,currentTickIndex:P.tick});if(K!==void 0)return K;if(w){let L=n[++g];return L===void 0?void 0:(A=L.value.startTickIndex,T=L,H.firstinitializedTick({data:L.value,zeroForOne:s}))}else return w=!0,H.firstinitializedTick({data:T.value,zeroForOne:s})})();if(k===void 0)return{allTrade:!1,amountSpecifiedRemaining:P.amountSpecifiedRemaining,amountCalculated:P.amountCalculated,feeAmount:P.lpFee.add(P.fundFee).add(P.protocolFee),sqrtPriceX64:P.sqrtPriceX64,liquidity:P.liquidity,tickCurrent:P.tick,accounts:n.slice(0,g).map(K=>K.address)};let S=ot.getTargetPriceBasedOnNextTick({data:P,tickNext:k.tick,zeroForOne:s,sqrtPriceLimitX64:a}),I=P.liquidity;do{ot.updateVolatilityAccumulator({state:P});let K=ot.getTotalFeeRate({data:P}),{isSkipped:L,boundedPrice:U}=ot.getSpacingBoundedPrice({data:P,targetPrice:S,zeroForOne:s}),V=!P.sqrtPriceX64.eq(U),v;V?(v=ln.computeSwap(P.sqrtPriceX64,U,P.liquidity,P.amountSpecifiedRemaining,K,c,s,B),ot.applySwapAmounts({state:P,amountIn:v.amountIn,amountOut:v.amountOut,feeAmount:v.feeAmount,isBaseInput:c,isFeeOnInput:B,protocolFeeRate:new zt(o.protocolFeeRate),fundFeeRate:new zt(o.fundFeeRate)})):v=ln.newSwapComputationResult({sqrtPriceNextX64:U});let _=G.limitOrderUnfilledAmount({tick:k});if(P.sqrtPriceNextX64.eq(v.sqrtPriceNextX64)){let E=G.matchLimitOrder({tick:k,swapAmount:P.amountSpecifiedRemaining,swapDirectionZeroForOne:s,isBaseInput:c,feeRate:K,isFeeOnInput:B});if(E.amountIn.gt(W)&&ot.applySwapAmounts({state:P,amountIn:E.amountIn,amountOut:E.amountOut,feeAmount:E.ammFeeAmount,isBaseInput:c,isFeeOnInput:B,protocolFeeRate:new zt(o.protocolFeeRate),fundFeeRate:new zt(o.fundFeeRate)}),G.hasLiquidity({data:k})&&!G.hasLimitOrders({data:k})){let Z=s?k.liquidityNet.neg():k.liquidityNet;I=Ae.addDelta(P.liquidity,Z)}P.tick=s&&!G.hasLimitOrders({data:k})||!s&&G.hasLimitOrders({data:k})?P.tickNext-1:P.tickNext}else P.sqrtPriceX64.eq(v.sqrtPriceNextX64)||(P.tick=G.getTickAtSqrtPrice(v.sqrtPriceNextX64));if(P.sqrtPriceX64=v.sqrtPriceNextX64,ot.updateDynamicFeeIndex({state:P,zeroForOne:s,isSkippedTickSpacing:L}),P.amountSpecifiedRemaining.isZero()||P.sqrtPriceX64.eq(S)){let E=G.limitOrderUnfilledAmount({tick:k});if(!P.amountSpecifiedRemaining.isZero()&&!E.eq(_)&&!E.isZero())throw Error("!limitOrderUnfilledAmountAfter.isZero()");break}}while(!0);P.liquidity=I}return{allTrade:!0,amountSpecifiedRemaining:W,amountCalculated:P.amountCalculated,feeAmount:P.lpFee.add(P.fundFee).add(P.protocolFee),sqrtPriceX64:P.sqrtPriceX64,liquidity:P.liquidity,tickCurrent:P.tick,accounts:[...m,...n.slice(0,g+1+(d?1:0)).map(k=>k.address)]}}var mn=class{static tickSpacingIndexFromTick(e,t){return Math.floor(e/t)}},Gt=class{static getDynamicFeeInfo({poolInfo:e}){if(!(e.dynamicFeeInfo.filterPeriod===0&&e.dynamicFeeInfo.decayPeriod===0&&e.dynamicFeeInfo.reductionFactor===0&&e.dynamicFeeInfo.dynamicFeeControl===0&&e.dynamicFeeInfo.maxVolatilityAccumulator===0&&e.dynamicFeeInfo.tickSpacingIndexReference===0&&e.dynamicFeeInfo.volatilityReference===0&&e.dynamicFeeInfo.volatilityAccumulator===0&&e.dynamicFeeInfo.lastUpdateTimestamp.isZero()))return e.dynamicFeeInfo}static updateReference({dynamicFeeInfo:e,tickSpacingIndex:t,currentTimestamp:n}){let o=n-e.lastUpdateTimestamp.toNumber();o<e.filterPeriod||(o<e.decayPeriod?(e.tickSpacingIndexReference=t,e.volatilityReference=Math.floor(e.volatilityAccumulator*e.reductionFactor/fi),e.lastUpdateTimestamp=new Re(n)):(e.tickSpacingIndexReference=t,e.volatilityReference=0,e.lastUpdateTimestamp=new Re(n)))}static updateVolatilityAccumulator({state:e,tickSpacingIndex:t}){let n=Math.abs(e.tickSpacingIndexReference-t),o=e.volatilityReference+n*rn;e.volatilityAccumulator=Math.min(o,e.maxVolatilityAccumulator)}},We=class{static isFeeOnInput(e,t){switch(e){case 0:return!0;case 1:return t;case 2:return!t;default:return!0}}static isFeeOnTokenA(e,t){return e.feeOn===0?t:e.feeOn===1}static isOverflowDefaultTickarrayBitmap({tickSpacing:e,tickIndexs:t}){let{maxTickBoundary:n,minTickBoundary:o}=this.tickArrayStartIndexRange({tickSpacing:e});for(let i of t){let r=H.getTickArrayStartIndex(i,e);if(r>=n||r<o)return!0}return!1}static tickArrayStartIndexRange({tickSpacing:e}){let t=dt.maxTickInTickarrayBitmap(e),n=-t;return t>Qe&&(t=H.getTickArrayStartIndex(Qe,e)+H.tickCount(e)),n<He&&(n=H.getTickArrayStartIndex(He,e)),{maxTickBoundary:t,minTickBoundary:n}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,s,c;let r=[];for(let u=0;u<i.length;u++){let d=i[u],g=(c=(a=t.rewardDefaultInfos[u])==null?void 0:a.mint.programId)!=null?c:(s=await e.getAccountInfo(d.mint))==null?void 0:s.owner;if(g===void 0)throw Error("get new reward mint info error");let m=q(F({},d),{perSecond:_i(d.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Ve(g)});if(m.mint.equals(Ve.default)||m.totalEmissioned.eq(lt))continue;if(n<=m.openTime.toNumber()||o.eq(W)){r.push(m);continue}let p=new Re(Math.min(m.endTime.toNumber(),n)),f=p.sub(m.lastUpdateTime);if(f.isZero()){r.push(m);continue}let b=me(f,m.emissionsPerSecondX64,ue),w=be(f,m.emissionsPerSecondX64,o),A,T=m.totalEmissioned.add(b);if(T.lte(lt))A=T;else{let P=lt.sub(m.totalEmissioned);A=lt,w=be(P,ue,o)}let B=m.growthGlobalX64.add(w);r.push(q(F({},m),{growthGlobalX64:B,totalEmissioned:A,lastUpdateTime:p}))}return r}},qe=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,r,a){let s=o.toBase58()===e.mintA.address,c=H.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:u,amountCalculated:d,feeAmount:g,sqrtPriceX64:m,accounts:p}=ko({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(f=>({address:f[1].address,value:f[1]})).filter(f=>s?f.value.startTickIndex<=c:f.value.startTickIndex>=c).sort((f,b)=>s?b.value.startTickIndex-f.value.startTickIndex:f.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:W,zeroForOne:s,isBaseInput:!0,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:u,expectedAmountOut:d,remainingAccounts:p,executionPrice:m,feeAmount:g}}static getInputAmountAndRemainAccounts(e,t,n,o,i,r,a){let s=o.toBase58()===e.mintB.address,c=H.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:u,amountCalculated:d,feeAmount:g,sqrtPriceX64:m,accounts:p}=ko({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(f=>({address:new Ve(f[0]),value:f[1]})).filter(f=>s?f.value.startTickIndex<=c:f.value.startTickIndex>=c).sort((f,b)=>s?b.value.startTickIndex-f.value.startTickIndex:f.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:W,zeroForOne:s,isBaseInput:!1,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:u,expectedAmountIn:d,remainingAccounts:p,executionPrice:m,feeAmount:g}}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await Ee(e,t.map(r=>({pubkey:r})),{batchRequest:n}),i={};for(let r of o)r.accountInfo!==null&&(i[r.pubkey.toString()]=Fn.decode(r.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let s of t){let c=[...dt.findTickArrayStartIndex({tickSpacing:s.tickSpacing,poolBitmap:s.tickArrayBitmap,tickArrayBitmap:s.exBitmapInfo,findInfo:{type:"zeroForOne",count:7,tickArrayCurrent:s.tickCurrent}}),...dt.findTickArrayStartIndex({tickSpacing:s.tickSpacing,poolBitmap:s.tickArrayBitmap,tickArrayBitmap:s.exBitmapInfo,findInfo:{type:"oneForZero",count:7,tickArrayCurrent:s.tickCurrent}})];for(let u of c){let{publicKey:d}=oe(s.programId,s.id,u);o[d.toString()]===void 0&&(i.push({pubkey:d}),o[d.toString()]=s.id)}}let r=await Ee(e,i,{batchRequest:n}),a={};for(let s of r){if(!s.accountInfo)continue;let c=o[s.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let u=Dt.decode(s.accountInfo.data);a[c.toString()][u.startTickIndex]=q(F({},u),{address:s.pubkey})}return a}static computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountIn:r,slippage:a,blockTimestamp:s,priceLimit:c=new te(0)}){var v;let u,d=o.toBase58()===e.mintA.address,[g,m]=d?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];c.equals(new te(0))?u=d?Ze.add(new Re(1)):$e.sub(new Re(1)):u=G.priceToSqrtPriceX64(c,e.mintA.decimals,e.mintB.decimals);let p=ze(r,g,i,!1),{allTrade:f,expectedAmountOut:b,remainingAccounts:w,executionPrice:A,feeAmount:T}=qe.getOutputAmountAndRemainAccounts(e,t,n,o,p.amount.sub((v=p.fee)!=null?v:W),s,u),B=ze(b,m,i,!1),P=G.sqrtPriceX64ToPrice(A,e.mintA.decimals,e.mintB.decimals),k=d?P:new te(1).div(P),S=b.mul(new Re(Math.floor((1-a)*1e10))).div(new Re(1e10)),I=ze(S,m,i,!1),K=d?e.currentPrice:new te(1).div(e.currentPrice),L=new te(k).sub(K).abs(),U=K,V=new ut(new te(L).mul(10**15).toFixed(0),new te(U).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:B,minAmountOut:I,expirationTime:dn(p.expirationTime,B.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:V,fee:T,remainingAccounts:w,executionPriceX64:A}}static computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,amountIn:o,tokenOut:i,slippage:r,epochInfo:a,blockTimestamp:s,catchLiquidityInsufficient:c=!1}){let u=i.address===e.mintB.address,[d,g]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,p]=[new Ce(q(F({},d),{mint:d.address,isToken2022:d.programId===Di.toBase58()})),new Ce(q(F({},g),{mint:g.address,isToken2022:g.programId===Di.toBase58()}))],{allTrade:f,realAmountIn:b,amountOut:w,minAmountOut:A,expirationTime:T,currentPrice:B,executionPrice:P,priceImpact:k,fee:S,remainingAccounts:I,executionPriceX64:K}=qe.computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:new Ve(d.address),amountIn:o,slippage:r,epochInfo:a,catchLiquidityInsufficient:c,blockTimestamp:s}),L=q(F({},b),{amount:new Se(m,b.amount),fee:b.fee===void 0?void 0:new Se(m,b.fee)}),U=q(F({},w),{amount:new Se(p,w.amount),fee:w.fee===void 0?void 0:new Se(p,w.fee)}),V=q(F({},A),{amount:new Se(p,A.amount),fee:A.fee===void 0?void 0:new Se(p,A.fee)}),v=new Ye({baseToken:m,denominator:new Re(10).pow(new Re(20+m.decimals)),quoteToken:p,numerator:B.mul(new te(10**(20+p.decimals))).toFixed(0)}),_=new Ye({baseToken:m,denominator:new Re(10).pow(new Re(20+m.decimals)),quoteToken:p,numerator:P.mul(new te(10**(20+p.decimals))).toFixed(0)}),E=new Se(m,S);return{allTrade:f,realAmountIn:L,amountOut:U,minAmountOut:V,expirationTime:T,currentPrice:v,executionPrice:_,priceImpact:k,fee:E,remainingAccounts:I,executionPriceX64:K}}static computeAmountIn({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountOut:r,slippage:a,priceLimit:s=new te(0),blockTimestamp:c}){var v;let u=o.toBase58()===e.mintA.address,d={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},g;s.equals(new te(0))?g=u?$e.sub(new Re(1)):Ze.add(new Re(1)):g=G.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let m=ze(r,d[o.toString()],i,!0),{allTrade:p,expectedAmountIn:f,remainingAccounts:b,executionPrice:w,feeAmount:A}=qe.getInputAmountAndRemainAccounts(e,t,n,o,m.amount.sub((v=m.fee)!=null?v:W),c,g),T=u?e.mintB.address:e.mintA.address,B=ze(f,d[T],i,!1),P=G.sqrtPriceX64ToPrice(w,e.mintA.decimals,e.mintB.decimals),k=u?P:new te(1).div(P),S=f.mul(new Re(Math.floor((1+a)*1e10))).div(new Re(1e10)),I=ze(S,d[T],i,!0),K=u?e.currentPrice:new te(1).div(e.currentPrice),L=new te(k).sub(K).abs(),U=K,V=new ut(new te(L).mul(10**15).toFixed(0),new te(U).mul(10**15).toFixed(0));return{allTrade:p,amountIn:B,maxAmountIn:I,realAmountOut:m,expirationTime:dn(B.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:V,fee:A,remainingAccounts:b}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var p,f,b;let i=e[t],r=G.tickToPrice(n,e.mintA.decimals,e.mintB.decimals).toNumber(),a=G.tickToPrice(o,e.mintA.decimals,e.mintB.decimals).toNumber(),s=Math.max(r,i.priceMin),u=Math.min(a,i.priceMax)-s,d=a-r,g=i.priceMax-i.priceMin,m;return u<=0?m=0:d===u?m=g/u:g===u?m=u/d:m=u/g*(u/d),{feeApr:i.feeApr*m,rewardsApr:[((p=i.rewardApr[0])!=null?p:0)*m,((f=i.rewardApr[1])!=null?f:0)*m,((b=i.rewardApr[2])!=null?b:0)*m],apr:i.apr*m}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:r,positionTickUpperIndex:a,chainTime:s}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,u=e[n],d=o[at(e.mintA.address).toString()],g=o[at(e.mintB.address).toString()],m=e.mintA.decimals,p=e.mintB.decimals;if(!u||!d||!g)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=G.priceToSqrtPriceX64(new te(e.price),e.mintA.decimals,e.mintB.decimals),b=G.getSqrtPriceAtTick(r),w=G.getSqrtPriceAtTick(a),{amountSlippageA:A,amountSlippageB:T}=Ae.getAmountsFromLiquidityWithSlippage(f,b,w,t,!1,!1,0),{amountSlippageA:B,amountSlippageB:P}=Ae.getAmountsFromLiquidityWithSlippage(f,b,w,i,!1,!1,0),k=new te(A.toString()).div(new te(10).pow(m)).mul(d.value).add(new te(T.toString()).div(new te(10).pow(p)).mul(g.value)),S=new te(B.toString()).div(new te(10).pow(m)).mul(d.value).add(new te(P.toString()).div(new te(10).pow(p)).mul(g.value)),I=new te(1).div(k.add(S)),L=new te(u.volumeFee).mul(365).div(c).mul(I).mul(100).toNumber(),U=3600*24*365,V=e.rewardDefaultInfos.map(v=>{var Z,ce;let _=v.mint.decimals,E=o[v.mint.address];return s<((Z=v.startTime)!=null?Z:0)||s>((ce=v.endTime)!=null?ce:0)||!v.perSecond||!E||_===void 0?0:new te(E.value).mul(new te(v.perSecond).mul(U)).div(new te(10).pow(_)).mul(I).mul(100).toNumber()});return{feeApr:L,rewardsApr:V,apr:L+V.reduce((v,_)=>v+_,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:s,amountHasFee:c}){var w,A;let u=G.priceToSqrtPriceX64(new te(e.price),e.mintA.decimals,e.mintB.decimals),d=G.getSqrtPriceAtTick(n),g=G.getSqrtPriceAtTick(o),m=ze(i,(w=e[t?"mintA":"mintB"].extensions)==null?void 0:w.feeConfig,s,!c),p=new Re(new te(m.amount.sub((A=m.fee)!=null?A:W).toString()).toFixed(0)),f;if(u.lte(d))f=t?Ae.getLiquidityFromAmountA(d,g,p):new Re(0);else if(u.lte(g)){let T=Ae.getLiquidityFromAmountA(u,g,p),B=Ae.getLiquidityFromAmountB(d,u,p);f=t?T:B}else f=t?new Re(0):Ae.getLiquidityFromAmountB(d,g,p);let b=await qe.getAmountsFromLiquidity({epochInfo:s,poolInfo:e,tickLower:n,tickUpper:o,liquidity:f,slippage:r,add:a});return{liquidity:f,amountA:t?m:b.amountA,amountB:t?b.amountB:m,amountSlippageA:t?m:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:m,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:r,add:a}){var b,w,A,T;let s=G.getSqrtPriceAtTick(n),c=G.getSqrtPriceAtTick(o),u=Ae.getAmountsForLiquidity(G.priceToSqrtPriceX64(new te(t.price),t.mintA.decimals,t.mintB.decimals),s,c,i,a),[d,g]=[ze(u.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ze(u.amountB,(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)],m=r*1e4,[p,f]=[ze(u.amountA.muln(1e4-m).divn(1e4),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),ze(u.amountB.muln(1e4-m).divn(1e4),(T=t.mintB.extensions)==null?void 0:T.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:g,amountSlippageA:p,amountSlippageB:f,expirationTime:dn(d.expirationTime,g.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Ve(c.id));(await ve(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=sn.decode(c.data))});let r=t.map(c=>le(new Ve(c.programId),new Ve(c.id)).publicKey),a=await qe.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1}),s={};return t.reduce((c,u)=>q(F({},c),{[u.id]:q(F({accInfo:n[u.id]},n[u.id]),{id:new Ve(u.id),version:6,programId:new Ve(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(F({},u.config),{id:new Ve(u.config.id),fundOwner:""}),currentPrice:new te(u.price),exBitmapAccount:le(new Ve(u.programId),new Ve(u.id)).publicKey,exBitmapInfo:a[le(new Ve(u.programId),new Ve(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}static async fetchTickArrayInfo({connection:e,programId:t,poolId:n,tick:o,tickSpacing:i}){let r=H.getTickArrayStartIndex(o,i),a=oe(t,n,r).publicKey,s=await e.getAccountInfo(a);if(!s)throw new Error(`tick array ${a.toBase58()} not found`);return Dt.decode(s.data)}static async fetchMultipleTickArrayInfo({connection:e,tickInfoList:t}){let n=t.map(i=>{let r=H.getTickArrayStartIndex(i.tick,i.tickSpacing);return oe(i.programId,i.poolId,r).publicKey});return(await ve(e,n)).map(i=>i&&Dt.decode(i.data))}},To={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Wi(y,e){let t=e!=null?e:{};return q(F({},y),{type:"Concentrated",programId:y.programId.toString(),id:y.id.toString(),rewardDefaultInfos:y.rewardInfos.filter(n=>!n.mint.equals(Ve.default)).map(n=>{var o,i;return{mint:pt({address:n.mint.toBase58(),programId:Sa.toBase58(),decimals:(o=t[n.mint.toBase58()].decimals)!=null?o:6}),perSecond:Number(n.emissionsPerSecondX64.divn(10**((i=t[n.mint.toBase58()].decimals)!=null?i:6)).toString()),startTime:n.openTime.toNumber(),endTime:n.endTime.toNumber()}}),rewardDefaultPoolInfos:"Clmm",price:y.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:y.ammConfig.tradeFeeRate,openTime:y.startTime.toString(),tvl:0,day:To,week:To,month:To,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(F({},y.ammConfig),{id:y.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),hasDynamicFee:!1,feeOn:"",launchMigratePool:!1,tips:[]})}import Of from"bn.js";function Le(y){let e=`global:${y}`;return Buffer.from(Ka.digest(e)).slice(0,8)}Ai.span;var qi=ee("Raydium_Clmm"),Oe={createPool:Le("create_pool"),createCustomizablePool:Le("create_customizable_pool"),createPermissionedPool:Le("create_permissioned_pool"),openPositionV2:Le("open_position_v2"),openPositionWithToken22Nft:Le("open_position_with_token22_nft"),closePosition:Le("close_position"),increaseLiquidityV2:Le("increase_liquidity_v2"),decreaseLiquidityV2:Le("decrease_liquidity_v2"),initializeReward:Le("initialize_reward"),setRewardParams:Le("set_reward_params"),updateRewardInfos:Le("update_reward_infos"),collectRemainingRewards:Le("collect_remaining_rewards"),swapV2:Le("swap_v2"),openLimitOrder:Le("open_limit_order"),increaseLimitOrder:Le("increase_limit_order"),decreaseLimitOrder:Le("decrease_limit_order"),settleLimitOrder:Le("settle_limit_order"),closeLimitOrder:Le("close_limit_order")},Ui=[188,37,179,131,82,150,84,73],Gi=[16,72,250,198,14,162,212,19],j=class{static createPoolInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p){let f=O([z("sqrtPriceX64"),l("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},...(p!=null?p:[]).map(T=>({pubkey:T,isSigner:!1,isWritable:!1}))],w=Buffer.alloc(f.span);f.encode({sqrtPriceX64:m,startTime:W},w);let A=Buffer.from([...Oe.createPool,...w]);return new ge({keys:b,programId:e,data:A})}static createCustomizablePoolInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b){let w=O([z("sqrtPriceX64"),N("collectFeeOn"),ye("enableDynamicFee")]),A=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},...f.map(P=>({pubkey:P,isSigner:!1,isWritable:!1})),...b?[{pubkey:b,isSigner:!1,isWritable:!1}]:[]],T=Buffer.alloc(w.span);w.encode({sqrtPriceX64:m,collectFeeOn:p,enableDynamicFee:b!==void 0},T);let B=Buffer.from([...Oe.createCustomizablePool,...T]);return new ge({keys:A,programId:e,data:B})}static createPermissionedPoolInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A,T){let B=O([z("sqrtPriceX64"),N("collectFeeOn"),ye("enableDynamicFee"),Pe("seedIndex")]),P=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},...A.map(I=>({pubkey:I,isSigner:!1,isWritable:!1})),...T?[{pubkey:T,isSigner:!1,isWritable:!1}]:[]],k=Buffer.alloc(B.span);B.encode({sqrtPriceX64:f,collectFeeOn:b,enableDynamicFee:T!==void 0,seedIndex:w},k);let S=Buffer.from([...Oe.createPermissionedPool,...k]);return new ge({keys:P,programId:e,data:S})}static initializeRewardInstruction(e,t,n,o,i,r,a,s,c,u,d,g){let m=O([l("openTime"),l("endTime"),z("emissionsPerSecondX64")]),p=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1}],f=Buffer.alloc(m.span);m.encode({openTime:u,endTime:d,emissionsPerSecondX64:g},f);let b=Buffer.from([...Oe.initializeReward,...f]);return new ge({keys:p,programId:e,data:b})}static updateRewardInfosInstruction(e,t){let n=[{pubkey:t,isSigner:!1,isWritable:!0}],o=Buffer.from([...Oe.updateRewardInfos]);return new ge({keys:n,programId:e,data:o})}static setRewardParamsInstruction(e,t,n,o,i,r,a,s,c,u,d,g){let m=O([N("rewardIndex"),z("emissionsPerSecondX64"),l("openTime"),l("endTime")]),p=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:we,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0}],f=Buffer.alloc(m.span);m.encode({rewardIndex:c,emissionsPerSecondX64:g,openTime:u,endTime:d},f);let b=Buffer.from([...Oe.setRewardParams,...f]);return new ge({keys:p,programId:e,data:b})}static closePositionInstruction(e,t,n,o,i,r,a){let s=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:r?we:re,isSigner:!1,isWritable:!1}];a&&s.push({pubkey:a,isSigner:!1,isWritable:!0});let c=Buffer.from([...Oe.closePosition]);return new ge({keys:s,programId:e,data:c})}static openPositionV2Instruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A,T,B,P,k,S,I,K,L,U){let V=O([Te("tickLower"),Te("tickUpper"),Te("tickArrayLowerStart"),Te("tickArrayUpperStart"),z("liquidity"),l("amountMaxA"),l("amountMaxB"),ye("withMetadata"),N("optionBaseFlag"),ye("baseFlag")]),v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:ho,isSigner:!1,isWritable:!1},{pubkey:Pt,isSigner:!1,isWritable:!1},{pubkey:we,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},...U?[{pubkey:U,isSigner:!1,isWritable:!0}]:[]],_=Buffer.alloc(V.span);V.encode({tickLower:A,tickUpper:T,tickArrayLowerStart:B,tickArrayUpperStart:P,liquidity:k,amountMaxA:S,amountMaxB:I,withMetadata:K,optionBaseFlag:L!==null?1:0,baseFlag:L!=null?L:!1},_);let E=Buffer.from([...Oe.openPositionV2,..._]);return new ge({keys:v,programId:e,data:E})}static increaseLiquidityV2Instruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A,T){let B=O([z("liquidity"),l("amountMaxA"),l("amountMaxB"),N("optionBaseFlag"),ye("baseFlag")]),P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:we,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[]],k=Buffer.alloc(B.span);B.encode({liquidity:f,amountMaxA:b,amountMaxB:w,optionBaseFlag:A!==null?1:0,baseFlag:A!=null?A:!1},k);let S=Buffer.from([...Oe.increaseLiquidityV2,...k]);return new ge({keys:P,programId:e,data:S})}static decreaseLiquidityV2Instruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A,T){let B=O([z("liquidity"),l("amountMinA"),l("amountMinB")]),P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:we,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[],...f.map(I=>[{pubkey:I.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:I.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:I.rewardMint,isSigner:!1,isWritable:!1}]).flat()],k=Buffer.alloc(B.span);B.encode({liquidity:b,amountMinA:w,amountMinB:A},k);let S=Buffer.from([...Oe.decreaseLiquidityV2,...k]);return new ge({keys:P,programId:e,data:S})}static swapV2Instruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w){let A=O([l("amount"),l("otherAmountThreshold"),z("sqrtPriceLimitX64"),ye("isBaseInput")]),T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:we,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[],...d.map(k=>({pubkey:k,isSigner:!1,isWritable:!0}))],B=Buffer.alloc(A.span);A.encode({amount:m,otherAmountThreshold:p,sqrtPriceLimitX64:f,isBaseInput:b},B);let P=Buffer.from([...Oe.swapV2,...B]);return new ge({keys:T,programId:e,data:P})}static collectRemainingRewardsInstruction(e,t,n,o,i,r,a){let s=O([N("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:we,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({rewardIndex:a},u);let d=Buffer.from([...Oe.collectRemainingRewards,...u]);return new ge({keys:c,programId:e,data:d})}static openPositionWithToken22NftInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A,T,B,P,k,S,I,K,L){let U=O([Te("tickLower"),Te("tickUpper"),Te("tickArrayLowerStart"),Te("tickArrayUpperStart"),z("liquidity"),l("amountMaxA"),l("amountMaxB"),ye("withMetadata"),N("optionBaseFlag"),ye("baseFlag")]),V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:ho,isSigner:!1,isWritable:!1},{pubkey:we,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...L?[{pubkey:L,isSigner:!1,isWritable:!0}]:[]],v=Buffer.alloc(U.span);U.encode({tickLower:w,tickUpper:A,tickArrayLowerStart:T,tickArrayUpperStart:B,liquidity:P,amountMaxA:k,amountMaxB:S,withMetadata:I,optionBaseFlag:K!==null?1:0,baseFlag:K!=null?K:!1},v);let _=Buffer.from([...Oe.openPositionWithToken22Nft,...v]);return new ge({keys:V,programId:e,data:_})}static openLimitOrderInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A){let T=O([N("nonceIndex"),ye("zeroForOne"),Te("tickIndex"),l("amount")]),B=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],P=Buffer.alloc(T.span);T.encode({nonceIndex:p,zeroForOne:f,tickIndex:b,amount:w},P);let k=Buffer.from([...Oe.openLimitOrder,...P]);return new ge({keys:B,programId:e,data:k})}static increaseLimitOrderInstruction(e,t,n,o,i,r,a,s,c,u){let d=O([l("amount")]),g=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1}],m=Buffer.alloc(d.span);d.encode({amount:u},m);let p=Buffer.from([...Oe.increaseLimitOrder,...m]);return new ge({keys:g,programId:e,data:p})}static decreaseLimitOrderInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p){let f=O([l("amount"),l("amountMin")]),b=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:we,isSigner:!1,isWritable:!1},...p?[{pubkey:p,isSigner:!1,isWritable:!0}]:[]],w=Buffer.alloc(f.span);f.encode({amount:g,amountMin:m},w);let A=Buffer.from([...Oe.decreaseLimitOrder,...w]);return new ge({keys:b,programId:e,data:A})}static settleLimitOrderInstruction(e,t,n,o,i,r,a,s,c){let u=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1}],d=Buffer.from([...Oe.settleLimitOrder]);return new ge({keys:u,programId:e,data:d})}static closeLimitOrderInstruction(e,t,n,o){let i=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0}],r=Buffer.from([...Oe.closeLimitOrder]);return new ge({keys:i,programId:e,data:r})}static createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:s}=e,[c,u]=[new M(o.address),new M(i.address)],[d,g]=[new M(o.programId||re),new M(i.programId||re)],{publicKey:m}=xi(t,r,c,u),{publicKey:p}=Po(t,m),{publicKey:f}=Ue(t,m,c),{publicKey:b}=Ue(t,m,u),w=le(t,m).publicKey,A=[this.createPoolInstruction(t,m,n,r,p,c,f,d,u,b,g,w,a,s)];return{signers:[],instructions:A,instructionTypes:[J.CreateAccount,J.ClmmCreatePool],address:{poolId:m,observationId:p,exBitmapAccount:w,mintA:c,mintB:u,mintAProgram:d,mintBProgram:g,mintAVault:f,mintBVault:b},lookupTableAddress:[]}}static createPermissionedPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:s,payer:c,seedIndex:u}=e,[d,g]=[new M(o.address),new M(i.address)],[m,p]=[new M(o.programId||re),new M(i.programId||re)],{publicKey:f}=Ri(t,r,d,g,u),{publicKey:b}=Ci(t,c),{publicKey:w}=Po(t,f),{publicKey:A}=Ue(t,f,d),{publicKey:T}=Ue(t,f,g),B=le(t,f).publicKey,P=[this.createPoolInstruction(t,f,n,r,w,d,A,m,g,T,p,B,a,s)];return{signers:[],instructions:P,instructionTypes:[J.CreateAccount,J.ClmmCreatePool],address:{poolId:f,observationId:w,exBitmapAccount:B,mintA:d,mintB:g,mintAProgram:m,mintBProgram:p,mintAVault:A,mintBVault:T,permission:b},lookupTableAddress:[]}}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:s,base:c,withMetadata:u,getEphemeralSigners:d,nft2022:g}){let m=[],[p,f]=[new M(e.programId),new M(e.id)],b;if(d)b=new M((await d(1))[0]);else{let L=Vn.generate();m.push(L),b=L.publicKey}let w=H.getTickArrayStartIndex(o,e.config.tickSpacing),A=H.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:T}=oe(p,f,w),{publicKey:B}=oe(p,f,A),{publicKey:P}=g?Q(n.wallet,b,we):Q(n.wallet,b,re),{publicKey:k}=Kt(b),{publicKey:S}=Ge(p,b),{publicKey:I}=nt(p,f,o,i),K=g?this.openPositionWithToken22NftInstruction(p,n.feePayer,f,n.wallet,b,P,I,T,B,S,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),o,i,w,A,r,a,s,u==="create",c&&c==="MintA",We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(p,f).publicKey:void 0):this.openPositionV2Instruction(p,n.feePayer,f,n.wallet,b,P,k,I,T,B,S,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),o,i,w,A,r,a,s,u==="create",null,We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(p,f).publicKey:void 0);return{signers:m,instructions:[K],instructionTypes:[J.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:T,tickArrayUpper:B,positionNftAccount:P,metadataAccount:k,personalPosition:S,protocolPosition:I}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:s,liquidity:c,withMetadata:u,getEphemeralSigners:d,nft2022:g}){let m=[],[p,f]=[new M(e.programId),new M(e.id)],b;if(d)b=new M((await d(1))[0]);else{let L=Vn.generate();m.push(L),b=L.publicKey}let w=H.getTickArrayStartIndex(o,e.config.tickSpacing),A=H.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:T}=oe(p,f,w),{publicKey:B}=oe(p,f,A),{publicKey:P}=g?Q(n.wallet,b,we):Q(n.wallet,b,re),{publicKey:k}=Kt(b),{publicKey:S}=Ge(p,b),{publicKey:I}=nt(p,f,o,i),K=g?this.openPositionWithToken22NftInstruction(p,n.feePayer,f,n.wallet,b,P,I,T,B,S,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),o,i,w,A,c,!r||r==="MintA"?a:s,!r||r==="MintA"?s:a,u==="create",r&&r==="MintA",We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(p,f).publicKey:void 0):this.openPositionV2Instruction(p,n.feePayer,f,n.wallet,b,P,k,I,T,B,S,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),o,i,w,A,W,r==="MintA"?a:s,r==="MintA"?s:a,u==="create",r==="MintA",We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(p,f).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:T,tickArrayUpper:B,positionNftAccount:P,metadataAccount:k,personalPosition:S,protocolPosition:I},instructions:[K],signers:m,instructionTypes:[J.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:s,base:c,withMetadata:u,getEphemeralSigners:d,nft2022:g}){let m,p=[];if(d)m=new M((await d(1))[0]);else{let L=Vn.generate();p.push(L),m=L.publicKey}let[f,b]=[new M(e.programId),new M(e.id)],w=H.getTickArrayStartIndex(o,e.config.tickSpacing),A=H.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:T}=oe(f,b,w),{publicKey:B}=oe(f,b,A),{publicKey:P}=g?Q(n.wallet,m,we):Q(n.wallet,m,re),{publicKey:k}=Kt(m),{publicKey:S}=Ge(f,m),{publicKey:I}=nt(f,b,o,i),K=g?this.openPositionWithToken22NftInstruction(f,n.wallet,b,n.wallet,m,P,I,T,B,S,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(t.mintA.address),new M(t.mintB.address),o,i,w,A,r,a,s,u==="create",c&&c==="MintA",We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(f,b).publicKey:void 0):this.openPositionV2Instruction(f,n.wallet,b,n.wallet,m,P,k,I,T,B,S,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(t.mintA.address),new M(t.mintB.address),o,i,w,A,r,a,s,u==="create",null,We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(f,b).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:T,tickArrayUpper:B,positionNftAccount:P,metadataAccount:k,personalPosition:S,protocolPosition:I},instructions:[K],signers:p,instructionTypes:[J.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new M(e.programId),a=i?Q(n.wallet,o.nftMint,we).publicKey:Q(n.wallet,o.nftMint,re).publicKey,{publicKey:s}=Ge(r,o.nftMint),c=[];return c.push(this.closePositionInstruction(r,n.wallet,o.nftMint,a,s,!!i,new M(e.id))),{address:{positionNftAccount:a,personalPosition:s},signers:[],instructions:c,instructionTypes:[J.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:s}){let[c,u]=[new M(e.programId),new M(e.id)],d=H.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),g=H.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:m}=oe(c,u,d),{publicKey:p}=oe(c,u,g),{publicKey:f}=s?Q(o.wallet,n.nftMint,we):Q(o.wallet,n.nftMint,re),{publicKey:b}=Ge(c,n.nftMint),{publicKey:w}=nt(c,u,n.tickLower,n.tickUpper),A=this.increaseLiquidityV2Instruction(c,o.wallet,f,b,u,w,m,p,o.tokenAccountA,o.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),i,r,a,null,We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[d,g]})?le(c,u).publicKey:void 0);return{address:{tickArrayLower:m,tickArrayUpper:p,positionNftAccount:f,personalPosition:b,protocolPosition:w},signers:[],instructions:[A],instructionTypes:[J.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:r,otherAmountMax:a,nft2022:s}){let[c,u]=[new M(e.programId),new M(e.id)],d=H.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),g=H.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:m}=oe(c,u,d),{publicKey:p}=oe(c,u,g),{publicKey:f}=s?Q(o.wallet,n.nftMint,we):Q(o.wallet,n.nftMint,re),{publicKey:b}=Ge(c,n.nftMint),{publicKey:w}=nt(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:m,tickArrayUpper:p,positionNftAccount:f,personalPosition:b,protocolPosition:w},instructions:[this.increaseLiquidityV2Instruction(c,o.wallet,f,b,u,w,m,p,o.tokenAccountA,o.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),W,i==="MintA"?r:a,i==="MintA"?a:r,i==="MintA",We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[d,g]})?le(c,u).publicKey:void 0)],signers:[],instructionTypes:[J.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:r,amountMinB:a,programId:s,nft2022:c}){let[u,d]=[new M(e.programId),new M(e.id)],g=H.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),m=H.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:p}=oe(u,d,g),{publicKey:f}=oe(u,d,m),{publicKey:b}=c?Q(o.wallet,n.nftMint,we):Q(o.wallet,n.nftMint,s),{publicKey:w}=Ge(u,n.nftMint),{publicKey:A}=nt(u,d,n.tickLower,n.tickUpper),T=new Map;for(let S=0;S<t.rewardInfos.length;S++)T.set(t.rewardInfos[S].mint.address,o.rewardAccounts[S]);let B=[];for(let S=0;S<t.rewardInfos.length;S++){let I=t.rewardInfos[S].mint.address,K=T.get(I);K&&B.push({poolRewardVault:new M(t.rewardInfos[S].vault),ownerRewardVault:K,rewardMint:new M(I)})}let P=[],k=this.decreaseLiquidityV2Instruction(u,o.wallet,b,w,d,A,p,f,o.tokenAccountA,o.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),B,i,r,a,We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,m]})?le(u,d).publicKey:void 0);return P.push(k),{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:w,protocolPosition:A},signers:[],instructions:P,instructionTypes:[J.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:s,remainingAccounts:c}){let[u,d]=[new M(e.programId),new M(e.id)],[g,m]=[new M(t.vault.A),new M(t.vault.B)],[p,f]=[new M(e.mintA.address),new M(e.mintB.address)],b=e.mintA.address.toString()===i.toString(),w=[this.swapV2Instruction(u,o.wallet,d,new M(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?g:m,b?m:g,b?p:f,b?f:p,c,n,r,a,s,!0,le(u,d).publicKey)];return{signers:[],instructions:w,instructionTypes:[J.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:i,amountOut:r,amountInMax:a,sqrtPriceLimitX64:s,remainingAccounts:c}){let[u,d]=[new M(e.programId),new M(e.id)],[g,m]=[new M(t.vault.A),new M(t.vault.B)],[p,f]=[new M(e.mintA.address),new M(e.mintB.address)],b=e.mintB.address.toString()===i.toBase58(),w=[this.swapV2Instruction(u,o.wallet,d,new M(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?g:m,b?m:g,b?p:f,b?f:p,c,n,r,a,s,!1,le(u,d).publicKey)];return{signers:[],instructions:w,instructionTypes:[J.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new M(e.programId),new M(e.id)],a=Li(i,r,o.mint).publicKey,s=un(i).publicKey,c=[this.initializeRewardInstruction(i,n.wallet,r,s,new M(e.config.id),n.tokenAccount,o.programId,o.mint,a,new En(o.openTime),new En(o.endTime),o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:s},signers:[],instructions:c,instructionTypes:[J.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new M(e.programId),new M(e.id)],a,s,c;for(let g=0;g<e.rewardDefaultInfos.length;g++)e.rewardDefaultInfos[g].mint.address===o.mint.toString()&&(a=g,s=new M(t.rewardInfos[g].vault),c=new M(t.rewardInfos[g].mint.address));(a===void 0||s===void 0)&&qi.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=un(i).publicKey,d=[this.setRewardParamsInstruction(i,n.wallet,r,u,new M(e.config.id),n.tokenAccount,s,c,a,new En(o.openTime),new En(o.endTime),o.emissionsPerSecondX64)];return{address:{rewardVault:s,operationId:u},signers:[],instructions:d,instructionTypes:[J.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new M(e.programId),new M(e.id)],a,s;for(let u=0;u<e.rewardDefaultInfos.length;u++)e.rewardDefaultInfos[u].mint.address===o.toString()&&(a=u,s=new M(t.rewardInfos[u].vault));(a===void 0||s===void 0)&&qi.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRemainingRewardsInstruction(i,n.wallet,r,n.tokenAccount,s,o,a)];return{address:{rewardVault:s},signers:[],instructions:c,instructionTypes:[J.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:i,nftMint:r,nft2022:a,getEphemeralSigners:s}){let c=[],u;if(s)u=new M((await s(1))[0]);else{let w=Vn.generate();c.push(w),u=w.publicKey}let d=a?Q(i,r,we).publicKey:Q(i,r,re).publicKey,{publicKey:g}=Ge(n,r),m=Wt(e,u).publicKey,p=Q(i,u,re).publicKey,f=Kt(u).publicKey,b=j.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:i,lockOwner:i,positionNftAccount:d,positionId:g,lockPositionId:m,lockNftMint:u,lockNftAccount:p,metadataAccount:f,withMetadata:!0,nft2022:a,positionNftMint:r,authPositionNftAccount:Q(t,r,a?we:re).publicKey,positionNftProgram:a?we:re});return{address:{positionId:g,lockPositionId:m,lockNftAccount:p,lockNftMint:u,positionNftAccount:d,metadataAccount:f},instructions:[b],signers:c,instructionTypes:[J.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:i,positionNftAccount:r,positionId:a,positionNftMint:s,authPositionNftAccount:c,positionNftProgram:u,lockPositionId:d,lockNftMint:g,lockNftAccount:m,metadataAccount:p,withMetadata:f}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!0,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Pt,isSigner:!1,isWritable:!1},{pubkey:ho,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1}],w=O([ye("withMetadata")]),A=Buffer.alloc(w.span);w.encode({withMetadata:f},A);let T=Buffer.from([...Ui,...A]);return new ge({keys:b,programId:e,data:T})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=Q(o,i,re),{publicKey:a}=Ge(n,i),s=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Ao(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1}];return new ge({keys:s,programId:e,data:Buffer.from(Ui)})}static harvestLockPositionInstruction(e){let[t,n]=[new M(e.poolKeys.programId),new M(e.poolKeys.id)],o=H.getTickArrayStartIndex(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=H.getTickArrayStartIndex(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=oe(t,n,o),{publicKey:a}=oe(t,n,i),{publicKey:s}=Q(e.owner,e.ownerPosition.nftMint,re),{publicKey:c}=Ge(t,e.ownerPosition.nftMint),{publicKey:u}=nt(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),d=[];for(let p=0;p<e.poolKeys.rewardInfos.length;p++)d.push({poolRewardVault:new M(e.poolKeys.rewardInfos[p].vault),ownerRewardVault:e.ownerRewardAccounts[p],rewardMint:new M(e.poolKeys.rewardInfos[p].mint.address)});let g=[...d.map(p=>[{pubkey:p.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:p.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:p.rewardMint,isSigner:!1,isWritable:!1}]).flat()],m=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:Ao(e.programId,c).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:new M(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new M(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:we,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:new M(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new M(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...g];return new ge({keys:m,programId:e.programId,data:Buffer.from(Gi)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:i,lockNftMint:r,lockNftAccount:a,positionNftAccount:s,positionId:c,poolId:u,protocolPosition:d,vaultA:g,vaultB:m,tickArrayLower:p,tickArrayUpper:f,userVaultA:b,userVaultB:w,mintA:A,mintB:T,rewardAccounts:B,exTickArrayBitmap:P}){let k=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...B.map(I=>[{pubkey:I.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:I.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:I.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:w,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:we,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:T,isSigner:!1,isWritable:!1},...k];return new ge({keys:S,programId:e,data:Buffer.from(Gi)})}};import{PublicKey as Io}from"@solana/web3.js";var xa=O([N("instruction")]),Ca=O([N("instruction")]),Ra=O([l("rewardState"),l("rewardOpenTime"),l("rewardEndTime"),l("rewardLastUpdateTime"),l("totalReward"),l("totalRewardEmissioned"),l("rewardClaimed"),l("rewardPerSecond"),z("accRewardPerShare"),h("rewardVault"),h("rewardMint"),h("rewardSender"),l("rewardType"),D(l(),15,"padding")]),La=O([l("state"),l("nonce"),h("lpVault"),h("rewardVault"),h(),h(),l(),l(),l("totalReward"),z("perShareReward"),l("lastSlot"),l("perSlotReward")]),Oa=O([l("state"),l("nonce"),h("lpVault"),h("rewardVaultA"),l("totalRewardA"),z("perShareRewardA"),l("perSlotRewardA"),N("option"),h("rewardVaultB"),$(7),l("totalRewardB"),z("perShareRewardB"),l("perSlotRewardB"),l("lastSlot"),h()]),Na=O([l(),l("state"),l("nonce"),l("validRewardTokenNum"),z("rewardMultiplier"),l("rewardPeriodMax"),l("rewardPeriodMin"),l("rewardPeriodExtend"),h("lpMint"),h("lpVault"),D(Ra,5,"rewardInfos"),h("creator"),h(),D(l(),32,"padding")]),Ma=new Proxy(La,{get(y,e,t){return e==="decode"?(...n)=>{let o=y.decode(...n);return q(F({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(y,e,t)}}),Fa=new Proxy(Oa,{get(y,e,t){return e==="decode"?(...n)=>{let o=y.decode(...n);return q(F({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(y,e,t)}}),zi=new Proxy(Na,{get(y,e,t){return e==="decode"?(...n)=>{let o=y.decode(...n);return q(F({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return q(F({},i),{rewardType:((r=Object.entries(pn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(y,e,t)}}),va=O([l("isSet"),l("rewardPerSecond"),l("rewardOpenTime"),l("rewardEndTime"),l("rewardType")]),_a=O([N("instruction"),l("nonce"),D(va,5,"rewardTimeInfo")]),Va=O([N("instruction"),l("rewardReopenTime"),l("rewardEndTime"),l("rewardPerSecond")]),Ea=O([N("instruction"),l("isSet"),l("rewardPerSecond"),l("rewardOpenTime"),l("rewardEndTime"),l("rewardType")]),Iy=O([l("state"),h("id"),h("owner"),l("deposited"),D(l(),1,"rewardDebts")]),Xi=O([l("state"),h("id"),h("owner"),l("deposited"),D(z(),1,"rewardDebts"),l(""),l("voteLockedBalance"),D(l(),15)]),By=O([l("state"),h("id"),h("owner"),l("deposited"),D(l(),2,"rewardDebts")]),Da=O([l("state"),h("id"),h("owner"),l("deposited"),D(z(),2,"rewardDebts"),D(l(),17)]),Wa=O([l(),l("state"),h("id"),h("owner"),l("deposited"),D(z(),5,"rewardDebts"),D(l(),16)]),qa=O([N("instruction"),l("amount")]),Ua=O([h("mint"),h("grantAuthority"),l("baselineVoteWeightScaledFactor"),l("maxExtraLockupVoteWeightScaledFactor"),l("lockupSaturationSecs"),ei("digitShift"),D(N(),7,"reserved1"),D(l(),7,"reserved2")]),Ga=O([$(8),h("governanceProgramId"),h("realm"),h("realmGoverningTokenMint"),h("realmAuthority"),D(N(),32,"reserved1"),D(Ua,4,"votingMints"),vt("timeOffset"),N("bump"),D(N(),7,"reserved2"),D(l(),11,"reserved3")]),za=O([vt("startTime"),vt("endTime"),N("kind"),D(N(),15,"reserved")]),Xa=O([D(za,1,"lockup"),l("amountDeposited_native"),l("amountInitiallyLockedNative"),ye("isUsed"),ye("allowClawback"),N("votingMintConfigIdx"),D(N(),29,"reserved")]),Ya=O([$(8),h("voterAuthority"),h("registrar"),D(Xa,32,"deposits"),N("voterBump"),N("voterWweightRecordBump"),D(N(),94,"reserved")]);import{NATIVE_MINT as My}from"@solana/spl-token";var Fy=ee("Raydium_farm_config"),Ha=new Io("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Qa=new Io("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var vy=new Io("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var pn={"Standard SPL":0,"Option tokens":1},Yi={[oi.toString()]:3,[ii.toString()]:4,[ri.toString()]:5,[mo.toString()]:6,[wt.FARM_PROGRAM_ID_V3.toString()]:3,[wt.FARM_PROGRAM_ID_V4.toString()]:4,[wt.FARM_PROGRAM_ID_V5.toString()]:5,[wt.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as kb,SystemProgram as Tb,SYSVAR_CLOCK_PUBKEY as hb,SYSVAR_RENT_PUBKEY as Ib,TransactionInstruction as Bb}from"@solana/web3.js";import Kb from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Cb,createAssociatedTokenAccountIdempotentInstruction as Rb,TOKEN_PROGRAM_ID as Lb}from"@solana/spl-token";import $y from"bn.js";import{PublicKey as qy}from"@solana/web3.js";import Gy from"bn.js";var lb=ee("Raydium.farm.util");var qb=ee("Raydium_farm_instruction"),Ub={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};import Rg from"bn.js";import{PublicKey as tw}from"@solana/web3.js";import{AccountLayout as iw,MintLayout as rw,NATIVE_MINT as aw,TOKEN_PROGRAM_ID as uw}from"@solana/spl-token";import it from"bn.js";var fn=1e4;function ze(y,e,t,n){if(e===void 0)return{amount:y,fee:void 0,expirationTime:void 0};let o=q(F({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,r=new it(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===fn){let s=new it(i.maximumFee.toString());return{amount:y.add(s),fee:s,expirationTime:a}}else{let s=Wn(y.mul(new it(fn)),new it(fn-i.transferFeeBasisPoints)),c=new it(i.maximumFee.toString()),u=s.sub(y).gt(c)?y.add(c):s,d=Wn(u.mul(new it(i.transferFeeBasisPoints)),new it(fn)),g=d.gt(r)?r:d;return{amount:u,fee:g,expirationTime:a}}else{let s=Wn(y.mul(new it(i.transferFeeBasisPoints)),new it(fn)),c=s.gt(r)?r:s;return{amount:y,fee:c,expirationTime:a}}}function dn(y,e){return y===void 0?e:e===void 0?y:Math.min(y,e)}function Wn(y,e){let{div:t,mod:n}=y.divmod(e);return n.gt(new it(0))?t.add(new it(1)):t}var os=O([fe("mintAuthorityOption"),h("mintAuthority"),l("supply"),N("decimals"),N("isInitialized"),fe("freezeAuthorityOption"),h("freezeAuthority")]);import{TOKEN_PROGRAM_ID as zg}from"@solana/spl-token";import{PublicKey as Qg}from"@solana/web3.js";var pt=o=>{var i=o,{address:y,programId:e,decimals:t}=i,n=tt(i,["address","programId","decimals"]);return F({chainId:101,address:at(y).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},yn=y=>y?q(F({},y),{transferFeeConfigAuthority:y.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:y.withdrawWithheldAuthority.toBase58(),withheldAmount:y.withheldAmount.toString(),olderTransferFee:q(F({},y.olderTransferFee),{epoch:y.olderTransferFee.epoch.toString(),maximumFee:y.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(F({},y.newerTransferFee),{epoch:y.newerTransferFee.epoch.toString(),maximumFee:y.newerTransferFee.maximumFee.toString()})}):void 0;import Qi from"bn.js";var is=new Qi(25),rs=new Qi(1e4);import{ASSOCIATED_TOKEN_PROGRAM_ID as fP,TOKEN_PROGRAM_ID as yP}from"@solana/spl-token";import{PublicKey as gP,SystemProgram as PP,SYSVAR_RENT_PUBKEY as AP,TransactionInstruction as wP}from"@solana/web3.js";import xP from"bn.js";var as=O([N("instruction"),l("amountIn"),l("minAmountOut")]),ss=O([N("instruction"),l("maxAmountIn"),l("amountOut")]),lP=O([N("instruction"),N("nonce")]),us=O([N("instruction"),N("nonce"),l("startTime")]),Zi=O([l("status"),l("nonce"),l("maxOrder"),l("depth"),l("baseDecimal"),l("quoteDecimal"),l("state"),l("resetFlag"),l("minSize"),l("volMaxCutRatio"),l("amountWaveRatio"),l("baseLotSize"),l("quoteLotSize"),l("minPriceMultiplier"),l("maxPriceMultiplier"),l("systemDecimalValue"),l("minSeparateNumerator"),l("minSeparateDenominator"),l("tradeFeeNumerator"),l("tradeFeeDenominator"),l("pnlNumerator"),l("pnlDenominator"),l("swapFeeNumerator"),l("swapFeeDenominator"),l("baseNeedTakePnl"),l("quoteNeedTakePnl"),l("quoteTotalPnl"),l("baseTotalPnl"),l("poolOpenTime"),l("punishPcAmount"),l("punishCoinAmount"),l("orderbookToInitTime"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),l("swapBase2QuoteFee"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),l("swapQuote2BaseFee"),h("baseVault"),h("quoteVault"),h("baseMint"),h("quoteMint"),h("lpMint"),h("openOrders"),h("marketId"),h("marketProgramId"),h("targetOrders"),h("withdrawQueue"),h("lpVault"),h("owner"),l("lpReserve"),D(l(),3,"padding")]),mP=O([l("accountType"),l("status"),l("nonce"),l("maxOrder"),l("depth"),l("baseDecimal"),l("quoteDecimal"),l("state"),l("resetFlag"),l("minSize"),l("volMaxCutRatio"),l("amountWaveRatio"),l("baseLotSize"),l("quoteLotSize"),l("minPriceMultiplier"),l("maxPriceMultiplier"),l("systemDecimalsValue"),l("abortTradeFactor"),l("priceTickMultiplier"),l("priceTick"),l("minSeparateNumerator"),l("minSeparateDenominator"),l("tradeFeeNumerator"),l("tradeFeeDenominator"),l("pnlNumerator"),l("pnlDenominator"),l("swapFeeNumerator"),l("swapFeeDenominator"),l("baseNeedTakePnl"),l("quoteNeedTakePnl"),l("quoteTotalPnl"),l("baseTotalPnl"),l("poolOpenTime"),l("punishPcAmount"),l("punishCoinAmount"),l("orderbookToInitTime"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),l("swapQuote2BaseFee"),l("swapBase2QuoteFee"),h("baseVault"),h("quoteVault"),h("baseMint"),h("quoteMint"),h("lpMint"),h("modelDataAccount"),h("openOrders"),h("marketId"),h("marketProgramId"),h("targetOrders"),h("owner"),D(l(),64,"padding")]),cs=O([N("instruction"),l("baseAmountIn"),l("quoteAmountIn"),l("fixedSide"),l("otherAmountMin")]),ls=O([N("instruction"),l("lpAmount"),l("baseAmountMin"),l("quoteAmountMin")]);var ms=O([l("fee")]);var LP=ee("Raydium_liquidity_instruction");var ds=5e4,ps=O([l("x"),l("y"),l("price")]),FP=O([l("accountType"),l("status"),l("multiplier"),l("validDataCount"),D(ps,ds,"DataElement")]);import{PublicKey as YP}from"@solana/web3.js";import QP from"decimal.js";import{TOKEN_PROGRAM_ID as $P}from"@solana/spl-token";import{PublicKey as EP}from"@solana/web3.js";var qP=ee("Raydium_liquidity_serum");import xw from"bn.js";import Rw from"decimal.js";import{TOKEN_PROGRAM_ID as CA}from"@solana/spl-token";import{PublicKey as LA}from"@solana/web3.js";import NA from"bn.js";import{SystemProgram as bA,SYSVAR_RENT_PUBKEY as gA,Transaction as PA,TransactionInstruction as AA}from"@solana/web3.js";import{createInitializeAccountInstruction as kA,TOKEN_PROGRAM_ID as TA}from"@solana/spl-token";function fs(y="accountFlags"){let e=new xn(y);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ys=O([$(5),fs("accountFlags"),h("ownAddress"),l("vaultSignerNonce"),h("baseMint"),h("quoteMint"),h("baseVault"),l("baseDepositsTotal"),l("baseFeesAccrued"),h("quoteVault"),l("quoteDepositsTotal"),l("quoteFeesAccrued"),l("quoteDustThreshold"),h("requestQueue"),h("eventQueue"),h("bids"),h("asks"),l("baseLotSize"),l("quoteLotSize"),l("feeRateBps"),l("referrerRebatesAccrued"),$(7)]);import{PublicKey as iT}from"@solana/web3.js";import{AccountLayout as aT,NATIVE_MINT as sT,TOKEN_2022_PROGRAM_ID as uT,TOKEN_PROGRAM_ID as cT,createAssociatedTokenAccountIdempotentInstruction as lT}from"@solana/spl-token";import ek from"bn.js";import Ts from"bn.js";var Dw=new Ts(0);import Xw from"bn.js";import hs from"bn.js";var Je=new hs(1e6);import PT from"bn.js";import wT from"decimal.js";import{PublicKey as wk,TransactionInstruction as kk,Keypair as hk,SystemProgram as Ik}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Sk,TOKEN_2022_PROGRAM_ID as Kk,TOKEN_PROGRAM_ID as xk}from"@solana/spl-token";var rk=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),ak=Buffer.from("amm_config","utf8"),sk=Buffer.from("pool","utf8"),uk=Buffer.from("pool_lp_mint","utf8"),ck=Buffer.from("pool_vault","utf8"),lk=Buffer.from("observation","utf8"),mk=Buffer.from("permission","utf8"),dk=Buffer.from("support_mint","utf8"),pk=Buffer.from("creator_fee_share","utf8");var fk=Buffer.from("locked_liquidity","utf8");var Fk=ee("Raydium_cpmm"),vk={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133],createPermissionPda:Buffer.from([135,136,2,216,137,169,181,202]),closePermissionPda:Buffer.from([156,84,32,118,69,135,70,123]),initializeWithPermission:Buffer.from([63,55,254,65,49,178,89,121]),collectCreatorFee:Buffer.from([20,22,86,123,198,28,219,132]),collectCreatorFeePermissionless:Buffer.from([202,202,34,83,226,122,145,229])};var Ss=O([$(8),N("bump"),ye("disableCreatePool"),Pe("index"),l("tradeFeeRate"),l("protocolFeeRate"),l("fundFeeRate"),l("createPoolFee"),h("protocolOwner"),h("fundOwner"),l("creatorFeeRate"),l("creatorFeeShareRate"),D(l(),14)]),$i=O([$(8),h("configId"),h("poolCreator"),h("vaultA"),h("vaultB"),h("mintLp"),h("mintA"),h("mintB"),h("mintProgramA"),h("mintProgramB"),h("observationId"),N("bump"),N("status"),N("lpDecimals"),N("mintDecimalA"),N("mintDecimalB"),l("lpAmount"),l("protocolFeesMintA"),l("protocolFeesMintB"),l("fundFeesMintA"),l("fundFeesMintB"),l("openTime"),l("epoch"),N("feeOn"),ye("enableCreatorFee"),D(N(),6),l("creatorFeesMintA"),l("creatorFeesMintB"),D(l(),28)]),Ek=O([$(8),h("configId"),D(l(),30)]),Dk=O([$(8),N("bump"),h("creator"),h("ammConfig"),l("shareRate"),D(l(),8)]);import{PublicKey as OK,SystemProgram as NK}from"@solana/web3.js";import{createTransferInstruction as FK,TOKEN_PROGRAM_ID as vK,TOKEN_2022_PROGRAM_ID as _K,createAssociatedTokenAccountIdempotentInstruction as VK,createSyncNativeInstruction as DK,createTransferCheckedInstruction as WK}from"@solana/spl-token";import Ys from"bn.js";import GK from"decimal.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as xh,TOKEN_2022_PROGRAM_ID as Ch,TOKEN_PROGRAM_ID as Rh}from"@solana/spl-token";import{SystemProgram as Mh,TransactionInstruction as Fh}from"@solana/web3.js";import Cs from"bn.js";var ph=Buffer.from("vault_auth_seed","utf8"),fh=Buffer.from("global_config","utf8"),yh=Buffer.from("pool_vesting","utf8"),bh=Buffer.from("platform_config","utf8"),gh=Buffer.from("platform_fee_vault_auth_seed","utf8"),Ph=Buffer.from("creator_fee_vault_auth_seed","utf8"),Ah=Buffer.from("platform_global_access","utf8"),wh=Buffer.from("platform_allow_config","utf8"),kh=Buffer.from("platform_curve_rule","utf8");var Vh={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),createPlatformVestingAccount:Buffer.from([146,71,173,69,98,19,15,106]),createPlatformAllowConfig:Buffer.from([69,71,168,7,214,250,107,102]),closePlatformAllowConfig:Buffer.from([82,205,36,216,16,6,240,215]),createPlatformCurveRule:Buffer.from([148,71,180,136,122,144,59,21]),updatePlatformCurveRule:Buffer.from([90,100,206,196,54,117,120,139]),removePlatformCurveRule:Buffer.from([236,77,154,138,32,145,127,219]),closePlatformCurveRule:Buffer.from([194,114,82,45,136,88,169,159])};var Eh=new Cs("18446744073709551615");var Rs=O([l(),l("epoch"),N("curveType"),Pe("index"),l("migrateFee"),l("tradeFeeRate"),l("maxShareFeeRate"),l("minSupplyA"),l("maxLockRate"),l("minSellRateA"),l("minMigrateRateA"),l("minFundRaisingB"),h("mintB"),h("protocolFeeOwner"),h("migrateFeeOwner"),h("migrateToAmmWallet"),h("migrateToCpmmWallet"),D(l(),16)]),Ls=O([l("totalLockedAmount"),l("cliffPeriod"),l("unlockPeriod"),l("startTime"),l("totalAllocatedShare")]),Os=O([l(),l("epoch"),N("bump"),N("status"),N("mintDecimalsA"),N("mintDecimalsB"),N("migrateType"),l("supply"),l("totalSellA"),l("virtualA"),l("virtualB"),l("realA"),l("realB"),l("totalFundRaisingB"),l("protocolFee"),l("platformFee"),l("migrateFee"),Ls.replicate("vestingSchedule"),h("configId"),h("platformId"),h("mintA"),h("mintB"),h("vaultA"),h("vaultB"),h("creator"),N("mintProgramFlag"),N("cpmmCreatorFeeOn"),l("platformVestingShare"),D(N(),54)]),Uh=O([l(),l("epoch"),h("poolId"),h("beneficiary"),l("claimedAmount"),l("tokenShareAmount"),D(l(),8)]),Ns=O([N("migrateType"),N("migrateCpmmFeeOn"),l("supply"),l("totalSellA"),l("totalFundRaisingB"),l("totalLockedAmount"),l("cliffPeriod"),l("unlockPeriod")]),Gh=O([l("epoch"),N("index"),h("configId"),Ns.replicate("bondingCurveParam"),D(l(),50)]),Ji=O([l(),l("epoch"),h("platformClaimFeeWallet"),h("platformLockNftWallet"),l("platformScale"),l("creatorScale"),l("burnScale"),l("feeRate"),D(N(),64,"name"),D(N(),256,"web"),D(N(),256,"img"),h("cpConfigId"),l("creatorFeeRate"),h("transferFeeExtensionAuth"),h("platformVestingWallet"),l("platformVestingScale"),h("platformCpCreator"),N("restrictGlobalConfig"),N("restrictCurveParam"),h("curveRuleManager"),D(N(),78)]),Ms=O([N("field"),N("op"),z("value")]),Fs=O([Pe("groupId"),l("epoch"),lo(Ms,"constraints")]),vs=O([l(),N("bump"),N("version"),h("platformId"),h("configId"),l("epoch"),D(l(),8),lo(Fs,"groups")]);import{TOKEN_2022_PROGRAM_ID as Yh,TOKEN_PROGRAM_ID as Hh}from"@solana/spl-token";import _s from"bn.js";var aI=new _s(1e6);import lI from"bn.js";import dI from"decimal.js";import GI from"bn.js";import XI from"decimal.js";import PI from"bn.js";import wI from"decimal.js";import RI from"bn.js";import OI from"decimal.js";import nr from"bn.js";import So from"decimal.js";var qn=class{static _multipler(e){return new So(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new So(e.toString()).div(this._Q64).mul(this._multipler(t)).div(this._multipler(n))}static getPriceX64({price:e,decimalA:t,decimalB:n}){let o=e.mul(this._multipler(n)).div(this._multipler(t));return new nr(o.mul(this._Q64).toFixed(0))}};qn._Q64=new So(new nr(1).shln(64).toString());import{NATIVE_MINT as sS,TOKEN_2022_PROGRAM_ID as uS,TOKEN_PROGRAM_ID as cS,createAssociatedTokenAccountIdempotentInstruction as mS,createSyncNativeInstruction as dS,getTransferFeeConfig as pS,unpackMint as fS}from"@solana/spl-token";import xe from"bn.js";import{PublicKey as Gs,SystemProgram as gS}from"@solana/web3.js";import IS from"decimal.js";var BS={initPriceX64:new xe("515752397214619"),supply:new xe(1e15),totalSellA:new xe(7931e11),totalFundRaisingB:new xe(85e9),totalFundRaisingBUSD:new xe(125e8),totalLockedAmount:new xe("0"),cliffPeriod:new xe("0"),unlockPeriod:new xe("0"),decimals:6,virtualA:new xe("1073471847374405"),virtualB:new xe("30050573465"),realA:new xe(0),realB:new xe(0),protocolFee:new xe(0),platformId:new Gs("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new xe(0),cliffPeriod:new xe(0),unlockPeriod:new xe(0),startTime:new xe(0),totalAllocatedShare:new xe(0)}},SS=new xe(1e4);var zs={[ai.toBase58()]:3};var Xs=O([$(5),$(8),h("ownAddress"),l("vaultSignerNonce"),h("baseMint"),h("quoteMint"),h("baseVault"),l("baseDepositsTotal"),l("baseFeesAccrued"),h("quoteVault"),l("quoteDepositsTotal"),l("quoteFeesAccrued"),l("quoteDustThreshold"),h("requestQueue"),h("eventQueue"),h("bids"),h("asks"),l("baseLotSize"),l("quoteLotSize"),l("feeRateBps"),l("referrerRebatesAccrued"),$(7)]);import{PublicKey as ZS}from"@solana/web3.js";var tK=ee("Serum");import{ASSOCIATED_TOKEN_PROGRAM_ID as lK,TOKEN_2022_PROGRAM_ID as mK,TOKEN_PROGRAM_ID as dK}from"@solana/spl-token";import{PublicKey as fK,SystemProgram as yK,TransactionInstruction as bK}from"@solana/web3.js";import PK from"bn.js";var wx=new Ys(0);import{PublicKey as Hs,Transaction as Ko,TransactionInstruction as Qs}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Zs}from"@solana/spl-token";import or from"bn.js";var Me=class extends _e{static getPdaPoolId(e,t){return ae([Me.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ae([Me.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new or(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let r=n.map(u=>Me.getPdaPoolId(t,u).publicKey),a=[];for(let u=0;u<Me.VERSION_PROJECT.length;u++)a.push(...r.map(d=>Me.getPdaOwnerId(t,d,o,u).publicKey));let s=await ve(e,[...r,...a]),c=[];for(let u=0;u<s.length;u++){let d=Math.floor(u/n.length),g=u%n.length,m=r[g],p=a[u],f=s[g],b=s[n.length+u];if(!(f&&b)||f.data.length!==Me.POOL_LAYOUT.span||b.data.length!==Me.OWNER_LAYOUT.span)continue;let w=Me.POOL_LAYOUT.decode(f.data),A=Me.OWNER_LAYOUT.decode(b.data),T=w.openTime.toNumber(),B=w.endTime.toNumber(),P=A.tokenInfo.map(I=>I.debtAmount.gt(new or(0))).filter(I=>!I).length!==3,k=i>T&&i<B&&w.status===1,S=P&&k;c.push({programId:t,poolId:m,ammId:w.ammId,ownerAccountId:p,snapshotLpAmount:A.lpAmount,project:Me.VERSION_PROJECT[d],openTime:T,endTime:B,canClaim:S,canClaimErrorType:P?k?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:w.tokenInfo.map((I,K)=>({mintAddress:I.mintAddress,mintVault:I.mintVault,mintDecimals:I.mintDecimals,perLpLoss:I.perLpLoss,debtAmount:A.tokenInfo[K].debtAmount.add(A.tokenInfo[K].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r=[];for(let c of e.tokenInfo){let{account:u,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Ce.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!c.mintAddress.equals(Ce.WSOL.mint),associatedOnly:c.mintAddress.equals(Ce.WSOL.mint)?!1:t.associatedOnly});d&&o.addInstruction(d),r.push(u)}o.addInstruction({instructions:[Me.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:a,signers:s}=o.build();return[{transaction:a,signer:s}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r={};for(let u of e){let d=[];for(let g of u.tokenInfo){let{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:g.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:g.mintAddress.equals(Ce.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!g.mintAddress.equals(Ce.WSOL.mint),associatedOnly:g.mintAddress.equals(Ce.WSOL.mint)?!1:t.associatedOnly});p&&o.addInstruction(p),m&&(r[g.mintAddress.toString()]=m,d.push(m))}o.addInstruction({instructions:[Me.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:i,ownerPda:u.ownerAccountId,claimAddress:d}})]})}let{transaction:a,signers:s}=o.build(),c=o.allInstructions;return io(c,[i,...s.map(u=>u.publicKey)])?[{transaction:a,signer:s}]:[{transaction:new Ko().add(...c.slice(0,o.AllTxData.instructions.length-1)),signer:s},{transaction:new Ko().add(...c.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Ko().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=O([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(s=>({pubkey:s,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:s})=>({pubkey:s,isSigner:!1,isWritable:!0})),{pubkey:Zs,isSigner:!1,isWritable:!1}],r=Buffer.alloc(o.span);o.encode({},r);let a=Buffer.from([10,66,208,184,161,6,191,98,...r]);return new Qs({keys:i,programId:e,data:a})}},rt=Me;rt.CLAIMED_NUM=3,rt.POOL_LAYOUT=O([$(8),N("bump"),N("status"),l("openTime"),l("endTime"),h("ammId"),D(O([N("mintDecimals"),h("mintAddress"),h("mintVault"),l("perLpLoss"),l("totalClaimedAmount")]),Me.CLAIMED_NUM,"tokenInfo"),D(l(),10,"padding")]),rt.OWNER_LAYOUT=O([$(8),N("bump"),N("version"),h("poolId"),h("owner"),l("lpAmount"),D(O([h("mintAddress"),l("debtAmount"),l("claimedAmount")]),Me.CLAIMED_NUM,"tokenInfo"),D(l(),4,"padding")]),rt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Hs(e)),rt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},rt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as _x}from"@solana/web3.js";import{getTransferFeeConfig as Ex,MintLayout as Dx,TOKEN_2022_PROGRAM_ID as Wx,TOKEN_PROGRAM_ID as qx,unpackMint as Ux}from"@solana/spl-token";var gR=new Ct(2),PR=new Ct(3),AR=new Ct(5),Hn=new Ct(10),wR=new Ct(100),kR=new Ct(1e3),TR=new Ct(1e4);function Jn(y){return Hn.pow(Be(y))}function Xn(y,e=1,t=[]){let n=[...y];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}import{createAssociatedTokenAccountIdempotentInstruction as ft,TOKEN_2022_PROGRAM_ID as et,TOKEN_PROGRAM_ID as Xt}from"@solana/spl-token";import{PublicKey as R}from"@solana/web3.js";import ke from"bn.js";import yt from"decimal.js";var Dn=class extends _e{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var P;let{programId:t,owner:n=((P=this.scope.owner)==null?void 0:P.publicKey)||R.default,mint1:o,mint2:i,ammConfig:r,initialPrice:a,computeBudgetConfig:s,txVersion:c,txTipConfig:u,feePayer:d}=e,g=this.createTxBuilder(d),[m,p,f]=new ke(new R(o.address).toBuffer()).gt(new ke(new R(i.address).toBuffer()))?[i,o,new yt(1).div(a)]:[o,i,a],b=G.priceToSqrtPriceX64(f,m.decimals,p.decimals),w=[],A=[];m.programId===et.toBase58()&&A.push(xt(t,new R(m.address)).publicKey),p.programId===et.toBase58()&&A.push(xt(t,new R(p.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(A)).forEach((k,S)=>{k&&w.push(A[S])});let B=await j.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:m,mintB:p,ammConfigId:r.id,initialPriceX64:b,extendMintAccount:w});return g.addInstruction(B),g.addCustomComputeBudget(s),g.addTipInstruction(u),g.versionBuild({txVersion:c,extInfo:{address:q(F({},B.address),{observationId:B.address.observationId.toBase58(),exBitmapAccount:B.address.exBitmapAccount.toBase58(),programId:t.toString(),id:B.address.poolId.toString(),mintA:m,mintB:p,openTime:"0",vault:{A:B.address.mintAVault.toString(),B:B.address.mintBVault.toString()},rewardInfos:[],config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:F({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:B.address.poolId.toString(),mintA:m,mintB:p,feeRate:r.tradeFeeRate,openTime:"0",programId:t.toString(),price:f.toNumber(),config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]},feeOn:"Both",hasDynamicFee:!1,launchMigratePool:!1,burnPercent:0,tips:[]},Nn)}})}async createCustomizablePool(e){var L;let{programId:t,owner:n=((L=this.scope.owner)==null?void 0:L.publicKey)||R.default,mint1:o,mint2:i,initialPrice:r,ammConfig:a,collectFeeOnMint:s,dynamicFeeConfig:c,computeBudgetConfig:u,txVersion:d,txTipConfig:g,feePayer:m,addSupportMintExt:p}=e;if(e.collectFeeOn!==void 0)throw Error("SDK no longer supports this parameter, please use collectFeeOnMint");let f=this.createTxBuilder(m),[b,w,A]=new ke(new R(o.address).toBuffer()).gt(new ke(new R(i.address).toBuffer()))?[i,o,new yt(1).div(r)]:[o,i,r],T=G.priceToSqrtPriceX64(A,b.decimals,w.decimals),B=[],P=[];p&&(b.programId===et.toBase58()&&P.push(xt(t,new R(b.address)).publicKey),w.programId===et.toBase58()&&P.push(xt(t,new R(w.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(P)).forEach((V,v)=>{V&&B.push(P[v])}));let{address:k}=await j.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:w,ammConfigId:a.id,initialPriceX64:T,extendMintAccount:B}),S=[];if(c){if(!await this.scope.connection.getAccountInfo(c))throw new Error("Dynamic Fee Config not found. Run 03_admin_create_dynamic_fee_config.ts first.");console.log("Dynamic Fee Config",c.toBase58()),S.push({pubkey:c,isSigner:!1,isWritable:!1})}let I;s===void 0?I=0:s.equals(k.mintA)?I=1:s.equals(k.mintB)?I=2:this.logAndCreateError("param collectFeeOnMint find error");let K=j.createCustomizablePoolInstruction(t,k.poolId,this.scope.ownerPubKey,a.id,k.mintA,k.mintB,k.mintAVault,k.mintBVault,k.observationId,k.exBitmapAccount,k.mintAProgram,k.mintBProgram,T,I,[...B,...S.map(U=>U.pubkey)],c);return f.addInstruction({instructions:[K]}),f.addCustomComputeBudget(u),f.addTipInstruction(g),f.versionBuild({txVersion:d,extInfo:{address:q(F({},k),{observationId:k.observationId.toBase58(),exBitmapAccount:k.exBitmapAccount.toBase58(),programId:t.toString(),id:k.poolId.toString(),mintA:b,mintB:w,openTime:"0",vault:{A:k.mintAVault.toString(),B:k.mintBVault.toString()},rewardInfos:[],config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:F({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:k.poolId.toString(),mintA:b,mintB:w,feeRate:a.tradeFeeRate,openTime:"0",programId:t.toString(),price:A.toNumber(),config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0,collectFeeOn:I,feeOn:I===0?"Both":I===1?"TokenA":"TokenB",hasDynamicFee:!!c,tips:[],launchMigratePool:!1},Nn)}})}async createPermissionedPool(e){var V;let{programId:t,owner:n=((V=this.scope.owner)==null?void 0:V.publicKey)||R.default,mint1:o,mint2:i,initialPrice:r,ammConfig:a,collectFeeOnMint:s,dynamicFeeConfig:c,computeBudgetConfig:u,txVersion:d,txTipConfig:g,feePayer:m,addSupportMintExt:p}=e;if(e.collectFeeOn!==void 0)throw Error("SDK no longer supports this parameter, please use collectFeeOnMint");let f=this.createTxBuilder(m),[b,w,A]=new ke(new R(o.address).toBuffer()).gt(new ke(new R(i.address).toBuffer()))?[i,o,new yt(1).div(r)]:[o,i,r],T=G.priceToSqrtPriceX64(A,b.decimals,w.decimals),B=[],P=[];p&&(b.programId===et.toBase58()&&P.push(xt(t,new R(b.address)).publicKey),w.programId===et.toBase58()&&P.push(xt(t,new R(w.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(P)).forEach((_,E)=>{_&&B.push(P[E])}));let k=m!=null?m:this.scope.ownerPubKey,S=Math.floor(Math.random()*Math.pow(2,16))+1,{address:I}=await j.createPermissionedPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:w,ammConfigId:a.id,initialPriceX64:T,extendMintAccount:B,payer:k,seedIndex:S}),K=[];if(c){if(!await this.scope.connection.getAccountInfo(c))throw new Error("Dynamic Fee Config not found. Run 03_admin_create_dynamic_fee_config.ts first.");console.log("Dynamic Fee Config",c.toBase58()),K.push({pubkey:c,isSigner:!1,isWritable:!1})}let L;s===void 0?L=0:s.equals(I.mintA)?L=1:s.equals(I.mintB)?L=2:this.logAndCreateError("param collectFeeOnMint find error");let U=j.createPermissionedPoolInstruction(t,k,k,I.permission,a.id,I.poolId,I.mintA,I.mintB,I.mintAVault,I.mintBVault,I.observationId,I.exBitmapAccount,I.mintAProgram,I.mintBProgram,T,L,S,[...B,...K.map(v=>v.pubkey)],c);return f.addInstruction({instructions:[U]}),f.addCustomComputeBudget(u),f.addTipInstruction(g),f.versionBuild({txVersion:d,extInfo:{address:q(F({},I),{observationId:I.observationId.toBase58(),exBitmapAccount:I.exBitmapAccount.toBase58(),programId:t.toString(),id:I.poolId.toString(),mintA:b,mintB:w,openTime:"0",vault:{A:I.mintAVault.toString(),B:I.mintBVault.toString()},rewardInfos:[],config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:F({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:I.poolId.toString(),mintA:b,mintB:w,feeRate:a.tradeFeeRate,openTime:"0",programId:t.toString(),price:A.toNumber(),config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0,collectFeeOn:L,feeOn:L===0?"Both":L===1?"TokenA":"TokenB",hasDynamicFee:!!c,tips:[],launchMigratePool:!1},Nn)}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r=null,baseAmount:a,otherAmountMax:s,liquidity:c=new ke(0),nft2022:u,associatedOnly:d=!0,checkCreateATAOwner:g=!1,withMetadata:m="create",getEphemeralSigners:p,computeBudgetConfig:f,txTipConfig:b,txVersion:w,feePayer:A}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let T=this.createTxBuilder(A),B=null,P=null,k=n.useSOLBalance&&e.mintA.address===Y.toString(),S=n.useSOLBalance&&e.mintB.address===Y.toString(),[I,K]=r==="MintA"?[a,s]:[s,a],{account:L,instructionParams:U}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new R(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:k||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:d,checkCreateATAOwner:g});L&&(B=L),T.addInstruction(U||{});let{account:V,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new R(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:S||K.isZero()?{payer:this.scope.ownerPubKey,amount:K}:void 0,skipCloseAccount:!S,notUseTokenAccount:S,associatedOnly:S?!1:d,checkCreateATAOwner:g});V&&(P=V),T.addInstruction(v||{}),(!B||!P)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:B==null?void 0:B.toBase58(),ownerTokenAccountB:P==null?void 0:P.toBase58()});let _=t!=null?t:await this.getClmmPoolKeys(e.id.toString()),E=await j.openPositionFromBaseInstructions({poolInfo:e,poolKeys:_,ownerInfo:q(F({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:B,tokenAccountB:P}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:s,liquidity:c,withMetadata:m,getEphemeralSigners:p,nft2022:u});return T.addInstruction(E),T.addCustomComputeBudget(f),T.addTipInstruction(b),T.versionBuild({txVersion:w,extInfo:F({},E.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,base:r=null,tickLower:a,tickUpper:s,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:d=!1,withMetadata:g="create",txVersion:m,computeBudgetConfig:p,txTipConfig:f,getEphemeralSigners:b,nft2022:w,feePayer:A}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let T=this.createTxBuilder(A),B=null,P=null,k=n.useSOLBalance&&e.mintA.address===Y.toBase58(),S=n.useSOLBalance&&e.mintB.address===Y.toBase58(),{account:I,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new R(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:k||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:u,checkCreateATAOwner:d});I&&(B=I),T.addInstruction(K||{});let{account:L,instructionParams:U}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new R(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:S||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!S,notUseTokenAccount:S,associatedOnly:S?!1:u,checkCreateATAOwner:d});L&&(P=L),T.addInstruction(U||{}),(B===void 0||P===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let V=t||await this.getClmmPoolKeys(e.id.toString()),v=await j.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:V,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:B,tokenAccountB:P},tickLower:a,tickUpper:s,liquidity:c,amountMaxA:o,amountMaxB:i,base:r,withMetadata:g,getEphemeralSigners:b,nft2022:w});return T.addInstruction(v),T.addCustomComputeBudget(p),T.addTipInstruction(f),T.versionBuild({txVersion:m,extInfo:{address:v.address}})}async increasePositionFromLiquidity(e){var L;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:r,liquidity:a,ownerInfo:s,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:d,txTipConfig:g,txVersion:m,feePayer:p}=e,f=this.createTxBuilder(p),b,w,A=s.useSOLBalance&&t.mintA.address===Y.toString(),T=s.useSOLBalance&&t.mintB.address===Y.toString(),{account:B,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new R(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,associatedOnly:A?!1:c,checkCreateATAOwner:u});B&&(b=B),f.addInstruction(P||{});let{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new R(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:c,checkCreateATAOwner:u});k&&(w=k),f.addInstruction(S||{}),!b&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=n!=null?n:await this.getClmmPoolKeys(t.id),K=j.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:w},liquidity:a,amountMaxA:i,amountMaxB:r,nft2022:(L=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:L.owner.equals(et)});return f.addInstruction(K),f.addCustomComputeBudget(d),f.addTipInstruction(g),f.versionBuild({txVersion:m,extInfo:{address:K.address}})}async increasePositionFromBase(e){var K;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:r,ownerInfo:a,associatedOnly:s=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:u,txTipConfig:d,txVersion:g,feePayer:m}=e,p=this.createTxBuilder(m),f,b,w=a.useSOLBalance&&t.mintA.address===Y.toString(),A=a.useSOLBalance&&t.mintB.address===Y.toString(),{account:T,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new R(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:w||(o==="MintA"?i:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:r}:void 0,skipCloseAccount:!w,associatedOnly:w?!1:s,checkCreateATAOwner:c});T&&(f=T),p.addInstruction(B||{});let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new R(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(o==="MintA"?r:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:i}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:s,checkCreateATAOwner:c});P&&(b=P),p.addInstruction(k||{}),!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=await this.getClmmPoolKeys(t.id),I=j.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:S,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},base:o,baseAmount:i,otherAmountMax:r,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(et)});return p.addInstruction(I),p.addCustomComputeBudget(u),p.addTipInstruction(d),p.versionBuild({txVersion:g,extInfo:{address:I.address}})}async decreaseLiquidity(e){var v;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:r,amountMinB:a,liquidity:s,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:d,txTipConfig:g,txVersion:m,feePayer:p}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let f=this.createTxBuilder(p),b=i.useSOLBalance&&t.mintA.address===Y.toString(),w=i.useSOLBalance&&t.mintB.address===Y.toString(),A,T,{account:B,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new R(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A=B,P&&f.addInstruction(P);let{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new R(t.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:w?!1:c,checkCreateATAOwner:u});T=k,S&&f.addInstruction(S);let I=n!=null?n:await this.getClmmPoolKeys(t.id),K=[];for(let _ of I.rewardInfos){let E=i.useSOLBalance&&_.mint.address===Y.toString(),Z;if(_.mint.address===t.mintA.address)Z=A;else if(_.mint.address===t.mintB.address)Z=T;else{let{account:ce,instructionParams:se}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(_.mint.programId),mint:new R(_.mint.address),notUseTokenAccount:E,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!E,associatedOnly:E?!1:c,checkCreateATAOwner:u});Z=ce,se&&f.addInstruction(se)}K.push(Z)}!A&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let L=(v=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:v.owner.equals(et),U=await j.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:T,rewardAccounts:K},liquidity:s,amountMinA:r,amountMinB:a,nft2022:L});f.addInstruction({instructions:U.instructions,instructionTypes:[J.ClmmDecreasePosition]});let V=F({},U.address);if(i.closePosition){let _=await j.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:L});f.addInstruction({endInstructions:_.instructions,endInstructionTypes:_.instructionTypes}),V=F(F({},V),_.address)}return f.addCustomComputeBudget(d),f.addTipInstruction(g),f.versionBuild({txVersion:m,extInfo:{address:V}})}async lockPosition(e){var p;let{programId:t=on,authProgramId:n=Rn,poolProgramId:o=At,ownerPosition:i,payer:r,computeBudgetConfig:a,txTipConfig:s,txVersion:c,getEphemeralSigners:u,feePayer:d}=e,g=this.createTxBuilder(d),m=await j.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:r!=null?r:this.scope.ownerPubKey,nftMint:i.nftMint,getEphemeralSigners:u,nft2022:(p=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:p.owner.equals(et)});return g.addInstruction(m),g.addCustomComputeBudget(a),g.addTipInstruction(s),g.versionBuild({txVersion:c,extInfo:m.address})}async harvestLockPosition(e){let{programId:t=on,authProgramId:n=Rn,clmmProgram:o=At,poolKeys:i,lockData:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:s=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:u,txTipConfig:d,txVersion:g,feePayer:m}=e,p=i||await this.getClmmPoolKeys(r.poolId.toString()),f=this.createTxBuilder(m),b=await this.scope.connection.getAccountInfo(r.positionId);b||this.logger.logWithError("position not found",r.positionId);let w=Mn.decode(b.data),A=a.useSOLBalance&&p.mintA.address===Y.toString(),T=a.useSOLBalance&&p.mintB.address===Y.toString(),B,P,{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintA.programId,mint:new R(p.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:A?!1:s,checkCreateATAOwner:c});B=k,S&&f.addInstruction(S);let{account:I,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintB.programId,mint:new R(p.mintB.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!T,associatedOnly:T?!1:s,checkCreateATAOwner:c});P=I,K&&f.addInstruction(K);let L={},U=[];for(let Fe of p.rewardInfos){let Ne=a.useSOLBalance&&Fe.mint.address===Y.toString(),Ie=L[Fe.mint.address];if(!Ie){let{account:Un,instructionParams:xo}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(Fe.mint.programId),mint:new R(Fe.mint.address),notUseTokenAccount:Ne,owner:this.scope.ownerPubKey,skipCloseAccount:!Ne,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:Ne?!1:s});Ie=Un,xo&&f.addInstruction(xo)}L[Fe.mint.address]=Ie,U.push(Ie)}let V=Wt(t,r.lockNftMint).publicKey,v=Q(this.scope.ownerPubKey,r.lockNftMint,Xt).publicKey,_=H.getTickArrayStartIndex(w.tickLower,p.config.tickSpacing),E=H.getTickArrayStartIndex(w.tickUpper,p.config.tickSpacing),{publicKey:Z}=oe(new R(p.programId),r.poolId,_),{publicKey:ce}=oe(new R(p.programId),r.poolId,E),{publicKey:se}=nt(new R(p.programId),r.poolId,w.tickLower,w.tickUpper),de=[];for(let Fe=0;Fe<p.rewardInfos.length;Fe++){let Ne=p.rewardInfos[Fe].mint.address,Ie=L[Ne];Ie&&de.push({poolRewardVault:new R(p.rewardInfos[Fe].vault),ownerRewardVault:Ie,rewardMint:new R(Ne)})}let bt=await j.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:V,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:v,positionNftAccount:r.nftAccount,positionId:r.positionId,poolId:r.poolId,protocolPosition:se,vaultA:new R(p.vault.A),vaultB:new R(p.vault.B),tickArrayLower:Z,tickArrayUpper:ce,userVaultA:B,userVaultB:P,mintA:new R(p.mintA.address),mintB:new R(p.mintB.address),rewardAccounts:de,exTickArrayBitmap:le(o,r.poolId).publicKey});return f.addInstruction({instructions:[bt],instructionTypes:[J.ClmmHarvestLockPosition]}),f.addCustomComputeBudget(u),f.addTipInstruction(d),f.versionBuild({txVersion:g})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){var d;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let s=this.createTxBuilder(a),c=t!=null?t:await this.getClmmPoolKeys(e.id),u=j.closePositionInstructions({poolInfo:e,poolKeys:c,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(d=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:d.owner.equals(et)});return s.addCustomComputeBudget(i),s.addTipInstruction(r),s.addInstruction(u).versionBuild({txVersion:o,extInfo:{address:u.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txVersion:a,feePayer:s}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(s),u=t.useSOLBalance&&n.mint.address.toString()===Y.toString(),d=n.perSecond.mul(n.endTime-n.openTime),{account:g,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(n.mint.programId),mint:new R(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ke(new yt(d.toFixed(0)).gte(d)?d.toFixed(0):d.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});m&&c.addInstruction(m),g||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),f=j.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:g},rewardInfo:{programId:new R(n.mint.programId),mint:new R(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:qt(n.perSecond)}});return c.addInstruction(f),c.addCustomComputeBudget(r),c.versionBuild({txVersion:a,extInfo:{address:f.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:s,txVersion:c,feePayer:u}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=this.createTxBuilder(u),g={};for(let m of o){let p=n.useSOLBalance&&m.mint.address===Y.toString(),f=m.perSecond.mul(m.endTime-m.openTime),{account:b,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(m.mint.programId),mint:new R(m.mint.address),notUseTokenAccount:!!p,skipCloseAccount:!p,owner:this.scope.ownerPubKey,createInfo:p?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ke(new yt(f.toFixed(0)).gte(f)?f.toFixed(0):f.add(1).toFixed(0))}:void 0,associatedOnly:p?!1:i,checkCreateATAOwner:r});w&&d.addInstruction(w),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let A=t!=null?t:await this.getClmmPoolKeys(e.id),T=j.initRewardInstructions({poolInfo:e,poolKeys:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new R(m.mint.programId),mint:new R(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:qt(m.perSecond)}});g=F(F({},g),T.address),d.addInstruction(T)}return d.addCustomComputeBudget(a),d.addTipInstruction(s),d.versionBuild({txVersion:c,extInfo:{address:g}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:s,feePayer:c}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(c),d=t.useSOLBalance&&n.mint.equals(Y),{account:g,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ke(new yt(n.perSecond.mul(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.mul(n.endTime-n.openTime))?n.perSecond.mul(n.endTime-n.openTime).toFixed(0):n.perSecond.mul(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:o,checkCreateATAOwner:i});m&&u.addInstruction(m),g||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),f=j.setRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:g},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:qt(n.perSecond)}});return u.addInstruction(f),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:s,extInfo:{address:f.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:s,txVersion:c,feePayer:u}){let d=this.createTxBuilder(u),g={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let p=n.useSOLBalance&&m.mint.address===Y.toString(),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(m.mint.programId),mint:new R(m.mint.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,createInfo:p?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ke(new yt(m.perSecond.mul(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.mul(m.endTime-m.openTime))?m.perSecond.mul(m.endTime-m.openTime).toFixed(0):m.perSecond.mul(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:p?!1:i,checkCreateATAOwner:r});b&&d.addInstruction(b),f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let w=t!=null?t:await this.getClmmPoolKeys(e.id),A=j.setRewardInstructions({poolInfo:e,poolKeys:w,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardInfo:{mint:new R(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:qt(m.perSecond)}});d.addInstruction(A),g=F(F({},g),A.address)}return d.addCustomComputeBudget(a),d.addTipInstruction(s),d.versionBuild({txVersion:c,extInfo:{address:g}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:s,feePayer:c}){let u=e.rewardDefaultInfos.find(w=>w.mint.address===n.toString());u||this.logAndCreateError("reward mint error","not found reward mint",n);let d=this.createTxBuilder(c),g=t.useSOLBalance&&n.equals(Y),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(u.mint.programId),mint:n,notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:g?!1:o,checkCreateATAOwner:i});p&&d.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=j.collectRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:n});return d.addInstruction(b),d.addCustomComputeBudget(r),d.addTipInstruction(a),d.versionBuild({txVersion:s,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,feePayer:s}){let c=this.createTxBuilder(s),u={};for(let d of n){let g=e.rewardDefaultInfos.find(A=>A.mint.address===d.toString());if(!g){this.logAndCreateError("reward mint error","not found reward mint",d);continue}let m=t.useSOLBalance&&d.equals(Y),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(g.mint.programId),mint:d,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!m,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:o,checkCreateATAOwner:i});p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),f&&c.addInstruction(f);let b=await this.getClmmPoolKeys(e.id),w=j.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:d});c.addInstruction(w),u=F(F({},u),w.address)}return c.addCustomComputeBudget(r),c.addTipInstruction(a),c.build({address:u})}async openLimitOrder({poolInfo:e,baseIn:t=!0,orderTick:n,amount:o,noneIndex:i=0,tickArrayBitmap:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:s=!0,feePayer:c,computeBudgetConfig:u,txTipConfig:d,txVersion:g}){let m=new R(e.id),p=new R(e.programId),f=t?new R(e.mintA.address):new R(e.mintB.address),b=t?new R(e.mintB.address):new R(e.mintA.address),w=new R(e[t?"mintA":"mintB"].programId),A=new R(e[t?"mintB":"mintA"].programId),T=f.equals(Y),B=b.equals(Y),P=a.useSOLBalance&&T,k=a.useSOLBalance&&B,S=this.createTxBuilder(),I=P||!s?void 0:Q(this.scope.ownerPubKey,f,w).publicKey;if(I)S.addInstruction({instructions:[ft(this.scope.ownerPubKey,I,this.scope.ownerPubKey,f,w)]});else{let{account:se,instructionParams:de}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w,mint:f,notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:o},associatedOnly:!P});I=se,de&&S.addInstruction(de)}let K=k||!s?void 0:Q(this.scope.ownerPubKey,b,A).publicKey;if(K)S.addInstruction({instructions:[ft(this.scope.ownerPubKey,K,this.scope.ownerPubKey,b,A)]});else{let{account:se,instructionParams:de}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:A,mint:b,notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!k});K=se,de&&S.addInstruction(de)}let L=Ni(p,this.scope.ownerPubKey,i).publicKey,U=await this.scope.connection.getAccountInfo(L),V=U?ki.decode(U.data).orderNonce:new ke(0),v=Oi(p,c||this.scope.ownerPubKey,L,V).publicKey,_=H.getTickArrayStartIndex(n,e.config.tickSpacing),E=oe(p,m,_).publicKey,Z=Ue(p,m,new R(e[t?"mintA":"mintB"].address)).publicKey,ce=Ue(p,m,new R(e[t?"mintB":"mintA"].address)).publicKey;return S.addInstruction({instructions:[j.openLimitOrderInstruction(p,c||this.scope.ownerPubKey,m,E,L,v,I,K,Z,ce,f,b,w,i,t,n,o,r)]}),S.addCustomComputeBudget(u),S.addTipInstruction(d),S.versionBuild({txVersion:g,extInfo:{limitOrder:v}})}async increaseLimitOrder({poolInfo:e,limitOrder:t,amount:n,ownerInfo:o={useSOLBalance:!0},associatedOnly:i=!0,feePayer:r,computeBudgetConfig:a,txTipConfig:s,txVersion:c}){let u=new R(e.id),d=new R(e.programId),g=await this.scope.connection.getAccountInfo(t);g||this.logAndCreateError(`limit order ${t.toBase58()} not exist`);let m=St.decode(g.data),p=m.zeroForOne?new R(e.mintA.address):new R(e.mintB.address),f=new R(e[m.zeroForOne?"mintA":"mintB"].programId),b=p.equals(Y),w=o.useSOLBalance&&b,A=this.createTxBuilder(),T=w||!i?void 0:Q(this.scope.ownerPubKey,p,f).publicKey;if(T)A.addInstruction({instructions:[ft(this.scope.ownerPubKey,T,this.scope.ownerPubKey,p,f)]});else{let{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f,mint:p,notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:n},associatedOnly:!w});T=S,I&&A.addInstruction(I)}let B=Ue(d,u,new R(e[m.zeroForOne?"mintA":"mintB"].address)).publicKey,P=H.getTickArrayStartIndex(m.tick,e.config.tickSpacing),k=oe(d,u,P).publicKey;return A.addInstruction({instructions:[j.increaseLimitOrderInstruction(d,r||this.scope.ownerPubKey,m.poolId,k,t,T,B,p,f,n)]}),A.addCustomComputeBudget(a),A.addTipInstruction(s),A.versionBuild({txVersion:c})}async decreaseLimitOrder({poolInfo:e,limitOrder:t,limitOrderInfo:n,amount:o,slippage:i=1e3,tickArrayBitmap:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:s=!0,feePayer:c,computeBudgetConfig:u,txTipConfig:d,txVersion:g,forerunCreate:m}){let p=new R(e.id),f=new R(e.programId),b=n;if(!b){let se=await this.scope.connection.getAccountInfo(t);se||this.logAndCreateError(`limit order ${t.toBase58()} not exist`),b=St.decode(se.data)}let w=o.muln(1e4-i).divn(1e4),A=kt.getUnFilledAmount({orderInfo:b});(A.isZero()||o.gt(A))&&this.logAndCreateError(`amount should be less than unfulfilled amount: ${A.toString()}, amount: ${o.toString()}`);let[T,B]=b.zeroForOne?[new R(e.mintA.address),new R(e.mintB.address)]:[new R(e.mintB.address),new R(e.mintA.address)],[P,k]=b.zeroForOne?[new R(e.mintA.programId),new R(e.mintB.programId)]:[new R(e.mintB.programId),new R(e.mintA.programId)],[S,I]=[T.equals(Y),B.equals(Y)],[K,L]=[a.useSOLBalance&&S,a.useSOLBalance&&I],U=this.createTxBuilder(),V=K||!s?void 0:Q(this.scope.ownerPubKey,T,P).publicKey,v=L||!s?void 0:Q(this.scope.ownerPubKey,B,k).publicKey;if(V)U.addInstruction({instructions:[ft(this.scope.ownerPubKey,V,this.scope.ownerPubKey,T,P)]});else{let{account:se,instructionParams:de}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:P,mint:T,notUseTokenAccount:K,owner:this.scope.ownerPubKey,skipCloseAccount:!K,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!K});V=se,de&&U.addInstruction(de)}if(v)U.addInstruction({instructions:[ft(this.scope.ownerPubKey,v,this.scope.ownerPubKey,B,k)]});else{let{account:se,instructionParams:de}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k,mint:B,notUseTokenAccount:L,owner:this.scope.ownerPubKey,skipCloseAccount:!L,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!L});v=se,de&&U.addInstruction(de)}let[_,E]=[Ue(f,p,T).publicKey,Ue(f,p,B).publicKey],Z=H.getTickArrayStartIndex(b.tick,e.config.tickSpacing),ce=oe(f,p,Z).publicKey;return U.addInstruction({instructions:[j.decreaseLimitOrderInstruction(f,c||this.scope.ownerPubKey,p,ce,t,V,v,_,E,T,B,o,w,r)]}),U.addCustomComputeBudget(u),U.addTipInstruction(d),U.versionBuild({txVersion:g,extInfo:{forerunCreate:m}})}async closeLimitOrder({programId:e=At,limitOrder:t,autoWithdraw:n=!0,tickArrayBitmap:o,slippage:i=0,feePayer:r,computeBudgetConfig:a,txTipConfig:s,txVersion:c}){let u=await this.scope.connection.getAccountInfo(t);u||this.logAndCreateError(`limit order ${t.toBase58()} not exist`);let d=St.decode(u.data),g=kt.getUnFilledAmount({orderInfo:d});!n&&!g.isZero()&&this.logAndCreateError(`unfulfilled amount should be 0, (${g.toString()} remaining), please withdraw first or set autoWithdraw: true`);let m=this.createTxBuilder(),p=(await this.scope.api.fetchPoolById({ids:d.poolId.toBase58()}))[0];p||(p=(await this.getSimplePoolInfo(d.poolId)).poolInfo);let f=await qe.fetchTickArrayInfo({connection:this.scope.connection,programId:e,poolId:d.poolId,tick:d.tick,tickSpacing:p.config.tickSpacing}),b=kt.settleFilledOrder({orderInfo:d,tickInfo:f.ticks.find(w=>w.tick===d.tick)});if(g.isZero()){if(!b.isZero()){let w=await this.settleLimitOrder({limitOrder:t});m.addInstruction(F({},w.builder.AllTxData))}}else{let{builder:w}=await this.decreaseLimitOrder({poolInfo:p,limitOrder:t,limitOrderInfo:d,amount:g,tickArrayBitmap:o,slippage:i,txVersion:0});m.addInstruction({instructions:w.allInstructions})}return m.addInstruction({instructions:[j.closeLimitOrderInstruction(e,r||this.scope.ownerPubKey,this.scope.ownerPubKey,t)]}),m.addCustomComputeBudget(a),m.addTipInstruction(s),m.versionBuild({txVersion:c})}async closeAllLimitOrder({programId:e=At,limitOrders:t,autoWithdraw:n=!0,slippage:o=1e4,feePayer:i,computeBudgetConfig:r,txVersion:a}){let s=this.createTxBuilder(),u=(await ve(this.scope.connection,t)).map((A,T)=>A?q(F({},St.decode(A.data)),{pda:t[T]}):null),d=u.filter(Boolean),g=d.map(A=>A.poolId.toBase58()),m=(await this.scope.api.fetchPoolById({ids:g.join(",")})).filter(Boolean),p={};m.forEach(A=>p[A.id]=A);let f=await qe.fetchMultipleTickArrayInfo({connection:this.scope.connection,tickInfoList:d.map(A=>({programId:e,poolId:A.poolId,tick:A.tick,tickSpacing:p[A.poolId.toString()].config.tickSpacing}))}),b={};f.forEach((A,T)=>{!A||(b[d[T].pda.toBase58()]=A)});let w=0;for(let A of t){let T=u[w];if(!T){w++;continue}let B=kt.getUnFilledAmount({orderInfo:T});!n&&!B.isZero()&&this.logAndCreateError(`${A.toBase58()} order unfulfilled amount should be 0 (${B.toString()} remaining), please withdraw first or set autoWithdraw: true`);let P=p[T.poolId.toBase58()],k=b[A.toBase58()],S=kt.settleFilledOrder({orderInfo:T,tickInfo:k.ticks.find(I=>I.tick===T.tick)});if(B.isZero()){if(!S.isZero()){let I=await this.settleLimitOrder({limitOrder:A,forerunCreate:!0});s.addInstruction(F({},I.builder.AllTxData))}}else{let{builder:I}=await this.decreaseLimitOrder({poolInfo:P,limitOrder:A,limitOrderInfo:T,amount:B,slippage:o,txVersion:0,forerunCreate:!0});s.addInstruction({instructions:I.allInstructions})}s.addInstruction({instructions:[j.closeLimitOrderInstruction(e,i||this.scope.ownerPubKey,this.scope.ownerPubKey,A)]}),w++}return a===0?s.sizeCheckBuildV0({computeBudgetConfig:r}):s.sizeCheckBuild({computeBudgetConfig:r})}async settleLimitOrder({limitOrder:e,feePayer:t,ownerInfo:n={useSOLBalance:!0},associatedOnly:o=!0,computeBudgetConfig:i,txTipConfig:r,txVersion:a,forerunCreate:s}){let c=await this.scope.connection.getAccountInfo(e);c||this.logAndCreateError(`limit order ${e.toBase58()} not exist`);let u=St.decode(c.data),d=(await this.scope.api.fetchPoolById({ids:u.poolId.toBase58()}))[0];d||(d=(await this.getSimplePoolInfo(u.poolId)).poolInfo);let g=u.zeroForOne?d.mintB:d.mintA,[m,p]=[new R(g.address),new R(g.programId)],f=new R(d.programId),b=this.createTxBuilder(),w=m.equals(Y),A=n.useSOLBalance&&w,T=A||!o?void 0:Q(this.scope.ownerPubKey,m,p).publicKey;if(T)b.addInstruction({instructions:[ft(this.scope.ownerPubKey,T,this.scope.ownerPubKey,m,p)]});else{let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p,mint:m,notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!A});T=P,k&&b.addInstruction(k)}let B=H.getTickArrayStartIndex(u.tick,d.config.tickSpacing);return b.addInstruction({instructions:[j.settleLimitOrderInstruction(f,t||this.scope.ownerPubKey,u.poolId,oe(f,u.poolId,B).publicKey,e,T,Ue(f,u.poolId,m).publicKey,m,p)]}),b.addCustomComputeBudget(i),b.addTipInstruction(r),b.versionBuild({txVersion:a,extInfo:{forerunCreate:s}})}async settleAllLimitOrder({limitOrders:e,feePayer:t,ownerInfo:n={useSOLBalance:!0},associatedOnly:o=!0,computeBudgetConfig:i,txVersion:r}){let a=await ve(this.scope.connection,e),s=[],c=a.map((m,p)=>{if(!m)return;let f=St.decode(m.data);return s.push(f.poolId.toString()),q(F({},f),{pda:e[p]})}),u=await this.scope.api.fetchPoolById({ids:s.join(",")});u.filter(Boolean).length||(u=(await Promise.all(s.map(p=>this.getSimplePoolInfo(p)))).map(p=>p.poolInfo));let d=this.createTxBuilder(),g={};for(let m of c){if(!m)continue;let p=u.find(S=>S.id===m.poolId.toBase58());if(!p)continue;let f=new R(p.programId),b=new R(m.zeroForOne?p.mintB.address:p.mintA.address),w=b.equals(Y),A=n.useSOLBalance&&w,T=new R(w?Xt:(await this.scope.token.getTokenInfo(b)).programId),B=g[b.toBase58()],P=A||!o?void 0:Q(this.scope.ownerPubKey,b,T).publicKey;if(B)P=B;else{if(P)d.addInstruction({instructions:[ft(this.scope.ownerPubKey,P,this.scope.ownerPubKey,b,T)]});else{let{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:T,mint:b,notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!A});P=S,I&&d.addInstruction(I)}g[b.toBase58()]=P}let k=H.getTickArrayStartIndex(m.tick,p.config.tickSpacing);d.addInstruction({instructions:[j.settleLimitOrderInstruction(f,t||this.scope.ownerPubKey,m.poolId,oe(f,m.poolId,k).publicKey,m.pda,P,Ue(f,m.poolId,b).publicKey,b,T)]})}return r===0?d.sizeCheckBuildV0({computeBudgetConfig:i}):d.sizeCheckBuild({computeBudgetConfig:i})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:r,observationId:a,ownerInfo:s,remainingAccounts:c,associatedOnly:u=!0,checkCreateATAOwner:d=!1,txVersion:g,computeBudgetConfig:m,txTipConfig:p,feePayer:f}){let b=this.createTxBuilder(f),w=n.toString()===e.mintA.address.toString(),A=s.useSOLBalance&&e.mintA.address.toString()===Y.toBase58(),T=s.useSOLBalance&&e.mintB.address.toString()===Y.toBase58(),B;!r||r.equals(new yt(0))?B=w?Ze.add(new ke(1)):$e.sub(new ke(1)):B=G.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:I,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new R(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!w?{payer:s.feePayer||this.scope.ownerPubKey,amount:w?o:0}:void 0,associatedOnly:A?!1:u,checkCreateATAOwner:d});P=I,K&&b.addInstruction(K)}let k;if(!k){let{account:I,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new R(e.mintB.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,skipCloseAccount:!T,createInfo:T||w?{payer:s.feePayer||this.scope.ownerPubKey,amount:w?0:o}:void 0,associatedOnly:T?!1:u,checkCreateATAOwner:d});k=I,K&&b.addInstruction(K)}(!P||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.address,tokenB:e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:k,mintAUseSOLBalance:A,mintBUseSOLBalance:T,associatedOnly:u});let S=t!=null?t:await this.getClmmPoolKeys(e.id.toString());return b.addInstruction(j.makeSwapBaseInInstructions({poolInfo:q(F({},e),{id:e.id.toString(),programId:e.programId.toString()}),poolKeys:S,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:k},inputMint:new R(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:W,remainingAccounts:c})),b.addCustomComputeBudget(m),b.addTipInstruction(p),b.versionBuild({txVersion:g})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:i,priceLimit:r,observationId:a,ownerInfo:s,remainingAccounts:c,associatedOnly:u=!0,checkCreateATAOwner:d=!1,txVersion:g,computeBudgetConfig:m,txTipConfig:p,feePayer:f}){let b=this.createTxBuilder(f),w=n.toString()===e.mintB.address.toString(),A=s.useSOLBalance&&e.mintA.address.toString()===Y.toBase58(),T=s.useSOLBalance&&e.mintB.address.toString()===Y.toBase58(),B;!r||r.equals(new yt(0))?B=w?Ze.add(new ke(1)):$e.sub(new ke(1)):B=G.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:I,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new R(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!w?{payer:s.feePayer||this.scope.ownerPubKey,amount:w?i:0}:void 0,associatedOnly:A?!1:u,checkCreateATAOwner:d});P=I,K&&b.addInstruction(K)}let k;if(!k){let{account:I,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new R(e.mintB.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,skipCloseAccount:!T,createInfo:T||w?{payer:s.feePayer||this.scope.ownerPubKey,amount:w?0:i}:void 0,associatedOnly:T?!1:u,checkCreateATAOwner:d});k=I,K&&b.addInstruction(K)}(!P||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.address,tokenB:e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:k,mintAUseSOLBalance:A,mintBUseSOLBalance:T,associatedOnly:u});let S=t!=null?t:await this.getClmmPoolKeys(e.id.toString());return b.addInstruction(j.makeSwapBaseOutInstructions({poolInfo:q(F({},e),{id:e.id.toString(),programId:e.programId.toString()}),poolKeys:S,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:k},outputMint:new R(n),amountOut:o,amountInMax:i,sqrtPriceLimitX64:W,remainingAccounts:c})),b.addCustomComputeBudget(m),b.addTipInstruction(p),b.versionBuild({txVersion:g})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,programId:a,txVersion:s,computeBudgetConfig:c,feePayer:u,lockProgram:d=on,lockAuth:g=Rn,clmmProgram:m=At}){var T,B;let p={};for(let P of this.scope.account.tokenAccountRawInfos)i?Q(this.scope.ownerPubKey,P.accountInfo.mint,a).publicKey.equals(P.pubkey)&&(p[P.accountInfo.mint.toString()]=P.pubkey):p[P.accountInfo.mint.toString()]=P.pubkey;let f=Object.values(t).flat().map(P=>P.nftMint),b=await Ee(this.scope.connection,f.map(P=>({pubkey:P}))),w={};b.forEach(P=>{var k,S;w[P.pubkey.toBase58()]=(S=(k=P==null?void 0:P.accountInfo)==null?void 0:k.owner)!=null?S:null});let A=this.createTxBuilder(u);for(let P of Object.values(e)){if(t[P.id]===void 0||!t[P.id].find(_=>!_.liquidity.isZero()||_.rewardInfos.find(E=>!E.rewardAmountOwed.isZero())))continue;let k=P,S=o.useSOLBalance&&k.mintA.address===Y.toString(),I=o.useSOLBalance&&k.mintB.address===Y.toString(),K=p[k.mintA.address];if(!K)if(S){let{account:_,instructionParams:E}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintA.programId,mint:new R(k.mintA.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:i,checkCreateATAOwner:r});K=_,E&&A.addInstruction(E)}else{let _=new R(k.mintA.address);K=this.scope.account.getAssociatedTokenAccount(_,new R(k.mintA.programId)),A.addInstruction({instructions:[ft(this.scope.ownerPubKey,K,this.scope.ownerPubKey,_,new R(k.mintA.programId))]})}let L=p[k.mintB.address];if(!L)if(I){let{account:_,instructionParams:E}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintB.programId,mint:new R(k.mintB.address),notUseTokenAccount:I,owner:this.scope.ownerPubKey,skipCloseAccount:!I,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:I?!1:i,checkCreateATAOwner:r});L=_,E&&A.addInstruction(E)}else{let _=new R(k.mintB.address);L=this.scope.account.getAssociatedTokenAccount(_,new R(k.mintB.programId)),A.addInstruction({instructions:[ft(this.scope.ownerPubKey,L,this.scope.ownerPubKey,_,new R(k.mintB.programId))]})}p[k.mintA.address]=K,p[k.mintB.address]=L;let U=[];for(let _ of k.rewardDefaultInfos){let E=o.useSOLBalance&&_.mint.address===Y.toString(),Z=p[_.mint.address];if(!Z){let{account:ce,instructionParams:se}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(_.mint.programId),mint:new R(_.mint.address),notUseTokenAccount:E,owner:this.scope.ownerPubKey,skipCloseAccount:!E,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:E?!1:i});Z=ce,se&&A.addInstruction(se)}p[_.mint.address]=Z,U.push(Z)}let V=await this.getClmmPoolKeys(k.id),v=[];for(let _=0;_<V.rewardInfos.length;_++)v.push({poolRewardVault:new R(V.rewardInfos[_].vault),ownerRewardVault:U[_],rewardMint:new R(V.rewardInfos[_].mint.address)});for(let _ of t[P.id]){let E=(T=n==null?void 0:n[P.id])==null?void 0:T[_.nftMint.toBase58()];if(E){let Z=Q(this.scope.ownerPubKey,E.lockNftMint,Xt).publicKey,ce=H.getTickArrayStartIndex(_.tickLower,V.config.tickSpacing),se=H.getTickArrayStartIndex(_.tickUpper,V.config.tickSpacing),{publicKey:de}=oe(new R(V.programId),E.poolId,ce),{publicKey:bt}=oe(new R(V.programId),E.poolId,se),{publicKey:Fe}=nt(new R(V.programId),E.poolId,_.tickLower,_.tickUpper),Ne=Wt(d,E.lockNftMint).publicKey,Ie=j.harvestLockPositionInstructionV2({programId:d,auth:g,lockPositionId:Ne,clmmProgram:m,lockOwner:this.scope.ownerPubKey,lockNftMint:E.lockNftMint,lockNftAccount:Z,positionNftAccount:E.nftAccount,positionId:E.positionId,poolId:E.poolId,protocolPosition:Fe,vaultA:new R(V.vault.A),vaultB:new R(V.vault.B),tickArrayLower:de,tickArrayUpper:bt,userVaultA:K,userVaultB:L,mintA:new R(V.mintA.address),mintB:new R(V.mintB.address),rewardAccounts:v,exTickArrayBitmap:le(m,E.poolId).publicKey});A.addInstruction({instructions:[Ie],instructionTypes:[J.ClmmHarvestLockPosition],lookupTableAddress:V.lookupTableAccount?[V.lookupTableAccount]:[]})}else{let Z=j.decreaseLiquidityInstructions({poolInfo:k,poolKeys:V,ownerPosition:_,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:L,rewardAccounts:U},liquidity:new ke(0),amountMinA:new ke(0),amountMinB:new ke(0),nft2022:(B=w[_.nftMint.toBase58()])==null?void 0:B.equals(et)});A.addInstruction(Z)}}}return s===0?A.sizeCheckBuildV0({computeBudgetConfig:c}):A.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(un(e).publicKey);return t?wi.decode(t.data).whitelistMints.filter(o=>!o.equals(R.default)):[]}async getOwnerPositionInfo({programId:e=At}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new ke(1))).map(r=>Ge(new R(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=Mn.decode(r.data);i.push(a)}),i}async getOwnerLockedPositionInfo({programId:e=on}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new ke(1))).map(s=>Wt(new R(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(s=>{if(!s)return;let c=Ti.decode(s.data);i.push(c)});let r=await this.scope.connection.getMultipleAccountsInfo(i.map(s=>s.positionId)),a=[];return r.forEach(s=>{if(!s)return;let c=Mn.decode(s.data);a.push(c)}),i.map((s,c)=>({position:a[c],lockInfo:s}))}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Ee(this.scope.connection,e.map(i=>({pubkey:new R(i)})),t),o={};for(let i=0;i<e.length;i++){let r=n[i];if(r===null||!r.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=sn.decode(r.accountInfo.data),s=G.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=q(F({},a),{currentPrice:s,programId:r.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(s=>e[s].configId.toBase58())),o=await Ee(this.scope.connection,Array.from(n).map(s=>({pubkey:new R(s)}))),i={};o.forEach(s=>{!s.accountInfo||(i[s.pubkey.toBase58()]=fo.decode(s.accountInfo.data))});let r=await qe.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(s=>{var d,g,m,p;let[c,u]=[e[s].mintA.toBase58(),e[s].mintB.toBase58()];return{id:s,programId:e[s].programId.toBase58(),mintA:pt({address:c,decimals:e[s].mintDecimalsA,programId:t[c].programId.toBase58()||Xt.toBase58(),extensions:{feeConfig:(d=t[c])!=null&&d.feeConfig?yn((g=t[c])==null?void 0:g.feeConfig):void 0}}),mintB:pt({address:u,decimals:e[s].mintDecimalsB,programId:t[u].programId.toBase58()||Xt.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?yn((p=t[u])==null?void 0:p.feeConfig):void 0}}),price:e[s].currentPrice,config:q(F({},i[e[s].configId.toBase58()]),{id:e[s].configId.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await qe.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(r)});return{computeClmmPoolInfo:r,computePoolTickData:a}}async getPoolInfoFromRpc(e){let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58(),...t.rewardInfos.filter(u=>!u.mint.equals(R.default)).map(u=>u.mint.toBase58())]),o=await Yt({connection:this.scope.connection,mints:Array.from(n).map(u=>new R(u))}),{computeClmmPoolInfo:i,computePoolTickData:r}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await Ee(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),s=Wi(i[e],o);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");s.mintAmountA=Number(_t.decode(a[0].accountInfo.data).amount.toString()),s.mintAmountB=Number(_t.decode(a[1].accountInfo.data).amount.toString());let c=q(F({},i[e]),{exBitmapAccount:i[e].exBitmapAccount.toBase58(),observationId:i[e].observationId.toBase58(),id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:s.config,rewardInfos:i[e].rewardInfos.filter(u=>!u.vault.equals(R.default)).map(u=>{var d;return{mint:pt({address:u.mint.toBase58(),programId:Xt.toBase58(),decimals:(d=o[u.mint.toBase58()].decimals)!=null?d:6}),vault:u.vault.toBase58()}})});return{poolInfo:s,poolKeys:c,computePoolInfo:i[e],tickData:r,rpcPoolInfo:t,tickArrays:Object.values(r[e])}}async getSwapPoolInfo(e,t=!0){let{poolInfo:n,rpcData:o}=await this.getSimplePoolInfo(e),i=await this.scope.connection.getAccountInfo(o.configId),r=fo.decode(i.data),a=new R(n.programId),s=new R(e),c=await Vi(a,this.scope.connection,s,o.tickCurrent,r.tickSpacing,o.tickArrayBitmap,t);return{poolInfo:n,rpcData:o,configInfo:r,tickArrays:c}}async getSimplePoolInfo(e){let t=await this.getRpcClmmPoolInfo({poolId:e}),n=await this.scope.connection.getMultipleAccountsInfo([t.mintA,t.mintB]);return{poolInfo:{id:e.toString(),programId:t.programId.toString(),mintA:{address:t.mintA.toString(),programId:n[0].owner.toString(),decimals:t.mintDecimalsA},mintB:{address:t.mintB.toString(),programId:n[1].owner.toString(),decimals:t.mintDecimalsB},config:{id:t.configId.toBase58(),tickSpacing:t.tickSpacing}},rpcData:t}}async getMultipleSimplePoolInfo(e){let t=await this.getRpcClmmPoolInfos({poolIds:e}),n=new Set(Object.values(t).map(r=>[r.mintA.toBase58(),r.mintB.toBase58()]).flat()),o=await Yt({connection:this.scope.connection,mints:Array.from(n).map(r=>new R(r))}),i={};return e.forEach(r=>{let a=t[r.toString()];if(!a)return null;let s=o[a.mintA.toBase58()],c=o[a.mintB.toBase58()];i[r.toString()]={poolInfo:{id:r.toString(),programId:a.programId.toString(),mintA:{address:a.mintA.toString(),programId:s.programId.toString(),decimals:a.mintDecimalsA},mintB:{address:a.mintB.toString(),programId:c.programId.toString(),decimals:a.mintDecimalsB},config:{id:a.configId.toBase58(),tickSpacing:a.tickSpacing}},rpcData:a}}),i}};export{Dn as Clmm};
//# sourceMappingURL=clmm.mjs.map