@raydium-io/raydium-sdk-v2
Version:
An SDK for building applications on top of Raydium.
3 lines • 509 kB
JavaScript
var Qm=Object.defineProperty,Zm=Object.defineProperties;var $m=Object.getOwnPropertyDescriptors;var wr=Object.getOwnPropertySymbols;var nc=Object.prototype.hasOwnProperty,oc=Object.prototype.propertyIsEnumerable;var tc=(c,e,t)=>e in c?Qm(c,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):c[e]=t,N=(c,e)=>{for(var t in e||(e={}))nc.call(e,t)&&tc(c,t,e[t]);if(wr)for(var t of wr(e))oc.call(e,t)&&tc(c,t,e[t]);return c},E=(c,e)=>Zm(c,$m(e));var Ye=(c,e)=>{var t={};for(var n in c)nc.call(c,n)&&e.indexOf(n)<0&&(t[n]=c[n]);if(c!=null&&wr)for(var n of wr(c))e.indexOf(n)<0&&oc.call(c,n)&&(t[n]=c[n]);return t};import{merge as Ey}from"lodash";import Bc from"axios";import{PublicKey as ac}from"@solana/web3.js";import{get as ic,set as jm}from"lodash";var _a=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}},rc={},Jm={};function ke(c){let e=ic(rc,c);if(!e){let t=ic(Jm,c);e=new _a({name:c,logLevel:t}),jm(rc,c,e)}return e}import{MINT_SIZE as ed,TOKEN_PROGRAM_ID as td,getTransferFeeConfig as nd,unpackMint as od}from"@solana/spl-token";var Va=ke("Raydium_accountInfo_util");async function wt(c,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:r=100}=N({batchRequest:!1},t),i=Ea(e,r),a=new Array(i.length).fill([]);if(n){let s=i.map(d=>{let p=c._buildArgs([d.map(m=>m.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:p}}),u=Ea(s,10);a=(await(await Promise.all(u.map(async d=>await c._rpcBatchRequest(d)))).flat()).map(d=>(d.error&&Va.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${d.error.message}`),d.result.value.map(p=>{if(p){let{data:m,executable:f,lamports:y,owner:b,rentEpoch:g}=p;return m.length!==2&&m[1]!=="base64"&&Va.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(m[0],"base64"),executable:f,lamports:y,owner:new ac(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(i.map(s=>c.getMultipleAccountsInfo(s,o)))}catch(s){s instanceof Error&&Va.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${s.message}`)}return a.flat()}async function Ne(c,e,t){let n=await wt(c,e.map(o=>o.pubkey),t);return e.map((o,r)=>E(N({},o),{accountInfo:n[r]}))}async function fo({connection:c,mints:e,config:t}){var r,i,a;if(e.length===0)return{};let n=await Ne(c,e.map(s=>({pubkey:Ot(s)})),t),o={};for(let s of n){if(!s.accountInfo||s.accountInfo.data.length<ed){console.log("invalid mint account",s.pubkey.toBase58());continue}let u=od(s.pubkey,s.accountInfo,(r=s.accountInfo)==null?void 0:r.owner);o[s.pubkey.toString()]=E(N({},u),{programId:((i=s.accountInfo)==null?void 0:i.owner)||td,feeConfig:(a=nd(u))!=null?a:void 0})}return o[ac.default.toBase58()]=o[J.toBase58()],o}import Yn from"bn.js";import wg from"decimal.js";import md from"big.js";import hr from"bn.js";import id from"toformat";var rd=id,yi=rd;import Tr from"big.js";import sd from"bn.js";import ud from"decimal.js-light";import bi from"bn.js";var sc=9007199254740991;function le(c){let e=ke("Raydium_parseBigNumberish");if(c instanceof bi)return c;if(typeof c=="string"){if(c.match(/^-?[0-9]+$/))return new bi(c);e.logWithError(`invalid BigNumberish string: ${c}`)}return typeof c=="number"?(c%1&&e.logWithError(`BigNumberish number underflow: ${c}`),(c>=sc||c<=-sc)&&e.logWithError(`BigNumberish number overflow: ${c}`),new bi(String(c))):typeof c=="bigint"?new bi(c.toString()):(e.error(`invalid BigNumberish value: ${c}`),new bi(0))}var kr=ke("module/fraction"),Da=yi(Tr),gi=yi(ud),cd={[0]:gi.ROUND_DOWN,[1]:gi.ROUND_HALF_UP,[2]:gi.ROUND_UP},ld={[0]:Tr.roundDown,[1]:Tr.roundHalfUp,[2]:Tr.roundUp},Re=class{constructor(e,t=new sd(1)){this.numerator=le(e),this.denominator=le(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Re(this.denominator,this.numerator)}add(e){let t=e instanceof Re?e:new Re(le(e));return this.denominator.eq(t.denominator)?new Re(this.numerator.add(t.numerator),this.denominator):new Re(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Re?e:new Re(le(e));return this.denominator.eq(t.denominator)?new Re(this.numerator.sub(t.numerator),this.denominator):new Re(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Re?e:new Re(le(e));return new Re(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Re?e:new Re(le(e));return new Re(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||kr.logWithError(`${e} is not an integer.`),e<=0&&kr.logWithError(`${e} is not positive.`),gi.set({precision:e+1,rounding:cd[n]});let o=new gi(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)||kr.logWithError(`${e} is not an integer.`),e<0&&kr.logWithError(`${e} is negative.`),Da.DP=e,Da.RM=ld[n]||1,new Da(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var dd=ke("Raydium_amount"),uc=yi(md);function pd(c,e){let t="0",n="0";if(c.includes(".")){let o=c.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):dd.logWithError(`invalid number string, num: ${c}`)}else t=c;return[t,n.slice(0,e)||n]}var Le=class extends Re{constructor(t,n,o=!0,r){let i=new hr(0),a=Wa.pow(new hr(t.decimals));if(o)i=le(n);else{let s=new hr(0),u=new hr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,d]=pd(n.toString(),t.decimals);s=le(l),u=le(d)}s=s.mul(a),i=s.add(u)}super(i,a);this.logger=ke(r||"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 Le(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Le(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 uc.DP=this.token.decimals,new uc(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as fd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as cc}from"@solana/spl-token";var xn={chainId:101,address:fd.default.toBase58(),programId:cc.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},kt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:cc.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 za}from"@solana/web3.js";import{PublicKey as je,SystemProgram as lc,SYSVAR_RENT_PUBKEY as yd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as bd}from"@solana/spl-token";function T({pubkey:c,isSigner:e=!1,isWritable:t=!0}){return{pubkey:c,isWritable:t,isSigner:e}}var qa=[T({pubkey:bd,isWritable:!1}),T({pubkey:lc.programId,isWritable:!1}),T({pubkey:yd,isWritable:!1})];function Ua({publicKey:c,transformSol:e}){let t=Ga(c.toString());if(t instanceof je)return e&&t.equals(Tt)?J:t;if(e&&t.toString()===Tt.toBase58())return J;if(typeof t=="string"){if(t===je.default.toBase58())return je.default;try{return new je(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Ga(c){try{return new je(c)}catch{return c}}var en=new je("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),yt=new je("SysvarRent111111111111111111111111111111111"),Sb=new je("SysvarC1ock11111111111111111111111111111111"),pn=new je("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Br=new je("Sysvar1nstructions1111111111111111111111111"),mc=lc.programId,Kb=new je("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Cb=new je("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Rb=new je("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Lb=new je("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Ob=new je("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Nb=new je("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Mb=new je("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Fb=new je("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),vb=new je("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),_b=new je("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Vb=new je("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),J=new je("So11111111111111111111111111111111111111112"),Tt=je.default;function Ot(c){return Ua({publicKey:c,transformSol:!0})}var Xa=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:r=!1,isToken2022:i=!1}){if(e===Tt.toBase58()||e instanceof za&&Tt.equals(e)){this.decimals=kt.decimals,this.symbol=kt.symbol,this.name=kt.name,this.mint=new za(kt.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=r?za.default:Ua({publicKey:e}),this.isToken2022=i}equals(e){return this===e?!0:this.mint.equals(e.mint)}},He=Xa;He.WSOL=new Xa(E(N({},kt),{mint:kt.address}));var Ya=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Ir=Ya;Ir.SOL=new Ya(xn);import gd from"bn.js";var dc=new Re(new gd(100)),ht=class extends Re{toSignificant(e=5,t,n){return this.mul(dc).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(dc).toFixed(e,t,n)}};var Pd=ke("Raydium_price"),Dt=class extends Re{constructor(t){let{baseToken:n,quoteToken:o,numerator:r,denominator:i}=t;super(r,i);this.baseToken=n,this.quoteToken=o,this.scalar=new Re(Ha(n.decimals),Ha(o.decimals))}get raw(){return new Re(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Dt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Pd.logWithError("mul token not equals");let n=super.mul(t);return new Dt({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)}};var Rg=new Yn(2),Lg=new Yn(3),Og=new Yn(5),Wa=new Yn(10),Ng=new Yn(100),Mg=new Yn(1e3),Fg=new Yn(1e4);function Ha(c){return Wa.pow(le(c))}function xr(c,e){let t=c.divmod(e);return t.mod.isZero()?t.div:c.isNeg()===e.isNeg()?t.div.iaddn(1):t.div}function Pi(c,e,t){return c.mul(e).add(t).sub(new Yn(1)).div(t)}function Sr(c,e,t){return c.mul(e).div(t)}var pc=c=>typeof c=="number",Ad=c=>c?new Date(c):new Date,Kr=c=>Ad(c).getTime();function fc(c,e,t){let n=pc(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):Kr(e);return Kr(c)<=n}function yc(c,e,t){let n=pc(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):Kr(e);return Kr(c)>n}function Ea(c,e=1,t=[]){let n=[...c];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var fn=class{constructor(e){this._owner=e}get publicKey(){return fn.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return fn.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return fn.isKeyPair(this._owner)}get isPublicKey(){return fn.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!fn.isKeyPair(e)}};import{PublicKey as Id}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as xd}from"@solana/spl-token";import{ComputeBudgetProgram as bc,Keypair as Pc,PublicKey as wd,Transaction as Ac,TransactionMessage as kd,VersionedTransaction as wc}from"@solana/web3.js";var Y={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{TOKEN_PROGRAM_ID as Td}from"@solana/spl-token";var gc=ke("Raydium_txUtil"),kc=1644;function Cr(c){let e=[],t=[];return c.microLamports&&(e.push(bc.setComputeUnitPrice({microLamports:c.microLamports})),t.push(Y.SetComputeUnitPrice)),c.units&&(e.push(bc.setComputeUnitLimit({units:c.units})),t.push(Y.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function No(c,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=c.getLatestBlockhash)==null?void 0:n.call(c,{commitment:t})))==null?void 0:o.blockhash}async function Rr(c,e){return c.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);c.onSignature(e,r=>{if(clearTimeout(o),!r.err){t("");return}n(Object.assign(r.err,{txId:e}))},"confirmed")})}function Qa(c,e){c.length<1&&gc.logWithError(`no instructions provided: ${c.toString()}`),e.length<1&&gc.logWithError(`no signers provided:, ${e.toString()}`);let t=new Ac;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...c);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<kc}catch{return!1}}function oe(c,e){let[t,n]=wd.findProgramAddressSync(c,e);return{publicKey:t,nonce:n}}function Ai({instructions:c,payer:e,signers:t}){return Qa(c,[e,...t])}function wi({instructions:c,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Pc.generate().publicKey.toString()}){let r=new kd({payerKey:e,recentBlockhash:n,instructions:c}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new wc(r).serialize()).toString("base64").length<kc}catch{return!1}}var hd=c=>Buffer.isBuffer(c)?c:c instanceof Uint8Array?Buffer.from(c.buffer,c.byteOffset,c.byteLength):Buffer.from(c),Bd=c=>{let e=c.serialize({requireAllSignatures:!1,verifySignatures:!1});c instanceof wc&&(e=hd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function yo(c){let e=[];return c.forEach(t=>{t instanceof Ac&&(t.recentBlockhash||(t.recentBlockhash=Td.toBase58()),t.feePayer||(t.feePayer=Pc.generate().publicKey)),e.push(Bd(t))}),console.log("simulate tx string:",e),e}function te(c,e,t){return oe([c.toBuffer(),(t!=null?t:xd).toBuffer(),e.toBuffer()],new Id("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as me}from"@solana/web3.js";var Za=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),$a=new me("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),ja=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Mo=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Sd=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Ja=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Lr=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ki=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Kd=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Or=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Sn=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Fo=new me("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Ti=new me("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),Hn=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Cd=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),es=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Vn=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ts=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Rd=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),vo=new me("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),hi=new me("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),Ve=new me("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Ld=new me("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),nP=new me("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),oP=new me("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Od=new me("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Nd=new me("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),Wt={AMM_V4:ki,AMM_STABLE:Kd,CLMM_PROGRAM_ID:Sn,CLMM_LOCK_PROGRAM_ID:Fo,CLMM_LOCK_AUTH_ID:Ti,FARM_PROGRAM_ID_V3:Za,FARM_PROGRAM_ID_V4:$a,FARM_PROGRAM_ID_V5:ja,FARM_PROGRAM_ID_V6:Mo,OPEN_BOOK_PROGRAM:Ja,SERUM_PROGRAM_ID_V3:Lr,UTIL1216:Sd,Router:Cd,CREATE_CPMM_POOL_PROGRAM:Vn,CREATE_CPMM_POOL_AUTH:ts,CREATE_CPMM_POOL_FEE_ACC:Rd,LOCK_CPMM_PROGRAM:vo,LOCK_CPMM_AUTH:hi,LAUNCHPAD_PROGRAM:Ve,LAUNCHPAD_AUTH:Ld,LAUNCHPAD_PLATFORM:Od,LAUNCHPAD_CONFIG:Nd,FEE_DESTINATION_ID:es,MODEL_DATA_PUBKEY:Hn},yn={OPEN_BOOK_PROGRAM:new me("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new me("Ray1111111111111111111111111111111111111111"),AMM_V4:new me("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new me("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new me("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new me("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new me("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new me("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new me("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new me("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new me("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new me("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:me.default,Router:new me("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new me("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new me("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new me("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new me("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new me("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new me("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new me("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new me("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new me("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new me("Ray1111111111111111111111111111111111111111")};import qe from"bn.js";var Kn=1e4;function bt(c,e,t,n){if(e===void 0)return{amount:c,fee:void 0,expirationTime:void 0};let o=E(N({},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}}),r=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,i=new qe(r.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===Kn){let s=new qe(r.maximumFee.toString());return{amount:c.add(s),fee:s,expirationTime:a}}else{let s=Qn(c.mul(new qe(Kn)),new qe(Kn-r.transferFeeBasisPoints)),u=new qe(r.maximumFee.toString()),l=s.sub(c).gt(u)?c.add(u):s,d=Qn(l.mul(new qe(r.transferFeeBasisPoints)),new qe(Kn)),p=d.gt(i)?i:d;return{amount:l,fee:p,expirationTime:a}}else{let s=Qn(c.mul(new qe(r.transferFeeBasisPoints)),new qe(Kn)),u=s.gt(i)?i:s;return{amount:c,fee:u,expirationTime:a}}}function En(c,e){return c===void 0?e:e===void 0?c:Math.min(c,e)}function Qn(c,e){let{div:t,mod:n}=c.divmod(e);return n.gt(new qe(0))?t.add(new qe(1)):t}function bo(c,e){if(c.isZero())return new qe(0);let t=c.div(e);return t.isZero()?new qe(1):c.mod(e).gt(new qe(0))?t.add(new qe(1)):t}function Bi(c,e,t){if(e===void 0)return{amount:c,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new qe(o.maximumFee.toString()),i=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Qn(c.mul(new qe(o.transferFeeBasisPoints)),new qe(Kn)),s=a.gt(r)?r:a;return{amount:c,fee:s,expirationTime:i}}function _o(c,e,t){if(e===void 0)return{amount:c,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new qe(o.maximumFee.toString()),i=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===Kn){let a=new qe(o.maximumFee.toString());return{amount:c.add(a),fee:a,expirationTime:i}}else{let a=Qn(c.mul(new qe(Kn)),new qe(Kn-o.transferFeeBasisPoints)),s=new qe(o.maximumFee.toString()),u=a.sub(c).gt(s)?c.add(s):a,l=Qn(u.mul(new qe(o.transferFeeBasisPoints)),new qe(Kn)),d=l.gt(r)?r:l;return{amount:u,fee:d,expirationTime:i}}}import{PublicKey as ns,AddressLookupTableAccount as Do}from"@solana/web3.js";async function os({connection:c,address:e,cluster:t="mainnet"}){let n=await wt(c,[...new Set(e.map(r=>r.toString()))].map(r=>new ns(r))),o={};for(let r=0;r<e.length;r++){let i=n[r],a=e[r];if(!i)continue;let s=new Do({key:a,state:Do.deserialize(i.data)});o[a.toString()]=s,t==="devnet"?Eo[a.toString()]=s:Vo[a.toString()]=s}return o}var Vo={},is=async c=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Vo[e])return Vo;let t=new ns(e),n=await c.getAccountInfo(t);return n&&(Vo[e]=new Do({key:t,state:Do.deserialize(n.data)})),Vo},Eo={},rs=async c=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Eo[e])return Eo;let t=new ns(e),n=await c.getAccountInfo(t);return n&&(Eo[e]=new Do({key:t,state:Do.deserialize(n.data)})),Eo};import{PublicKey as Wo,sendAndConfirmTransaction as as,SystemProgram as Md,Transaction as Ii,TransactionMessage as xi,VersionedTransaction as Si}from"@solana/web3.js";import Fd from"axios";var Nr=2e3,Mr=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 Fd.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}=Cr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(Md.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Wo(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(Y.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:r=[],lookupTableAddress:i=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...i.filter(a=>a!==Wo.default.toString())),this}async versionBuild({txVersion:e,extInfo:t,lookupTableAddress:n}){return e===0?await this.buildV0(E(N({},t||{}),{lookupTableAddress:n})):this.build(t)}build(e){var n;let t=new Ii;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 l;let{recentBlockHash:r,skipPreflight:i=!0,sendAndConfirm:a,notSendToRpc:s}=o||{},u=r!=null?r:await No(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),yo([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await as(this.connection,t,this.signers.find(p=>p.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:i}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:i}),signedTx:t};if(this.signAllTransactions){let d=await this.signAllTransactions([t]);if(this.signers.length)for(let p of d)try{p.sign(...this.signers)}catch{}return{txId:s?"":await this.connection.sendRawTransaction(d[0].serialize(),{skipPreflight:i}),signedTx:d[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),i=[o,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],s=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:i,signers:a,instructionTypes:s,execute:async l=>{var g;let{sequentially:d,onTxUpdate:p,skipTxCount:m=0,recentBlockHash:f,skipPreflight:y=!0}=l||{},b=f!=null?f:await No(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(d){let P=[],w=0;for(let B of i){if(++w,w<=m)continue;let A=await as(this.connection,B,this.signers.find(h=>h.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});P.push(A)}return{txIds:P,signedTxs:i}}return{txIds:await await Promise.all(i.map(async P=>(P.recentBlockhash=b,await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:y})))),signedTxs:i}}if(this.signAllTransactions){let P=i.map((B,A)=>(B.recentBlockhash=b,a[A].length&&B.sign(...a[A]),B));yo(P);let w=await this.signAllTransactions(P);if(d){let B=0,A=[],h=async()=>{if(!w[B])return;let x=await this.connection.sendRawTransaction(w[B].serialize(),{skipPreflight:y});A.push({txId:x,status:"sent",signedTx:w[B]}),p==null||p([...A]),B++;let S=!1,K=null,I=null,C=R=>{K!==null&&clearInterval(K),I!==null&&this.connection.removeSignatureListener(I);let O=A.findIndex(L=>L.txId===x);if(O>-1){if(A[O].status==="error"||A[O].status==="success")return;A[O].status=R.err?"error":"success"}p==null||p([...A]),R.err||h()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var R;if(S){clearInterval(K);return}try{let O=await this.connection.getTransaction(x,{commitment:"confirmed",maxSupportedTransactionVersion:1});O&&(S=!0,clearInterval(K),C({err:((R=O.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",x))}catch(O){S=!0,clearInterval(K),console.error("getTransaction timeout:",O,x)}},Nr)),I=this.connection.onSignature(x,R=>{if(S){this.connection.removeSignatureListener(I);return}S=!0,C(R)},"confirmed"),this.connection.getSignatureStatus(x)};return await h(),{txIds:A.map(x=>x.txId),signedTxs:w}}else{let B=[];for(let A=0;A<w.length;A+=1){let h=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:y});B.push(h)}return{txIds:B,signedTxs:w}}}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 y;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:r}=f,i=Ye(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=N(N({},this.cluster==="devnet"?await rs(this.connection):await is(this.connection)),t),s=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of s)a[b]===void 0&&u.push(new Wo(b));let l=await os({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let d=o?Wo.default.toBase58():r!=null?r:await No(this.connection,this.blockhashCommitment),p=new xi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((y=this.owner)==null?void 0:y.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new Si(p);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var B;let{skipPreflight:g=!0,sendAndConfirm:P,notSendToRpc:w}=b||{};if(yo([m]),(B=this.owner)!=null&&B.isKeyPair){let A=await this.connection.sendTransaction(m,{skipPreflight:g});return P&&await Rr(this.connection,A),{txId:A,signedTx:m}}if(this.signAllTransactions){let A=await this.signAllTransactions([m]);if(this.signers.length)for(let h of A)try{h.sign(this.signers)}catch{}return{txId:w?"":await this.connection.sendTransaction(A[0],{skipPreflight:g}),signedTx:A[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),i=[o,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],s=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),i.forEach(async(l,d)=>{l.sign(a[d])}),{builder:this,transactions:i,signers:a,instructionTypes:s,buildProps:n,execute:async l=>{var y;let{sequentially:d,onTxUpdate:p,recentBlockHash:m,skipPreflight:f=!0}=l||{};if(m&&i.forEach(b=>b.message.recentBlockhash=m),yo(i),(y=this.owner)!=null&&y.isKeyPair){if(d){let b=[];for(let g of i){let P=await this.connection.sendTransaction(g,{skipPreflight:f});await Rr(this.connection,P),b.push(P)}return{txIds:b,signedTxs:i}}return{txIds:await Promise.all(i.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:f}))),signedTxs:i}}if(this.signAllTransactions){let b=await this.signAllTransactions(i);if(d){let g=0,P=[],w=async()=>{if(!b[g])return;let B=await this.connection.sendTransaction(b[g],{skipPreflight:f});P.push({txId:B,status:"sent",signedTx:b[g]}),p==null||p([...P]),g++;let A=!1,h=null,x=null,S=K=>{h!==null&&clearInterval(h),x!==null&&this.connection.removeSignatureListener(x);let I=P.findIndex(C=>C.txId===B);if(I>-1){if(P[I].status==="error"||P[I].status==="success")return;P[I].status=K.err?"error":"success"}p==null||p([...P]),K.err||w()};this.loopMultiTxStatus&&(h=setInterval(async()=>{var K;if(A){clearInterval(h);return}try{let I=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:1});I&&(A=!0,clearInterval(h),S({err:((K=I.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",B))}catch(I){A=!0,clearInterval(h),console.error("getTransaction timeout:",I,B)}},Nr)),x=this.connection.onSignature(B,K=>{if(A){this.connection.removeSignatureListener(x);return}A=!0,S(K)},"confirmed"),this.connection.getSignatureStatus(B)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let P=0;P<b.length;P+=1){let w=await this.connection.sendTransaction(b[P],{skipPreflight:f});g.push(w)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var p;let d=e||{},{splitIns:t=[],computeBudgetConfig:n}=d,o=Ye(d,["splitIns","computeBudgetConfig"]),r=n?Cr(n):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,f)=>E(N({},m),{[f.publicKey.toBase58()]:f}),{}),a=[],s=[],u=[],l=0;if(this.allInstructions.forEach(m=>{let f=[...u,m],y=n?[...r.instructions,...f]:f,g=[...new Set(f.map(P=>P.keys.filter(w=>w.isSigner).map(w=>w.pubkey.toString())).flat()).values()].map(P=>new Wo(P));if(m!==t[l]&&u.length<12&&(Ai({instructions:y,payer:this.feePayer,signers:g})||Ai({instructions:f,payer:this.feePayer,signers:g})))u.push(m);else{if(u.length===0)throw Error("item ins too big");l+=m===t[l]?1:0,Ai({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new Ii().add(...r.instructions,...u)):a.push(new Ii().add(...u)),s.push(Array.from(new Set(u.map(P=>P.keys.filter(w=>w.isSigner).map(w=>w.pubkey.toString())).flat())).map(P=>i[P]).filter(P=>P!==void 0)),u=[m]}}),u.length>0){let f=[...new Set(u.map(y=>y.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(y=>i[y]).filter(y=>y!==void 0);Ai({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new Ii().add(...r.instructions,...u)):a.push(new Ii().add(...u)),s.push(f)}return a.forEach(m=>m.feePayer=this.feePayer),(p=this.owner)!=null&&p.signer&&s.forEach(m=>{m.some(f=>f.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:f,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:g,skipPreflight:P=!0}=m||{},w=g!=null?g:await No(this.connection,this.blockhashCommitment);if(a.forEach(async(A,h)=>{A.recentBlockhash=w,s[h].length&&A.sign(...s[h])}),yo(a),(B=this.owner)!=null&&B.isKeyPair){if(f){let A=0,h=[];for(let x of a){if(++A,A<=b){h.push("tx skipped");continue}let S=await as(this.connection,x,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:P});h.push(S)}return{txIds:h,signedTxs:a}}return{txIds:await Promise.all(a.map(async A=>await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:P}))),signedTxs:a}}if(this.signAllTransactions){let A=await this.signAllTransactions(a.slice(b,a.length)),h=[...a.slice(0,b),...A];if(f){let x=0,S=[],K=async()=>{if(!h[x])return;x<b&&(S.push({txId:"",status:"success",signedTx:h[x]}),y==null||y([...S]),x++,K());let I=await this.connection.sendRawTransaction(h[x].serialize(),{skipPreflight:P});S.push({txId:I,status:"sent",signedTx:h[x]}),y==null||y([...S]),x++;let C=!1,R=null,O=null,L=M=>{R!==null&&clearInterval(R),O!==null&&this.connection.removeSignatureListener(O);let W=S.findIndex(D=>D.txId===I);if(W>-1){if(S[W].status==="error"||S[W].status==="success")return;S[W].status=M.err?"error":"success"}y==null||y([...S]),M.err||K()};this.loopMultiTxStatus&&(R=setInterval(async()=>{var M;if(C){clearInterval(R);return}try{let W=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:1});W&&(C=!0,clearInterval(R),L({err:((M=W.meta)==null?void 0:M.err)||null}),console.log("tx status from getTransaction:",I))}catch(W){C=!0,clearInterval(R),console.error("getTransaction timeout:",W,I)}},Nr)),O=this.connection.onSignature(I,M=>{if(C){this.connection.removeSignatureListener(O);return}C=!0,L(M)},"confirmed"),this.connection.getSignatureStatus(I)};return await K(),{txIds:S.map(I=>I.txId),signedTxs:h}}else{let x=[];for(let S=0;S<h.length;S+=1){let K=await this.connection.sendRawTransaction(h[S].serialize(),{skipPreflight:P});x.push(K)}return{txIds:x,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var B;let w=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:r=[],insCountLimit:i=12}=w,a=Ye(w,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress","insCountLimit"]),s=N(N({},this.cluster==="devnet"?await rs(this.connection):await is(this.connection)),o),u=Array.from(new Set([...this.lookupTableAddress,...r])),l=[];for(let A of u)s[A]===void 0&&l.push(new Wo(A));let d=await os({connection:this.connection,address:l});for(let[A,h]of Object.entries(d))s[A]=h;let p=t?Cr(t):{instructions:[],instructionTypes:[]},m=await No(this.connection,this.blockhashCommitment),f=this.signers.reduce((A,h)=>E(N({},A),{[h.publicKey.toBase58()]:h}),{}),y=[],b=[],g=[],P=0;if(this.allInstructions.forEach(A=>{let h=[...g,A],x=t?[...p.instructions,...h]:h;if(A!==n[P]&&g.length<i&&(wi({instructions:x,payer:this.feePayer,lookupTableAddressAccount:s})||wi({instructions:h,payer:this.feePayer,lookupTableAddressAccount:s})))g.push(A);else{if(g.length===0)throw Error("item ins too big");P+=A===n[P]?1:0;let S={};for(let K of[...new Set(u)])s[K]!==void 0&&(S[K]=s[K]);if(t&&wi({instructions:[...p.instructions,...g],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let K=new xi({payerKey:this.feePayer,recentBlockhash:m,instructions:[...p.instructions,...g]}).compileToV0Message(Object.values(s));y.push(new Si(K))}else{let K=new xi({payerKey:this.feePayer,recentBlockhash:m,instructions:[...g]}).compileToV0Message(Object.values(s));y.push(new Si(K))}b.push(Array.from(new Set(g.map(K=>K.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(K=>f[K]).filter(K=>K!==void 0)),g=[A]}}),g.length>0){let h=[...new Set(g.map(x=>x.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat()).values()].map(x=>f[x]).filter(x=>x!==void 0);if(t&&wi({instructions:[...p.instructions,...g],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let x=new xi({payerKey:this.feePayer,recentBlockhash:m,instructions:[...p.instructions,...g]}).compileToV0Message(Object.values(s));y.push(new Si(x))}else{let x=new xi({payerKey:this.feePayer,recentBlockhash:m,instructions:[...g]}).compileToV0Message(Object.values(s));y.push(new Si(x))}b.push(h)}return(B=this.owner)!=null&&B.signer&&b.forEach(A=>{A.some(h=>h.publicKey.equals(this.owner.publicKey))||A.push(this.owner.signer)}),y.forEach((A,h)=>{A.sign(b[h])}),{builder:this,transactions:y,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async A=>{var C;let{sequentially:h,onTxUpdate:x,skipTxCount:S=0,recentBlockHash:K,skipPreflight:I=!0}=A||{};if(y.map(async(R,O)=>{b[O].length&&R.sign(b[O]),K&&(R.message.recentBlockhash=K)}),yo(y),(C=this.owner)!=null&&C.isKeyPair){if(h){let R=0,O=[];for(let L of y){if(++R,R<=S){console.log("skip tx: ",R),O.push("tx skipped");continue}let M=await this.connection.sendTransaction(L,{skipPreflight:I});await Rr(this.connection,M),O.push(M)}return{txIds:O,signedTxs:y}}return{txIds:await Promise.all(y.map(async R=>await this.connection.sendTransaction(R,{skipPreflight:I}))),signedTxs:y}}if(this.signAllTransactions){let R=await this.signAllTransactions(y.slice(S,y.length)),O=[...y.slice(0,S),...R];if(h){let L=0,M=[],W=async()=>{if(!O[L])return;if(L<S){M.push({txId:"",status:"success",signedTx:O[L]}),x==null||x([...M]),L++,W();return}let D=await this.connection.sendTransaction(O[L],{skipPreflight:I});M.push({txId:D,status:"sent",signedTx:O[L]}),x==null||x([...M]),L++;let X=!1,Z=null,H=null,ne=re=>{Z!==null&&clearInterval(Z),H!==null&&this.connection.removeSignatureListener(H);let j=M.findIndex(pe=>pe.txId===D);if(j>-1){if(M[j].status==="error"||M[j].status==="success")return;M[j].status=re.err?"error":"success"}x==null||x([...M]),re.err||W()};this.loopMultiTxStatus&&(Z=setInterval(async()=>{var re;if(X){clearInterval(Z);return}try{let j=await this.connection.getTransaction(D,{commitment:"confirmed",maxSupportedTransactionVersion:1});j&&(X=!0,clearInterval(Z),ne({err:((re=j.meta)==null?void 0:re.err)||null}),console.log("tx status from getTransaction:",D))}catch(j){X=!0,clearInterval(Z),console.error("getTransaction timeout:",j,D)}},Nr)),H=this.connection.onSignature(D,re=>{if(X){this.connection.removeSignatureListener(H);return}X=!0,ne(re)},"confirmed"),this.connection.getSignatureStatus(D)};return W(),{txIds:[],signedTxs:O}}else{let L=[];for(let M=0;M<O.length;M+=1){let W=await this.connection.sendTransaction(O[M],{skipPreflight:I});L.push(W)}return{txIds:L,signedTxs:O}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:a||{}}}};import{PublicKey as vd}from"@solana/web3.js";import _d from"bn.js";function Vd(c){return typeof c=="object"&&c!==null&&![He,Le,vd,Re,_d,Dt,ht].some(e=>typeof e=="object"&&c instanceof e)}function Je(c){return typeof c=="string"?Ga(c):Array.isArray(c)?c.map(e=>Je(e)):Vd(c)?Object.fromEntries(Object.entries(c).map(([e,t])=>[e,Je(t)])):c}import Ed from"bn.js";var Qe=new Ed(1e6);var et={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"},Tc=E(N({},et),{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 hc="ray_tab_hash",ss="ray_req_hash",Dd=()=>{if(typeof window===void 0)return"";let c=sessionStorage.getItem(hc);return c||(c=`ray-${Date.now()}`,sessionStorage.setItem(hc,c)),c},Fr=async n=>{var o=n,{logCount:c=1e3,removeLastLog:e}=o,t=Ye(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(i=>i());let r=JSON.parse(localStorage.getItem(ss)||"[]").slice(0,c-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(E(N({},t),{time:Date.now(),session:Dd()}));try{localStorage.setItem(ss,JSON.stringify(r))}catch{if(e){let i=!1,a=JSON.stringify(t.data).substring(0,100);for(r[0].data=a+(a.length>100?"...":"");!i;){r.pop();let s=JSON.stringify(t.data).substring(0,100);r[0].data=s+(s.length>100?"...":"");try{localStorage.setItem(ss,JSON.stringify(r)),i=!0}catch{i=!1}}return new Promise(s=>s())}return Fr(E(N({},t),{logCount:c,removeLastLog:!0}))}};var vr=ke("Raydium_Api"),us=new Map,cs=new Map;var _r=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=o||1e3,this.api=Bc.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?Tc.BASE_HOST:et.BASE_HOST),timeout:t}),this.api.interceptors.request.use(i=>{let{method:a,baseURL:s,url:u}=i;return vr.debug(`${a==null?void 0:a.toUpperCase()} ${s}${u}`),i},i=>(vr.error("Request failed"),Promise.reject(i))),this.api.interceptors.response.use(i=>{let{config:a,data:s,status:u}=i,{method:l,baseURL:d,url:p}=a;return n&&Fr({status:u,url:`${d}${p}`,params:a.params,data:s,logCount:this.logCount}),vr.debug(`${l==null?void 0:l.toUpperCase()} ${d}${p} ${u}`),s},i=>{let{config:a,response:s={}}=i,{status:u}=s,{method:l,baseURL:d,url:p}=a;return n&&Fr({status:u,url:`${d}${p}`,params:a.params,data:i.message,logCount:this.logCount}),vr.error(`${l.toUpperCase()} ${d}${p} ${u||i.message}`),Promise.reject(i)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||et.CLMM_CONFIG)).data}async getClmmDynamicConfigs(){return(await this.api.get(this.urlConfigs.CLMM_DYNAMIC_CONFIG||et.CLMM_DYNAMIC_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||et.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_POSITION_LINE||et.POOL_POSITION_LINE}?id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Bc.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,r)=>o+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||et.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||et.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||et.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||et.JUP_TOKEN_LIST})).map(t=>E(N({},t),{chainId:101,programId:t.tokenProgram,address:t.id,logoURI:t.icon,extensions:{},freeze_authority:null,permanent_delegate:null,mint_authority:t.mintAuthority||null,minted_at:Date.now().toString()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||et.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",showFarms:r=!1,nextPageId:i,pageSize:a=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||et.POOL_LIST)+`?size=${a}&hasReward=${r}${t&&t!=="all"?`&poolType=${t}`:""}${n?`&sortField=${n}`:""}${o?`&sortType=${o}`:""}${i?`&nextPageId=${i}`:""}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||et.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(i=>us.has(i)?(n.push(us.get(i)),!1):!0),r=[];return o.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||et.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),r.forEach(a=>{us.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:r,order:i="desc",nextPageId:a}=e,[s,u]=[t&&Ot(t).toBase58(),n&&n!=="undefined"?Ot(n).toBase58():""],[l,d]=u&&s>u?[u,s]:[s,u];if(!s&&!u)throw new Error("not search mints provided");return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||et.POOL_SEARCH_MINT)+`?size=100&mint1=${l}${d?`&mint2=${d}`:""}${o&&o!=="all"?`&poolType=${o}`:""}${r?`&sortField=${r}`:""}${i?`&sortType=${i}`:""}${a?`&nextPageId=${a}`:""}`)).data}async fetchPoolByLpMints(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_LP||et.POOL_SEARCH_LP)+`?lps=${t}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||et.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||et.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||et.CHECK_AVAILABILITY)).data}async fetchLaunchConfigs(){var t;if((t=cs.get(this.cluster))!=null&&t.length)return cs.get(this.cluster);let e=await this.api.get(this.cluster==="devnet"?"https://launch-mint-v1-devnet.raydium.io/main/configs":"https://launch-mint-v1.raydium.io/main/configs");return cs.set(this.cluster,e.data.data),e.data.data}async fetchFarmPositions(e=""){return(await this.api.get(`${this.urlConfigs.OWNER_BASE_HOST||et.OWNER_BASE_HOST}`+(this.urlConfigs.OWNER_STAKE_FARMS||et.OWNER_STAKE_FARMS).replace("{owner}",e))).data}async fetchCpmmLockInfo(e){return await this.api.get(`${this.urlConfigs.CPMM_LOCK||et.CPMM_LOCK}?id=${e.toString()}`)}};var Vr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Ic="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Gr,SystemProgram as bp}from"@solana/web3.js";import{AccountLayout as Go,createAssociatedTokenAccountIdempotentInstruction as ks,TOKEN_PROGRAM_ID as Jn,TOKEN_2022_PROGRAM_ID as gp}from"@solana/spl-token";var ls=(...c)=>c.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),tt=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ke(t)}createTxBuilder(e){return this.scope.checkOwner(),new Mr({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(ls(e))}logInfo(...e){this.logger.info(ls(e))}logAndCreateError(...e){let t=ls(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as lp,SystemProgram as mp}from"@solana/web3.js";import dp from"bn.js";import{createCloseAccountInstruction as pp,createInitializeAccountInstruction as fp,createTransferInstruction as yp,TOKEN_PROGRAM_ID as Uo}from"@solana/spl-token";import{Keypair as ap,PublicKey as Vc}from"@solana/web3.js";import sp from"bn.js";import{TOKEN_PROGRAM_ID as up}from"@solana/spl-token";function Wd(c){return c instanceof Uint8Array||c!=null&&typeof c=="object"&&c.constructor.name==="Uint8Array"}function ms(c,...e){if(!Wd(c))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(c.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${c.length}`)}function ds(c,e=!0){if(c.destroyed)throw new Error("Hash instance has been destroyed");if(e&&c.finished)throw new Error("Hash#digest() has already been called")}function xc(c,e){ms(c);let t=e.outputLen;if(c.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Dr=c=>new DataView(c.buffer,c.byteOffset,c.byteLength),bn=(c,e)=>c<<32-e|c>>>e;var vA=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function qd(c){if(typeof c!="string")throw new Error(`utf8ToBytes expected string, got ${typeof c}`);return new Uint8Array(new TextEncoder().encode(c))}function ps(c){return typeof c=="string"&&(c=qd(c)),ms(c),c}var Er=class{clone(){return this._cloneInto()}},_A={}.toString;function Sc(c){let e=n=>c().update(ps(n)).digest(),t=c();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>c(),e}function Ud(c,e,t,n){if(typeof c.setBigUint64=="function")return c.setBigUint64(e,t,n);let o=BigInt(32),r=BigInt(4294967295),i=Number(t>>o&r),a=Number(t&r),s=n?4:0,u=n?0:4;c.setUint32(e+s,i,n),c.setUint32(e+u,a,n)}var Kc=(c,e,t)=>c&e^~c&t,Cc=(c,e,t)=>c&e^c&t^e&t,Wr=class extends Er{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Dr(this.buffer)}update(e){ds(this);let{view:t,buffer:n,blockLen:o}=this;e=ps(e);let r=e.length;for(let i=0;i<r;){let a=Math.min(o-this.pos,r-i);if(a===o){let s=Dr(e);for(;o<=r-i;i+=o)this.process(s,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ds(this),xc(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:r}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>o-i&&(this.process(n,0),i=0);for(let d=i;d<o;d++)t[d]=0;Ud(n,o-8,BigInt(this.length*8),r),this.process(n,0);let a=Dr(e),s=this.outputLen;if(s%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=s/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<u;d++)a.setUint32(4*d,l[d],r)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:r,destroyed:i,pos:a}=this;return e.length=o,e.pos=a,e.finished=r,e.destroyed=i,o%t&&e.buffer.set(n),e}};var Gd=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Zn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),$n=new Uint32Array(64),fs=class extends Wr{constructor(){super(64,32,8,!1),this.A=Zn[0]|0,this.B=Zn[1]|0,this.C=Zn[2]|0,this.D=Zn[3]|0,this.E=Zn[4]|0,this.F=Zn[5]|0,this.G=Zn[6]|0,this.H=Zn[7]|0}get(){let{A:e,B:t,C:n,D:o,E:r,F:i,G:a,H:s}=this;return[e,t,n,o,r,i,a,s]}set(e,t,n,o,r,i,a,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=r|0,this.F=i|0,this.G=a|0,this.H=s|0}process(e,t){for(let d=0;d<16;d++,t+=4)$n[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let p=$n[d-15],m=$n[d-2],f=bn(p,7)^bn(p,18)^p>>>3,y=bn(m,17)^bn(m,19)^m>>>10;$n[d]=y+$n[d-7]+f+$n[d-16]|0}let{A:n,B:o,C:r,D:i,E:a,F:s,G:u,H:l}=this;for(let d=0;d<64;d++){let p=bn(a,6)^bn(a,11)^bn(a,25),m=l+p+Kc(a,s,u)+Gd[d]+$n[d]|0,y=(bn(n,2)^bn(n,13)^bn(n,22))+Cc(n,o,r)|0;l=u,u=s,s=a,a=i+m|0,i=r,r=o,o=n,n=m+y|0}n=n+this.A|0,o=o+this.B|0,r=r+this.C|0,i=i+this.D|0,a=a+this.E|0,s=s+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,r,i,a,s,u,l)}roundClean(){$n.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Rc=Sc(()=>new fs);import{PublicKey as np}from"@solana/web3.js";import Mc,{isBN as Fc}from"bn.js";import{bits as zd,BitStructure as XA,blob as Xd,Blob as YA,cstr as HA,f32 as QA,f32be as ZA,f64 as $A,f64be as jA,greedy as JA,Layout as Yd,ns64 as ew,ns64be as tw,nu64 as nw,nu64be as ow,offset as Hd,s16 as iw,s16be as rw,s24 as aw,s24be as sw,s32 as Qd,s32be as uw,s40 as cw,s40be as lw,s48 as mw,s48be as dw,s8 as pw,seq as Zd,struct as fw,Structure as $d,u16 as jd,u16be as yw,u24 as bw,u24be as gw,u32 as Jd,u32be as Pw,u40 as Aw,u40be as ww,u48 as kw,u48be as Tw,u8 as ep,UInt as tp,union as hw,Union as Bw,unionLayoutDiscriminator as Iw,utf8 as xw}from"@solana/buffer-layout";var qr=Yd,Lc=$d;var ys=tp;var Oc=ep,_e=jd;var Ki=Jd;var mt=Qd;var Nc=Zd;var we=Xd;var bs=zd,gs=Hd;var Po=class extends qr{constructor(t,n,o){super(t,o);this.blob=we(t),this.signed=n}decode(t,n=0){let o=new Mc(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 Mc(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Ur=class extends qr{constructor(t){super(8,t);this._lower=bs(Ki(),!1),this._upper=bs(Ki(),!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),r=this._upper.decode(t,n+this._lower.span);return N(N({},o),r)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function _(c){return new ys(1,c)}function Ue(c){return new ys(4,c)}function k(c){return new Po(8,!1,c)}function se(c){return new Po(16,!1,c)}function vc(c){return new Po(1,!0,c)}function qo(c){return new Po(8,!0,c)}function _c(c){return new Po(16,!0,c)}var Ao=class extends qr{constructor(t,n,o,r){super(t.span,r);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 F(c){return new Ao(we(32),e=>new np(e),e=>e.toBuffer(),c)}function Ze(c){return new Ao(Oc(),op,ip,c)}function op(c){if(c===0)return!1;if(c===1)return!0;throw new Error("Invalid bool: "+c)}function ip(c){return c?1:0}function As(c,e){let t=Ki("length"),n=v([t,$(c,gs(t,-t.span),"values")]);return new Ao(n,({values:o})=>o,o=>({values:o}),e)}function rp(c){let e=Ki("length"),t=v([e,we(gs(e,-e.span),"data")]);return new Ao(t,({data:n})=>n,n=>({data:n}),c)}function Nt(c){return new Ao(rp(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),c)}var Ps=class extends Lc{decode(e,t){return super.decode(e,t)}};function v(c,e,t){return new Ps(c,e,t)}function $(c,e,t){let n,o=typeof e=="number"?e:Fc(e)?e.toNumber():new Proxy(e,{get(r,i){if(!n){let a=Reflect.get(r,"count");n=Fc(a)?a.toNumber():a,Reflect.set(r,"count",n)}return Reflect.get(r,i)},set(r,i,a){return i==="count"&&(n=a),Reflect.set(r,i,a)}});return Nc(c,o,t)}var gn=v([F("mint"),F("owner"),k("amount"),Ue("delegateOption"),F("delegate"),_("state"),Ue("isNativeOption"),k("isNative"),k("delegatedAmount"),Ue("closeAuthorityOption"),F("closeAuthority")]);function Ec({owner:c,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:r,account:i}of t.value){let a=gn.decode(i.data),{mint:s,amount:u}=a;n.push({publicKey:r,mint:s,amount:u,isAssociated:te(c,s,i.owner).publicKey.equals(r),isNative:!1,programId:i.owner}),o.push({pubkey:r,accountInfo:a,programId:i.owner})}return e&&n.push({mint:Vc.default,amount:new sp(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function nt({fromPublicKey:c,programId:e=up,assignSeed:t}){let n=t?btoa(t).slice(0,32):ap.generate().publicKey.toBase58().slice(0,32);return{publicKey:cp(c,n,e),seed:n}}function cp(c,e,t){let n=Buffer.concat([c.toBuffer(),Buffer.from(e),t.toBuffer()]),o=Rc(n);return new Vc(o)}function ws(c){let{mint:e,tokenAccount:t,owner:n,programId:o=Uo}=c;return fp(t,e,n,o)}function Dn(c){let{tokenAccount:e,destination:t,multiSigners:n=[],owner:o,programId:r=Uo}=c;return pp(e,t,o,n,r)}async function jn(c){let{connection:e,amount:t,commitment:n,closeDestination:o,payer:r,owner:i,skipCloseAccount:a}=c,s=await e.getMinimumBalanceForRentExemption(gn.span,n),u=le(t).add(new dp(s)),l=nt({fromPublicKey:r,programId:Uo});return{addresses:{newAccount:l.publicKey},signers:[],instructions:[mp.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:l.seed,newAccountPubkey:l.publicKey,lamports:u.toNumber(),space:gn.span,programId:Uo}),ws({mint:new lp(kt.address),tokenAccount:l.publicKey,owner:i,programId:Uo})],instructionTypes:[Y.CreateAccount,Y.InitAccount],endInstructionTypes:a?[]:[Y.CloseAccount],endInstructions:a?[]:[Dn({tokenAccount:l.publicKey,destination:o!=null?o:i,owner:i})]}}function Dc({source:c,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:r=Uo}){return yp(c,e,t,BigInt(String(n)),o,r)}var Ci=class extends tt{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o,notSubscribeAccountChange:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._notSubscribeAccountChange=r!=null?r:!0,this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}set notSubscribeAccountChange(t){this._notSubscribeAccountChange=t}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return te(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<(this._notSubscribeAccountChange?1e3*5:1e3*60*3))return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=N(N({},{}),t),[r,i,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Jn},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:gp},o.commitment)]),{tokenAccounts:s,tokenAccountRawInfos:u}=Ec({owner:this.scope.ownerPubKey,solAccountResp:r,tokenAccountResp:{context:i.context,value:[...i.value,...a.value]}});return this._tokenAccounts=s,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:s,tokenAccountRawInfos:u}}clearAccountChangeCkb(){this._accountChangeListenerId!==void 0&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId)}async getCreatedTokenAccount({mint:t,programId:n=Jn,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let r=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,s)=>a.amount.lt(s.amount)?1:-1),i=this.getAssociatedTokenAccount(t,n);for(let a of r){let{publicKey:s}=a;if(s&&(!o||o&&i.equals(s)))return s}}async getOrCreateTokenAccount(t){var y,b,g,P;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:r,owner:i,notUseTokenAccount:a=!1,skipCloseAccount:s=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,d=new Gr(t.tokenProgram||Jn),p=this.getAssociatedTokenAccount(n,new Gr(d)),m=(a?[]:this.tokenAccountRawInfos).filter(w=>w.accountInfo.mint.equals(n)&&(!r||w.pubkey.equals(p))).sort((w,B)=>w.accountInfo.amount.lt(B.accountInfo.amount)?1:-1);if(o===void 0||m.length>0)return m.length>0?{account:m[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let w=ks(o.payer||i,p,i,n,d),B=this.tokenAccountRawInfos.find(A=>A.pubkey.equals(p));if(u){let A=await this.scope.connection.getAccountInfo(p);if(A===null)(y=f.instructions)==null||y.push(w),f.instructionTypes.push(Y.CreateATA);else if(!(A.owner.equals(d)&&Go.decode(A.data).mint.equals(n)&&Go.decode(A.data).owner.equals(i)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${p.toString()}`)}else B===void 0&&(f.instructions.push(w),f.instructionTypes.push(Y.CreateATA));if(n.equals(J)&&o.amount){let A=await jn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(b=o.amount)!=null?b:0,skipCloseAccount:s});f.instructions.push(...A.instructions||[]),f.endInstructions.push(...A.endInstructions||[]),f.instructionTypes.push(...A.instructionTypes||[]),f.endInstructionTypes.push(...A.endInstructionTypes||[]),o.amount&&(f.instructions.push(Dc({source:A.addresses.newAccount,destination:p,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:Jn})),f.instructionTypes.push(Y.TransferAmount))}return!s&&B===void 0&&(f.endInstructions.push(Dn({owner:i,destination:i,tokenAccount:p,programId:d})),f.endInstructionTypes.push(Y.CloseAccount)),{account:p,instructionParams:f}}else{let w=nt({fromPublicKey:i,programId:d,assignSeed:l}),B=await this.scope.connection.getMinimumBalanceForRentExemption(Go.span),A=bp.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:w.seed,newAccountPubkey:w.publicKey,lamports:B+Number((P=(g=o.amount)==null?void 0:g.toString())!=null?P:0),space:Go.span,programId:d});return f.instructions.push(A,ws({mint:n,tokenAccount:w.publicKey,owner:this.scope.ownerPubKey,programId:d})),f.instructionTypes.push(Y.CreateAccount),f.instructionTypes.push(Y.InitAccount),s||(f.endInstructions.push(Dn({owner:i,destination:i,tokenAccount:w.publicKey,programId:d})),f.endInstructionTypes.push(Y.CloseAccount)),{account:w.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=Jn,autoUnwrapWSOLToSOL:o}){var s;await this.fetchWalletTokenAccounts();let r=(s=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:s.publicKey,i=this.scope.ownerPubKey,a={};if(!r){let u=this.getAssociatedTokenAccount(t,n),l=await ks(i,u,i,t,n);a.instructions=[l],a.instructionTypes=[Y.CreateATA],r=u}return o&&J.toBase58()===t.toBase58()&&(a.endInstructions=[Dn({owner:i,destination:i,tokenAccount:r,programId:n})],a.endInstructionTypes=[Y.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:r,programId:i=Jn,tokenAccount:a,payer:s=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:d}=t,p=this.getAssociatedTokenAccount(r,i);if(new Gr(J).equals(r)){let m=await jn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:s,amount:o,skipCloseAccount:l});return N({tokenAccount:m.addresses.newAccount},m)}else if(!a||n==="out"&&!p.equals(a)&&!u){let m=[],f=ks(this.scope.ownerPubKey,p,this.scope.ownerPubKey,r,i);if(d){let y=await this.scope.connection.getAccountInfo(p);if(y===null)m.push(f);else if(!(y.owner.equals(Jn)&&Go.decode(y.data).mint.equals(r)&&Go.decode(y.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${p.toString()}`)}else m.push(f);return{tokenAccount:p,instructions:m,instructionTypes:[Y.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=Jn,amount:r,useSOLBalance:i,handleTokenAccount:a,feePayer:s}=t,u,l=this.createTxBuilder(s);if(n.equals(new Gr(J))&&i){let d=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:m}=d,f=Ye(d,["tokenAccount"]);u=m,l.addInstruction(f)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!u&&a){let p=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:m}=p,f=Ye(p,["tokenAccount"]);u=m,l.addInstruction(f)}return N({tokenAccount:u},l.AllTxData)}};import{PublicKey as Se,SystemProgram as mf}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Vl}from"@solana/spl-token";import no from"decimal.js";import{createAssociatedTokenAccountIdempotentInstruction as Gn,TOKEN_2022_PROGRAM_ID as un,TOKEN_PROGRAM_ID as Jo}from"@solana/spl-token";import{PublicKey as z}from"@solana/web3.js";import ut from"bn.js";import zn from"decimal.js";import{TOKEN_PROGRAM_ID as Pp}from"@solana/spl-token";import{PublicKey as Ap}from"@solana/web3.js";var Ts=v([Ue("mintAuthorityOption"),F("mintAuthority"),k("supply"),_("decimals"),_("isInitialized"),Ue("freezeAuthorityOption"),F("freezeAuthority")]);var Rk=async({connection:c,mint:e})=>{let t=await c.getAccountInfo(new Ap(e));return!t||t.data.length!==Ts.span?void 0:Ts.decode(t.data)},Lk=({mint:c,decimals:e,programId:t=Pp,logoURI:n="",priority:o=3})=>{let r=c.toBase58().substring(0,6);return{address:c.toBase58(),decimals:e,symbol:r,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:r,tags:[],priority:o}},Ri=c=>new He({mint:c.address,decimals:c.decimals,symbol:c.symbol,name:c.name}),dt=o=>{var r=o,{amount:c,isRaw:e,name:t}=r,n=Ye(r,["amount","isRaw","name"]);return new Le(new He({mint:Ot(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),c,e,t)};function Ok(c){return c.address===xn.address?kt:c}function Nk(c){return c.address===kt.address?xn:c}var gt=o=>{var r=o,{address:c,programId:e,decimals:t}=r,n=Ye(r,["address","programId","decimals"]);return N({chainId:101,address:Ot(c).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Cn=c=>c?E(N({},c),{transferFeeConfigAuthority:c.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:c.withdrawWithheldAuthority.toBase58(),withheldAmount:c.withheldAmount.toString(),olderTransferFee:E(N({},c.olderTransferFee),{epoch:c.olderTransferFee.epoch.toString(),maximumFee:c.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(N({},c.newerTransferFee),{epoch:c.newerTransferFee.epoch.toString(),maximumFee:c.newerTransferFee.maximumFee.toString()})}):void 0;import{ASSOCIATED_TOKEN_PROGRAM_ID as Fs,TOKEN_2022_PROGRAM_ID as st,TOKEN_PROGRAM_ID as Me}from"@solana/spl-token";import{Keypair as ta,PublicKey as Q,SystemProgram as Ln,TransactionInstruction as ot}from"@solana/web3.js";import na from"bn.js";import Ie from"bn.js";var xe=new Ie(1).shln(64),zo=64,hs=new Ie(1).shln(128),Rn=new Ie(1).shln(64).subn(1),zr=new Ie(1).shln(128).subn(1),an=-443636,sn=443636,Bt=new Ie("4295048016"),It=new Ie("79226673521066979257578248091"),Wc=new Ie("59543866431248"),qc=new Ie("184467440737095516"),Uc=new Ie("15793534762490258745"),Gc=16,Xr=512,Xt=60,Wk=new Ie("18446743708227953217"),zc=[{bit:0,factor:new Ie("fffcb933bd6fb800",16)},{bit:1,factor:new Ie("fff97272373d4000",16)},{bit:2,factor:new Ie("fff2e50f5f657000",16)},{bit:3,factor:new Ie("ffe5caca7e10f000",16)},{bit:4,factor:new Ie("ffcb9843d60f7000",16)},{bit:5,factor:new Ie("ff973b41fa98e800",16)},{bit:6,factor:new Ie("ff2ea16466c9b000",16)},{bit:7,factor:new Ie("fe5dee046a9a3800",16)},{bit:8,factor:new Ie("fcbe86c7900bb000",16)},{bit:9,factor:new Ie("f987a7253ac65800",16)},{bit:10,factor:new Ie("f3392b0822bb6000",16)},{bit:11,factor:new Ie("e7159475a2caf000",16)},{bit:12,factor:new Ie("d097f3bdfd2f2000",16)},{bit:13,factor:new Ie("a9f746462d9f8000",16)},{bit:14,factor:new Ie("70d869a156f31c00",16)},{bit:15,factor:new Ie("31be135f97ed3200",16)},{bit:16,factor:new Ie("9aa508b5b85a500",16)},{bit:17,factor:new Ie("5d6af8dedc582c",16)},{bit:18,factor:new Ie("2216e584f5fa",16)}],Wn=1e6,qk=1e5,Bs=(n=>(n[n.FromInput=0]="FromInput",n[n.TokenOnlyA=1]="TokenOnlyA",n[n.TokenOnlyB=2]="TokenOnlyB",n))(Bs||{}),Uk=1e3,Yr=1e5,Li=1e4,Xc=1e4,Yc=1e5,Gk=60,Oi=3,Hc=100,zk=15,Qc=10,Zc=100,Xo=14,wp=(i=>(i[i.OpenPositionOrIncreaseLiquidity=0]="OpenPositionOrIncreaseLiquidity",i[i.DecreaseLiquidity=1]="DecreaseLiquidity",i[i.CollectFee=2]="CollectFee",i[i.CollectReward=3]="CollectReward",i[i.Swap=4]="Swap",i[i.LimitOrder=5]="LimitOrder",i))(wp||{}),kp=(t=>(t[t.Enable=0]="Enable",t[t.Disable=1]="Disable",t))(kp||{}),Tp=(o=>(o[o.Uninitialized=0]="Uninitialized",o[o.Initialized=1]="Initialized",o[o.Opening=2]="Opening",o[o.Ended=3]="Ended",o))(Tp||{}),hp=(r=>(r[r.TradeFeeRate=0]="TradeFeeRate",r[r.ProtocolFeeRate=1]="ProtocolFeeRate",r[r.FundFeeRate=2]="FundFeeRate",r[r.NewOwner=3]="NewOwner",r[r.NewFundOwner=4]="NewFundOwner",r))(hp||{}),Bp=(o=>(o[o.UpdateOperationOwner=0]="UpdateOperationOwner",o[o.RemoveOperationOwner=1]="RemoveOperationOwner",o[o.UpdateWhitelistMint=2]="UpdateWhitelistMint",o[o.RemoveWhitelistMint=3]="RemoveWhitelistMint",o))(Bp||{}),ee=new Ie(0),rt=new Ie(1),Xk=new Ie(-1),Hr={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:[]};function Yk(c){switch(c){case 0:return"0 (FromInput - fee from input token)";case 1:return"1 (Token0Only - fee from token0)";case 2:return"2 (Token1Only - fee from token1)";default:return`${c} (unknown)`}}var Hk=2,Qk=new Ie("18446744073700000000");var Is=v([we(8),_("bump"),_e("index"),F("owner"),Ue("protocolFeeRate"),Ue("tradeFeeRate"),_e("tickSpacing"),Ue("fundFeeRate"),$(Ue(),1),F("fundOwner"),$(k(),3)]),Ip=v([Ue("blockTimestamp"),qo("tickCumulative"),$(k(),4)]),$c=v([we(8),Ze("initialized"),k("recentEpoch"),_e("observationIndex"),F("poolId"),$(Ip,Hc,"observations"),$(k(),4)]),xp=v([_e("filterPeriod"),_e("decayPeriod"),_e("reductionFactor"),Ue("dynamicFeeControl"),Ue("maxVolatilityAccumulator"),mt("tickSpacingIndexReference"),Ue("volatilityReference"),Ue("volatilityAccumulator"),k("lastUpdateTimestamp"),$(_(),46)]),Sp=v([_("state"),k("openTime"),k("endTime"),k("lastUpdateTime"),se("emissionsPerSecondX64"),k("totalEmissioned"),k("claimed"),F("mint"),F("vault"),F("creator"),se("growthGlobalX64")]),wo=v([we(8),_("bump"),F("configId"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),_("mintDecimalsA"),_("mintDecimalsB"),_e("tickSpacing"),se("liquidity"),se("sqrtPriceX64"),mt("tickCurrent"),Ue(),se("feeGrowthGlobalX64A"),se("feeGrowthGlobalX64B"),k("protocolFeesTokenA"),k("protocolFeesTokenB"),$(se(),4),_("status"),_("feeOn"),we(6),$(Sp,Oi,"rewardInfos"),we(8*16,"tickArrayBitmap"),$(k(),4),k("fundFeesTokenA"),k("fundFeesTokenB"),k("startTime"),k("recentEpoch"),xp.replicate("dynamicFeeInfo"),$(k(),46)]),Kp=v([se("growthInsideLastX64"),k("rewardAmountOwed")]),Qr=v([we(8),_("bump"),F("nftMint"),F("poolId"),mt("tickLower"),mt("tickUpper"),se("liquidity"),se("feeGrowthInsideLastX64A"),se("feeGrowthInsideLastX64B"),k("tokenFeesOwedA"),k("tokenFeesOwedB"),$(Kp,Oi,"rewardInfos"),k("recentEpoch"),$(k(),7)]),Jk=v([we(8),_("bump"),F("poolId"),mt("tickLower"),mt("tickUpper"),se("liquidity"),se("feeGrowthInsideLastX64A"),se("feeGrowthInsideLastX64B"),k("tokenFeesOwedA"),k("tokenFeesOwedB"),$(se(),Oi,"rewardGrowthInside"),k("recentEpoch"),$(k(),7)]),Cp=v([mt("tick"),_c("liquidityNet"),se("liquidityGross"),se("feeGrowthOutsideX64A"),se("feeGrowthOutsideX64B"),$(se(),Oi,"rewardGrowthsOutsideX64"),k("orderPhase"),k("ordersAmount"),k("partFilledOrdersRemaining"),se("unfilledRatioX64"),$(Ue(),3)]),Yo=v([we(8),F("poolId"),mt("startTickIndex"),$(Cp,Xt,"ticks"),_("initializedTickCount"),k("recentEpoch"),$(_(),107)]),jc=v([we(8),_("bump"),$(F(),Qc,"operationOwners"),$(F(),Zc,"whitelistMints")]),ko=v([we(8),F("poolId"),F("owner"),mt("tick"),Ze("zeroForOne"),k("orderPhase"),k("totalAmount"),k("filledAmount"),k("settleBase"),k("settleOutput"),k("openTime"),se("unfilledRatioX64"),$(k(),4)]),Zr=v([we(8),F("poolId"),we(8*8*Xo,"positiveTickArrayBitmap"),we(8*8*Xo,"negativeTickArrayBitmap")]),eT=v([we(8),_e("index"),_e("filterPeriod"),_e("decayPeriod"),_e("reductionFactor"),Ue("dynamicFeeControl"),Ue("maxVolatilityAccumulator"),$(k(),8)]),Jc=v([we(8),F("wallet"),_("nonceIndex"),k("orderNonce"),$(k(),4)]),tT=v([k(),_("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),$(k(),8)]),el=v([we(8),_("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),k("recentEpoch"),$(k(),8)]);import Rp from"bn.js";function $r(c){let e=Buffer.alloc(2);return e.writeUInt16LE(c),e}function xs(c){let e=Buffer.alloc(2);return e.writeUInt16BE(c),e}function Ss(c){let e=Buffer.alloc(4);return e.writeInt32LE(c),e}function tl(c){let e=Buffer.alloc(4);return e.writeInt32BE(c),e}function nl(c){return(typeof c=="number"||typeof c=="bigint")&&(c=new Rp(c.toString())),c.toArrayLike(Buffer,"be",8)}function ol(c){let e=new ArrayBuffer(1);return new DataView(e).setUint8(0,c),new Uint8Array(e)}var Lp=Buffer.from("amm_config","utf8"),jr=Buffer.from("pool","utf8"),Ks=Buffer.from("pool_vault","utf8"),Op=Buffer.from("pool_reward_vault","utf8"),il=Buffer.from("position","utf8"),Np=Buffer.from("tick_array","utf8"),Mp=Buffer.from("operation","utf8"),Fp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),vp=Buffer.from("observation","utf8"),_p=Buffer.from("support_mint","utf8"),Vp=Buffer.from("dynamic_fee_config","utf8"),Ep=Buffer.from("permission","utf8");function cT(c,e){return oe([Lp,xs(e)],c)}function rl(c,e,t,n){return oe([jr,e.toBuffer(),t.toBuffer(),n.toBuffer()],c)}function al(c,e){return oe([Ep,e.toBuffer()],c)}function sl(c,e,t,n,o){return oe([jr,e.toBuffer(),t.toBuffer(),n.toBuffer(),$r(o)],c)}function tn(c,e,t){return oe([Ks,e.toBuffer(),t.toBuffer()],c)}function ul(c,e,t){return oe([Op,e.toBuffer(),t.toBuffer()],c)}function Oe(c,e,t){return oe([Np,e.toBuffer(),tl(t)],c)}function Pn(c,e,t,n){return oe([il,e.toBuffer(),Ss(t),Ss(n)],c)}function nn(c,e){return oe([il,e.toBuffer()],c)}function qn(c){return oe([Buffer.from("metadata","utf8"),pn.toBuffer(),c.toBuffer()],pn)}function Ni(c){return oe([Mp],c)}function Ge(c,e){return oe([Fp,e.toBuffer()],c)}function Cs(c,e){return oe([vp,e.toBuffer()],c)}function To(c,e){return oe([_p,e.toBuffer()],c)}function cl(c,e,t,n){return oe([e.toBuffer(),t.toBuffer(),nl(n)],c)}function lT(c,e){return oe([Vp,xs(e)],c)}function ll(c,e,t){return oe([e.toBuffer(),ol(t)],c)}var ml=Buffer.from("locked_position","utf8");function Rs(c,e){return oe([ml,e.toBuffer()],c)}function Ho(c,e){return oe([ml,e.toBuffer()],c)}import{sha256 as qp}from"js-sha256";import An from"bn.js";import Ls from"decimal.js";function Os(c){return new An(1).shln(c).subn(1)}function yT(c,e,t){let n=c.add(e),o=Os(t);if(n.gt(o))throw new Error(`Addition overflow: result exceeds ${t} bits`);return n}function bT(c,e){if(c.lt(e))throw new Error("Subtraction underflow");return c.sub(e)}function gT(c,e,t){let n=c.mul(e),o=Os(t);if(n.gt(o))throw new Error(`Multiplication overflow: result exceeds ${t} bits`);return n}function PT(c,e){let t=c.mul(e),n=t.and(Os(128)),o=t.shrn(128);return[n,o]}function Ee(c,e,t){if(t.isZero())throw new Error("Division by zero");return c.mul(e).div(t)}function ze(c,e,t){if(t.isZero())throw new Error("Division by zero");let n=c.mul(e),o=n.div(t);return n.mod(t).isZero()?o:o.addn(1)}function AT(c,e,t,n){return n?ze(c,e,t):Ee(c,e,t)}function Jr(c,e){return c.div(e).add(c.mod(e).isZero()?ee:rt)}function wT(c,e){let t=c.add(e);return t.gt(zr)?zr:t}function kT(c,e){return c.gt(e)?c.sub(e):new An(0)}function TT(c,e){let t=c.mul(e);if(t.gt(zr))throw new Error("U128 multiplication overflow");return t}var hT=new An(1).shln(256).subn(1);function BT(c,e,t){if(t.isZero())throw new Error("Division by zero");return c.mul(e).div(t)}function IT(c,e,t){if(t.isZero())throw new Error("Division by zero");let n=c.mul(e),o=n.div(t);return n.mod(t).isZero()?o:o.addn(1)}function dl(c){return c.isZero()?-1:c.bitLength()-1}function xT(c){if(c.isZero())return-1;let e=0,t=c.clone();for(;t.and(new An(1)).isZero();)t=t.shrn(1),e++;return e}function ST(c,e){return c.testn(e)}function KT(c,e){return c.or(new An(1).shln(e))}function CT(c,e){return c.and(new An(1).shln(e).notn(256))}function RT(c,e){return c.xor(new An(1).shln(e))}function LT(c){let e=new An(1).shln(127);return c.and(e).isZero()?c:c.sub(new An(1).shln(128))}function OT(c){return c.isNeg()?c.add(new An(1).shln(128)):c}function NT(c){return c.isNeg()?c.neg():c}function pl(c,e){return new Ls(c.toString()).div(Ls.pow(2,64)).toDecimalPlaces(e)}function ho(c){return new An(c.mul(Ls.pow(2,64)).floor().toFixed())}function vt(c,e){return c.add(hs).sub(e).mod(hs)}import Dp from"bn.js";import Pt from"bn.js";import Qo from"decimal.js";var Un=class{static scanLinearBitmap({bitmap:e,tickSpacing:t,offset:n,checkInfo:o}){let r=[],i=e.length*8,a=0,s=i-1;if(o){let d=o.tick/(t*Xt)-n;o.valueType==="gte"?a=Math.max(0,Math.ceil(d)):s=Math.min(i-1,Math.floor(d))}if(a>s)return r;let u=Math.floor(a/8),l=Math.floor(s/8);for(let d=u;d<=l;d++){if(!e[d])continue;let p=d===u?a%8:0,m=d===l?s%8:7;for(let f=p;f<=m;f++)e[d]&1<<f&&r.push((d*8+f+n)*t*Xt)}return r}static findPoolBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/Xt/t);if(n.valueType==="lte"&&o<-512)return[];if(n.valueType==="gte"&&o>512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:-Xr,checkInfo:n})}static findPositiveTickArrayBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/Xt/t);if(n.valueType==="lte"&&o<512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:Xr,checkInfo:n})}static findNegativeTickArrayBitmap({bitmap:e,tickSpacing:t,count:n,checkInfo:o}){let r=[];if(o){let s=Math.floor(o.tick/Xt/t);if(o.valueType==="gte"&&s>=-512)return r}let i=(o==null?void 0:o.valueType)==="lte"?Math.floor(o.tick/(Xt*t))+7680:1/0,a=(o==null?void 0:o.valueType)==="gte"?Math.ceil(o.tick/(Xt*t))+7680:0;e:for(let s=0;s<Xo;s++){let u=Xo-1-s;for(let l=0;l<512;l++){let d=s*512+l;if(d>i)break e;if(d<a)continue;let p=u*64+Math.floor(l/8);if(!e[p]){l=Math.floor(l/8)*8+7;continue}if(e[p]&1<<l%8){let m=(s*512+l-7680)*Xt*t;if(r.push(m),n!==void 0&&r.length>=n)break e}}}return r}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 r=Pe.getTickArrayStartIndex(o.tickArrayCurrent,e),{count:i}=o;if(o.type==="oneForZero"){let a={tick:r,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,i)}if(o.type==="zeroForOne"){let a={tick:r,valueType:"lte"},s=[()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a}).sort((u,l)=>l-u),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}).sort((u,l)=>l-u),()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}).sort((u,l)=>l-u)];return this.collectUntil(s,i)}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*Xt*Xr}},Pe=class{static firstinitializedTick({data:e,zeroForOne:t}){if(t){for(let n=e.ticks.length-1;n>=0;n--)if(ie.isInitialized({data:e.ticks[n]}))return e.ticks[n]}else for(let n=0;n<e.ticks.length;n++)if(ie.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 i=Math.floor((t-e.startTickIndex)/n);if(o){for(let a=i;a>=0;a--)if(ie.isInitialized({data:e.ticks[a]}))return e.ticks[a]}else for(let a=i+1;a<Xt;a++)if(ie.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 Xt*e}static getMinTick(e){return Math.ceil(an/e)*e}static getMaxTick(e){return Math.floor(sn/e)*e}},ie=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>=an&&e<=sn}static checkTick(e){if(!this.isValidTick(e))throw new Error(`Tick ${e} is out of range [${an}, ${sn}]`)}static getSqrtPriceAtTick(e){this.checkTick(e);let t=Math.abs(e),n=xe.clone();for(let{bit:o,factor:r}of zc)(t&1<<o)!==0&&(n=Ee(n,r,xe));return e>0&&(n=Ee(xe,xe,n)),n}static getLimitOrderOutput({amountIn:e,tick:t,zeroForOne:n}){if(n){let o=ie.getPriceAtTick(t,!1);return Ee(e,o,xe)}else{let o=ie.getPriceAtTick(t,!0);return Ee(e,xe,o)}}static getLimitOrderInput({amountOut:e,tick:t,zeroForOne:n}){if(n){let o=ie.getPriceAtTick(t,!0);return ze(e,o,xe)}else{let o=ie.getPriceAtTick(t,!1);return ze(e,xe,o)}}static limitOrderUnfilledAmount({tick:e}){return e.ordersAmount.add(e.partFilledOrdersRemaining)}static matchLimitOrder({tick:e,swapAmount:t,swapDirectionZeroForOne:n,isBaseInput:o,feeRate:r,isFeeOnInput:i}){let a={amountIn:ee,amountOut:ee,ammFeeAmount:ee},s=this.limitOrderUnfilledAmount({tick:e});if(t.isZero()||s.isZero())return a;if(o)i?(a.ammFeeAmount=ze(t,new Pt(r),Qe),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}),i&&(a.ammFeeAmount=ze(a.amountIn,new Pt(r),Qe.sub(new Pt(r)))));else{let d=Pt.min(t,s);i?a.amountOut=d:a.amountOut=Pt.min(ze(d,Qe,Qe.sub(new Pt(r))),s),a.amountIn=this.getLimitOrderInput({amountOut:a.amountOut,tick:e.tick,zeroForOne:!n}),i&&(a.ammFeeAmount=ze(a.amountIn,new Pt(r),Qe.sub(new Pt(r))))}let u=ee;e.partFilledOrdersRemaining.gt(ee)&&(u=Pt.min(e.partFilledOrdersRemaining,a.amountOut),u.gt(ee)&&(e.unfilledRatioX64=Ee(e.unfilledRatioX64,e.partFilledOrdersRemaining.sub(u),e.partFilledOrdersRemaining)),e.partFilledOrdersRemaining=e.partFilledOrdersRemaining.sub(u));let l=a.amountOut.sub(u);if(l.gt(ee)){if(!e.partFilledOrdersRemaining.isZero())throw Error("!tick.partFilledOrdersRemaining.isZero()");if(e.ordersAmount.lt(l))throw Error("InvalidLimitOrderAmount");e.orderPhase=e.orderPhase.add(rt),e.unfilledRatioX64=Ee(xe,e.ordersAmount.sub(l),e.ordersAmount),e.partFilledOrdersRemaining=e.ordersAmount.sub(l),e.ordersAmount=ee}return i||(a.ammFeeAmount=ze(a.amountOut,new Pt(r),Qe),a.amountOut=a.amountOut.sub(a.ammFeeAmount)),a}static getPriceAtTick(e,t){let n=this.getSqrtPriceAtTick(e);return t?n.mul(n).add(xe.subn(1)).div(xe):n.mul(n).div(xe)}static getTickAtSqrtPrice(e){if(!(e.gte(Bt)&&e.lte(It)))throw Error("SqrtPriceX64");let t=dl(e),n=t-64,o;n>=0?o=new Pt(n).shln(32):o=new Pt(-n).shln(32).neg();let r;t>=64?r=e.shrn(t-63):r=e.shln(63-t);let i=new Pt(0),a=new Pt(1).shln(63);for(let b=0;b<Gc&&!a.isZero();b++){r=r.mul(r);let g=r.shrn(127).toNumber();r=r.shrn(63+g),g&&(i=i.add(a)),a=a.shrn(1)}let s=i.shrn(32),l=o.add(s).mul(Wc),d=l.sub(qc),p=l.add(Uc),m=this.signedShrn64(d),f=this.signedShrn64(p);return m===f?m:ie.getSqrtPriceAtTick(f).lte(e)?f:m}static signedShrn64(e){if(e.isNeg()){let t=new Pt(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),r=t-n,i=20,a=new Pt(10).pow(new Pt(i)),s=o.mul(a),u=new Pt(1).shln(128),d=s.div(u).toString();for(;d.length<=i;)d="0"+d;let p=d.slice(0,-i),m=d.slice(-i),f=p+"."+m;return new Qo(f).mul(new Qo(10).pow(r))}static tickToPrice(e,t,n){let o=ie.getSqrtPriceAtTick(e);return this.sqrtPriceX64ToPrice(o,t,n)}static priceToTick(e,t,n){let r=e.div(Math.pow(10,t-n)).log().div(new Qo(1.0001).log()).floor();return Math.max(an,Math.min(sn,r.toNumber()))}static priceToSqrtPriceX64(e,t,n){let i=e.div(Math.pow(10,t-n)).sqrt().mul(new Qo(2).pow(64));return new Pt(i.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:r}){let i=e.clamp(1/10**Math.max(t,n),Number.MAX_SAFE_INTEGER);o||(i=new Qo(1).div(i));let a=ie.toTickIndex(ie.priceToTick(i,t,n),r),s=ie.tickToPrice(a,t,n);return{price:o?s:new Qo(1).div(s),tick:a}}};async function fl(c,e,t,n,o,r,i=!0){let a=[],s=Ge(c,t).publicKey,u=await e.getAccountInfo(s),l=Un.findTickArrayAddress({programId:c,poolId:t,poolBitmap:r,tickArrayBitmap:Zr.decode(u.data),tickSpacing:o,findInfo:{type:i?"zeroForOne":"oneForZero",tickArrayCurrent:n}});return(await wt(e,l)).forEach((p,m)=>{p&&a.push({address:l[m],value:Yo.decode(p.data)})}),a}var eo=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 ee;if(e.orderPhase.eq(t.orderPhase))return ee;if(e.orderPhase.add(rt).eq(t.orderPhase)){let n=e.settleBase.mul(t.unfilledRatioX64),o=e.unfilledRatioX64,r=n.div(o),i=n.mod(o).isZero(),a=e.settleBase.sub(r);if(a.isZero())return ee;let s=i?a:a.sub(rt);return ie.getLimitOrderOutput({amountIn:s,tick:t.tick,zeroForOne:e.zeroForOne}).sub(e.settleOutput)}else{if(e.orderPhase.add(new Dp(2)).lte(t.orderPhase))return ie.getLimitOrderOutput({amountIn:e.settleBase,tick:t.tick,zeroForOne:e.zeroForOne}).sub(e.settleOutput);throw Error("invalid order phase")}}};import ea from"bn.js";import yl from"decimal.js";var at=class{static getDeltaAmountAUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let r=n.shln(zo),i=t.sub(e);if(!e.gt(ee))throw Error("!sqrtPriceX64A.gt(BN_ZERO)");let a=o?Jr(ze(r,i,t),e):Ee(r,i,t).div(e);if(a.gt(Rn))throw Error("MaxTokenOverflow");return a}static getDeltaAmountBUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let r=o?ze(n,t.sub(e),xe):Ee(n,t.sub(e),xe);if(r.gt(Rn))throw Error("MaxTokenOverflow");return r}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 ee;e.gt(t)&&([e,t]=[t,e]);let o=Ee(e,t,xe),r=t.sub(e);return Ee(n,o,r)}static getLiquidityFromAmountB(e,t,n){if(n.isZero())return ee;e.gt(t)&&([e,t]=[t,e]);let o=t.sub(e);return Ee(n,xe,o)}static getLiquidityFromAmounts(e,t,n,o,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return this.getLiquidityFromAmountA(t,n,o);if(e.lt(n)){let i=this.getLiquidityFromAmountA(e,n,o),a=this.getLiquidityFromAmountB(t,e,r);return i.lt(a)?i:a}else return this.getLiquidityFromAmountB(t,n,r)}static getAmountsForLiquidity(e,t,n,o,r){t.gt(n)&&([t,n]=[n,t]);let i=ee,a=ee;return e.lte(t)?i=this.getDeltaAmountAUnsigned(t,n,o,r):e.lt(n)?(i=this.getDeltaAmountAUnsigned(e,n,o,r),a=this.getDeltaAmountBUnsigned(t,e,o,r)):a=this.getDeltaAmountBUnsigned(t,n,o,r),{amountA:i,amountB:a}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,r,i,a){let{amountA:s,amountB:u}=this.getAmountsForLiquidity(e,t,n,o,i),l=r?1+a:1-a,d=new ea(new yl(s.toString()).mul(l).toFixed(0)),p=new ea(new yl(u.toString()).mul(l).toFixed(0));return{amountSlippageA:d,amountSlippageB:p}}static getLiquidityAndAmountsFromAmount({sqrtPriceCurrentX64:e,sqrtPriceLowerX64:t,sqrtPriceUpperX64:n,amountInfo:o}){let r;if(o.type==="liquidity")r=o.amount;else if(o.type==="amountA")r=e.gte(n)?ee:this.getLiquidityFromAmountA(ea.max(e,t),n,o.amount);else if(o.type==="amountB")r=e.lte(t)?ee:this.getLiquidityFromAmountB(t,ea.min(e,n),o.amount);else throw Error("amount info type check error");return N({liquidity:r},this.getAmountsForLiquidity(e,t,n,o.amount,!0))}};var th=({baseIn:c,price:e,mintADecimal:t,mintBDecimal:n,tickSpacing:o})=>{let r=ie.priceToTick(e,t,n),i=ie.toTickIndex(r,o),a=ie.tickToPrice(i,t,n);return{tick:i,price:a}};import{PublicKey as qt}from"@solana/web3.js";import xt from"bn.js";import{TOKEN_2022_PROGRAM_ID as bl,TOKEN_PROGRAM_ID as Wp}from"@solana/spl-token";import he from"decimal.js";import $o from"bn.js";import pt from"bn.js";var Mi=class{static getNextSqrtPriceFromAmountARoundingUp(e,t,n,o){if(n.isZero())return e;let r=t.shln(zo);if(o){let i=n.mul(e),a=r.add(i);if(a.gte(r))return ze(r,e,a);let s=Ee(r,rt,e);return ze(r,rt,s.add(n))}else{let i=n.mul(e);if(r.lte(i))throw new Error("Insufficient liquidity for token0 removal");let a=r.sub(i);return ze(r,e,a)}}static getNextSqrtPriceFromAmountBRoundingDown(e,t,n,o){if(n.isZero())return e;if(o){let r=n.shln(zo).div(t);return e.add(r)}else{let r=Jr(n.shln(zo),t);return e.sub(r)}}static getNextSqrtPriceFromInput(e,t,n,o){if(!e.gt(ee))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(ee))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(ee))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(ee))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!1)}};var wn=class{static newValue({poolInfo:e,amountSpecified:t,zeroForOne:n,feeRate:o,blockTimestamp:r}){let i={amountSpecifiedRemaining:t,amountCalculated:ee,sqrtPriceX64:e.sqrtPriceX64,tick:e.tickCurrent,feeGrowthGlobalX64:n?e.feeGrowthGlobalX64A:e.feeGrowthGlobalX64B,lpFee:ee,protocolFee:ee,fundFee:ee,liquidity:e.liquidity,sqrtPriceNextX64:ee,tickNext:0,baseFeeRate:o,tickSpacing:e.tickSpacing,tickSpacingIndex:0,dynamicFeeInfo:Zo.getDynamicFeeInfo({poolInfo:e})};return i.dynamicFeeInfo&&(i.tickSpacingIndex=vi.tickSpacingIndexFromTick(i.tick,i.tickSpacing),Zo.updateReference({dynamicFeeInfo:i.dynamicFeeInfo,tickSpacingIndex:i.tickSpacingIndex,currentTimestamp:r})),i}static getTargetPriceBasedOnNextTick({data:e,tickNext:t,zeroForOne:n,sqrtPriceLimitX64:o}){e.tickNext=t,e.tickNext<an?e.tickNext=an:e.tickNext>sn&&(e.tickNext=sn),e.sqrtPriceNextX64=ie.getSqrtPriceAtTick(e.tickNext);let r;if(n&&e.sqrtPriceNextX64.lt(o)||!n&&e.sqrtPriceNextX64.gt(o)?r=o:r=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(r))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(r.lt(e.sqrtPriceX64))throw Error("targetPrice.lt(data.sqrtPriceX64)")}return r}static updateVolatilityAccumulator({state:e}){!e.dynamicFeeInfo||Zo.updateVolatilityAccumulator({state:e.dynamicFeeInfo,tickSpacingIndex:e.tickSpacingIndex})}static computeDynamicFeeRate({data:e,tickSpacing:t}){let n=e.volatilityAccumulator*t,o=n*n,r=Yc*Li*Li,i=ze(new pt(e.dynamicFeeControl),new pt(o),new pt(r)).toNumber();return i>Yr?Yr:i}static getTotalFeeRate({data:e}){if(e.dynamicFeeInfo){let t=this.computeDynamicFeeRate({data:e.dynamicFeeInfo,tickSpacing:e.tickSpacing}),n=e.baseFeeRate+t;return Math.min(Yr,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,r=n?e.tickSpacingIndex*o:(e.tickSpacingIndex+1)*o,i=Math.max(an,Math.min(sn,r)),a=ie.getSqrtPriceAtTick(i);return n?{isSkipped:!1,boundedPrice:pt.max(t,a)}:{isSkipped:!1,boundedPrice:pt.min(t,a)}}static applySwapAmounts({state:e,amountIn:t,amountOut:n,feeAmount:o,isBaseInput:r,isFeeOnInput:i,protocolFeeRate:a,fundFeeRate:s}){let u=i?t.add(o):t;r?(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(u),e.amountCalculated=e.amountCalculated.add(n)):(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(n),e.amountCalculated=e.amountCalculated.add(u)),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,r=vi.tickSpacingIndexFromTick(o,e.tickSpacing);!t&&o%e.tickSpacing===0&&(r=r-1),e.tickSpacingIndex=r,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 r=t;if(n.gt(ee)){let i=t.mul(n).div(new pt(Qe));e.protocolFee=e.protocolFee.add(i),r=r.sub(i)}if(o.gt(ee)){let i=t.mul(o).div(new pt(Qe));e.fundFee=e.fundFee.add(i),r=r.sub(i)}if(e.liquidity.gt(ee)){let i=Ee(r,xe,e.liquidity);e.feeGrowthGlobalX64=e.feeGrowthGlobalX64.add(i),e.lpFee=e.lpFee.add(r)}}},Fi=class{static newSwapComputationResult({sqrtPriceNextX64:e}){return{sqrtPriceNextX64:e!=null?e:ee,amountIn:ee,amountOut:ee,feeAmount:ee}}static calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:o,isBaseInput:r}){if(r)try{return o?at.getDeltaAmountAUnsigned(t,e,n,!0):at.getDeltaAmountBUnsigned(e,t,n,!0)}catch(i){if(i.message==="MaxTokenOverflow")return null;throw i}else try{return o?at.getDeltaAmountBUnsigned(t,e,n,!1):at.getDeltaAmountAUnsigned(e,t,n,!1)}catch(i){if(i.message==="MaxTokenOverflow")return null;throw i}}static computeSwap(e,t,n,o,r,i,a,s){let u=this.newSwapComputationResult({});if(i){let d=s?Ee(o,new pt(Wn-r),new pt(Wn)):o,p=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:i});p!==null&&(u.amountIn=p),u.sqrtPriceNextX64=p!==null&&d.gte(u.amountIn)?t:Mi.getNextSqrtPriceFromInput(e,n,d,a)}else{let d=s?o:ze(o,new pt(Wn),new pt(Wn-r)),p=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:i});p!==null&&(u.amountOut=p),u.sqrtPriceNextX64=p!==null&&d.gte(u.amountOut)?t:Mi.getNextSqrtPriceFromOutput(e,n,d,a)}if(a){if(!u.sqrtPriceNextX64.gte(t))throw Error("!result.sqrtPriceNextX64.gte(sqrtPriceTargetX64)")}else if(!t.gte(u.sqrtPriceNextX64))throw Error("!sqrtPriceTargetX64.gte(result.sqrtPriceNextX64)");let l=t.eq(u.sqrtPriceNextX64);if(a?(l&&i||(u.amountIn=at.getDeltaAmountAUnsigned(u.sqrtPriceNextX64,e,n,!0)),l&&!i||(u.amountOut=at.getDeltaAmountBUnsigned(u.sqrtPriceNextX64,e,n,!1))):(l&&i||(u.amountIn=at.getDeltaAmountBUnsigned(e,u.sqrtPriceNextX64,n,!0)),l&&!i||(u.amountOut=at.getDeltaAmountAUnsigned(e,u.sqrtPriceNextX64,n,!1))),i)s?u.sqrtPriceNextX64.eq(t)?u.feeAmount=ze(u.amountIn,new pt(r),new pt(Wn-r)):u.feeAmount=o.sub(u.amountIn):(u.feeAmount=ze(u.amountOut,new pt(r),new pt(Wn)),u.amountOut=u.amountOut.sub(u.feeAmount),l||(u.amountIn=o));else if(s)u.amountOut=pt.min(u.amountOut,o),u.feeAmount=ze(u.amountIn,new pt(r),new pt(Wn-r));else{u.feeAmount=ze(u.amountOut,new pt(r),new pt(Wn));let d=u.amountOut.sub(u.feeAmount);d.gt(o)?(u.feeAmount=u.amountOut.sub(o),u.amountOut=o):u.amountOut=d}return u}};function Ns({programId:c,poolId:e,poolInfo:t,tickArrays:n,configInfo:o,tickarrayBitmapExtension:r,amountSpecified:i,sqrtPriceLimitX64:a,zeroForOne:s,isBaseInput:u,blockTimestamp:l,includeExtraTickArrays:d}){a.isZero()&&(a=s?new $o(Bt).addn(1):new $o(It).subn(1));let p=0;if(n.length===0)return{allTrade:!1,amountSpecifiedRemaining:i,amountCalculated:ee,feeAmount:ee,sqrtPriceX64:t.sqrtPriceX64,liquidity:t.liquidity,tickCurrent:t.tickCurrent,accounts:[]};let m=d?Un.findTickArrayAddress({programId:c,poolId:e,tickSpacing:t.tickSpacing,poolBitmap:t.tickArrayBitmap,tickArrayBitmap:r,findInfo:{type:s?"oneForZero":"zeroForOne",count:2,tickArrayCurrent:t.tickCurrent}}).filter(h=>h.toString()!==n[0].address.toString()):[],f=Pe.getTickArrayStartIndex(t.tickCurrent,t.tickSpacing),{firstItckArrayContainsPoolTick:y,firstValidTickArrayStartIndex:b}={firstItckArrayContainsPoolTick:n[p].value.startTickIndex===f,firstValidTickArrayStartIndex:n[p].value.startTickIndex},g=y,P=b,w=n[p],B=Yt.isFeeOnInput(t.feeOn,s),A=wn.newValue({poolInfo:t,amountSpecified:i,zeroForOne:s,feeRate:o.tradeFeeRate,blockTimestamp:l});for(;!A.amountSpecifiedRemaining.isZero()&&!A.sqrtPriceX64.eq(a);){let h=(()=>{let K=Pe.nextInitalizedTick({data:w.value,tickSpacing:A.tickSpacing,zeroForOne:s,currentTickIndex:A.tick});if(K!==void 0)return K;if(g){let I=n[++p];return I===void 0?void 0:(P=I.value.startTickIndex,w=I,Pe.firstinitializedTick({data:I.value,zeroForOne:s}))}else return g=!0,Pe.firstinitializedTick({data:w.value,zeroForOne:s})})();if(h===void 0)return{allTrade:!1,amountSpecifiedRemaining:A.amountSpecifiedRemaining,amountCalculated:A.amountCalculated,feeAmount:A.lpFee.add(A.fundFee).add(A.protocolFee),sqrtPriceX64:A.sqrtPriceX64,liquidity:A.liquidity,tickCurrent:A.tick,accounts:n.slice(0,p).map(K=>K.address)};let x=wn.getTargetPriceBasedOnNextTick({data:A,tickNext:h.tick,zeroForOne:s,sqrtPriceLimitX64:a}),S=A.liquidity;do{wn.updateVolatilityAccumulator({state:A});let K=wn.getTotalFeeRate({data:A}),{isSkipped:I,boundedPrice:C}=wn.getSpacingBoundedPrice({data:A,targetPrice:x,zeroForOne:s}),R=!A.sqrtPriceX64.eq(C),O;R?(O=Fi.computeSwap(A.sqrtPriceX64,C,A.liquidity,A.amountSpecifiedRemaining,K,u,s,B),wn.applySwapAmounts({state:A,amountIn:O.amountIn,amountOut:O.amountOut,feeAmount:O.feeAmount,isBaseInput:u,isFeeOnInput:B,protocolFeeRate:new $o(o.protocolFeeRate),fundFeeRate:new $o(o.fundFeeRate)})):O=Fi.newSwapComputationResult({sqrtPriceNextX64:C});let L=ie.limitOrderUnfilledAmount({tick:h});if(A.sqrtPriceNextX64.eq(O.sqrtPriceNextX64)){let M=ie.matchLimitOrder({tick:h,swapAmount:A.amountSpecifiedRemaining,swapDirectionZeroForOne:s,isBaseInput:u,feeRate:K,isFeeOnInput:B});if(M.amountIn.gt(ee)&&wn.applySwapAmounts({state:A,amountIn:M.amountIn,amountOut:M.amountOut,feeAmount:M.ammFeeAmount,isBaseInput:u,isFeeOnInput:B,protocolFeeRate:new $o(o.protocolFeeRate),fundFeeRate:new $o(o.fundFeeRate)}),ie.hasLiquidity({data:h})&&!ie.hasLimitOrders({data:h})){let W=s?h.liquidityNet.neg():h.liquidityNet;S=at.addDelta(A.liquidity,W)}A.tick=s&&!ie.hasLimitOrders({data:h})||!s&&ie.hasLimitOrders({data:h})?A.tickNext-1:A.tickNext}else A.sqrtPriceX64.eq(O.sqrtPriceNextX64)||(A.tick=ie.getTickAtSqrtPrice(O.sqrtPriceNextX64));if(A.sqrtPriceX64=O.sqrtPriceNextX64,wn.updateDynamicFeeIndex({state:A,zeroForOne:s,isSkippedTickSpacing:I}),A.amountSpecifiedRemaining.isZero()||A.sqrtPriceX64.eq(x)){let M=ie.limitOrderUnfilledAmount({tick:h});if(!A.amountSpecifiedRemaining.isZero()&&!M.eq(L)&&!M.isZero())throw Error("!limitOrderUnfilledAmountAfter.isZero()");break}}while(!0);A.liquidity=S}return{allTrade:!0,amountSpecifiedRemaining:ee,amountCalculated:A.amountCalculated,feeAmount:A.lpFee.add(A.fundFee).add(A.protocolFee),sqrtPriceX64:A.sqrtPriceX64,liquidity:A.liquidity,tickCurrent:A.tick,accounts:[...m,...n.slice(0,p+1+(d?1:0)).map(h=>h.address)]}}var vi=class{static tickSpacingIndexFromTick(e,t){return Math.floor(e/t)}},Zo=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/Xc),e.lastUpdateTimestamp=new xt(n)):(e.tickSpacingIndexReference=t,e.volatilityReference=0,e.lastUpdateTimestamp=new xt(n)))}static updateVolatilityAccumulator({state:e,tickSpacingIndex:t}){let n=Math.abs(e.tickSpacingIndexReference-t),o=e.volatilityReference+n*Li;e.volatilityAccumulator=Math.min(o,e.maxVolatilityAccumulator)}},Yt=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 r of t){let i=Pe.getTickArrayStartIndex(r,e);if(i>=n||i<o)return!0}return!1}static tickArrayStartIndexRange({tickSpacing:e}){let t=Un.maxTickInTickarrayBitmap(e),n=-t;return t>sn&&(t=Pe.getTickArrayStartIndex(sn,e)+Pe.tickCount(e)),n<an&&(n=Pe.getTickArrayStartIndex(an,e)),{maxTickBoundary:t,minTickBoundary:n}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:r}){var a,s,u;let i=[];for(let l=0;l<r.length;l++){let d=r[l],p=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(s=await e.getAccountInfo(d.mint))==null?void 0:s.owner;if(p===void 0)throw Error("get new reward mint info error");let m=E(N({},d),{perSecond:pl(d.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new qt(p)});if(m.mint.equals(qt.default)||m.totalEmissioned.eq(Rn))continue;if(n<=m.openTime.toNumber()||o.eq(ee)){i.push(m);continue}let f=new xt(Math.min(m.endTime.toNumber(),n)),y=f.sub(m.lastUpdateTime);if(y.isZero()){i.push(m);continue}let b=ze(y,m.emissionsPerSecondX64,xe),g=Ee(y,m.emissionsPerSecondX64,o),P,w=m.totalEmissioned.add(b);if(w.lte(Rn))P=w;else{let A=Rn.sub(m.totalEmissioned);P=Rn,g=Ee(A,xe,o)}let B=m.growthGlobalX64.add(g);i.push(E(N({},m),{growthGlobalX64:B,totalEmissioned:P,lastUpdateTime:f}))}return i}},ft=class{static getOutputAmountAndRemainAccounts(e,t,n,o,r,i,a){let s=o.toBase58()===e.mintA.address,u=Pe.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:l,amountCalculated:d,feeAmount:p,sqrtPriceX64:m,accounts:f}=Ns({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(y=>({address:y[1].address,value:y[1]})).filter(y=>s?y.value.startTickIndex<=u:y.value.startTickIndex>=u).sort((y,b)=>s?b.value.startTickIndex-y.value.startTickIndex:y.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:r,sqrtPriceLimitX64:a!=null?a:ee,zeroForOne:s,isBaseInput:!0,blockTimestamp:i,includeExtraTickArrays:!0});return{allTrade:l,expectedAmountOut:d,remainingAccounts:f,executionPrice:m,feeAmount:p}}static getInputAmountAndRemainAccounts(e,t,n,o,r,i,a){let s=o.toBase58()===e.mintB.address,u=Pe.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:l,amountCalculated:d,feeAmount:p,sqrtPriceX64:m,accounts:f}=Ns({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(y=>({address:new qt(y[0]),value:y[1]})).filter(y=>s?y.value.startTickIndex<=u:y.value.startTickIndex>=u).sort((y,b)=>s?b.value.startTickIndex-y.value.startTickIndex:y.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:r,sqrtPriceLimitX64:a!=null?a:ee,zeroForOne:s,isBaseInput:!1,blockTimestamp:i,includeExtraTickArrays:!0});return{allTrade:l,expectedAmountIn:d,remainingAccounts:f,executionPrice:m,feeAmount:p}}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await Ne(e,t.map(i=>({pubkey:i})),{batchRequest:n}),r={};for(let i of o)i.accountInfo!==null&&(r[i.pubkey.toString()]=Zr.decode(i.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},r=[];for(let s of t){let u=[...Un.findTickArrayStartIndex({tickSpacing:s.tickSpacing,poolBitmap:s.tickArrayBitmap,tickArrayBitmap:s.exBitmapInfo,findInfo:{type:"zeroForOne",count:7,tickArrayCurrent:s.tickCurrent}}),...Un.findTickArrayStartIndex({tickSpacing:s.tickSpacing,poolBitmap:s.tickArrayBitmap,tickArrayBitmap:s.exBitmapInfo,findInfo:{type:"oneForZero",count:7,tickArrayCurrent:s.tickCurrent}})];for(let l of u){let{publicKey:d}=Oe(s.programId,s.id,l);o[d.toString()]===void 0&&(r.push({pubkey:d}),o[d.toString()]=s.id)}}let i=await Ne(e,r,{batchRequest:n}),a={};for(let s of i){if(!s.accountInfo)continue;let u=o[s.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Yo.decode(s.accountInfo.data);a[u.toString()][l.startTickIndex]=E(N({},l),{address:s.pubkey})}return a}static computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:r,amountIn:i,slippage:a,blockTimestamp:s,priceLimit:u=new he(0)}){var O;let l,d=o.toBase58()===e.mintA.address,[p,m]=d?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];u.equals(new he(0))?l=d?Bt.add(new xt(1)):It.sub(new xt(1)):l=ie.priceToSqrtPriceX64(u,e.mintA.decimals,e.mintB.decimals);let f=bt(i,p,r,!1),{allTrade:y,expectedAmountOut:b,remainingAccounts:g,executionPrice:P,feeAmount:w}=ft.getOutputAmountAndRemainAccounts(e,t,n,o,f.amount.sub((O=f.fee)!=null?O:ee),s,l),B=bt(b,m,r,!1),A=ie.sqrtPriceX64ToPrice(P,e.mintA.decimals,e.mintB.decimals),h=d?A:new he(1).div(A),x=b.mul(new xt(Math.floor((1-a)*1e10))).div(new xt(1e10)),S=bt(x,m,r,!1),K=d?e.currentPrice:new he(1).div(e.currentPrice),I=new he(h).sub(K).abs(),C=K,R=new ht(new he(I).mul(10**15).toFixed(0),new he(C).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:f,amountOut:B,minAmountOut:S,expirationTime:En(f.expirationTime,B.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:R,fee:w,remainingAccounts:g,executionPriceX64:P}}static computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,amountIn:o,tokenOut:r,slippage:i,epochInfo:a,blockTimestamp:s,catchLiquidityInsufficient:u=!1}){let l=r.address===e.mintB.address,[d,p]=l?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,f]=[new He(E(N({},d),{mint:d.address,isToken2022:d.programId===bl.toBase58()})),new He(E(N({},p),{mint:p.address,isToken2022:p.programId===bl.toBase58()}))],{allTrade:y,realAmountIn:b,amountOut:g,minAmountOut:P,expirationTime:w,currentPrice:B,executionPrice:A,priceImpact:h,fee:x,remainingAccounts:S,executionPriceX64:K}=ft.computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:new qt(d.address),amountIn:o,slippage:i,epochInfo:a,catchLiquidityInsufficient:u,blockTimestamp:s}),I=E(N({},b),{amount:new Le(m,b.amount),fee:b.fee===void 0?void 0:new Le(m,b.fee)}),C=E(N({},g),{amount:new Le(f,g.amount),fee:g.fee===void 0?void 0:new Le(f,g.fee)}),R=E(N({},P),{amount:new Le(f,P.amount),fee:P.fee===void 0?void 0:new Le(f,P.fee)}),O=new Dt({baseToken:m,denominator:new xt(10).pow(new xt(20+m.decimals)),quoteToken:f,numerator:B.mul(new he(10**(20+f.decimals))).toFixed(0)}),L=new Dt({baseToken:m,denominator:new xt(10).pow(new xt(20+m.decimals)),quoteToken:f,numerator:A.mul(new he(10**(20+f.decimals))).toFixed(0)}),M=new Le(m,x);return{allTrade:y,realAmountIn:I,amountOut:C,minAmountOut:R,expirationTime:w,currentPrice:O,executionPrice:L,priceImpact:h,fee:M,remainingAccounts:S,executionPriceX64:K}}static computeAmountIn({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:r,amountOut:i,slippage:a,priceLimit:s=new he(0),blockTimestamp:u}){var O;let l=o.toBase58()===e.mintA.address,d={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},p;s.equals(new he(0))?p=l?It.sub(new xt(1)):Bt.add(new xt(1)):p=ie.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let m=bt(i,d[o.toString()],r,!0),{allTrade:f,expectedAmountIn:y,remainingAccounts:b,executionPrice:g,feeAmount:P}=ft.getInputAmountAndRemainAccounts(e,t,n,o,m.amount.sub((O=m.fee)!=null?O:ee),u,p),w=l?e.mintB.address:e.mintA.address,B=bt(y,d[w],r,!1),A=ie.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?A:new he(1).div(A),x=y.mul(new xt(Math.floor((1+a)*1e10))).div(new xt(1e10)),S=bt(x,d[w],r,!0),K=l?e.currentPrice:new he(1).div(e.currentPrice),I=new he(h).sub(K).abs(),C=K,R=new ht(new he(I).mul(10**15).toFixed(0),new he(C).mul(10**15).toFixed(0));return{allTrade:f,amountIn:B,maxAmountIn:S,realAmountOut:m,expirationTime:En(B.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:R,fee:P,remainingAccounts:b}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var f,y,b;let r=e[t],i=ie.tickToPrice(n,e.mintA.decimals,e.mintB.decimals).toNumber(),a=ie.tickToPrice(o,e.mintA.decimals,e.mintB.decimals).toNumber(),s=Math.max(i,r.priceMin),l=Math.min(a,r.priceMax)-s,d=a-i,p=r.priceMax-r.priceMin,m;return l<=0?m=0:d===l?m=p/l:p===l?m=l/d:m=l/p*(l/d),{feeApr:r.feeApr*m,rewardsApr:[((f=r.rewardApr[0])!=null?f:0)*m,((y=r.rewardApr[1])!=null?y:0)*m,((b=r.rewardApr[2])!=null?b:0)*m],apr:r.apr*m}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:r,positionTickLowerIndex:i,positionTickUpperIndex:a,chainTime:s}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],d=o[Ot(e.mintA.address).toString()],p=o[Ot(e.mintB.address).toString()],m=e.mintA.decimals,f=e.mintB.decimals;if(!l||!d||!p)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let y=ie.priceToSqrtPriceX64(new he(e.price),e.mintA.decimals,e.mintB.decimals),b=ie.getSqrtPriceAtTick(i),g=ie.getSqrtPriceAtTick(a),{amountSlippageA:P,amountSlippageB:w}=at.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:B,amountSlippageB:A}=at.getAmountsFromLiquidityWithSlippage(y,b,g,r,!1,!1,0),h=new he(P.toString()).div(new he(10).pow(m)).mul(d.value).add(new he(w.toString()).div(new he(10).pow(f)).mul(p.value)),x=new he(B.toString()).div(new he(10).pow(m)).mul(d.value).add(new he(A.toString()).div(new he(10).pow(f)).mul(p.value)),S=new he(1).div(h.add(x)),I=new he(l.volumeFee).mul(365).div(u).mul(S).mul(100).toNumber(),C=3600*24*365,R=e.rewardDefaultInfos.map(O=>{var W,D;let L=O.mint.decimals,M=o[O.mint.address];return s<((W=O.startTime)!=null?W:0)||s>((D=O.endTime)!=null?D:0)||!O.perSecond||!M||L===void 0?0:new he(M.value).mul(new he(O.perSecond).mul(C)).div(new he(10).pow(L)).mul(S).mul(100).toNumber()});return{feeApr:I,rewardsApr:R,apr:I+R.reduce((O,L)=>O+L,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:r,slippage:i,add:a,epochInfo:s,amountHasFee:u}){var g,P;let l=ie.priceToSqrtPriceX64(new he(e.price),e.mintA.decimals,e.mintB.decimals),d=ie.getSqrtPriceAtTick(n),p=ie.getSqrtPriceAtTick(o),m=bt(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,s,!u),f=new xt(new he(m.amount.sub((P=m.fee)!=null?P:ee).toString()).toFixed(0)),y;if(l.lte(d))y=t?at.getLiquidityFromAmountA(d,p,f):new xt(0);else if(l.lte(p)){let w=at.getLiquidityFromAmountA(l,p,f),B=at.getLiquidityFromAmountB(d,l,f);y=t?w:B}else y=t?new xt(0):at.getLiquidityFromAmountB(d,p,f);let b=await ft.getAmountsFromLiquidity({epochInfo:s,poolInfo:e,tickLower:n,tickUpper:o,liquidity:y,slippage:i,add:a});return{liquidity:y,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:r,slippage:i,add:a}){var b,g,P,w;let s=ie.getSqrtPriceAtTick(n),u=ie.getSqrtPriceAtTick(o),l=at.getAmountsForLiquidity(ie.priceToSqrtPriceX64(new he(t.price),t.mintA.decimals,t.mintB.decimals),s,u,r,a),[d,p]=[bt(l.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),bt(l.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],m=i*1e4,[f,y]=[bt(l.amountA.muln(1e4-m).divn(1e4),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),bt(l.amountB.muln(1e4-m).divn(1e4),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:r,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:En(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(u=>!n[u.id]).map(u=>new qt(u.id));(await wt(e,o)).forEach((u,l)=>{!u||(n[o[l].toBase58()]=wo.decode(u.data))});let i=t.map(u=>Ge(new qt(u.programId),new qt(u.id)).publicKey),a=await ft.fetchExBitmaps({connection:e,exBitmapAddress:i,batchRequest:!1}),s={};return t.reduce((u,l)=>E(N({},u),{[l.id]:E(N({accInfo:n[l.id]},n[l.id]),{id:new qt(l.id),version:6,programId:new qt(l.programId),mintA:l.mintA,mintB:l.mintB,ammConfig:E(N({},l.config),{id:new qt(l.config.id),fundOwner:""}),currentPrice:new he(l.price),exBitmapAccount:Ge(new qt(l.programId),new qt(l.id)).publicKey,exBitmapInfo:a[Ge(new qt(l.programId),new qt(l.id)).publicKey.toBase58()],startTime:n[l.id].startTime.toNumber(),rewardInfos:n[l.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:r}){let i=Pe.getTickArrayStartIndex(o,r),a=Oe(t,n,i).publicKey,s=await e.getAccountInfo(a);if(!s)throw new Error(`tick array ${a.toBase58()} not found`);return Yo.decode(s.data)}static async fetchMultipleTickArrayInfo({connection:e,tickInfoList:t}){let n=t.map(r=>{let i=Pe.getTickArrayStartIndex(r.tick,r.tickSpacing);return Oe(r.programId,r.poolId,i).publicKey});return(await wt(e,n)).map(r=>r&&Yo.decode(r.data))}},Ms={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function gl(c,e){let t=e!=null?e:{};return E(N({},c),{type:"Concentrated",programId:c.programId.toString(),id:c.id.toString(),rewardDefaultInfos:c.rewardInfos.filter(n=>!n.mint.equals(qt.default)).map(n=>{var o,r;return{mint:gt({address:n.mint.toBase58(),programId:Wp.toBase58(),decimals:(o=t[n.mint.toBase58()].decimals)!=null?o:6}),perSecond:Number(n.emissionsPerSecondX64.divn(10**((r=t[n.mint.toBase58()].decimals)!=null?r:6)).toString()),startTime:n.openTime.toNumber(),endTime:n.endTime.toNumber()}}),rewardDefaultPoolInfos:"Clmm",price:c.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:c.ammConfig.tradeFeeRate,openTime:c.startTime.toString(),tvl:0,day:Ms,week:Ms,month:Ms,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:E(N({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),hasDynamicFee:!1,feeOn:"",launchMigratePool:!1,tips:[]})}import jo from"bn.js";var Pl=class{static getfeeGrowthInside(e,t,n){let o=new jo(0),r=new jo(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(o=vt(e.feeGrowthGlobalX64A,t.feeGrowthOutsideX64A),r=vt(e.feeGrowthGlobalX64B,t.feeGrowthOutsideX64B));let i=new jo(0),a=new jo(0);e.tickCurrent<n.tick?(i=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(i=vt(e.feeGrowthGlobalX64A,n.feeGrowthOutsideX64A),a=vt(e.feeGrowthGlobalX64B,n.feeGrowthOutsideX64B));let s=vt(vt(e.feeGrowthGlobalX64A,o),i),u=vt(vt(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:s,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:i}=this.getfeeGrowthInside(e,n,o),a=Ee(vt(r,t.feeGrowthInsideLastX64A),t.liquidity,xe),s=t.tokenFeesOwedA.add(a),u=Ee(vt(i,t.feeGrowthInsideLastX64B),t.liquidity,xe),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:s,tokenFeeAmountB:l}}static GetPositionRewards(e,t,n,o){let r=[],i=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<i.length;a++){let s=i[a],u=t.rewardInfos[a],l=vt(s,u.growthInsideLastX64),d=Ee(l,t.liquidity,xe),p=u.rewardAmountOwed.add(d);r.push(p)}return r}static getRewardGrowthInside(e,t,n,o){let r=[];for(let i=0;i<o.length;i++){let a=new jo(0);t.liquidityGross.eqn(0)?a=o[i].growthGlobalX64:e<t.tick?a=vt(o[i].growthGlobalX64,t.rewardGrowthsOutsideX64[i]):a=t.rewardGrowthsOutsideX64[i];let s=new jo(0);n.liquidityGross.eqn(0)||(e<n.tick?s=n.rewardGrowthsOutsideX64[i]:s=vt(o[i].growthGlobalX64,n.rewardGrowthsOutsideX64[i])),r.push(vt(vt(o[i].growthGlobalX64,a),s))}return r}};function St(c){let e=`global:${c}`;return Buffer.from(qp.digest(e)).slice(0,8)}$c.span;var Al=ke("Raydium_Clmm"),Kt={createPool:St("create_pool"),createCustomizablePool:St("create_customizable_pool"),createPermissionedPool:St("create_permissioned_pool"),openPositionV2:St("open_position_v2"),openPositionWithToken22Nft:St("open_position_with_token22_nft"),closePosition:St("close_position"),increaseLiquidityV2:St("increase_liquidity_v2"),decreaseLiquidityV2:St("decrease_liquidity_v2"),initializeReward:St("initialize_reward"),setRewardParams:St("set_reward_params"),updateRewardInfos:St("update_reward_infos"),collectRemainingRewards:St("collect_remaining_rewards"),swapV2:St("swap_v2"),openLimitOrder:St("open_limit_order"),increaseLimitOrder:St("increase_limit_order"),decreaseLimitOrder:St("decrease_limit_order"),settleLimitOrder:St("settle_limit_order"),closeLimitOrder:St("close_limit_order")},wl=[188,37,179,131,82,150,84,73],kl=[16,72,250,198,14,162,212,19],be=class{static createPoolInstruction(e,t,n,o,r,i,a,s,u,l,d,p,m,f){let y=v([se("sqrtPriceX64"),k("startTime")]),b=[{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:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:yt,isSigner:!1,isWritable:!1},...(f!=null?f:[]).map(w=>({pubkey:w,isSigner:!1,isWritable:!1}))],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:m,startTime:ee},g);let P=Buffer.from([...Kt.createPool,...g]);return new ot({keys:b,programId:e,data:P})}static createCustomizablePoolInstruction(e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b){let g=v([se("sqrtPriceX64"),_("collectFeeOn"),Ze("enableDynamicFee")]),P=[{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:i,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:yt,isSigner:!1,isWritable:!1},...y.map(A=>({pubkey:A,isSigner:!1,isWritable:!1})),...b?[{pubkey:b,isSigner:!1,isWritable:!1}]:[]],w=Buffer.alloc(g.span);g.encode({sqrtPriceX64:m,collectFeeOn:f,enableDynamicFee:b!==void 0},w);let B=Buffer.from([...Kt.createCustomizablePool,...w]);return new ot({keys:P,programId:e,data:B})}static createPermissionedPoolInstruction(e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w){let B=v([se("sqrtPriceX64"),_("collectFeeOn"),Ze("enableDynamicFee"),_e("seedIndex")]),A=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:yt,isSigner:!1,isWritable:!1},...P.map(S=>({pubkey:S,isSigner:!1,isWritable:!1})),...w?[{pubkey:w,isSigner:!1,isWritable:!1}]:[]],h=Buffer.alloc(B.span);B.encode({sqrtPriceX64:y,collectFeeOn:b,enableDynamicFee:w!==void 0,seedIndex:g},h);let x=Buffer.from([...Kt.createPermissionedPool,...h]);return new ot({keys:A,programId:e,data:x})}static initializeRewardInstruction(e,t,n,o,r,i,a,s,u,l,d,p){let m=v([k("openTime"),k("endTime"),se("emissionsPerSecondX64")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:yt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(m.span);m.encode({openTime:l,endTime:d,emissionsPerSecondX64:p},y);let b=Buffer.from([...Kt.initializeReward,...y]);return new ot({keys:f,programId:e,data:b})}static updateRewardInfosInstruction(e,t){let n=[{pubkey:t,isSigner:!1,isWritable:!0}],o=Buffer.from([...Kt.updateRewardInfos]);return new ot({keys:n,programId:e,data:o})}static setRewardParamsInstruction(e,t,n,o,r,i,a,s,u,l,d,p){let m=v([_("rewardIndex"),se("emissionsPerSecondX64"),k("openTime"),k("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0}],y=Buffer.alloc(m.span);m.encode({rewardIndex:u,emissionsPerSecondX64:p,openTime:l,endTime:d},y);let b=Buffer.from([...Kt.setRewardParams,...y]);return new ot({keys:f,programId:e,data:b})}static closePositionInstruction(e,t,n,o,r,i,a){let s=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:i?st:Me,isSigner:!1,isWritable:!1}];a&&s.push({pubkey:a,isSigner:!1,isWritable:!0});let u=Buffer.from([...Kt.closePosition]);return new ot({keys:s,programId:e,data:u})}static openPositionV2Instruction(e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w,B,A,h,x,S,K,I,C){let R=v([mt("tickLower"),mt("tickUpper"),mt("tickArrayLowerStart"),mt("tickArrayUpperStart"),se("liquidity"),k("amountMaxA"),k("amountMaxB"),Ze("withMetadata"),_("optionBaseFlag"),Ze("baseFlag")]),O=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:yt,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:Fs,isSigner:!1,isWritable:!1},{pubkey:pn,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...C?[{pubkey:C,isSigner:!1,isWritable:!0}]:[]],L=Buffer.alloc(R.span);R.encode({tickLower:P,tickUpper:w,tickArrayLowerStart:B,tickArrayUpperStart:A,liquidity:h,amountMaxA:x,amountMaxB:S,withMetadata:K,optionBaseFlag:I!==null?1:0,baseFlag:I!=null?I:!1},L);let M=Buffer.from([...Kt.openPositionV2,...L]);return new ot({keys:O,programId:e,data:M})}static increaseLiquidityV2Instruction(e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w){let B=v([se("liquidity"),k("amountMaxA"),k("amountMaxB"),_("optionBaseFlag"),Ze("baseFlag")]),A=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],h=Buffer.alloc(B.span);B.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:P!==null?1:0,baseFlag:P!=null?P:!1},h);let x=Buffer.from([...Kt.increaseLiquidityV2,...h]);return new ot({keys:A,programId:e,data:x})}static decreaseLiquidityV2Instruction(e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w){let B=v([se("liquidity"),k("amountMinA"),k("amountMinB")]),A=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[],...y.map(S=>[{pubkey:S.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.rewardMint,isSigner:!1,isWritable:!1}]).flat()],h=Buffer.alloc(B.span);B.encode({liquidity:b,amountMinA:g,amountMinB:P},h);let x=Buffer.from([...Kt.decreaseLiquidityV2,...h]);return new ot({keys:A,programId:e,data:x})}static swapV2Instruction(e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g){let P=v([k("amount"),k("otherAmountThreshold"),se("sqrtPriceLimitX64"),Ze("isBaseInput")]),w=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...d.map(h=>({pubkey:h,isSigner:!1,isWritable:!0}))],B=Buffer.alloc(P.span);P.encode({amount:m,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},B);let A=Buffer.from([...Kt.swapV2,...B]);return new ot({keys:w,programId:e,data:A})}static collectRemainingRewardsInstruction(e,t,n,o,r,i,a){let s=v([_("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1}],l=Buffer.alloc(s.span);s.encode({rewardIndex:a},l);let d=Buffer.from([...Kt.collectRemainingRewards,...l]);return new ot({keys:u,programId:e,data:d})}static openPositionWithToken22NftInstruction(e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w,B,A,h,x,S,K,I){let C=v([mt("tickLower"),mt("tickUpper"),mt("tickArrayLowerStart"),mt("tickArrayUpperStart"),se("liquidity"),k("amountMaxA"),k("amountMaxB"),Ze("withMetadata"),_("optionBaseFlag"),Ze("baseFlag")]),R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:yt,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:Fs,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],O=Buffer.alloc(C.span);C.encode({tickLower:g,tickUpper:P,tickArrayLowerStart:w,tickArrayUpperStart:B,liquidity:A,amountMaxA:h,amountMaxB:x,withMetadata:S,optionBaseFlag:K!==null?1:0,baseFlag:K!=null?K:!1},O);let L=Buffer.from([...Kt.openPositionWithToken22Nft,...O]);return new ot({keys:R,programId:e,data:L})}static openLimitOrderInstruction(e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P){let w=v([_("nonceIndex"),Ze("zeroForOne"),mt("tickIndex"),k("amount")]),B=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],A=Buffer.alloc(w.span);w.encode({nonceIndex:f,zeroForOne:y,tickIndex:b,amount:g},A);let h=Buffer.from([...Kt.openLimitOrder,...A]);return new ot({keys:B,programId:e,data:h})}static increaseLimitOrderInstruction(e,t,n,o,r,i,a,s,u,l){let d=v([k("amount")]),p=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1}],m=Buffer.alloc(d.span);d.encode({amount:l},m);let f=Buffer.from([...Kt.increaseLimitOrder,...m]);return new ot({keys:p,programId:e,data:f})}static decreaseLimitOrderInstruction(e,t,n,o,r,i,a,s,u,l,d,p,m,f){let y=v([k("amount"),k("amountMin")]),b=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},...f?[{pubkey:f,isSigner:!1,isWritable:!0}]:[]],g=Buffer.alloc(y.span);y.encode({amount:p,amountMin:m},g);let P=Buffer.from([...Kt.decreaseLimitOrder,...g]);return new ot({keys:b,programId:e,data:P})}static settleLimitOrderInstruction(e,t,n,o,r,i,a,s,u){let l=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1}],d=Buffer.from([...Kt.settleLimitOrder]);return new ot({keys:l,programId:e,data:d})}static closeLimitOrderInstruction(e,t,n,o){let r=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0}],i=Buffer.from([...Kt.closeLimitOrder]);return new ot({keys:r,programId:e,data:i})}static createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:r,ammConfigId:i,initialPriceX64:a,extendMintAccount:s}=e,[u,l]=[new Q(o.address),new Q(r.address)],[d,p]=[new Q(o.programId||Me),new Q(r.programId||Me)],{publicKey:m}=rl(t,i,u,l),{publicKey:f}=Cs(t,m),{publicKey:y}=tn(t,m,u),{publicKey:b}=tn(t,m,l),g=Ge(t,m).publicKey,P=[this.createPoolInstruction(t,m,n,i,f,u,y,d,l,b,p,g,a,s)];return{signers:[],instructions:P,instructionTypes:[Y.CreateAccount,Y.ClmmCreatePool],address:{poolId:m,observationId:f,exBitmapAccount:g,mintA:u,mintB:l,mintAProgram:d,mintBProgram:p,mintAVault:y,mintBVault:b},lookupTableAddress:[]}}static createPermissionedPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:r,ammConfigId:i,initialPriceX64:a,extendMintAccount:s,payer:u,seedIndex:l}=e,[d,p]=[new Q(o.address),new Q(r.address)],[m,f]=[new Q(o.programId||Me),new Q(r.programId||Me)],{publicKey:y}=sl(t,i,d,p,l),{publicKey:b}=al(t,u),{publicKey:g}=Cs(t,y),{publicKey:P}=tn(t,y,d),{publicKey:w}=tn(t,y,p),B=Ge(t,y).publicKey,A=[this.createPoolInstruction(t,y,n,i,g,d,P,m,p,w,f,B,a,s)];return{signers:[],instructions:A,instructionTypes:[Y.CreateAccount,Y.ClmmCreatePool],address:{poolId:y,observationId:g,exBitmapAccount:B,mintA:d,mintB:p,mintAProgram:m,mintBProgram:f,mintAVault:P,mintBVault:w,permission:b},lookupTableAddress:[]}}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,liquidity:i,amountMaxA:a,amountMaxB:s,base:u,withMetadata:l,getEphemeralSigners:d,nft2022:p}){let m=[],[f,y]=[new Q(e.programId),new Q(e.id)],b;if(d)b=new Q((await d(1))[0]);else{let I=ta.generate();m.push(I),b=I.publicKey}let g=Pe.getTickArrayStartIndex(o,e.config.tickSpacing),P=Pe.getTickArrayStartIndex(r,e.config.tickSpacing),{publicKey:w}=Oe(f,y,g),{publicKey:B}=Oe(f,y,P),{publicKey:A}=p?te(n.wallet,b,st):te(n.wallet,b,Me),{publicKey:h}=qn(b),{publicKey:x}=nn(f,b),{publicKey:S}=Pn(f,y,o,r),K=p?this.openPositionWithToken22NftInstruction(f,n.feePayer,y,n.wallet,b,A,S,w,B,x,n.tokenAccountA,n.tokenAccountB,new Q(t.vault.A),new Q(t.vault.B),new Q(e.mintA.address),new Q(e.mintB.address),o,r,g,P,i,a,s,l==="create",u&&u==="MintA",Yt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,P]})?Ge(f,y).publicKey:void 0):this.openPositionV2Instruction(f,n.feePayer,y,n.wallet,b,A,h,S,w,B,x,n.tokenAccountA,n.tokenAccountB,new Q(t.vault.A),new Q(t.vault.B),new Q(e.mintA.address),new Q(e.mintB.address),o,r,g,P,i,a,s,l==="create",null,Yt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,P]})?Ge(f,y).publicKey:void 0);return{signers:m,instructions:[K],instructionTypes:[Y.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:w,tickArrayUpper:B,positionNftAccount:A,metadataAccount:h,personalPosition:x,protocolPosition:S}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,base:i,baseAmount:a,otherAmountMax:s,liquidity:u,withMetadata:l,getEphemeralSigners:d,nft2022:p}){let m=[],[f,y]=[new Q(e.programId),new Q(e.id)],b;if(d)b=new Q((await d(1))[0]);else{let I=ta.generate();m.push(I),b=I.publicKey}let g=Pe.getTickArrayStartIndex(o,e.config.tickSpacing),P=Pe.getTickArrayStartIndex(r,e.config.tickSpacing),{publicKey:w}=Oe(f,y,g),{publicKey:B}=Oe(f,y,P),{publicKey:A}=p?te(n.wallet,b,st):te(n.wallet,b,Me),{publicKey:h}=qn(b),{publicKey:x}=nn(f,b),{publicKey:S}=Pn(f,y,o,r),K=p?this.openPositionWithToken22NftInstruction(f,n.feePayer,y,n.wallet,b,A,S,w,B,x,n.tokenAccountA,n.tokenAccountB,new Q(t.vault.A),new Q(t.vault.B),new Q(e.mintA.address),new Q(e.mintB.address),o,r,g,P,u,!i||i==="MintA"?a:s,!i||i==="MintA"?s:a,l==="create",i&&i==="MintA",Yt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,P]})?Ge(f,y).publicKey:void 0):this.openPositionV2Instruction(f,n.feePayer,y,n.wallet,b,A,h,S,w,B,x,n.tokenAccountA,n.tokenAccountB,new Q(t.vault.A),new Q(t.vault.B),new Q(e.mintA.address),new Q(e.mintB.address),o,r,g,P,ee,i==="MintA"?a:s,i==="MintA"?s:a,l==="create",i==="MintA",Yt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,P]})?Ge(f,y).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:w,tickArrayUpper:B,positionNftAccount:A,metadataAccount:h,personalPosition:x,protocolPosition:S},instructions:[K],signers:m,instructionTypes:[Y.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,liquidity:i,amountMaxA:a,amountMaxB:s,base:u,withMetadata:l,getEphemeralSigners:d,nft2022:p}){let m,f=[];if(d)m=new Q((await d(1))[0]);else{let I=ta.generate();f.push(I),m=I.publicKey}let[y,b]=[new Q(e.programId),new Q(e.id)],g=Pe.getTickArrayStartIndex(o,e.config.tickSpacing),P=Pe.getTickArrayStartIndex(r,e.config.tickSpacing),{publicKey:w}=Oe(y,b,g),{publicKey:B}=Oe(y,b,P),{publicKey:A}=p?te(n.wallet,m,st):te(n.wallet,m,Me),{publicKey:h}=qn(m),{publicKey:x}=nn(y,m),{publicKey:S}=Pn(y,b,o,r),K=p?this.openPositionWithToken22NftInstruction(y,n.wallet,b,n.wallet,m,A,S,w,B,x,n.tokenAccountA,n.tokenAccountB,new Q(t.vault.A),new Q(t.vault.B),new Q(t.mintA.address),new Q(t.mintB.address),o,r,g,P,i,a,s,l==="create",u&&u==="MintA",Yt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,P]})?Ge(y,b).publicKey:void 0):this.openPositionV2Instruction(y,n.wallet,b,n.wallet,m,A,h,S,w,B,x,n.tokenAccountA,n.tokenAccountB,new Q(t.vault.A),new Q(t.vault.B),new Q(t.mintA.address),new Q(t.mintB.address),o,r,g,P,i,a,s,l==="create",null,Yt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,P]})?Ge(y,b).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:w,tickArrayUpper:B,positionNftAccount:A,metadataAccount:h,personalPosition:x,protocolPosition:S},instructions:[K],signers:f,instructionTypes:[Y.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:r}){let i=new Q(e.programId),a=r?te(n.wallet,o.nftMint,st).publicKey:te(n.wallet,o.nftMint,Me).publicKey,{publicKey:s}=nn(i,o.nftMint),u=[];return u.push(this.closePositionInstruction(i,n.wallet,o.nftMint,a,s,!!r,new Q(e.id))),{address:{positionNftAccount:a,personalPosition:s},signers:[],instructions:u,instructionTypes:[Y.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:r,amountMaxA:i,amountMaxB:a,nft2022:s}){let[u,l]=[new Q(e.programId),new Q(e.id)],d=Pe.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),p=Pe.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:m}=Oe(u,l,d),{publicKey:f}=Oe(u,l,p),{publicKey:y}=s?te(o.wallet,n.nftMint,st):te(o.wallet,n.nftMint,Me),{publicKey:b}=nn(u,n.nftMint),{publicKey:g}=Pn(u,l,n.tickLower,n.tickUpper),P=this.increaseLiquidityV2Instruction(u,o.wallet,y,b,l,g,m,f,o.tokenAccountA,o.tokenAccountB,new Q(t.vault.A),new Q(t.vault.B),new Q(e.mintA.address),new Q(e.mintB.address),r,i,a,null,Yt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[d,p]})?Ge(u,l).publicKey:void 0);return{address:{tickArrayLower:m,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},signers:[],instructions:[P],instructionTypes:[Y.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:r,baseAmount:i,otherAmountMax:a,nft2022:s}){let[u,l]=[new Q(e.programId),new Q(e.id)],d=Pe.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),p=Pe.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:m}=Oe(u,l,d),{publicKey:f}=Oe(u,l,p),{publicKey:y}=s?te(o.wallet,n.nftMint,st):te(o.wallet,n.nftMint,Me),{publicKey:b}=nn(u,n.nftMint),{publicKey:g}=Pn(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:m,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},instructions:[this.increaseLiquidityV2Instruction(u,o.wallet,y,b,l,g,m,f,o.tokenAccountA,o.tokenAccountB,new Q(t.vault.A),new Q(t.vault.B),new Q(e.mintA.address),new Q(e.mintB.address),ee,r==="MintA"?i:a,r==="MintA"?a:i,r==="MintA",Yt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[d,p]})?Ge(u,l).publicKey:void 0)],signers:[],instructionTypes:[Y.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:r,amountMinA:i,amountMinB:a,programId:s,nft2022:u}){let[l,d]=[new Q(e.programId),new Q(e.id)],p=Pe.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),m=Pe.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:f}=Oe(l,d,p),{publicKey:y}=Oe(l,d,m),{publicKey:b}=u?te(o.wallet,n.nftMint,st):te(o.wallet,n.nftMint,s),{publicKey:g}=nn(l,n.nftMint),{publicKey:P}=Pn(l,d,n.tickLower,n.tickUpper),w=new Map;for(let x=0;x<t.rewardInfos.length;x++)w.set(t.rewardInfos[x].mint.address,o.rewardAccounts[x]);let B=[];for(let x=0;x<t.rewardInfos.length;x++){let S=t.rewardInfos[x].mint.address,K=w.get(S);K&&B.push({poolRewardVault:new Q(t.rewardInfos[x].vault),ownerRewardVault:K,rewardMint:new Q(S)})}let A=[],h=this.decreaseLiquidityV2Instruction(l,o.wallet,b,g,d,P,f,y,o.tokenAccountA,o.tokenAccountB,new Q(t.vault.A),new Q(t.vault.B),new Q(e.mintA.address),new Q(e.mintB.address),B,r,i,a,Yt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[p,m]})?Ge(l,d).publicKey:void 0);return A.push(h),{address:{tickArrayLower:f,tickArrayUpper:y,positionNftAccount:b,personalPosition:g,protocolPosition:P},signers:[],instructions:A,instructionTypes:[Y.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:r,amountIn:i,amountOutMin:a,sqrtPriceLimitX64:s,remainingAccounts:u}){let[l,d]=[new Q(e.programId),new Q(e.id)],[p,m]=[new Q(t.vault.A),new Q(t.vault.B)],[f,y]=[new Q(e.mintA.address),new Q(e.mintB.address)],b=e.mintA.address.toString()===r.toString(),g=[this.swapV2Instruction(l,o.wallet,d,new Q(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?p:m,b?m:p,b?f:y,b?y:f,u,n,i,a,s,!0,Ge(l,d).publicKey)];return{signers:[],instructions:g,instructionTypes:[Y.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:r,amountOut:i,amountInMax:a,sqrtPriceLimitX64:s,remainingAccounts:u}){let[l,d]=[new Q(e.programId),new Q(e.id)],[p,m]=[new Q(t.vault.A),new Q(t.vault.B)],[f,y]=[new Q(e.mintA.address),new Q(e.mintB.address)],b=e.mintB.address.toString()===r.toBase58(),g=[this.swapV2Instruction(l,o.wallet,d,new Q(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?p:m,b?m:p,b?f:y,b?y:f,u,n,i,a,s,!1,Ge(l,d).publicKey)];return{signers:[],instructions:g,instructionTypes:[Y.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[r,i]=[new Q(e.programId),new Q(e.id)],a=ul(r,i,o.mint).publicKey,s=Ni(r).publicKey,u=[this.initializeRewardInstruction(r,n.wallet,i,s,new Q(e.config.id),n.tokenAccount,o.programId,o.mint,a,new na(o.openTime),new na(o.endTime),o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:s},signers:[],instructions:u,instructionTypes:[Y.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[r,i]=[new Q(e.programId),new Q(e.id)],a,s,u;for(let p=0;p<e.rewardDefaultInfos.length;p++)e.rewardDefaultInfos[p].mint.address===o.mint.toString()&&(a=p,s=new Q(t.rewardInfos[p].vault),u=new Q(t.rewardInfos[p].mint.address));(a===void 0||s===void 0)&&Al.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Ni(r).publicKey,d=[this.setRewardParamsInstruction(r,n.wallet,i,l,new Q(e.config.id),n.tokenAccount,s,u,a,new na(o.openTime),new na(o.endTime),o.emissionsPerSecondX64)];return{address:{rewardVault:s,operationId:l},signers:[],instructions:d,instructionTypes:[Y.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[r,i]=[new Q(e.programId),new Q(e.id)],a,s;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,s=new Q(t.rewardInfos[l].vault));(a===void 0||s===void 0)&&Al.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRemainingRewardsInstruction(r,n.wallet,i,n.tokenAccount,s,o,a)];return{address:{rewardVault:s},signers:[],instructions:u,instructionTypes:[Y.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:r,nftMint:i,nft2022:a,getEphemeralSigners:s}){let u=[],l;if(s)l=new Q((await s(1))[0]);else{let g=ta.generate();u.push(g),l=g.publicKey}let d=a?te(r,i,st).publicKey:te(r,i,Me).publicKey,{publicKey:p}=nn(n,i),m=Ho(e,l).publicKey,f=te(r,l,Me).publicKey,y=qn(l).publicKey,b=be.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:r,lockOwner:r,positionNftAccount:d,positionId:p,lockPositionId:m,lockNftMint:l,lockNftAccount:f,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:i,authPositionNftAccount:te(t,i,a?st:Me).publicKey,positionNftProgram:a?st:Me});return{address:{positionId:p,lockPositionId:m,lockNftAccount:f,lockNftMint:l,positionNftAccount:d,metadataAccount:y},instructions:[b],signers:u,instructionTypes:[Y.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:r,positionNftAccount:i,positionId:a,positionNftMint:s,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:d,lockNftMint:p,lockNftAccount:m,metadataAccount:f,withMetadata:y}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!0,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:pn,isSigner:!1,isWritable:!1},{pubkey:Fs,isSigner:!1,isWritable:!1},{pubkey:yt,isSigner:!1,isWritable:!1},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1}],g=v([Ze("withMetadata")]),P=Buffer.alloc(g.span);g.encode({withMetadata:y},P);let w=Buffer.from([...wl,...P]);return new ot({keys:b,programId:e,data:w})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:r}){let{publicKey:i}=te(o,r,Me),{publicKey:a}=nn(n,r),s=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Rs(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1}];return new ot({keys:s,programId:e,data:Buffer.from(wl)})}static harvestLockPositionInstruction(e){let[t,n]=[new Q(e.poolKeys.programId),new Q(e.poolKeys.id)],o=Pe.getTickArrayStartIndex(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=Pe.getTickArrayStartIndex(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:i}=Oe(t,n,o),{publicKey:a}=Oe(t,n,r),{publicKey:s}=te(e.owner,e.ownerPosition.nftMint,Me),{publicKey:u}=nn(t,e.ownerPosition.nftMint),{publicKey:l}=Pn(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),d=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)d.push({poolRewardVault:new Q(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new Q(e.poolKeys.rewardInfos[f].mint.address)});let p=[...d.map(f=>[{pubkey:f.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.rewardMint,isSigner:!1,isWritable:!1}]).flat()],m=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:Rs(e.programId,u).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:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new Q(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new Q(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:i,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:Me,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:new Q(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new Q(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...p];return new ot({keys:m,programId:e.programId,data:Buffer.from(kl)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:r,lockNftMint:i,lockNftAccount:a,positionNftAccount:s,positionId:u,poolId:l,protocolPosition:d,vaultA:p,vaultB:m,tickArrayLower:f,tickArrayUpper:y,userVaultA:b,userVaultB:g,mintA:P,mintB:w,rewardAccounts:B,exTickArrayBitmap:A}){let h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...B.map(S=>[{pubkey:S.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.rewardMint,isSigner:!1,isWritable:!1}]).flat()],x=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,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:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Me,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},...h];return new ot({keys:x,programId:e,data:Buffer.from(kl)})}};var _i=class extends tt{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var A;let{programId:t,owner:n=((A=this.scope.owner)==null?void 0:A.publicKey)||z.default,mint1:o,mint2:r,ammConfig:i,initialPrice:a,computeBudgetConfig:s,txVersion:u,txTipConfig:l,feePayer:d}=e,p=this.createTxBuilder(d),[m,f,y]=new ut(new z(o.address).toBuffer()).gt(new ut(new z(r.address).toBuffer()))?[r,o,new zn(1).div(a)]:[o,r,a],b=ie.priceToSqrtPriceX64(y,m.decimals,f.decimals),g=[],P=[];m.programId===un.toBase58()&&P.push(To(t,new z(m.address)).publicKey),f.programId===un.toBase58()&&P.push(To(t,new z(f.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(P)).forEach((h,x)=>{h&&g.push(P[x])});let B=await be.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:m,mintB:f,ammConfigId:i.id,initialPriceX64:b,extendMintAccount:g});return p.addInstruction(B),p.addCustomComputeBudget(s),p.addTipInstruction(l),p.versionBuild({txVersion:u,extInfo:{address:E(N({},B.address),{observationId:B.address.observationId.toBase58(),exBitmapAccount:B.address.exBitmapAccount.toBase58(),programId:t.toString(),id:B.address.poolId.toString(),mintA:m,mintB:f,openTime:"0",vault:{A:B.address.mintAVault.toString(),B:B.address.mintBVault.toString()},rewardInfos:[],config:{id:i.id.toString(),index:i.index,protocolFeeRate:i.protocolFeeRate,tradeFeeRate:i.tradeFeeRate,tickSpacing:i.tickSpacing,fundFeeRate:i.fundFeeRate,description:i.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:N({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:B.address.poolId.toString(),mintA:m,mintB:f,feeRate:i.tradeFeeRate,openTime:"0",programId:t.toString(),price:y.toNumber(),config:{id:i.id.toString(),index:i.index,protocolFeeRate:i.protocolFeeRate,tradeFeeRate:i.tradeFeeRate,tickSpacing:i.tickSpacing,fundFeeRate:i.fundFeeRate,description:i.description,defaultRange:0,defaultRangePoint:[]},feeOn:"Both",hasDynamicFee:!1,launchMigratePool:!1,burnPercent:0,tips:[]},Hr)}})}async createCustomizablePool(e){var I;let{programId:t,owner:n=((I=this.scope.owner)==null?void 0:I.publicKey)||z.default,mint1:o,mint2:r,initialPrice:i,ammConfig:a,collectFeeOnMint:s,dynamicFeeConfig:u,computeBudgetConfig:l,txVersion:d,txTipConfig:p,feePayer:m,addSupportMintExt:f}=e;if(e.collectFeeOn!==void 0)throw Error("SDK no longer supports this parameter, please use collectFeeOnMint");let y=this.createTxBuilder(m),[b,g,P]=new ut(new z(o.address).toBuffer()).gt(new ut(new z(r.address).toBuffer()))?[r,o,new zn(1).div(i)]:[o,r,i],w=ie.priceToSqrtPriceX64(P,b.decimals,g.decimals),B=[],A=[];f&&(b.programId===un.toBase58()&&A.push(To(t,new z(b.address)).publicKey),g.programId===un.toBase58()&&A.push(To(t,new z(g.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(A)).forEach((R,O)=>{R&&B.push(A[O])}));let{address:h}=await be.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:g,ammConfigId:a.id,initialPriceX64:w,extendMintAccount:B}),x=[];if(u){if(!await this.scope.connection.getAccountInfo(u))throw new Error("Dynamic Fee Config not found. Run 03_admin_create_dynamic_fee_config.ts first.");console.log("Dynamic Fee Config",u.toBase58()),x.push({pubkey:u,isSigner:!1,isWritable:!1})}let S;s===void 0?S=0:s.equals(h.mintA)?S=1:s.equals(h.mintB)?S=2:this.logAndCreateError("param collectFeeOnMint find error");let K=be.createCustomizablePoolInstruction(t,h.poolId,this.scope.ownerPubKey,a.id,h.mintA,h.mintB,h.mintAVault,h.mintBVault,h.observationId,h.exBitmapAccount,h.mintAProgram,h.mintBProgram,w,S,[...B,...x.map(C=>C.pubkey)],u);return y.addInstruction({instructions:[K]}),y.addCustomComputeBudget(l),y.addTipInstruction(p),y.versionBuild({txVersion:d,extInfo:{address:E(N({},h),{observationId:h.observationId.toBase58(),exBitmapAccount:h.exBitmapAccount.toBase58(),programId:t.toString(),id:h.poolId.toString(),mintA:b,mintB:g,openTime:"0",vault:{A:h.mintAVault.toString(),B:h.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:N({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:h.poolId.toString(),mintA:b,mintB:g,feeRate:a.tradeFeeRate,openTime:"0",programId:t.toString(),price:P.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:S,feeOn:S===0?"Both":S===1?"TokenA":"TokenB",hasDynamicFee:!!u,tips:[],launchMigratePool:!1},Hr)}})}async createPermissionedPool(e){var R;let{programId:t,owner:n=((R=this.scope.owner)==null?void 0:R.publicKey)||z.default,mint1:o,mint2:r,initialPrice:i,ammConfig:a,collectFeeOnMint:s,dynamicFeeConfig:u,computeBudgetConfig:l,txVersion:d,txTipConfig:p,feePayer:m,addSupportMintExt:f}=e;if(e.collectFeeOn!==void 0)throw Error("SDK no longer supports this parameter, please use collectFeeOnMint");let y=this.createTxBuilder(m),[b,g,P]=new ut(new z(o.address).toBuffer()).gt(new ut(new z(r.address).toBuffer()))?[r,o,new zn(1).div(i)]:[o,r,i],w=ie.priceToSqrtPriceX64(P,b.decimals,g.decimals),B=[],A=[];f&&(b.programId===un.toBase58()&&A.push(To(t,new z(b.address)).publicKey),g.programId===un.toBase58()&&A.push(To(t,new z(g.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(A)).forEach((L,M)=>{L&&B.push(A[M])}));let h=m!=null?m:this.scope.ownerPubKey,x=Math.floor(Math.random()*Math.pow(2,16))+1,{address:S}=await be.createPermissionedPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:g,ammConfigId:a.id,initialPriceX64:w,extendMintAccount:B,payer:h,seedIndex:x}),K=[];if(u){if(!await this.scope.connection.getAccountInfo(u))throw new Error("Dynamic Fee Config not found. Run 03_admin_create_dynamic_fee_config.ts first.");console.log("Dynamic Fee Config",u.toBase58()),K.push({pubkey:u,isSigner:!1,isWritable:!1})}let I;s===void 0?I=0:s.equals(S.mintA)?I=1:s.equals(S.mintB)?I=2:this.logAndCreateError("param collectFeeOnMint find error");let C=be.createPermissionedPoolInstruction(t,h,h,S.permission,a.id,S.poolId,S.mintA,S.mintB,S.mintAVault,S.mintBVault,S.observationId,S.exBitmapAccount,S.mintAProgram,S.mintBProgram,w,I,x,[...B,...K.map(O=>O.pubkey)],u);return y.addInstruction({instructions:[C]}),y.addCustomComputeBudget(l),y.addTipInstruction(p),y.versionBuild({txVersion:d,extInfo:{address:E(N({},S),{observationId:S.observationId.toBase58(),exBitmapAccount:S.exBitmapAccount.toBase58(),programId:t.toString(),id:S.poolId.toString(),mintA:b,mintB:g,openTime:"0",vault:{A:S.mintAVault.toString(),B:S.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:N({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:S.poolId.toString(),mintA:b,mintB:g,feeRate:a.tradeFeeRate,openTime:"0",programId:t.toString(),price:P.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:!!u,tips:[],launchMigratePool:!1},Hr)}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,base:i=null,baseAmount:a,otherAmountMax:s,liquidity:u=new ut(0),nft2022:l,associatedOnly:d=!0,checkCreateATAOwner:p=!1,withMetadata:m="create",getEphemeralSigners:f,computeBudgetConfig:y,txTipConfig:b,txVersion:g,feePayer:P}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let w=this.createTxBuilder(P),B=null,A=null,h=n.useSOLBalance&&e.mintA.address===J.toString(),x=n.useSOLBalance&&e.mintB.address===J.toString(),[S,K]=i==="MintA"?[a,s]:[s,a],{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||S.isZero()?{payer:this.scope.ownerPubKey,amount:S}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d,checkCreateATAOwner:p});I&&(B=I),w.addInstruction(C||{});let{account:R,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:x||K.isZero()?{payer:this.scope.ownerPubKey,amount:K}:void 0,skipCloseAccount:!x,notUseTokenAccount:x,associatedOnly:x?!1:d,checkCreateATAOwner:p});R&&(A=R),w.addInstruction(O||{}),(!B||!A)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:B==null?void 0:B.toBase58(),ownerTokenAccountB:A==null?void 0:A.toBase58()});let L=t!=null?t:await this.getClmmPoolKeys(e.id.toString()),M=await be.openPositionFromBaseInstructions({poolInfo:e,poolKeys:L,ownerInfo:E(N({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:B,tokenAccountB:A}),tickLower:o,tickUpper:r,base:i,baseAmount:a,otherAmountMax:s,liquidity:u,withMetadata:m,getEphemeralSigners:f,nft2022:l});return w.addInstruction(M),w.addCustomComputeBudget(y),w.addTipInstruction(b),w.versionBuild({txVersion:g,extInfo:N({},M.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:r,base:i=null,tickLower:a,tickUpper:s,liquidity:u,associatedOnly:l=!0,checkCreateATAOwner:d=!1,withMetadata:p="create",txVersion:m,computeBudgetConfig:f,txTipConfig:y,getEphemeralSigners:b,nft2022:g,feePayer:P}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let w=this.createTxBuilder(P),B=null,A=null,h=n.useSOLBalance&&e.mintA.address===J.toBase58(),x=n.useSOLBalance&&e.mintB.address===J.toBase58(),{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:d});S&&(B=S),w.addInstruction(K||{});let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:x||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!x,notUseTokenAccount:x,associatedOnly:x?!1:l,checkCreateATAOwner:d});I&&(A=I),w.addInstruction(C||{}),(B===void 0||A===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=t||await this.getClmmPoolKeys(e.id.toString()),O=await be.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:R,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:B,tokenAccountB:A},tickLower:a,tickUpper:s,liquidity:u,amountMaxA:o,amountMaxB:r,base:i,withMetadata:p,getEphemeralSigners:b,nft2022:g});return w.addInstruction(O),w.addCustomComputeBudget(f),w.addTipInstruction(y),w.versionBuild({txVersion:m,extInfo:{address:O.address}})}async increasePositionFromLiquidity(e){var I;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:r,amountMaxB:i,liquidity:a,ownerInfo:s,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:d,txTipConfig:p,txVersion:m,feePayer:f}=e,y=this.createTxBuilder(f),b,g,P=s.useSOLBalance&&t.mintA.address===J.toString(),w=s.useSOLBalance&&t.mintB.address===J.toString(),{account:B,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:P||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!P,associatedOnly:P?!1:u,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(A||{});let{account:h,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:u,checkCreateATAOwner:l});h&&(g=h),y.addInstruction(x||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=n!=null?n:await this.getClmmPoolKeys(t.id),K=be.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},liquidity:a,amountMaxA:r,amountMaxB:i,nft2022:(I=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:I.owner.equals(un)});return y.addInstruction(K),y.addCustomComputeBudget(d),y.addTipInstruction(p),y.versionBuild({txVersion:m,extInfo:{address:K.address}})}async increasePositionFromBase(e){var K;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:r,otherAmountMax:i,ownerInfo:a,associatedOnly:s=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:d,txVersion:p,feePayer:m}=e,f=this.createTxBuilder(m),y,b,g=a.useSOLBalance&&t.mintA.address===J.toString(),P=a.useSOLBalance&&t.mintB.address===J.toString(),{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||(o==="MintA"?r:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:i}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:s,checkCreateATAOwner:u});w&&(y=w),f.addInstruction(B||{});let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(o==="MintA"?i:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:r}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:s,checkCreateATAOwner:u});A&&(b=A),f.addInstruction(h||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=await this.getClmmPoolKeys(t.id),S=be.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:x,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:o,baseAmount:r,otherAmountMax:i,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(un)});return f.addInstruction(S),f.addCustomComputeBudget(l),f.addTipInstruction(d),f.versionBuild({txVersion:p,extInfo:{address:S.address}})}async decreaseLiquidity(e){var O;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:r,amountMinA:i,amountMinB:a,liquidity:s,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:d,txTipConfig:p,txVersion:m,feePayer:f}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let y=this.createTxBuilder(f),b=r.useSOLBalance&&t.mintA.address===J.toString(),g=r.useSOLBalance&&t.mintB.address===J.toString(),P,w,{account:B,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});P=B,A&&y.addInstruction(A);let{account:h,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});w=h,x&&y.addInstruction(x);let S=n!=null?n:await this.getClmmPoolKeys(t.id),K=[];for(let L of S.rewardInfos){let M=r.useSOLBalance&&L.mint.address===J.toString(),W;if(L.mint.address===t.mintA.address)W=P;else if(L.mint.address===t.mintB.address)W=w;else{let{account:D,instructionParams:X}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(L.mint.programId),mint:new z(L.mint.address),notUseTokenAccount:M,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!M,associatedOnly:M?!1:u,checkCreateATAOwner:l});W=D,X&&y.addInstruction(X)}K.push(W)}!P&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=(O=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:O.owner.equals(un),C=await be.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:w,rewardAccounts:K},liquidity:s,amountMinA:i,amountMinB:a,nft2022:I});y.addInstruction({instructions:C.instructions,instructionTypes:[Y.ClmmDecreasePosition]});let R=N({},C.address);if(r.closePosition){let L=await be.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:I});y.addInstruction({endInstructions:L.instructions,endInstructionTypes:L.instructionTypes}),R=N(N({},R),L.address)}return y.addCustomComputeBudget(d),y.addTipInstruction(p),y.versionBuild({txVersion:m,extInfo:{address:R}})}async lockPosition(e){var f;let{programId:t=Fo,authProgramId:n=Ti,poolProgramId:o=Sn,ownerPosition:r,payer:i,computeBudgetConfig:a,txTipConfig:s,txVersion:u,getEphemeralSigners:l,feePayer:d}=e,p=this.createTxBuilder(d),m=await be.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:i!=null?i:this.scope.ownerPubKey,nftMint:r.nftMint,getEphemeralSigners:l,nft2022:(f=await this.scope.connection.getAccountInfo(r.nftMint))==null?void 0:f.owner.equals(un)});return p.addInstruction(m),p.addCustomComputeBudget(a),p.addTipInstruction(s),p.versionBuild({txVersion:u,extInfo:m.address})}async harvestLockPosition(e){let{programId:t=Fo,authProgramId:n=Ti,clmmProgram:o=Sn,poolKeys:r,lockData:i,ownerInfo:a={useSOLBalance:!0},associatedOnly:s=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:d,txVersion:p,feePayer:m}=e,f=r||await this.getClmmPoolKeys(i.poolId.toString()),y=this.createTxBuilder(m),b=await this.scope.connection.getAccountInfo(i.positionId);b||this.logger.logWithError("position not found",i.positionId);let g=Qr.decode(b.data),P=a.useSOLBalance&&f.mintA.address===J.toString(),w=a.useSOLBalance&&f.mintB.address===J.toString(),B,A,{account:h,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new z(f.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:P?!1:s,checkCreateATAOwner:u});B=h,x&&y.addInstruction(x);let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new z(f.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:w?!1:s,checkCreateATAOwner:u});A=S,K&&y.addInstruction(K);let I={},C=[];for(let ne of f.rewardInfos){let re=a.useSOLBalance&&ne.mint.address===J.toString(),j=I[ne.mint.address];if(!j){let{account:pe,instructionParams:ae}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(ne.mint.programId),mint:new z(ne.mint.address),notUseTokenAccount:re,owner:this.scope.ownerPubKey,skipCloseAccount:!re,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:re?!1:s});j=pe,ae&&y.addInstruction(ae)}I[ne.mint.address]=j,C.push(j)}let R=Ho(t,i.lockNftMint).publicKey,O=te(this.scope.ownerPubKey,i.lockNftMint,Jo).publicKey,L=Pe.getTickArrayStartIndex(g.tickLower,f.config.tickSpacing),M=Pe.getTickArrayStartIndex(g.tickUpper,f.config.tickSpacing),{publicKey:W}=Oe(new z(f.programId),i.poolId,L),{publicKey:D}=Oe(new z(f.programId),i.poolId,M),{publicKey:X}=Pn(new z(f.programId),i.poolId,g.tickLower,g.tickUpper),Z=[];for(let ne=0;ne<f.rewardInfos.length;ne++){let re=f.rewardInfos[ne].mint.address,j=I[re];j&&Z.push({poolRewardVault:new z(f.rewardInfos[ne].vault),ownerRewardVault:j,rewardMint:new z(re)})}let H=await be.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:R,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:i.lockNftMint,lockNftAccount:O,positionNftAccount:i.nftAccount,positionId:i.positionId,poolId:i.poolId,protocolPosition:X,vaultA:new z(f.vault.A),vaultB:new z(f.vault.B),tickArrayLower:W,tickArrayUpper:D,userVaultA:B,userVaultB:A,mintA:new z(f.mintA.address),mintB:new z(f.mintB.address),rewardAccounts:Z,exTickArrayBitmap:Ge(o,i.poolId).publicKey});return y.addInstruction({instructions:[H],instructionTypes:[Y.ClmmHarvestLockPosition]}),y.addCustomComputeBudget(l),y.addTipInstruction(d),y.versionBuild({txVersion:p})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o,computeBudgetConfig:r,txTipConfig:i,feePayer:a}){var d;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let s=this.createTxBuilder(a),u=t!=null?t:await this.getClmmPoolKeys(e.id),l=be.closePositionInstructions({poolInfo:e,poolKeys:u,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(d=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:d.owner.equals(un)});return s.addCustomComputeBudget(r),s.addTipInstruction(i),s.addInstruction(l).versionBuild({txVersion:o,extInfo:{address:l.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:i,txVersion:a,feePayer:s}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(s),l=t.useSOLBalance&&n.mint.address.toString()===J.toString(),d=n.perSecond.mul(n.endTime-n.openTime),{account:p,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(n.mint.programId),mint:new z(n.mint.address),notUseTokenAccount:!!l,skipCloseAccount:!l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ut(new zn(d.toFixed(0)).gte(d)?d.toFixed(0):d.add(1).toFixed(0))}:void 0,associatedOnly:l?!1:o,checkCreateATAOwner:r});m&&u.addInstruction(m),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=be.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{programId:new z(n.mint.programId),mint:new z(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ho(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(i),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:a,txTipConfig:s,txVersion:u,feePayer:l}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=this.createTxBuilder(l),p={};for(let m of o){let f=n.useSOLBalance&&m.mint.address===J.toString(),y=m.perSecond.mul(m.endTime-m.openTime),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(m.mint.programId),mint:new z(m.mint.address),notUseTokenAccount:!!f,skipCloseAccount:!f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ut(new zn(y.toFixed(0)).gte(y)?y.toFixed(0):y.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:r,checkCreateATAOwner:i});g&&d.addInstruction(g),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let P=t!=null?t:await this.getClmmPoolKeys(e.id),w=be.initRewardInstructions({poolInfo:e,poolKeys:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new z(m.mint.programId),mint:new z(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ho(m.perSecond)}});p=N(N({},p),w.address),d.addInstruction(w)}return d.addCustomComputeBudget(a),d.addTipInstruction(s),d.versionBuild({txVersion:u,extInfo:{address:p}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:i,txTipConfig:a,txVersion:s,feePayer:u}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let l=this.createTxBuilder(u),d=t.useSOLBalance&&n.mint.equals(J),{account:p,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 ut(new zn(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:r});m&&l.addInstruction(m),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=be.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ho(n.perSecond)}});return l.addInstruction(y),l.addCustomComputeBudget(i),l.addTipInstruction(a),l.versionBuild({txVersion:s,extInfo:{address:y.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:a,txTipConfig:s,txVersion:u,feePayer:l}){let d=this.createTxBuilder(l),p={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let f=n.useSOLBalance&&m.mint.address===J.toString(),{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(m.mint.programId),mint:new z(m.mint.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ut(new zn(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:f?!1:r,checkCreateATAOwner:i});b&&d.addInstruction(b),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),P=be.setRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{mint:new z(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ho(m.perSecond)}});d.addInstruction(P),p=N(N({},p),P.address)}return d.addCustomComputeBudget(a),d.addTipInstruction(s),d.versionBuild({txVersion:u,extInfo:{address:p}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:i,txTipConfig:a,txVersion:s,feePayer:u}){let l=e.rewardDefaultInfos.find(g=>g.mint.address===n.toString());l||this.logAndCreateError("reward mint error","not found reward mint",n);let d=this.createTxBuilder(u),p=t.useSOLBalance&&n.equals(J),{account:m,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(l.mint.programId),mint:n,notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:r});f&&d.addInstruction(f),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),b=be.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:n});return d.addInstruction(b),d.addCustomComputeBudget(i),d.addTipInstruction(a),d.versionBuild({txVersion:s,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:i,txTipConfig:a,feePayer:s}){let u=this.createTxBuilder(s),l={};for(let d of n){let p=e.rewardDefaultInfos.find(P=>P.mint.address===d.toString());if(!p){this.logAndCreateError("reward mint error","not found reward mint",d);continue}let m=t.useSOLBalance&&d.equals(J),{account:f,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(p.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:r});f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),y&&u.addInstruction(y);let b=await this.getClmmPoolKeys(e.id),g=be.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:d});u.addInstruction(g),l=N(N({},l),g.address)}return u.addCustomComputeBudget(i),u.addTipInstruction(a),u.build({address:l})}async openLimitOrder({poolInfo:e,baseIn:t=!0,orderTick:n,amount:o,noneIndex:r=0,tickArrayBitmap:i,ownerInfo:a={useSOLBalance:!0},associatedOnly:s=!0,feePayer:u,computeBudgetConfig:l,txTipConfig:d,txVersion:p}){let m=new z(e.id),f=new z(e.programId),y=t?new z(e.mintA.address):new z(e.mintB.address),b=t?new z(e.mintB.address):new z(e.mintA.address),g=new z(e[t?"mintA":"mintB"].programId),P=new z(e[t?"mintB":"mintA"].programId),w=y.equals(J),B=b.equals(J),A=a.useSOLBalance&&w,h=a.useSOLBalance&&B,x=this.createTxBuilder(),S=A||!s?void 0:te(this.scope.ownerPubKey,y,g).publicKey;if(S)x.addInstruction({instructions:[Gn(this.scope.ownerPubKey,S,this.scope.ownerPubKey,y,g)]});else{let{account:X,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:g,mint:y,notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:o},associatedOnly:!A});S=X,Z&&x.addInstruction(Z)}let K=h||!s?void 0:te(this.scope.ownerPubKey,b,P).publicKey;if(K)x.addInstruction({instructions:[Gn(this.scope.ownerPubKey,K,this.scope.ownerPubKey,b,P)]});else{let{account:X,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:P,mint:b,notUseTokenAccount:h,owner:this.scope.ownerPubKey,skipCloseAccount:!h,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!h});K=X,Z&&x.addInstruction(Z)}let I=ll(f,this.scope.ownerPubKey,r).publicKey,C=await this.scope.connection.getAccountInfo(I),R=C?Jc.decode(C.data).orderNonce:new ut(0),O=cl(f,u||this.scope.ownerPubKey,I,R).publicKey,L=Pe.getTickArrayStartIndex(n,e.config.tickSpacing),M=Oe(f,m,L).publicKey,W=tn(f,m,new z(e[t?"mintA":"mintB"].address)).publicKey,D=tn(f,m,new z(e[t?"mintB":"mintA"].address)).publicKey;return x.addInstruction({instructions:[be.openLimitOrderInstruction(f,u||this.scope.ownerPubKey,m,M,I,O,S,K,W,D,y,b,g,r,t,n,o,i)]}),x.addCustomComputeBudget(l),x.addTipInstruction(d),x.versionBuild({txVersion:p,extInfo:{limitOrder:O}})}async increaseLimitOrder({poolInfo:e,limitOrder:t,amount:n,ownerInfo:o={useSOLBalance:!0},associatedOnly:r=!0,feePayer:i,computeBudgetConfig:a,txTipConfig:s,txVersion:u}){let l=new z(e.id),d=new z(e.programId),p=await this.scope.connection.getAccountInfo(t);p||this.logAndCreateError(`limit order ${t.toBase58()} not exist`);let m=ko.decode(p.data),f=m.zeroForOne?new z(e.mintA.address):new z(e.mintB.address),y=new z(e[m.zeroForOne?"mintA":"mintB"].programId),b=f.equals(J),g=o.useSOLBalance&&b,P=this.createTxBuilder(),w=g||!r?void 0:te(this.scope.ownerPubKey,f,y).publicKey;if(w)P.addInstruction({instructions:[Gn(this.scope.ownerPubKey,w,this.scope.ownerPubKey,f,y)]});else{let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y,mint:f,notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:n},associatedOnly:!g});w=x,S&&P.addInstruction(S)}let B=tn(d,l,new z(e[m.zeroForOne?"mintA":"mintB"].address)).publicKey,A=Pe.getTickArrayStartIndex(m.tick,e.config.tickSpacing),h=Oe(d,l,A).publicKey;return P.addInstruction({instructions:[be.increaseLimitOrderInstruction(d,i||this.scope.ownerPubKey,m.poolId,h,t,w,B,f,y,n)]}),P.addCustomComputeBudget(a),P.addTipInstruction(s),P.versionBuild({txVersion:u})}async decreaseLimitOrder({poolInfo:e,limitOrder:t,limitOrderInfo:n,amount:o,slippage:r=1e3,tickArrayBitmap:i,ownerInfo:a={useSOLBalance:!0},associatedOnly:s=!0,feePayer:u,computeBudgetConfig:l,txTipConfig:d,txVersion:p,forerunCreate:m}){let f=new z(e.id),y=new z(e.programId),b=n;if(!b){let X=await this.scope.connection.getAccountInfo(t);X||this.logAndCreateError(`limit order ${t.toBase58()} not exist`),b=ko.decode(X.data)}let g=o.muln(1e4-r).divn(1e4),P=eo.getUnFilledAmount({orderInfo:b});(P.isZero()||o.gt(P))&&this.logAndCreateError(`amount should be less than unfulfilled amount: ${P.toString()}, amount: ${o.toString()}`);let[w,B]=b.zeroForOne?[new z(e.mintA.address),new z(e.mintB.address)]:[new z(e.mintB.address),new z(e.mintA.address)],[A,h]=b.zeroForOne?[new z(e.mintA.programId),new z(e.mintB.programId)]:[new z(e.mintB.programId),new z(e.mintA.programId)],[x,S]=[w.equals(J),B.equals(J)],[K,I]=[a.useSOLBalance&&x,a.useSOLBalance&&S],C=this.createTxBuilder(),R=K||!s?void 0:te(this.scope.ownerPubKey,w,A).publicKey,O=I||!s?void 0:te(this.scope.ownerPubKey,B,h).publicKey;if(R)C.addInstruction({instructions:[Gn(this.scope.ownerPubKey,R,this.scope.ownerPubKey,w,A)]});else{let{account:X,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:A,mint:w,notUseTokenAccount:K,owner:this.scope.ownerPubKey,skipCloseAccount:!K,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!K});R=X,Z&&C.addInstruction(Z)}if(O)C.addInstruction({instructions:[Gn(this.scope.ownerPubKey,O,this.scope.ownerPubKey,B,h)]});else{let{account:X,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:h,mint:B,notUseTokenAccount:I,owner:this.scope.ownerPubKey,skipCloseAccount:!I,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!I});O=X,Z&&C.addInstruction(Z)}let[L,M]=[tn(y,f,w).publicKey,tn(y,f,B).publicKey],W=Pe.getTickArrayStartIndex(b.tick,e.config.tickSpacing),D=Oe(y,f,W).publicKey;return C.addInstruction({instructions:[be.decreaseLimitOrderInstruction(y,u||this.scope.ownerPubKey,f,D,t,R,O,L,M,w,B,o,g,i)]}),C.addCustomComputeBudget(l),C.addTipInstruction(d),C.versionBuild({txVersion:p,extInfo:{forerunCreate:m}})}async closeLimitOrder({programId:e=Sn,limitOrder:t,autoWithdraw:n=!0,tickArrayBitmap:o,slippage:r=0,feePayer:i,computeBudgetConfig:a,txTipConfig:s,txVersion:u}){let l=await this.scope.connection.getAccountInfo(t);l||this.logAndCreateError(`limit order ${t.toBase58()} not exist`);let d=ko.decode(l.data),p=eo.getUnFilledAmount({orderInfo:d});!n&&!p.isZero()&&this.logAndCreateError(`unfulfilled amount should be 0, (${p.toString()} remaining), please withdraw first or set autoWithdraw: true`);let m=this.createTxBuilder(),f=(await this.scope.api.fetchPoolById({ids:d.poolId.toBase58()}))[0];f||(f=(await this.getSimplePoolInfo(d.poolId)).poolInfo);let y=await ft.fetchTickArrayInfo({connection:this.scope.connection,programId:e,poolId:d.poolId,tick:d.tick,tickSpacing:f.config.tickSpacing}),b=eo.settleFilledOrder({orderInfo:d,tickInfo:y.ticks.find(g=>g.tick===d.tick)});if(p.isZero()){if(!b.isZero()){let g=await this.settleLimitOrder({limitOrder:t});m.addInstruction(N({},g.builder.AllTxData))}}else{let{builder:g}=await this.decreaseLimitOrder({poolInfo:f,limitOrder:t,limitOrderInfo:d,amount:p,tickArrayBitmap:o,slippage:r,txVersion:0});m.addInstruction({instructions:g.allInstructions})}return m.addInstruction({instructions:[be.closeLimitOrderInstruction(e,i||this.scope.ownerPubKey,this.scope.ownerPubKey,t)]}),m.addCustomComputeBudget(a),m.addTipInstruction(s),m.versionBuild({txVersion:u})}async closeAllLimitOrder({programId:e=Sn,limitOrders:t,autoWithdraw:n=!0,slippage:o=1e4,feePayer:r,computeBudgetConfig:i,txVersion:a}){let s=this.createTxBuilder(),l=(await wt(this.scope.connection,t)).map((P,w)=>P?E(N({},ko.decode(P.data)),{pda:t[w]}):null),d=l.filter(Boolean),p=d.map(P=>P.poolId.toBase58()),m=(await this.scope.api.fetchPoolById({ids:p.join(",")})).filter(Boolean),f={};m.forEach(P=>f[P.id]=P);let y=await ft.fetchMultipleTickArrayInfo({connection:this.scope.connection,tickInfoList:d.map(P=>({programId:e,poolId:P.poolId,tick:P.tick,tickSpacing:f[P.poolId.toString()].config.tickSpacing}))}),b={};y.forEach((P,w)=>{!P||(b[d[w].pda.toBase58()]=P)});let g=0;for(let P of t){let w=l[g];if(!w){g++;continue}let B=eo.getUnFilledAmount({orderInfo:w});!n&&!B.isZero()&&this.logAndCreateError(`${P.toBase58()} order unfulfilled amount should be 0 (${B.toString()} remaining), please withdraw first or set autoWithdraw: true`);let A=f[w.poolId.toBase58()],h=b[P.toBase58()],x=eo.settleFilledOrder({orderInfo:w,tickInfo:h.ticks.find(S=>S.tick===w.tick)});if(B.isZero()){if(!x.isZero()){let S=await this.settleLimitOrder({limitOrder:P,forerunCreate:!0});s.addInstruction(N({},S.builder.AllTxData))}}else{let{builder:S}=await this.decreaseLimitOrder({poolInfo:A,limitOrder:P,limitOrderInfo:w,amount:B,slippage:o,txVersion:0,forerunCreate:!0});s.addInstruction({instructions:S.allInstructions})}s.addInstruction({instructions:[be.closeLimitOrderInstruction(e,r||this.scope.ownerPubKey,this.scope.ownerPubKey,P)]}),g++}return a===0?s.sizeCheckBuildV0({computeBudgetConfig:i}):s.sizeCheckBuild({computeBudgetConfig:i})}async settleLimitOrder({limitOrder:e,feePayer:t,ownerInfo:n={useSOLBalance:!0},associatedOnly:o=!0,computeBudgetConfig:r,txTipConfig:i,txVersion:a,forerunCreate:s}){let u=await this.scope.connection.getAccountInfo(e);u||this.logAndCreateError(`limit order ${e.toBase58()} not exist`);let l=ko.decode(u.data),d=(await this.scope.api.fetchPoolById({ids:l.poolId.toBase58()}))[0];d||(d=(await this.getSimplePoolInfo(l.poolId)).poolInfo);let p=l.zeroForOne?d.mintB:d.mintA,[m,f]=[new z(p.address),new z(p.programId)],y=new z(d.programId),b=this.createTxBuilder(),g=m.equals(J),P=n.useSOLBalance&&g,w=P||!o?void 0:te(this.scope.ownerPubKey,m,f).publicKey;if(w)b.addInstruction({instructions:[Gn(this.scope.ownerPubKey,w,this.scope.ownerPubKey,m,f)]});else{let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f,mint:m,notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!P});w=A,h&&b.addInstruction(h)}let B=Pe.getTickArrayStartIndex(l.tick,d.config.tickSpacing);return b.addInstruction({instructions:[be.settleLimitOrderInstruction(y,t||this.scope.ownerPubKey,l.poolId,Oe(y,l.poolId,B).publicKey,e,w,tn(y,l.poolId,m).publicKey,m,f)]}),b.addCustomComputeBudget(r),b.addTipInstruction(i),b.versionBuild({txVersion:a,extInfo:{forerunCreate:s}})}async settleAllLimitOrder({limitOrders:e,feePayer:t,ownerInfo:n={useSOLBalance:!0},associatedOnly:o=!0,computeBudgetConfig:r,txVersion:i}){let a=await wt(this.scope.connection,e),s=[],u=a.map((m,f)=>{if(!m)return;let y=ko.decode(m.data);return s.push(y.poolId.toString()),E(N({},y),{pda:e[f]})}),l=await this.scope.api.fetchPoolById({ids:s.join(",")});l.filter(Boolean).length||(l=(await Promise.all(s.map(f=>this.getSimplePoolInfo(f)))).map(f=>f.poolInfo));let d=this.createTxBuilder(),p={};for(let m of u){if(!m)continue;let f=l.find(x=>x.id===m.poolId.toBase58());if(!f)continue;let y=new z(f.programId),b=new z(m.zeroForOne?f.mintB.address:f.mintA.address),g=b.equals(J),P=n.useSOLBalance&&g,w=new z(g?Jo:(await this.scope.token.getTokenInfo(b)).programId),B=p[b.toBase58()],A=P||!o?void 0:te(this.scope.ownerPubKey,b,w).publicKey;if(B)A=B;else{if(A)d.addInstruction({instructions:[Gn(this.scope.ownerPubKey,A,this.scope.ownerPubKey,b,w)]});else{let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w,mint:b,notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!P});A=x,S&&d.addInstruction(S)}p[b.toBase58()]=A}let h=Pe.getTickArrayStartIndex(m.tick,f.config.tickSpacing);d.addInstruction({instructions:[be.settleLimitOrderInstruction(y,t||this.scope.ownerPubKey,m.poolId,Oe(y,m.poolId,h).publicKey,m.pda,A,tn(y,m.poolId,b).publicKey,b,w)]})}return i===0?d.sizeCheckBuildV0({computeBudgetConfig:r}):d.sizeCheckBuild({computeBudgetConfig:r})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:r,priceLimit:i,observationId:a,ownerInfo:s,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:d=!1,txVersion:p,computeBudgetConfig:m,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintA.address.toString(),P=s.useSOLBalance&&e.mintA.address.toString()===J.toBase58(),w=s.useSOLBalance&&e.mintB.address.toString()===J.toBase58(),B;!i||i.equals(new zn(0))?B=g?Bt.add(new ut(1)):It.sub(new ut(1)):B=ie.priceToSqrtPriceX64(i,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:s.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:d});A=S,K&&b.addInstruction(K)}let h;if(!h){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||g?{payer:s.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:d});h=S,K&&b.addInstruction(K)}(!A||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.address,tokenB:e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:h,mintAUseSOLBalance:P,mintBUseSOLBalance:w,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id.toString());return b.addInstruction(be.makeSwapBaseInInstructions({poolInfo:E(N({},e),{id:e.id.toString(),programId:e.programId.toString()}),poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:h},inputMint:new z(n),amountIn:o,amountOutMin:r,sqrtPriceLimitX64:ee,remainingAccounts:u})),b.addCustomComputeBudget(m),b.addTipInstruction(f),b.versionBuild({txVersion:p})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:r,priceLimit:i,observationId:a,ownerInfo:s,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:d=!1,txVersion:p,computeBudgetConfig:m,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintB.address.toString(),P=s.useSOLBalance&&e.mintA.address.toString()===J.toBase58(),w=s.useSOLBalance&&e.mintB.address.toString()===J.toBase58(),B;!i||i.equals(new zn(0))?B=g?Bt.add(new ut(1)):It.sub(new ut(1)):B=ie.priceToSqrtPriceX64(i,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:s.feePayer||this.scope.ownerPubKey,amount:g?r:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:d});A=S,K&&b.addInstruction(K)}let h;if(!h){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||g?{payer:s.feePayer||this.scope.ownerPubKey,amount:g?0:r}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:d});h=S,K&&b.addInstruction(K)}(!A||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.address,tokenB:e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:h,mintAUseSOLBalance:P,mintBUseSOLBalance:w,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id.toString());return b.addInstruction(be.makeSwapBaseOutInstructions({poolInfo:E(N({},e),{id:e.id.toString(),programId:e.programId.toString()}),poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:h},outputMint:new z(n),amountOut:o,amountInMax:r,sqrtPriceLimitX64:ee,remainingAccounts:u})),b.addCustomComputeBudget(m),b.addTipInstruction(f),b.versionBuild({txVersion:p})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:a,txVersion:s,computeBudgetConfig:u,feePayer:l,lockProgram:d=Fo,lockAuth:p=Ti,clmmProgram:m=Sn}){var w,B;let f={};for(let A of this.scope.account.tokenAccountRawInfos)r?te(this.scope.ownerPubKey,A.accountInfo.mint,a).publicKey.equals(A.pubkey)&&(f[A.accountInfo.mint.toString()]=A.pubkey):f[A.accountInfo.mint.toString()]=A.pubkey;let y=Object.values(t).flat().map(A=>A.nftMint),b=await Ne(this.scope.connection,y.map(A=>({pubkey:A}))),g={};b.forEach(A=>{var h,x;g[A.pubkey.toBase58()]=(x=(h=A==null?void 0:A.accountInfo)==null?void 0:h.owner)!=null?x:null});let P=this.createTxBuilder(l);for(let A of Object.values(e)){if(t[A.id]===void 0||!t[A.id].find(L=>!L.liquidity.isZero()||L.rewardInfos.find(M=>!M.rewardAmountOwed.isZero())))continue;let h=A,x=o.useSOLBalance&&h.mintA.address===J.toString(),S=o.useSOLBalance&&h.mintB.address===J.toString(),K=f[h.mintA.address];if(!K)if(x){let{account:L,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:h.mintA.programId,mint:new z(h.mintA.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:r,checkCreateATAOwner:i});K=L,M&&P.addInstruction(M)}else{let L=new z(h.mintA.address);K=this.scope.account.getAssociatedTokenAccount(L,new z(h.mintA.programId)),P.addInstruction({instructions:[Gn(this.scope.ownerPubKey,K,this.scope.ownerPubKey,L,new z(h.mintA.programId))]})}let I=f[h.mintB.address];if(!I)if(S){let{account:L,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:h.mintB.programId,mint:new z(h.mintB.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:r,checkCreateATAOwner:i});I=L,M&&P.addInstruction(M)}else{let L=new z(h.mintB.address);I=this.scope.account.getAssociatedTokenAccount(L,new z(h.mintB.programId)),P.addInstruction({instructions:[Gn(this.scope.ownerPubKey,I,this.scope.ownerPubKey,L,new z(h.mintB.programId))]})}f[h.mintA.address]=K,f[h.mintB.address]=I;let C=[];for(let L of h.rewardDefaultInfos){let M=o.useSOLBalance&&L.mint.address===J.toString(),W=f[L.mint.address];if(!W){let{account:D,instructionParams:X}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(L.mint.programId),mint:new z(L.mint.address),notUseTokenAccount:M,owner:this.scope.ownerPubKey,skipCloseAccount:!M,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:M?!1:r});W=D,X&&P.addInstruction(X)}f[L.mint.address]=W,C.push(W)}let R=await this.getClmmPoolKeys(h.id),O=[];for(let L=0;L<R.rewardInfos.length;L++)O.push({poolRewardVault:new z(R.rewardInfos[L].vault),ownerRewardVault:C[L],rewardMint:new z(R.rewardInfos[L].mint.address)});for(let L of t[A.id]){let M=(w=n==null?void 0:n[A.id])==null?void 0:w[L.nftMint.toBase58()];if(M){let W=te(this.scope.ownerPubKey,M.lockNftMint,Jo).publicKey,D=Pe.getTickArrayStartIndex(L.tickLower,R.config.tickSpacing),X=Pe.getTickArrayStartIndex(L.tickUpper,R.config.tickSpacing),{publicKey:Z}=Oe(new z(R.programId),M.poolId,D),{publicKey:H}=Oe(new z(R.programId),M.poolId,X),{publicKey:ne}=Pn(new z(R.programId),M.poolId,L.tickLower,L.tickUpper),re=Ho(d,M.lockNftMint).publicKey,j=be.harvestLockPositionInstructionV2({programId:d,auth:p,lockPositionId:re,clmmProgram:m,lockOwner:this.scope.ownerPubKey,lockNftMint:M.lockNftMint,lockNftAccount:W,positionNftAccount:M.nftAccount,positionId:M.positionId,poolId:M.poolId,protocolPosition:ne,vaultA:new z(R.vault.A),vaultB:new z(R.vault.B),tickArrayLower:Z,tickArrayUpper:H,userVaultA:K,userVaultB:I,mintA:new z(R.mintA.address),mintB:new z(R.mintB.address),rewardAccounts:O,exTickArrayBitmap:Ge(m,M.poolId).publicKey});P.addInstruction({instructions:[j],instructionTypes:[Y.ClmmHarvestLockPosition],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]})}else{let W=be.decreaseLiquidityInstructions({poolInfo:h,poolKeys:R,ownerPosition:L,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:I,rewardAccounts:C},liquidity:new ut(0),amountMinA:new ut(0),amountMinB:new ut(0),nft2022:(B=g[L.nftMint.toBase58()])==null?void 0:B.equals(un)});P.addInstruction(W)}}}return s===0?P.sizeCheckBuildV0({computeBudgetConfig:u}):P.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Ni(e).publicKey);return t?jc.decode(t.data).whitelistMints.filter(o=>!o.equals(z.default)):[]}async getOwnerPositionInfo({programId:e=Sn}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(i=>i.accountInfo.amount.eq(new ut(1))).map(i=>nn(new z(e),i.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return o.forEach(i=>{if(!i)return;let a=Qr.decode(i.data);r.push(a)}),r}async getOwnerLockedPositionInfo({programId:e=Fo}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new ut(1))).map(s=>Ho(new z(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),r=[];o.forEach(s=>{if(!s)return;let u=el.decode(s.data);r.push(u)});let i=await this.scope.connection.getMultipleAccountsInfo(r.map(s=>s.positionId)),a=[];return i.forEach(s=>{if(!s)return;let u=Qr.decode(s.data);a.push(u)}),r.map((s,u)=>({position:a[u],lockInfo:s}))}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Ne(this.scope.connection,e.map(r=>({pubkey:new z(r)})),t),o={};for(let r=0;r<e.length;r++){let i=n[r];if(i===null||!i.accountInfo)throw Error("fetch pool info error: "+String(e[r]));let a=wo.decode(i.accountInfo.data),s=ie.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[r])]=E(N({},a),{currentPrice:s,programId:i.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 Ne(this.scope.connection,Array.from(n).map(s=>({pubkey:new z(s)}))),r={};o.forEach(s=>{!s.accountInfo||(r[s.pubkey.toBase58()]=Is.decode(s.accountInfo.data))});let i=await ft.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(s=>{var d,p,m,f;let[u,l]=[e[s].mintA.toBase58(),e[s].mintB.toBase58()];return{id:s,programId:e[s].programId.toBase58(),mintA:gt({address:u,decimals:e[s].mintDecimalsA,programId:t[u].programId.toBase58()||Jo.toBase58(),extensions:{feeConfig:(d=t[u])!=null&&d.feeConfig?Cn((p=t[u])==null?void 0:p.feeConfig):void 0}}),mintB:gt({address:l,decimals:e[s].mintDecimalsB,programId:t[l].programId.toBase58()||Jo.toBase58(),extensions:{feeConfig:(m=t[l])!=null&&m.feeConfig?Cn((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[s].currentPrice,config:E(N({},r[e[s].configId.toBase58()]),{id:e[s].configId.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await ft.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(i)});return{computeClmmPoolInfo:i,computePoolTickData:a}}async getPoolInfoFromRpc(e){let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58(),...t.rewardInfos.filter(l=>!l.mint.equals(z.default)).map(l=>l.mint.toBase58())]),o=await fo({connection:this.scope.connection,mints:Array.from(n).map(l=>new z(l))}),{computeClmmPoolInfo:r,computePoolTickData:i}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await Ne(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),s=gl(r[e],o);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");s.mintAmountA=Number(gn.decode(a[0].accountInfo.data).amount.toString()),s.mintAmountB=Number(gn.decode(a[1].accountInfo.data).amount.toString());let u=E(N({},r[e]),{exBitmapAccount:r[e].exBitmapAccount.toBase58(),observationId:r[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:r[e].rewardInfos.filter(l=>!l.vault.equals(z.default)).map(l=>{var d;return{mint:gt({address:l.mint.toBase58(),programId:Jo.toBase58(),decimals:(d=o[l.mint.toBase58()].decimals)!=null?d:6}),vault:l.vault.toBase58()}})});return{poolInfo:s,poolKeys:u,computePoolInfo:r[e],tickData:i,rpcPoolInfo:t,tickArrays:Object.values(i[e])}}async getSwapPoolInfo(e,t=!0){let{poolInfo:n,rpcData:o}=await this.getSimplePoolInfo(e),r=await this.scope.connection.getAccountInfo(o.configId),i=Is.decode(r.data),a=new z(n.programId),s=new z(e),u=await fl(a,this.scope.connection,s,o.tickCurrent,i.tickSpacing,o.tickArrayBitmap,t);return{poolInfo:n,rpcData:o,configInfo:i,tickArrays:u}}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(i=>[i.mintA.toBase58(),i.mintB.toBase58()]).flat()),o=await fo({connection:this.scope.connection,mints:Array.from(n).map(i=>new z(i))}),r={};return e.forEach(i=>{let a=t[i.toString()];if(!a)return null;let s=o[a.mintA.toBase58()],u=o[a.mintB.toBase58()];r[i.toString()]={poolInfo:{id:i.toString(),programId:a.programId.toString(),mintA:{address:a.mintA.toString(),programId:s.programId.toString(),decimals:a.mintDecimalsA},mintB:{address:a.mintB.toString(),programId:u.programId.toString(),decimals:a.mintDecimalsB},config:{id:a.configId.toBase58(),tickSpacing:a.tickSpacing}},rpcData:a}}),r}};import{PublicKey as Ws}from"@solana/web3.js";var vs=v([_("instruction")]),_s=v([_("instruction")]),Up=v([k("rewardState"),k("rewardOpenTime"),k("rewardEndTime"),k("rewardLastUpdateTime"),k("totalReward"),k("totalRewardEmissioned"),k("rewardClaimed"),k("rewardPerSecond"),se("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),k("rewardType"),$(k(),15,"padding")]),Gp=v([k("state"),k("nonce"),F("lpVault"),F("rewardVault"),F(),F(),k(),k(),k("totalReward"),se("perShareReward"),k("lastSlot"),k("perSlotReward")]),zp=v([k("state"),k("nonce"),F("lpVault"),F("rewardVaultA"),k("totalRewardA"),se("perShareRewardA"),k("perSlotRewardA"),_("option"),F("rewardVaultB"),we(7),k("totalRewardB"),se("perShareRewardB"),k("perSlotRewardB"),k("lastSlot"),F()]),Xp=v([k(),k("state"),k("nonce"),k("validRewardTokenNum"),se("rewardMultiplier"),k("rewardPeriodMax"),k("rewardPeriodMin"),k("rewardPeriodExtend"),F("lpMint"),F("lpVault"),$(Up,5,"rewardInfos"),F("creator"),F(),$(k(),32,"padding")]),Tl=new Proxy(Gp,{get(c,e,t){return e==="decode"?(...n)=>{let o=c.decode(...n);return E(N({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(c,e,t)}}),hl=new Proxy(zp,{get(c,e,t){return e==="decode"?(...n)=>{let o=c.decode(...n);return E(N({},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(c,e,t)}}),Vi=new Proxy(Xp,{get(c,e,t){return e==="decode"?(...n)=>{let o=c.decode(...n);return E(N({},o),{version:6,rewardInfos:o.rewardInfos.map(r=>{var i;return E(N({},r),{rewardType:((i=Object.entries(to).find(a=>String(a[1])===r.rewardType.toString()))!=null?i:["Standard SPL"])[0]})})})}:Reflect.get(c,e,t)}}),Yp=v([k("isSet"),k("rewardPerSecond"),k("rewardOpenTime"),k("rewardEndTime"),k("rewardType")]),Vs=v([_("instruction"),k("nonce"),$(Yp,5,"rewardTimeInfo")]),Es=v([_("instruction"),k("rewardReopenTime"),k("rewardEndTime"),k("rewardPerSecond")]),Ds=v([_("instruction"),k("isSet"),k("rewardPerSecond"),k("rewardOpenTime"),k("rewardEndTime"),k("rewardType")]),iI=v([k("state"),F("id"),F("owner"),k("deposited"),$(k(),1,"rewardDebts")]),Ei=v([k("state"),F("id"),F("owner"),k("deposited"),$(se(),1,"rewardDebts"),k(""),k("voteLockedBalance"),$(k(),15)]),rI=v([k("state"),F("id"),F("owner"),k("deposited"),$(k(),2,"rewardDebts")]),Bl=v([k("state"),F("id"),F("owner"),k("deposited"),$(se(),2,"rewardDebts"),$(k(),17)]),Il=v([k(),k("state"),F("id"),F("owner"),k("deposited"),$(se(),5,"rewardDebts"),$(k(),16)]),Ut=v([_("instruction"),k("amount")]),Hp=v([F("mint"),F("grantAuthority"),k("baselineVoteWeightScaledFactor"),k("maxExtraLockupVoteWeightScaledFactor"),k("lockupSaturationSecs"),vc("digitShift"),$(_(),7,"reserved1"),$(k(),7,"reserved2")]),xl=v([we(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),$(_(),32,"reserved1"),$(Hp,4,"votingMints"),qo("timeOffset"),_("bump"),$(_(),7,"reserved2"),$(k(),11,"reserved3")]),Qp=v([qo("startTime"),qo("endTime"),_("kind"),$(_(),15,"reserved")]),Zp=v([$(Qp,1,"lockup"),k("amountDeposited_native"),k("amountInitiallyLockedNative"),Ze("isUsed"),Ze("allowClawback"),_("votingMintConfigIdx"),$(_(),29,"reserved")]),Sl=v([we(8),F("voterAuthority"),F("registrar"),$(Zp,32,"deposits"),_("voterBump"),_("voterWweightRecordBump"),$(_(),94,"reserved")]);import{NATIVE_MINT as $p}from"@solana/spl-token";var fI=ke("Raydium_farm_config"),Kl=new Ws("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Cl=new Ws("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),yI=$p,bI=new Ws("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX"),Di={3:Tl,5:hl,6:Vi},Wi={3:Ei,5:Bl,6:Il},qs=c=>[3,4,5,6].indexOf(c)!==-1,Us=c=>{var i;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=c,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,r={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(i=r[e])==null?void 0:i.call(r)},to={"Standard SPL":0,"Option tokens":1},on={[Za.toString()]:3,[$a.toString()]:4,[ja.toString()]:5,[Mo.toString()]:6,[yn.FARM_PROGRAM_ID_V3.toString()]:3,[yn.FARM_PROGRAM_ID_V4.toString()]:4,[yn.FARM_PROGRAM_ID_V5.toString()]:5,[yn.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as fe,SystemProgram as Bo,SYSVAR_CLOCK_PUBKEY as ti,SYSVAR_RENT_PUBKEY as ef,TransactionInstruction as At}from"@solana/web3.js";import oa from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as tf,createAssociatedTokenAccountIdempotentInstruction as nf,TOKEN_PROGRAM_ID as Qt}from"@solana/spl-token";function Gs(c,e,t){return oe([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],c)}function zs(c,e){return oe([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],c)}function Xs(c,e){return oe([e.toBuffer()],c)}function Ys(c,e,t){return oe([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],c)}function Hs(c,e,t){return oe([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],c)}function Qs(c,e,t,n){return oe([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],c)}import Ht from"bn.js";var qi=ke("Raydium.farm.util");function Ui({programId:c,poolId:e,mint:t,type:n}){let{publicKey:o}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],c);return o}function _t({programId:c,poolId:e,owner:t,version:n}){let{publicKey:o}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],c);return o}var Rl=({programId:c,poolId:e})=>oe([e.toBuffer()],c);function Ll(c){return{isSet:new Ht(1),rewardPerSecond:le(c.perSecond),rewardOpenTime:le(c.openTime),rewardEndTime:le(c.endTime),rewardType:le(to[c.rewardType])}}function Zs(c){return le(c.endTime).sub(le(c.openTime)).mul(le(c.perSecond))}function ei(c){let e=Wi[c];return e||qi.logWithError("invalid version",c),e}function jp(c){let e=Di[c];return e||qi.logWithError("invalid version",c),e}function Jp(c,e,t,n){if(c.version===3||c.version===5){if(c.lastSlot.gte(new Ht(t)))return c;let o=new Ht(t).sub(c.lastSlot);c.lastSlot=new Ht(t);for(let r of c.rewardInfos){if(e.amount.eq(new Ht(0)))continue;let i=r.perSlotReward.mul(o);r.perShareReward=r.perShareReward.add(i.mul(new Ht(10).pow(new Ht(c.version===3?9:15))).div(e.amount)),r.totalReward=r.totalReward.add(i)}}else if(c.version===6)for(let o of c.rewardInfos){if(o.rewardState.eq(new Ht(0)))continue;let r=Ht.min(new Ht(n),o.rewardEndTime);if(o.rewardOpenTime.gte(r))continue;let a=r.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),s=o.totalReward.sub(o.totalRewardEmissioned);s.lt(a)?(a=s,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(s.div(o.rewardPerSecond))):o.rewardLastUpdateTime=r,!e.amount.eq(new Ht(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(c.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return c}async function NI({connection:c,farmPools:e,owner:t,config:n,chainTime:o}){let r=!1,i=!1,a=new Ht(10),s=[];for(let p of e){let m=Je(p);m.version===6?i=!0:r=!0,s.push({pubkey:m.id,version:m.version,key:"state",poolId:m.id},{pubkey:m.lpVault,version:m.version,key:"lpVault",poolId:m.id}),t&&s.push({pubkey:_t({programId:m.programId,poolId:m.id,owner:t,version:p.version}),version:m.version,key:"ledger",poolId:m.id})}let u={},l=await Ne(c,s,n);for(let{pubkey:p,version:m,key:f,poolId:y,accountInfo:b}of l){let g=y.toBase58();if(u[g]=N({},u[g]),f==="state"){let P=jp(m);(!b||!b.data||b.data.length!==P.span)&&qi.logWithError(`invalid farm state account info, pools.id, ${p}`),u[g].state=P.decode(b.data)}else if(f==="lpVault")(!b||!b.data||b.data.length!==gn.span)&&qi.logWithError(`invalid farm lp vault account info, pools.lpVault, ${p}`),u[g].lpVault=gn.decode(b.data);else if(f==="ledger"){let P=ei(m);b&&b.data&&(b.data.length!==P.span&&qi.logWithError(`invalid farm ledger account info, ledger, ${p}`),u[g].ledger=P.decode(b.data))}}let d=i||r?await c.getSlot():0;for(let p of Object.keys(u))u[p]!==void 0&&(u[p].state=Jp(u[p].state,u[p].lpVault,d,o));for(let[p,{state:m,ledger:f}]of Object.entries(u))if(f){let y=m.version===6?m.rewardMultiplier:m.rewardInfos.length===1?a.pow(new Ht(9)):a.pow(new Ht(15)),b=m.rewardInfos.map((g,P)=>{let w=f.rewardDebts[P];return f.deposited.mul(m.version===6?g.accRewardPerShare:g.perShareReward).div(y).sub(w)});u[p].wrapped=E(N({},u[p].wrapped),{pendingRewards:b})}return u}function MI(c,e=Date.now()){if(c.version===6){let t=c.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>fc(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>yc(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=c.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function $s(c,e,t,n){let o=await c.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let i=xl.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(i===-1)throw Error("find voter mint error");let a=await c.getAccountInfo(t);if(a===null)return{index:i,isInit:!1};let u=Sl.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===i);return u===-1?{index:i,isInit:!1}:{index:u,isInit:!0}}var of=ke("Raydium_farm_instruction"),Gi={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])};function zi(c){let{version:e,id:t,ledger:n,programId:o,owner:r}=c,i={3:9,5:10}[e];i||of.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(vs.span);vs.encode({instruction:i},a);let s=[T({pubkey:t}),T({pubkey:n}),T({pubkey:r,isWritable:!1}),T({pubkey:Bo.programId,isWritable:!1}),T({pubkey:ef,isWritable:!1})];return{instruction:new At({programId:o,keys:s,data:a}),instructionType:Y.FarmV3CreateLedger}}function Ol(c){var n;let e=Buffer.alloc(Vs.span);Vs.encode({instruction:0,nonce:new oa(c.nonce),rewardTimeInfo:c.rewardInfoConfig},e);let t=[...qa,T({pubkey:c.farmId}),T({pubkey:c.farmAuthority,isWritable:!1}),T({pubkey:c.lpVault}),T({pubkey:c.lpMint,isWritable:!1}),T({pubkey:c.lockVault}),T({pubkey:c.lockMint,isWritable:!1}),T({pubkey:(n=c.lockUserAccount)!=null?n:Tt}),T({pubkey:c.owner,isWritable:!1,isSigner:!0})];for(let o of c.rewardInfo)t.push(T({pubkey:o.rewardMint,isWritable:!1}),T({pubkey:o.rewardVault}),T({pubkey:o.userRewardToken}));return{instruction:new At({programId:c.programId,keys:t,data:e}),instructionType:Y.FarmV6Create}}function Nl(c){let e=Buffer.alloc(_s.span);_s.encode({instruction:5},e);let t=[T({pubkey:Qt,isWritable:!1}),T({pubkey:c.id}),T({pubkey:c.authority,isWritable:!1}),T({pubkey:c.lpVault,isWritable:!1}),T({pubkey:c.rewardVault}),T({pubkey:c.userRewardToken}),T({pubkey:c.owner,isWritable:!1,isSigner:!0})];return{instruction:new At({programId:c.programId,keys:t,data:e}),instructionType:Y.FarmV6CreatorWithdraw}}function rf(c,e,t,n,o,r,i,a,s,u,l,d,p){let m=v([_("depositEntryIndex"),k("amount")]),f=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:Qt,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Br,isSigner:!1,isWritable:!1}],y=Buffer.alloc(m.span);m.encode({depositEntryIndex:d,amount:p},y);let b=Buffer.from([...Gi.voterStakeRegistryDeposit,...y]);return new At({keys:f,programId:c,data:b})}function af(c,e,t,n){let o=v([]),r=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:Bo.programId,isSigner:!1,isWritable:!1}],i=Buffer.alloc(o.span);o.encode({},i);let a=Buffer.from([...Gi.voterStakeRegistryUpdateVoterWeightRecord,...i]);return new At({keys:r,programId:c,data:a})}function sf(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f){let y=v([_("depositEntryIndex"),k("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:Qt,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Br,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);y.encode({depositEntryIndex:m,amount:f},g);let P=Buffer.from([...Gi.voterStakeRegistryWithdraw,...g]);return new At({keys:b,programId:c,data:P})}function uf(c,e,t,n,o,r){let i=v([_("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:Bo.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);return i.encode({ins:23},s),new At({keys:a,programId:c,data:s})}function cf(c,e,t,n,o,r,i,a){let s=v([_("voterBump"),_("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:Bo.programId,isSigner:!1,isWritable:!1},{pubkey:yt,isSigner:!1,isWritable:!1},{pubkey:Br,isSigner:!1,isWritable:!1}],l=Buffer.alloc(s.span);s.encode({voterBump:i,voterWeightRecordBump:a},l);let d=Buffer.from([...Gi.voterStakeRegistryCreateVoter,...l]);return new At({keys:u,programId:c,data:d})}function lf(c,e,t,n,o,r,i,a,s,u,l,d){let p=v([_("depositEntryIndex"),_("kind"),_("option"),k("startTs"),Ue("periods"),Ze("allowClawback")]),m=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:Bo.programId,isSigner:!1,isWritable:!1},{pubkey:Qt,isSigner:!1,isWritable:!1},{pubkey:tf,isSigner:!1,isWritable:!1},{pubkey:yt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:a,kind:s,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:d},f);let y=Buffer.from([...Gi.voterStakeRegistryCreateDepositEntry,...f]);return new At({keys:m,programId:c,data:y})}async function ZI({connection:c,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:r,owner:i,poolId:a,tokenProgram:s}){let u=Gs(n,o,r).publicKey,l=_t({programId:e,poolId:a,owner:i,version:3}),d=await c.getAccountInfo(l);if(d===null)throw Error("user is not staker");let p=Ei.decode(d.data),m=p.deposited.sub(p.voteLockedBalance);if(console.log("amount",m.toString()),m.eq(new oa(0)))throw Error("user do not has new stake amount");let f=zs(e,a).publicKey,y=Xs(e,a).publicKey,{publicKey:b,nonce:g}=Ys(n,u,i),P=te(b,f,s).publicKey,{publicKey:w,nonce:B}=Hs(n,u,i),A=Qs(t,o,r,i).publicKey,h=[],x=te(i,f,s).publicKey;if(await c.getAccountInfo(x)===null&&h.push(nf(i,x,i,f)),await c.getAccountInfo(b)===null){let R=uf(t,o,i,r,i,A);h.push(R,cf(n,u,b,w,i,i,g,B))}let{index:I,isInit:C}=await $s(c,u,b,f);return C||h.push(lf(n,u,b,P,i,i,f,I,0,void 0,0,!1)),h.push(rf(n,u,b,P,x,i,l,a,f,y,e,I,m),af(n,u,b,w)),h}async function $I({connection:c,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:r,owner:i,poolId:a,tokenProgram:s}){let u=Gs(n,o,r).publicKey,l=_t({programId:e,poolId:a,owner:i,version:3}),d=await c.getAccountInfo(l);if(d===null)throw Error("user is not staker");let p=Ei.decode(d.data);if(p.voteLockedBalance.eq(new oa(0)))throw Error("user has vote locked balance = 0");let m=zs(e,a).publicKey,f=Xs(e,a).publicKey,{publicKey:y}=Ys(n,u,i),b=te(y,m,s).publicKey,{publicKey:g}=Hs(n,u,i),P=Qs(t,o,r,i).publicKey,w=[],{index:B,isInit:A}=await $s(c,u,y,m);if(!A)throw Error("deposit entry index check error");return w.push(sf(n,u,y,i,P,g,b,te(i,m,s).publicKey,l,a,m,f,e,B,p.voteLockedBalance)),w}function js({payer:c,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let r=Buffer.alloc(Es.span);Es.encode({instruction:3,rewardReopenTime:le(o.openTime),rewardEndTime:le(o.endTime),rewardPerSecond:le(o.perSecond)},r);let i=[T({pubkey:Qt,isWritable:!1}),T({pubkey:n.id}),T({pubkey:n.lpVault,isWritable:!1}),T({pubkey:e}),T({pubkey:t}),T({pubkey:c,isWritable:!1,isSigner:!0})];return new At({programId:n.programId,keys:i,data:r})}function Js({payer:c,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let r=Buffer.alloc(Ds.span);Ds.encode({instruction:4,isSet:new oa(1),rewardPerSecond:le(o.perSecond),rewardOpenTime:le(o.openTime),rewardEndTime:le(o.endTime),rewardType:le(to[o.rewardType])},r);let i=[...qa,T({pubkey:t.id}),T({pubkey:t.authority,isWritable:!1}),T({pubkey:o.mint,isWritable:!1}),T({pubkey:n}),T({pubkey:e}),T({pubkey:c,isWritable:!1,isSigner:!0})];return new At({programId:t.programId,keys:i,data:r})}function jI(c){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:r,owner:i,instruction:a,amount:s,deposit:u}=c,[l,d]=[new fe(e.programId),new fe(e.id)],p=_t({programId:l,poolId:d,owner:i,version:n}),m=Buffer.alloc(Ut.span);Ut.encode({instruction:a,amount:s},m);let f=n===6?[T({pubkey:Qt,isWritable:!1}),...u?[T({pubkey:Bo.programId,isWritable:!1})]:[],T({pubkey:d}),T({pubkey:new fe(t.authority),isWritable:!1}),T({pubkey:new fe(t.lpVault)}),T({pubkey:p}),T({pubkey:i,isWritable:!1,isSigner:!0}),T({pubkey:o})]:[T({pubkey:d}),T({pubkey:new fe(t.authority),isWritable:!1}),T({pubkey:p}),T({pubkey:i,isWritable:!1,isSigner:!0}),T({pubkey:o}),T({pubkey:new fe(t.lpVault)}),T({pubkey:r[0]}),T({pubkey:new fe(t.rewardInfos[0].vault)}),T({pubkey:ti,isWritable:!1}),T({pubkey:Qt,isWritable:!1})];if(n===5)for(let y=1;y<t.rewardInfos.length;y++)f.push(T({pubkey:r[y]})),f.push(T({pubkey:new fe(t.rewardInfos[y].vault)}));if(n===6)for(let y=0;y<t.rewardInfos.length;y++)f.push(T({pubkey:new fe(t.rewardInfos[y].vault)})),f.push(T({pubkey:r[y]}));return new At({programId:l,keys:f,data:m})}function Xi(c){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:i}=c,[a,s]=[new fe(e.programId),new fe(e.id)],u=_t({programId:a,poolId:s,owner:r,version:6}),l=Buffer.alloc(Ut.span);Ut.encode({instruction:2,amount:le(i)},l);let d=[T({pubkey:Qt,isWritable:!1}),T({pubkey:s}),T({pubkey:new fe(t.authority),isWritable:!1}),T({pubkey:new fe(t.lpVault)}),T({pubkey:u}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n})];for(let p=0;p<t.rewardInfos.length;p++)d.push(T({pubkey:new fe(t.rewardInfos[p].vault)})),d.push(T({pubkey:o[p]}));return new At({programId:a,keys:d,data:l})}function Yi(c){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:i,userAuxiliaryLedgers:a}=c,[s,u]=[new fe(e.programId),new fe(e.id)],l=_t({programId:s,poolId:u,owner:r,version:5}),d=Buffer.alloc(Ut.span);Ut.encode({instruction:12,amount:le(i)},d);let p=[T({pubkey:u}),T({pubkey:new fe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new fe(t.lpVault)}),T({pubkey:o[0]}),T({pubkey:new fe(t.rewardInfos[0].vault)}),T({pubkey:ti,isWritable:!1}),T({pubkey:Qt,isWritable:!1})];for(let m=1;m<t.rewardInfos.length;m++)p.push(T({pubkey:o[m]})),p.push(T({pubkey:new fe(t.rewardInfos[m].vault)}));if(a)for(let m of a)p.push(T({pubkey:m}));return new At({programId:s,keys:p,data:d})}function Ml(c){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:i,userAuxiliaryLedgers:a}=c,[s,u]=[new fe(e.programId),new fe(e.id)],l=v([_("instruction"),k("amount")]),d=[T({pubkey:u}),T({pubkey:new fe(t.authority),isWritable:!1}),T({pubkey:a[0]}),T({pubkey:r,isSigner:!0,isWritable:!1}),T({pubkey:n}),T({pubkey:new fe(t.lpVault)}),T({pubkey:o[0]}),T({pubkey:new fe(t.rewardInfos[0].vault)}),T({pubkey:ti,isWritable:!1}),T({pubkey:Qt,isWritable:!1}),T({pubkey:o[1]}),T({pubkey:new fe(t.rewardInfos[1].vault)})],p=Buffer.alloc(l.span);return l.encode({instruction:2,amount:i},p),new At({keys:d,programId:s,data:p})}function Hi(c){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:i,userAuxiliaryLedgers:a}=c,[s,u]=[new fe(e.programId),new fe(e.id)],l=_t({programId:s,poolId:u,owner:r,version:3}),d=Buffer.alloc(Ut.span);Ut.encode({instruction:11,amount:le(i)},d);let p=[T({pubkey:u}),T({pubkey:new fe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new fe(t.lpVault)}),T({pubkey:o[0]}),T({pubkey:new fe(t.rewardInfos[0].vault)}),T({pubkey:ti,isWritable:!1}),T({pubkey:Qt,isWritable:!1})];if(a)for(let m of a)p.push(T({pubkey:m}));return new At({programId:s,keys:p,data:d})}function Fl(c){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:i,userAuxiliaryLedgers:a}=c,[s,u]=[new fe(e.programId),new fe(e.id)],l=_t({programId:s,poolId:u,owner:r,version:3}),d=Buffer.alloc(Ut.span);Ut.encode({instruction:10,amount:le(i)},d);let p=[T({pubkey:u}),T({pubkey:new fe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new fe(t.lpVault)}),T({pubkey:o[0]}),T({pubkey:new fe(t.rewardInfos[0].vault)}),T({pubkey:ti,isWritable:!1}),T({pubkey:Qt,isWritable:!1})];if(a)for(let m of a)p.push(T({pubkey:m}));return new At({programId:s,keys:p,data:d})}function vl(c){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:i,userAuxiliaryLedgers:a}=c,[s,u]=[new fe(e.programId),new fe(e.id)],l=_t({programId:s,poolId:u,owner:r,version:5}),d=Buffer.alloc(Ut.span);Ut.encode({instruction:11,amount:le(i)},d);let p=[T({pubkey:u}),T({pubkey:new fe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new fe(t.lpVault)}),T({pubkey:o[0]}),T({pubkey:new fe(t.rewardInfos[0].vault)}),T({pubkey:ti,isWritable:!1}),T({pubkey:Qt,isWritable:!1})];for(let m=1;m<t.rewardInfos.length;m++)p.push(T({pubkey:o[m]})),p.push(T({pubkey:new fe(t.rewardInfos[m].vault)}));if(a)for(let m of a)p.push(T({pubkey:m}));return new At({programId:s,keys:p,data:d})}function _l(c){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:i}=c,[a,s]=[new fe(e.programId),new fe(e.id)],u=_t({programId:a,poolId:s,owner:r,version:6}),l=Buffer.alloc(Ut.span);Ut.encode({instruction:1,amount:le(i)},l);let d=[T({pubkey:Qt,isWritable:!1}),T({pubkey:Bo.programId,isWritable:!1}),T({pubkey:s}),T({pubkey:new fe(t.authority),isWritable:!1}),T({pubkey:new fe(t.lpVault)}),T({pubkey:u}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n})];for(let p=0;p<t.rewardInfos.length;p++)d.push(T({pubkey:new fe(t.rewardInfos[p].vault)})),d.push(T({pubkey:o[p]}));return new At({programId:a,keys:d,data:l})}import oo from"bn.js";var Qi=class extends tt{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Tt)){let n=await jn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Zs(E(N({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Mo,txVersion:r,feePayer:i,lockProgram:a}){var x,S;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new Se(e.lpMint.address),lockInfo:{lockMint:(x=a==null?void 0:a.mint)!=null?x:Kl,lockVault:(S=a==null?void 0:a.vault)!=null?S:Cl},version:6,rewardInfos:t,programId:o},l=this.createTxBuilder(i),d=n!=null?n:this.scope.ownerPubKey,p=nt({fromPublicKey:d,programId:u.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(Vi.span);l.addInstruction({instructions:[mf.createAccountWithSeed({fromPubkey:d,basePubkey:d,seed:p.seed,newAccountPubkey:p.publicKey,lamports:m,space:Vi.span,programId:u.programId})]});let{publicKey:f,nonce:y}=Rl({programId:new Se(u.programId),poolId:p.publicKey}),b=Ui({programId:u.programId,poolId:p.publicKey,mint:u.lpMint,type:"lpVault"}),g=[],P=[];for(let K of u.rewardInfos){K.openTime>=K.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",K.openTime.toString()),isNaN(to[K.rewardType])&&this.logAndCreateError("rewardType error",K.rewardType),Number(K.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",K.perSecond),g.push(Ll(K));let{rewardPubKey:I,newInstruction:C}=await this._getUserRewardInfo({rewardInfo:K,payer:d});C&&l.addInstruction(C),I||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let R=K.mint.equals(Tt)?new Se(kt.address):K.mint;P.push({rewardMint:R,rewardVault:Ui({programId:u.programId,poolId:p.publicKey,mint:R,type:"rewardVault"}),userRewardToken:I})}let{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:new Se(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});B&&l.addInstruction(B),w||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:h}=Ol({farmId:p.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:w,programId:u.programId,rewardInfo:P,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[A],instructionTypes:[h]}).versionBuild({txVersion:r,extInfo:{farmId:p.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:w,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o,feePayer:r}){var g;let i=on[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let a=Je((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),s={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let u=t||this.scope.ownerPubKey,l=n.mint.equals(Tt)?new Se(kt.address):n.mint,d=s.rewardInfos.findIndex(P=>new Se(P.mint.address).equals(l)),p=a.rewardInfos[d];p||this.logAndCreateError("configuration does not exist","rewardMint",l);let m=(g=p.vault)!=null?g:Tt,f=this.createTxBuilder(r),{rewardPubKey:y,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return b&&f.addInstruction(b),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),f.addInstruction({instructions:[js({payer:this.scope.ownerPubKey,rewardVault:m,userRewardTokenPub:y,farmKeys:s,rewardInfo:n})],instructionTypes:[Y.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o,feePayer:r}){var d;let i=on[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let a=Je((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),s={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.forEach(p=>{p.openTime>=p.endTime&&this.logAndCreateError("start time error","newRewardInfo",p)});let u=t||this.scope.ownerPubKey,l=this.createTxBuilder(r);for(let p of n){let m=p.mint.equals(Tt)?new Se(kt.address):p.mint,f=s.rewardInfos.findIndex(B=>new Se(B.mint.address).equals(m)),y=a.rewardInfos[f];y||this.logAndCreateError("configuration does not exist","rewardMint",m);let b=(d=y.vault)!=null?d:Tt,{rewardPubKey:g,newInstruction:P}=await this._getUserRewardInfo({rewardInfo:p,payer:u});P&&l.addInstruction(P),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let w=js({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:s,rewardInfo:p});l.addInstruction({instructions:[w],instructionTypes:[Y.FarmV6Restart]})}return l.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:r,feePayer:i}=e,a=on[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let s=Je((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=r!=null?r:this.scope.ownerPubKey,l=this.createTxBuilder(i),d=o.mint.equals(Tt)?new Se(kt.address):o.mint,p=Ui({programId:new Se(n.programId),poolId:new Se(n.id),mint:d,type:"rewardVault"}),{rewardPubKey:m,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:o,payer:u});return f&&l.addInstruction(f),m||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=d,l.addInstruction({instructions:[Js({payer:this.scope.ownerPubKey,userRewardTokenPub:m,farmKeys:s,rewardVault:p,rewardInfo:o})],instructionTypes:[Y.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:r,feePayer:i}=e,a=on[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let s=Je((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=r!=null?r:this.scope.ownerPubKey,l=this.createTxBuilder(i);for(let d of o){let p=d.mint.equals(Tt)?new Se(kt.address):d.mint,m=Ui({programId:new Se(n.programId),poolId:new Se(n.id),mint:p,type:"rewardVault"}),{rewardPubKey:f,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:d,payer:u});y&&l.addInstruction(y),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=Js({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:s,rewardVault:m,rewardInfo:E(N({},d),{mint:p})});l.addInstruction({instructions:[b],instructionTypes:[Y.FarmV6CreatorAddReward]})}return l.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:r,useSOLBalance:i,associatedOnly:a=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l,txTipConfig:d}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:p,programId:m}=n,f=on[m];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),qs(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Se(n.programId),new Se(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],P=_t({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),w=this.createTxBuilder(r);w.addCustomComputeBudget(l),w.addTipInstruction(d);let B={};for(let L of this.scope.account.tokenAccounts)if(a){let M=te(this.scope.ownerPubKey,L.mint,L.programId).publicKey;L.publicKey&&M.equals(L.publicKey)&&(B[L.mint.toString()]=L.publicKey)}else B[L.mint.toString()]=L.publicKey;let A=g.lpMint,h=B[A.address];h||this.logAndCreateError("you don't have any lp","lp zero",B);let x=[];for(let L of p){let M=i&&L.mint.address===J.toString(),W=B[L.mint.address];if(!W){let{account:D,instructionParams:X}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new Se(L.mint.address),notUseTokenAccount:M,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!M,associatedOnly:M?!1:a,checkCreateATAOwner:s});W=D,X&&w.addInstruction(X)}B[L.mint.address]=W,x.push(W)}let S,K=await this.scope.connection.getAccountInfo(P);if(K&&(S=ei(f).decode(K.data)),n.programId!==Mo.toString()&&n.programId!==yn.FARM_PROGRAM_ID_V6.toString()&&!S){let{instruction:L,instructionType:M}=zi({id:b,programId:y,version:f,ledger:P,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[L],instructionTypes:[M]})}let I=Us({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:x});I&&this.logAndCreateError(I);let C={amount:le(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:h,rewardAccounts:x,userAuxiliaryLedgers:u==null?void 0:u.map(L=>new Se(L))},R=f===6?_l(C):f===5?vl(C):Fl(C),O={3:Y.FarmV3Deposit,5:Y.FarmV5Deposit,6:Y.FarmV6Deposit};return w.addInstruction({instructions:[R],instructionTypes:[O[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:r,useSOLBalance:i,feePayer:a,associatedOnly:s=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:d,txTipConfig:p}=e,{rewardInfos:m}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let f=on[n.programId];qs(f)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],b=this.createTxBuilder(a);b.addCustomComputeBudget(d),b.addTipInstruction(p);let g={};for(let I of this.scope.account.tokenAccounts)if(s){let C=te(this.scope.ownerPubKey,I.mint).publicKey;I.publicKey&&C.equals(I.publicKey)&&(g[I.mint.toString()]=I.publicKey)}else g[I.mint.toString()]=I.publicKey;if(f!==4){let I=_t({programId:new Se(n.programId),poolId:new Se(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(I);if(C)ei(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:R,instructionType:O}=zi({id:new Se(y.id),programId:new Se(y.programId),version:f,ledger:I,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[R],instructionTypes:[O]})}}r&&r.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let P=y.lpMint.address,w=i&&P===J.toString(),B=g[P.toString()];if(!B){let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Se(P),notUseTokenAccount:w,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:w?!1:s,checkCreateATAOwner:u});B=I,C&&b.addInstruction(C)}g[P.toString()]=B;let A=[];for(let I of m){let C=i&&I.mint.address===J.toString(),R=g[I.mint.address];if(!R){let{account:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I.mint.programId,mint:new Se(I.mint.address),notUseTokenAccount:C,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!C,associatedOnly:C?!1:s,checkCreateATAOwner:u});R=O,L&&b.addInstruction(L)}g[I.mint.address]=R,A.push(R)}let h=Us({version:f,rewardInfos:m,rewardTokenAccountsPublicKeys:A});h&&this.logAndCreateError(h);let x={amount:le(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:B,rewardAccounts:A,userAuxiliaryLedgers:l==null?void 0:l.map(I=>new Se(I))},S=f===6?Xi(x):f===5?Yi(x):f===4?Ml(x):Hi(x),K={3:Y.FarmV3Withdraw,4:Y.FarmV4Withdraw,5:Y.FarmV5Withdraw,6:Y.FarmV6Withdraw};return b.addInstruction({instructions:[S],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:o,txTipConfig:r,feePayer:i}){var y;this.scope.checkOwner();let a=Je((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),s=on[e.programId];s!==6&&this.logAndCreateError("invalid farm version",s);let u=a.rewardInfos.find(b=>Ot(b.mint.address).equals(Ot(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:Tt,d=this.createTxBuilder(i),p;if(t.equals(Tt)||t.equals(Se.default)){let b=await jn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Zs(E(N({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new no(u.perSecond).mul(10**u.mint.decimals).toString()}))});p=b.addresses.newAccount,d.addInstruction(b)}else{let b=await this.scope.account.getCreatedTokenAccount({mint:t});b?p=b:(p=await this.scope.account.getAssociatedTokenAccount(t),d.addInstruction({instructions:[Vl(this.scope.ownerPubKey,p,this.scope.ownerPubKey,t)],instructionTypes:[Y.CreateATA]}))}let{instruction:m,instructionType:f}=Nl({programId:a.programId,id:a.id,authority:a.authority,lpVault:a.lpVault,rewardVault:l,userRewardToken:p,owner:this.scope.ownerPubKey});return d.addCustomComputeBudget(o),d.addTipInstruction(r),d.addInstruction({instructions:[m],instructionTypes:[f]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:r=!0,checkCreateATAOwner:i=!1,userAuxiliaryLedgers:a,txVersion:s,computeBudgetConfig:u}=e,l=this.createTxBuilder(o),d={};for(let f of this.scope.account.tokenAccounts)if(r){let y=te(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&y.equals(f.publicKey)&&(d[f.mint.toString()]=f.publicKey)}else d[f.mint.toString()]=f.publicKey;let m=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,y)=>E(N({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:P}=f,w=on[y],B=b.address,A=n&&B===J.toString(),h=d[B];if(!h){let{account:R,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Se(B),notUseTokenAccount:A,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:A?!1:r,checkCreateATAOwner:i});h=R,O&&l.addInstruction(O)}d[B.toString()]=h;let x=[];for(let R of g){let O=n&&R.mint.address===J.toString(),L=d[R.mint.address];if(!L)if(O){let{account:M,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new Se(R.mint.address),notUseTokenAccount:O,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!O,associatedOnly:O?!1:r,checkCreateATAOwner:i});L=M,W&&l.addInstruction(W)}else{let M=new Se(R.mint.address);L=this.scope.account.getAssociatedTokenAccount(M),l.addInstruction({instructions:[Vl(this.scope.ownerPubKey,L,this.scope.ownerPubKey,M)]})}d[R.mint.address]=L,x.push(L)}let S=m[P],K={amount:ee,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:S,lpAccount:h,rewardAccounts:x,userAuxiliaryLedgers:a==null?void 0:a.map(R=>new Se(R))},I=w===6?Xi(K):w===5?Yi(K):Hi(K),C={3:Y.FarmV3Withdraw,5:Y.FarmV5Withdraw,6:Y.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[C[w]]})}return s===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}async fetchFarmBalances(){let e=await this.scope.api.fetchFarmPositions(this.scope.ownerPubKey.toBase58()),t=new Map,n=new Map;Object.keys(e||{}).forEach(u=>{var l,d;Object.keys(e[u]).forEach(p=>{Object.keys(e[u][p]).forEach(m=>{var g,P,w,B,A,h;let f=E(N({},e[u][p][m]),{farmId:p,lpMint:u,userVault:m}),y=t.get(u);t.set(u,{lpMint:u,hasAmount:(y==null?void 0:y.hasAmount)||new no(f.lpAmount||0).gt(0),hasV1Data:(y==null?void 0:y.hasV1Data)||f.version==="V1",totalLpAmount:new no((g=y==null?void 0:y.totalLpAmount)!=null?g:0).add(f.lpAmount||0).toString(),totalV1LpAmount:f.version==="V1"?new no((P=y==null?void 0:y.totalV1LpAmount)!=null?P:0).add(f.lpAmount||0).toString():(w=y==null?void 0:y.totalV1LpAmount)!=null?w:"0",data:[...(y==null?void 0:y.data)||[],f]});let b=n.get(p);f.programId,n.set(p,{lpMint:u,hasAmount:(b==null?void 0:b.hasAmount)||new no(f.lpAmount||0).gt(0),hasV1Data:(b==null?void 0:b.hasV1Data)||f.version==="V1",totalLpAmount:new no((B=b==null?void 0:b.totalLpAmount)!=null?B:0).add(f.lpAmount||0).toString(),totalV1LpAmount:f.version==="V1"?new no((A=b==null?void 0:b.totalV1LpAmount)!=null?A:0).add(f.lpAmount||0).toString():(h=b==null?void 0:b.totalV1LpAmount)!=null?h:"0",data:[...(b==null?void 0:b.data)||[],f]})})}),t.set(u,E(N({},t.get(u)),{totalLpAmount:new no((d=(l=t.get(u))==null?void 0:l.totalLpAmount)!=null?d:0).toString()}))});let o=Array.from(n).map(u=>u[1].data).flat(),r=await this.scope.api.fetchFarmInfoById({ids:o.map(u=>u.farmId).join(",")}),i=await wt(this.scope.connection,o.map(u=>new Se(u.userVault)));return(await wt(this.scope.connection,o.map(u=>new Se(u.farmId)))).map((u,l)=>{var g;if(!u||!i[l])return;let d=on[o[l].programId];if(!Di[d]||!Wi[d])return;let p=Wi[d].decode(i[l].data),m=Di[d].decode(u.data),f;m.version===6?f=(g=m.rewardMultiplier)!=null?g:new oo(10).pow(new oo(9)):f=m.rewardInfos.length===1?new oo(10).pow(new oo(9)):new oo(10).pow(new oo(15));let y=r[l],b=m?m.rewardInfos.map((P,w)=>{var h;let B=p.rewardDebts[w],A=p.deposited.mul((m==null?void 0:m.version)===6?P.accRewardPerShare:P.perShareReward).div(f).sub(B);return A.lt(new oo(0))&&(A=new oo(0)),{mint:(h=y.rewardInfos[w])==null?void 0:h.mint,amount:A.toString()}}):[];return E(N(N({},p),m),{farmInfo:y,pendingRewards:b})}).filter(Boolean)}};import{PublicKey as it}from"@solana/web3.js";import{AccountLayout as Df,MintLayout as em,NATIVE_MINT as fa,TOKEN_PROGRAM_ID as ro}from"@solana/spl-token";import El from"bn.js";var eu=new El(25),ia=new El(1e4),df={4:3,5:3},Dl=new Set(["5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1","3uaZBfHPfmpAHW7dsimC1SnyR61X4bJqQZKWmRSCXJxv","GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"]);import{ASSOCIATED_TOKEN_PROGRAM_ID as ff,TOKEN_PROGRAM_ID as io}from"@solana/spl-token";import{PublicKey as Fe,SystemProgram as ql,SYSVAR_RENT_PUBKEY as yf,TransactionInstruction as On}from"@solana/web3.js";import ra from"bn.js";var tu=v([_("instruction"),k("amountIn"),k("minAmountOut")]),nu=v([_("instruction"),k("maxAmountIn"),k("amountOut")]),Vx=v([_("instruction"),_("nonce")]),ou=v([_("instruction"),_("nonce"),k("startTime")]),Zi=v([k("status"),k("nonce"),k("maxOrder"),k("depth"),k("baseDecimal"),k("quoteDecimal"),k("state"),k("resetFlag"),k("minSize"),k("volMaxCutRatio"),k("amountWaveRatio"),k("baseLotSize"),k("quoteLotSize"),k("minPriceMultiplier"),k("maxPriceMultiplier"),k("systemDecimalValue"),k("minSeparateNumerator"),k("minSeparateDenominator"),k("tradeFeeNumerator"),k("tradeFeeDenominator"),k("pnlNumerator"),k("pnlDenominator"),k("swapFeeNumerator"),k("swapFeeDenominator"),k("baseNeedTakePnl"),k("quoteNeedTakePnl"),k("quoteTotalPnl"),k("baseTotalPnl"),k("poolOpenTime"),k("punishPcAmount"),k("punishCoinAmount"),k("orderbookToInitTime"),se("swapBaseInAmount"),se("swapQuoteOutAmount"),k("swapBase2QuoteFee"),se("swapQuoteInAmount"),se("swapBaseOutAmount"),k("swapQuote2BaseFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("withdrawQueue"),F("lpVault"),F("owner"),k("lpReserve"),$(k(),3,"padding")]),pf=v([k("accountType"),k("status"),k("nonce"),k("maxOrder"),k("depth"),k("baseDecimal"),k("quoteDecimal"),k("state"),k("resetFlag"),k("minSize"),k("volMaxCutRatio"),k("amountWaveRatio"),k("baseLotSize"),k("quoteLotSize"),k("minPriceMultiplier"),k("maxPriceMultiplier"),k("systemDecimalsValue"),k("abortTradeFactor"),k("priceTickMultiplier"),k("priceTick"),k("minSeparateNumerator"),k("minSeparateDenominator"),k("tradeFeeNumerator"),k("tradeFeeDenominator"),k("pnlNumerator"),k("pnlDenominator"),k("swapFeeNumerator"),k("swapFeeDenominator"),k("baseNeedTakePnl"),k("quoteNeedTakePnl"),k("quoteTotalPnl"),k("baseTotalPnl"),k("poolOpenTime"),k("punishPcAmount"),k("punishCoinAmount"),k("orderbookToInitTime"),se("swapBaseInAmount"),se("swapQuoteOutAmount"),se("swapQuoteInAmount"),se("swapBaseOutAmount"),k("swapQuote2BaseFee"),k("swapBase2QuoteFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("modelDataAccount"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("owner"),$(k(),64,"padding")]),iu=v([_("instruction"),k("baseAmountIn"),k("quoteAmountIn"),k("fixedSide"),k("otherAmountMin")]),ru=v([_("instruction"),k("lpAmount"),k("baseAmountMin"),k("quoteAmountMin")]),Ex={4:Zi,5:pf},Wl=v([k("fee")]);var aa=ke("Raydium_liquidity_instruction");function Ul(c){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:r,fixedSide:i,otherAmountMin:a,modelDataPubKey:s=Hn}=c,u=Buffer.alloc(iu.span);iu.encode({instruction:3,baseAmountIn:le(o),quoteAmountIn:le(r),otherAmountMin:le(a),fixedSide:i==="base"?ee:rt},u);let l=[T({pubkey:io,isWritable:!1}),T({pubkey:new Fe(e.id)}),T({pubkey:new Fe(t.authority),isWritable:!1}),T({pubkey:new Fe(t.openOrders),isWritable:!1}),T({pubkey:new Fe(t.targetOrders)}),T({pubkey:new Fe(e.lpMint.address)}),T({pubkey:new Fe(t.vault.A)}),T({pubkey:new Fe(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(T({pubkey:s})),l.push(T({pubkey:new Fe(e.marketId),isWritable:!1}),T({pubkey:n.baseTokenAccount}),T({pubkey:n.quoteTokenAccount}),T({pubkey:n.lpTokenAccount}),T({pubkey:n.owner,isWritable:!1,isSigner:!0}),T({pubkey:new Fe(t.marketEventQueue),isWritable:!1})),new On({programId:new Fe(e.programId),keys:l,data:u})}function au(c){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:r,quoteAmountMin:i,modelDataPubKey:a=Hn}=c,s=Je(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(ru.span);ru.encode({instruction:4,lpAmount:le(o),baseAmountMin:le(r),quoteAmountMin:le(i)},l);let d=[T({pubkey:io,isWritable:!1}),T({pubkey:s.id}),T({pubkey:s.authority,isWritable:!1}),T({pubkey:s.openOrders}),T({pubkey:s.targetOrders}),T({pubkey:s.mintLp.address}),T({pubkey:s.vault.A}),T({pubkey:s.vault.B})];return u===5?d.push(T({pubkey:a})):(d.push(T({pubkey:s.id})),d.push(T({pubkey:s.id}))),d.push(T({pubkey:s.marketProgramId,isWritable:!1}),T({pubkey:s.marketId}),T({pubkey:s.marketBaseVault}),T({pubkey:s.marketQuoteVault}),T({pubkey:s.marketAuthority,isWritable:!1}),T({pubkey:n.lpTokenAccount}),T({pubkey:n.baseTokenAccount}),T({pubkey:n.quoteTokenAccount}),T({pubkey:n.owner,isWritable:!1,isSigner:!0}),T({pubkey:s.marketEventQueue}),T({pubkey:s.marketBids}),T({pubkey:s.marketAsks})),new On({programId:s.programId,keys:d,data:l})}return new On({programId:s.programId,keys:[]})}function su({programId:c,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:r,pcMint:i,coinVault:a,pcVault:s,withdrawQueue:u,ammTargetOrders:l,poolTempLp:d,marketProgramId:p,marketId:m,userWallet:f,userCoinVault:y,userPcVault:b,userLpVault:g,nonce:P,openTime:w,coinAmount:B,pcAmount:A,ammConfigId:h,feeDestinationId:x}){let S=v([_("instruction"),_("nonce"),k("openTime"),k("pcAmount"),k("coinAmount")]),K=[{pubkey:io,isSigner:!1,isWritable:!1},{pubkey:ff,isSigner:!1,isWritable:!1},{pubkey:ql.programId,isSigner:!1,isWritable:!1},{pubkey:yt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:h,isSigner:!1,isWritable:!1},{pubkey:x,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(S.span);return S.encode({instruction:1,nonce:P,openTime:w,coinAmount:B,pcAmount:A},I),{instruction:new On({keys:K,programId:c,data:I}),instructionType:Y.AmmV4CreatePool}}function jx(c){let e=v([_("instruction"),_("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[T({pubkey:new Fe(c.id),isWritable:!1}),T({pubkey:new Fe(c.authority),isWritable:!1}),T({pubkey:new Fe(c.openOrders),isWritable:!1}),T({pubkey:new Fe(c.vault.A),isWritable:!1}),T({pubkey:new Fe(c.vault.B),isWritable:!1}),T({pubkey:new Fe(c.mintLp.address),isWritable:!1}),T({pubkey:new Fe(c.marketId),isWritable:!1}),T({pubkey:new Fe(c.marketEventQueue),isWritable:!1})];return new On({programId:new Fe(c.programId),keys:n,data:t})}function bf({poolKeys:c,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=Hn},r){let i=Je(c),a=Buffer.alloc(tu.span);tu.encode({instruction:9,amountIn:le(t),minAmountOut:le(n)},a);let s=[T({pubkey:io,isWritable:!1}),T({pubkey:i.id}),T({pubkey:i.authority,isWritable:!1}),T({pubkey:i.openOrders})];return r===4&&s.push(T({pubkey:i.targetOrders})),s.push(T({pubkey:i.vault.A}),T({pubkey:i.vault.B})),r===5&&s.push(T({pubkey:o})),s.push(T({pubkey:i.marketProgramId,isWritable:!1}),T({pubkey:i.marketId}),T({pubkey:i.marketBids}),T({pubkey:i.marketAsks}),T({pubkey:i.marketEventQueue}),T({pubkey:i.marketBaseVault}),T({pubkey:i.marketQuoteVault}),T({pubkey:i.marketAuthority,isWritable:!1}),T({pubkey:e.tokenAccountIn}),T({pubkey:e.tokenAccountOut}),T({pubkey:e.owner,isWritable:!1,isSigner:!0})),new On({programId:i.programId,keys:s,data:a})}function gf({poolKeys:c,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=Hn},r){let i=Je(c),a=Buffer.alloc(nu.span);nu.encode({instruction:11,maxAmountIn:le(t),amountOut:le(n)},a);let s=[T({pubkey:io,isWritable:!1}),T({pubkey:i.id}),T({pubkey:i.authority,isWritable:!1}),T({pubkey:i.openOrders}),T({pubkey:i.targetOrders}),T({pubkey:i.vault.A}),T({pubkey:i.vault.B})];return r===5&&s.push(T({pubkey:o})),s.push(T({pubkey:i.marketProgramId,isWritable:!1}),T({pubkey:i.marketId}),T({pubkey:i.marketBids}),T({pubkey:i.marketAsks}),T({pubkey:i.marketEventQueue}),T({pubkey:i.marketBaseVault}),T({pubkey:i.marketQuoteVault}),T({pubkey:i.marketAuthority,isWritable:!1}),T({pubkey:e.tokenAccountIn}),T({pubkey:e.tokenAccountOut}),T({pubkey:e.owner,isWritable:!1,isSigner:!0})),new On({programId:i.programId,keys:s,data:a})}function Pf(c,e,t,n,o,r,i,a,s,u){let l=v([_("instructionId"),k("amountIn"),k("minAmountOut")]),d=Buffer.alloc(l.span);l.encode({instructionId:16,amountIn:s,minAmountOut:u},d);let p=[{pubkey:io,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new On({programId:c,keys:p,data:d})}function Af(c,e,t,n,o,r,i,a,s,u){let l=v([_("instructionId"),k("maxAmountIn"),k("amountOut")]),d=Buffer.alloc(l.span);l.encode({instructionId:17,maxAmountIn:s,amountOut:u},d);let p=[{pubkey:io,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new On({programId:c,keys:p,data:d})}function sa(c){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:r,fixedSide:i}=c;if(t===4){if(i==="in")return Pf(new Fe(e.programId),new Fe(e.id),new Fe(e.authority),new Fe(e.vault.A),new Fe(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new ra(o.toString()),new ra(r.toString()));if(i==="out")return Af(new Fe(e.programId),new Fe(e.id),new Fe(e.authority),new Fe(e.vault.A),new Fe(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new ra(o.toString()),new ra(r.toString()));aa.logWithError("invalid params","params",c)}throw aa.logWithError("invalid version, only support pool v4","poolKeys.version",t),new Error("invalid version")}function ua(c){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:r,fixedSide:i}=c;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(i==="in")return bf(E(N({},a),{amountIn:o,minAmountOut:r}),t);if(i==="out")return gf(E(N({},a),{maxAmountIn:o,amountOut:r}),t);aa.logWithError("invalid params","params",c)}throw aa.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function Jx({poolKeys:c,userKeys:e,startTime:t}){let n=Buffer.alloc(ou.span);ou.encode({instruction:0,nonce:5,startTime:le(t)},n);let o=Je(c),r=[T({pubkey:io,isWritable:!1}),T({pubkey:ql.programId,isWritable:!1}),T({pubkey:yf,isWritable:!1}),T({pubkey:o.id}),T({pubkey:o.authority,isWritable:!1}),T({pubkey:o.openOrders}),T({pubkey:o.mintLp.address}),T({pubkey:o.mintA.address,isWritable:!1}),T({pubkey:o.mintB.address,isWritable:!1}),T({pubkey:o.vault.A,isWritable:!1}),T({pubkey:o.vault.B,isWritable:!1}),T({pubkey:o.id}),T({pubkey:o.targetOrders}),T({pubkey:e.lpTokenAccount}),T({pubkey:o.id,isWritable:!1}),T({pubkey:o.marketProgramId,isWritable:!1}),T({pubkey:o.marketId,isWritable:!1}),T({pubkey:e.payer,isSigner:!0})];return new On({programId:o.programId,keys:r,data:n})}var xo=5e4,wf=v([k("x"),k("y"),k("price")]),kf=v([k("accountType"),k("status"),k("multiplier"),k("validDataCount"),$(wf,xo,"DataElement")]);function Tf(c,e){return[0,xo-2]}function hf(c){return[0,xo-2]}function Bf(c){return[0,xo-2]}function If(c,e,t){let[n,o]=Tf(e,t),r=n,i=o,a=0,s=e*c.multiplier/t;for(;r<=i;){if(a=Math.floor((i+r)/2),a===0||a>=xo-2)return[a,a,!1];let u=c.DataElement[a].x*c.multiplier/c.DataElement[a].y,l=c.DataElement[a-1].x*c.multiplier/c.DataElement[a-1].y,d=c.DataElement[a+1].x*c.multiplier/c.DataElement[a+1].y;if(s===u)return[a,a,!0];if(s===l)return[a-1,a-1,!0];if(s===d)return[a+1,a+1,!0];if(s<l)i=a-1;else{if(s>l&&s<u)return[a-1,a,!0];if(s>u&&s<d)return[a,a+1,!0];r=a+1}}return[a,a,!1]}function uu(c,e,t){let[n,o,r]=If(c,e,t);if(!r)return 0;if(n===o){let i=c.DataElement[n].x;return e*c.multiplier/i}else{let i=c.DataElement[n].x,a=c.DataElement[n].y,s=c.DataElement[o].x,u=c.DataElement[o].y,l=t*(s*a-i*u),d=i*l,p=(s-i)*(e*a-i*t)*u,m=d+p;return e*c.multiplier*l/m}}function Io(c,e,t){return e*c.multiplier/t}function Gl(c,e,t){return e*t/c.multiplier}function xf(c,e){let[t,n]=hf(e),o=t,r=n,i=0,a=e;for(;o<r;){if(i=Math.floor((r+o)/2),i<=0||i>xo-2)return[i,i,!1];let s=c.DataElement[i].x,u=c.DataElement[i-1].x,l=c.DataElement[i+1].x;if(a===s)return[i,i,!0];if(a===u)return[i-1,i-1,!0];if(a===l)return[i+1,i+1,!0];if(a<u)r=i-1;else{if(a>u&&a<s)return[i-1,i,!0];if(a>s&&a<l)return[i,i+1,!0];o=i+1}}return[i,i,!1]}function Sf(c,e){let[t,n]=Bf(e),o=t,r=n,i=0,a=e;for(;o<=r;){if(i=Math.floor((r+o)/2),i<=0||i>=xo-2)return[i,i,!1];let s=c.DataElement[i].y,u=c.DataElement[i-1].y,l=c.DataElement[i+1].y;if(a===s)return[i,i,!0];if(a===u)return[i-1,i-1,!0];if(a===l)return[i+1,i+1,!0];if(a<l)o=i+1;else{if(a<u&&a>s)return[i-1,i,!0];if(a<s&&a>l)return[i,i+1,!0];r=i-1}}return[i,i,!1]}function zl(c,e,t,n){let o=n?e+t:e-t,[r,i,a]=xf(c,o);if(!a)return[0,0,!1,a];if(r===i)return[c.DataElement[i].price,c.DataElement[i].y,!1,a];{let s=c.DataElement[r].x,u=c.DataElement[i].x,l=c.DataElement[r].price,d=c.DataElement[i].price,p=c.DataElement[r].y,m=c.DataElement[i].y;if(e>=s&&e<=u)return n?[d,m,!0,a]:[l,p,!0,a];{let f,y;return n?(f=l+(d-l)*(e-s)/(u-s),y=p-(o-s)*c.multiplier/d):(f=l+(d-l)*(e-s)/(u-s),y=m+(u-o)*c.multiplier/l),[f,y,!1,a]}}}function Kf(c,e,t,n){let o=n?e-t:e+t,[r,i,a]=Sf(c,o);if(!a)return[0,0,!1,a];if(r===i)return[c.DataElement[i].price,c.DataElement[i].x,!1,a];{let s=c.DataElement[r].x,u=c.DataElement[i].x,l=c.DataElement[r].price,d=c.DataElement[i].price,p=c.DataElement[r].y,m=c.DataElement[i].y;if(e>=m&&e<=p)return n?[d,u,!0,a]:[l,s,!0,a];{let f,y;return n?(f=l+(d-l)*(p-e)/(p-m),y=s+d*(p-o)/c.multiplier):(f=l+(d-l)*(p-e)/(p-m),y=u-l*(o-m)/c.multiplier),[f,y,!1,a]}}}function Cf(c,e){let t=zl(c,e,0,!1);return t[3]?t[0]:0}function Xl(c,e,t,n){let o=uu(c,e,t),r=Io(c,e,o),i=Io(c,t,o),a=Io(c,n,o),s=!0,[u,l,d,p]=zl(c,r,a,s);if(!p)return 0;if(d)return n*c.multiplier/u;{let m=i-l;return Gl(c,m,o)}}function Yl(c,e,t,n){let o=uu(c,e,t),r=Io(c,e,o),i=Io(c,t,o),a=Io(c,n,o),s=!1,[u,l,d,p]=Kf(c,i,a,s);if(!p)return 0;if(d)return n*u/c.multiplier;{let m=r-l;return Gl(c,m,o)}}function Rf(c){let e=kf.decode(c);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function Hl(c,e,t,n){let o=Cf(c,Io(c,e,uu(c,e,t)))/c.multiplier;return n?o:1/o}var ca=class{constructor({connection:e,modelDataPubKey:t=Hn}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e,this.modelDataPubKey=t}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(this.modelDataPubKey);e&&(this._layoutData=Rf(e==null?void 0:e.data))}}};import{PublicKey as Nf}from"@solana/web3.js";import la from"decimal.js";import{TOKEN_PROGRAM_ID as Mf}from"@solana/spl-token";import{PublicKey as Lf}from"@solana/web3.js";var Of=ke("Raydium_liquidity_serum");function Ql({programId:c,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));o=Lf.createProgramAddressSync(r,c)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:o,nonce:n}}throw Of.logWithError("unable to find a viable program address nonce","params",{programId:c,marketId:e}),new Error("unable to find a viable program address nonce")}function ma({programId:c}){let{publicKey:e}=oe([Buffer.from("amm_config_account_seed","utf-8")],c);return e}function So({name:c,programId:e,marketId:t}){let{publicKey:n}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(c,"utf-8")],e);return n}function Ff({programId:c,marketId:e}){let{publicKey:t}=oe([c.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],c);return t}function lu({programId:c}){return oe([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],c)}function mu({version:c,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:r,quoteDecimals:i,programId:a,marketProgramId:s}){let u=So({name:"amm_associated_seed",programId:a,marketId:t}),l=So({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:d,nonce:p}=lu({programId:a}),m=So({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=So({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=So({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Ff({programId:a,marketId:t}),g=So({name:"target_associated_seed",programId:a,marketId:t}),P=So({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=Ql({programId:s,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:r,quoteDecimals:i,lpDecimals:r,version:c,programId:a,authority:d,nonce:p,baseVault:m,quoteVault:f,lpVault:y,openOrders:b,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:s,marketId:t,marketAuthority:w,lookupTableAccount:Nf.default,configId:ma({programId:a})}}var cu={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},da=c=>{let e={},t=Mf.toBase58();return Object.keys(c).map(n=>{let o=c[n],[r,i]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:gt({address:r,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:gt({address:i,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new la(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new la(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new la(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:cu,week:cu,month:cu,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:ma({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new la(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:gt({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0,feeOn:"Both",hasDynamicFee:!1,tips:[],launchMigratePool:!1}}),e};import De from"bn.js";import ve from"decimal.js";import{TOKEN_PROGRAM_ID as Jl}from"@solana/spl-token";import{PublicKey as $i}from"@solana/web3.js";import ji from"bn.js";import{SystemProgram as Ko,SYSVAR_RENT_PUBKEY as _f,Transaction as Zl,TransactionInstruction as Vf}from"@solana/web3.js";import{createInitializeAccountInstruction as $l,TOKEN_PROGRAM_ID as jl}from"@solana/spl-token";function vf(c="accountFlags"){let e=new Ur(c);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var du=v([we(5),vf("accountFlags"),F("ownAddress"),k("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),k("baseDepositsTotal"),k("baseFeesAccrued"),F("quoteVault"),k("quoteDepositsTotal"),k("quoteFeesAccrued"),k("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),k("baseLotSize"),k("quoteLotSize"),k("feeRateBps"),k("referrerRebatesAccrued"),we(7)]);function Ef({programId:c,marketInfo:e}){let t=v([_("version"),Ue("instruction"),k("baseLotSize"),k("quoteLotSize"),_e("feeRateBps"),k("vaultSignerNonce"),k("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:_f,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new Vf({keys:n,programId:c,data:o})}async function pa({connection:c,wallet:e,marketInfo:t}){var i,a,s,u,l,d,p,m;let n=new Zl,o=await c.getMinimumBalanceForRentExemption(165);n.add(Ko.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:jl}),Ko.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:jl}),$l(t.baseVault.publicKey,t.baseMint,t.vaultOwner),$l(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Ko.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await c.getMinimumBalanceForRentExemption(du.span),space:du.span,programId:t.programId}));let r=new Zl;return r.add(Ko.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await c.getMinimumBalanceForRentExemption((i=t.requestQueueSpace)!=null?i:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Ko.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await c.getMinimumBalanceForRentExemption((s=t.eventQueueSpace)!=null?s:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Ko.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await c.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(d=t.orderbookQueueSpace)!=null?d:65536+12,programId:t.programId}),Ko.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await c.getMinimumBalanceForRentExemption((p=t.orderbookQueueSpace)!=null?p:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Ef({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[Y.CreateAccount,Y.CreateAccount,Y.InitAccount,Y.InitAccount]},{transaction:r,signer:[],instructionTypes:[Y.CreateAccount,Y.CreateAccount,Y.CreateAccount,Y.CreateAccount,Y.CreateAccount,Y.InitMarket]}]}var ni=class extends tt{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:r,requestQueueSpace:i,eventQueueSpace:a,orderbookQueueSpace:s,lowestFeeMarket:u,assignSeed:l,txVersion:d,computeBudgetConfig:p,txTipConfig:m,feePayer:f}){let y=this.scope.ownerPubKey,b=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,g=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-market`}),P=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-request`}),w=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-event`}),B=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-bids`}),A=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-asks`}),h=nt({fromPublicKey:y,programId:Jl,assignSeed:b&&`${b}-baseVault`}),x=nt({fromPublicKey:y,programId:Jl,assignSeed:b&&`${b}-quoteVault`}),S=0,K=new ji(100);function I(){let D=new ji(0);for(;;)try{return{vaultOwner:$i.createProgramAddressSync([g.publicKey.toBuffer(),D.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:D}}catch{if(D.iaddn(1),D.gt(new ji(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:R}=I(),O=new ji(Math.round(10**e.decimals*n)),L=new ji(Math.round(n*10**t.decimals*o));if(O.eq(ee))throw Error("lot size is too small");if(L.eq(ee))throw Error("tick size or lot size is too small");let M=await pa({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:h,quoteVault:x,vaultOwner:C,requestQueue:P,eventQueue:w,bids:B,asks:A,feeRateBps:S,quoteDustThreshold:K,vaultSignerNonce:R,baseLotSize:O,quoteLotSize:L,requestQueueSpace:i,eventQueueSpace:a,orderbookQueueSpace:s,lowestFeeMarket:u}}),W=this.createTxBuilder(f);W.addInstruction({instructions:M[0].transaction.instructions,signers:M[0].signer});for await(let D of M.slice(1,M.length))W.addInstruction({instructions:D.transaction.instructions,signers:D.signer,instructionTypes:D.instructionTypes});return d===0?W.sizeCheckBuildV0({computeBudgetConfig:p,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:w.publicKey,bids:B.publicKey,asks:A.publicKey,baseVault:h.publicKey,quoteVault:x.publicKey,baseMint:new $i(e.mint),quoteMint:new $i(t.mint)}}):W.sizeCheckBuild({computeBudgetConfig:p,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:w.publicKey,bids:B.publicKey,asks:A.publicKey,baseVault:h.publicKey,quoteVault:x.publicKey,baseMint:new $i(e.mint),quoteMint:new $i(t.mint)}})}};var Ji=class extends tt{constructor(t){super(t);this.stableLayout=new ca({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:yn.MODEL_DATA_PUBKEY})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:r}){let i=new De(new ve(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=Ri(t[r?"mintB":"mintA"]),[s,u]=[new De(new ve(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new De(new ve(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new De(new ve(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,ve.ROUND_DOWN));this.logDebug("baseReserve:",s.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",r?t.mintA.symbol:t.mintB.symbol,"amountIn:",i.toString(),"anotherToken:",r?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",s.toString(),"quoteReserve",u.toString());let d=r?"base":"quote";this.logDebug("input side:",d);let p=ee;i.isZero()||(p=d==="base"?xr(i.mul(u),s):xr(i.mul(s),u)),this.logDebug("amountRaw:",p.toString(),"lpAmount:",l.toString());let m=xr(i.mul(l),d==="base"?s:u);this.logDebug("liquidity:",m.toString());let f=new ht(new De(1)).add(o),y=new ht(new De(1)).sub(o),b=f.mul(p).quotient,g=y.mul(p).quotient,P=new Le(a,p),w=new Le(a,b),B=new Le(a,g);return this.logDebug("anotherAmount:",P.toFixed(),"maxAnotherAmount:",w.toFixed()),{anotherAmount:P,maxAnotherAmount:w,minAnotherAmount:B,liquidity:m}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:r,amountInB:i,otherAmountMin:a,fixedSide:s,config:u,txVersion:l,computeBudgetConfig:d,txTipConfig:p,feePayer:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",i),(r.isZero()||i.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:i.toFixed()});let{account:f}=this.scope,{bypassAssociatedCheck:y,checkCreateATAOwner:b}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,P]=[r.token,i.token],w=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),B=await f.getCreatedTokenAccount({mint:P.mint,associatedOnly:!1});!w&&!B&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let A=await f.getCreatedTokenAccount({mint:new it(n.lpMint.address)}),h=[g,P],x=[w,B],S=[r.raw,i.raw],K=r.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(K)||this.logAndCreateError("invalid fixedSide","fixedSide",s),K==="quote"?(h.reverse(),x.reverse(),S.reverse(),I=s==="a"?"quote":"base"):K==="base"&&(I=s==="a"?"base":"quote");let[C,R]=h,[O,L]=x,[M,W]=S,D=o!=null?o:await this.getAmmPoolKeys(n.id),X=this.createTxBuilder(m),ae=await f.handleTokenAccount({side:"in",amount:M,mint:C.mint,tokenAccount:O,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:Z}=ae,H=Ye(ae,["tokenAccount"]);X.addInstruction(H);let ge=await f.handleTokenAccount({side:"in",amount:W,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ne}=ge,re=Ye(ge,["tokenAccount"]);X.addInstruction(re);let Ce=await f.handleTokenAccount({side:"out",amount:0,mint:new it(n.lpMint.address),tokenAccount:A,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:j}=Ce,pe=Ye(Ce,["tokenAccount"]);return X.addInstruction(pe),X.addInstruction({instructions:[Ul({poolInfo:n,poolKeys:D,userKeys:{baseTokenAccount:Z,quoteTokenAccount:ne,lpTokenAccount:j,owner:this.scope.ownerPubKey},baseAmountIn:M,quoteAmountIn:W,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?Y.AmmV5AddLiquidity:Y.AmmV4AddLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),X.addCustomComputeBudget(d),X.addTipInstruction(p),l===0?await X.buildV0():X.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,lpAmount:r,baseAmountMin:i,quoteAmountMin:a,config:s,txVersion:u,computeBudgetConfig:l,txTipConfig:d,feePayer:p}=t,m=o!=null?o:await this.getAmmPoolKeys(n.id),[f,y,b]=[new it(n.mintA.address),new it(n.mintB.address),new it(n.lpMint.address)];this.logDebug("lpAmount:",r),this.logDebug("baseAmountMin:",i),this.logDebug("quoteAmountMin:",a),r.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",r.toString());let{account:g}=this.scope,P=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});P||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let w=await g.getCreatedTokenAccount({mint:f}),B=await g.getCreatedTokenAccount({mint:y}),A=this.createTxBuilder(p),{bypassAssociatedCheck:h,checkCreateATAOwner:x}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),R=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:w,bypassAssociatedCheck:h,checkCreateATAOwner:x}),{tokenAccount:S}=R,K=Ye(R,["tokenAccount"]);A.addInstruction(K);let O=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:B,bypassAssociatedCheck:h,checkCreateATAOwner:x}),{tokenAccount:I}=O,C=Ye(O,["tokenAccount"]);return A.addInstruction(C),A.addInstruction({instructions:[au({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:P,baseTokenAccount:S,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:i,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?Y.AmmV5RemoveLiquidity:Y.AmmV4RemoveLiquidity]}),A.addCustomComputeBudget(l),A.addTipInstruction(d),u===0?await A.buildV0():A.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:r,farmInfo:i,userFarmLpAmount:a,base:s,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:d,tokenProgram:p=ro,checkCreateATAOwner:m=!0,getEphemeralSigners:f,txVersion:y,feePayer:b}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let g=this.createTxBuilder(b),P={};for(let D of this.scope.account.tokenAccountRawInfos)(P[D.accountInfo.mint.toString()]===void 0||te(this.scope.ownerPubKey,D.accountInfo.mint,ro).publicKey.equals(D.pubkey))&&(P[D.accountInfo.mint.toString()]=D.pubkey);let w=P[t.lpMint.address];if(w===void 0)throw Error("find lp account error in trade accounts");let B=o.add(a!=null?a:new De(0)),A=t.mintA.address===He.WSOL.mint.toString(),h=t.mintB.address===He.WSOL.mint.toString(),{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ro,mint:new it(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!0,checkCreateATAOwner:m});if(g.addInstruction(S||{}),x===void 0)throw new Error("base token account not found");let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ro,mint:new it(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:m});if(g.addInstruction(I||{}),K===void 0)throw new Error("quote token account not found");if(P[t.mintA.address]=x,P[t.mintB.address]=K,i!==void 0&&!(a!=null&&a.isZero())){let D=on[i.programId],X=_t({programId:new it(i.programId),poolId:new it(i.id),owner:this.scope.ownerPubKey,version:D}),Z,H=await this.scope.connection.getAccountInfo(X);if(H&&(Z=ei(D).decode(H.data)),D!==6&&!Z){let{instruction:Ce,instructionType:Be}=zi({id:new it(i.id),programId:new it(i.programId),version:D,ledger:X,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Ce],instructionTypes:[Be]})}let ne=[];for(let Ce of i.rewardInfos){let Be=Ce.mint.address===He.WSOL.mint.toString();if(P[Ce.mint.address])ne.push(P[Ce.mint.address]);else{let{account:ye,instructionParams:ue}=await this.scope.account.getOrCreateTokenAccount({mint:new it(Ce.mint.address),tokenProgram:p,owner:this.scope.ownerPubKey,skipCloseAccount:!Be,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:m});ye||this.logAndCreateError("farm reward account not found:",Ce.mint.address),ue&&g.addInstruction(ue),ne.push(ye)}}let re=(await this.scope.api.fetchFarmKeysById({ids:i.id}))[0],j={userAuxiliaryLedgers:d,amount:a,owner:this.scope.ownerPubKey,farmInfo:i,farmKeys:re,lpAccount:w,rewardAccounts:ne},pe=on[i.programId],ae=pe===6?Xi(j):pe===5?Yi(j):Hi(j),ge={3:Y.FarmV3Withdraw,5:Y.FarmV5Withdraw,6:Y.FarmV6Withdraw};g.addInstruction({instructions:[ae],instructionTypes:[ge[pe]]})}let C=await this.getAmmPoolKeys(t.id),R=au({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:w,baseTokenAccount:x,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:B,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[R],instructionTypes:[t.pooltype.includes("StablePool")?Y.AmmV5RemoveLiquidity:Y.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[O,L]=t.mintA.address===n.mintA.address?[x,K]:[K,x],M=await this.scope.clmm.getClmmPoolKeys(n.id),W=await be.openPositionFromBaseInstructions(E(N({poolInfo:n,poolKeys:M,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:O,tokenAccountB:L},withMetadata:"create"},r),{liquidity:new De(0),base:s,getEphemeralSigners:f}));return g.addInstruction({instructions:[...W.instructions],signers:W.signers,instructionTypes:[...W.instructionTypes],lookupTableAddress:M.lookupTableAccount?[M.lookupTableAccount]:[]}),y===0?g.sizeCheckBuildV0({computeBudgetConfig:u}):g.sizeCheckBuild({computeBudgetConfig:u})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:r,baseAmount:i,quoteAmount:a,startTime:s,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:d=!1,tokenProgram:p,txVersion:m,feeDestinationId:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g}){var L;let P=u.feePayer||((L=this.scope.owner)==null?void 0:L.publicKey),w=u.useSOLBalance&&o.mint.equals(fa),B=u.useSOLBalance&&r.mint.equals(fa),A=this.createTxBuilder(g),{account:h,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:P,amount:i}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:d});A.addInstruction(x||{});let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:B?{payer:P,amount:a}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:l,checkCreateATAOwner:d});if(A.addInstruction(K||{}),h===void 0||S===void 0)throw Error("you don't has some token account");let I=mu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:r.mint,baseDecimals:o.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:I.id,ammAuthority:I.authority,ammOpenOrders:I.openOrders,lpMint:I.lpMint,coinMint:I.baseMint,pcMint:I.quoteMint,coinVault:I.baseVault,pcVault:I.quoteVault,withdrawQueue:I.withdrawQueue,ammTargetOrders:I.targetOrders,poolTempLp:I.lpVault,marketProgramId:I.marketProgramId,marketId:I.marketId,ammConfigId:I.configId,feeDestinationId:f},{instruction:R,instructionType:O}=su(E(N({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:h,userPcVault:S,userLpVault:te(this.scope.ownerPubKey,I.lpMint,p).publicKey,nonce:I.nonce,openTime:s,coinAmount:i,pcAmount:a}));return A.addInstruction({instructions:[R],instructionTypes:[O]}),A.addCustomComputeBudget(y),A.addTipInstruction(b),A.versionBuild({txVersion:m,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=ki,marketProgram:n=Ja,feeDestinationId:o=es,tokenProgram:r,baseMintInfo:i,quoteMintInfo:a,baseAmount:s,quoteAmount:u,startTime:l,ownerInfo:d,lowestFeeMarket:p,assignSeed:m,associatedOnly:f=!1,checkCreateATAOwner:y=!1,lotSize:b=1,tickSize:g=.01,txVersion:P,computeBudgetConfig:w,txTipConfig:B,feePayer:A}){var pi,Na,fi;let h=this.scope.ownerPubKey,x=d.feePayer||((pi=this.scope.owner)==null?void 0:pi.publicKey),S=d.useSOLBalance&&i.mint.equals(fa),K=d.useSOLBalance&&a.mint.equals(fa),I=m?`${i.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${m}`:void 0,C=nt({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-market`}),R=nt({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-request`}),O=nt({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-event`}),L=nt({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-bids`}),M=nt({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-asks`}),W=nt({fromPublicKey:h,programId:ro,assignSeed:I&&`${I}-baseVault`}),D=nt({fromPublicKey:h,programId:ro,assignSeed:I&&`${I}-quoteVault`}),X=0,Z=new De(100);function H(){let Et=new De(0);for(;;)try{return{vaultOwner:it.createProgramAddressSync([C.publicKey.toBuffer(),Et.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Et}}catch{if(Et.iaddn(1),Et.gt(new De(25555)))throw Error("find vault owner error")}}let{vaultOwner:ne,vaultSignerNonce:re}=H(),j=new De(Math.round(10**i.decimals*b)),pe=new De(Math.round(b*10**a.decimals*g));if(j.eq(ee))throw Error("lot size is too small");if(pe.eq(ee))throw Error("tick size or lot size is too small");let ae=await pa({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:ne,baseMint:i.mint,quoteMint:a.mint,id:C,baseVault:W,quoteVault:D,requestQueue:R,eventQueue:O,bids:L,asks:M,feeRateBps:X,quoteDustThreshold:Z,vaultSignerNonce:re,baseLotSize:j,quoteLotSize:pe,lowestFeeMarket:p}}),ge=this.createTxBuilder(A);ge.addInstruction({instructions:ae[0].transaction.instructions,signers:ae[0].signer});for await(let Et of ae.slice(1,ae.length))ge.addInstruction({instructions:Et.transaction.instructions,signers:Et.signer,instructionTypes:Et.instructionTypes});let{account:Ce,instructionParams:Be}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:x,amount:s}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:f,checkCreateATAOwner:y,assignSeed:S&&I?`${I}-wsol`:void 0});ge.addInstruction(Be||{});let{account:ye,instructionParams:ue}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:K?{payer:x,amount:u}:void 0,notUseTokenAccount:K,skipCloseAccount:!K,associatedOnly:K?!1:f,checkCreateATAOwner:y,assignSeed:K&&I?`${I}-wsol`:void 0});if(ge.addInstruction(ue||{}),Ce===void 0)throw Error("you don't has base token account");if(ye===void 0)throw Error("you don't has quote token account");let Te=mu({version:4,marketVersion:3,marketId:C.publicKey,baseMint:i.mint,quoteMint:a.mint,baseDecimals:i.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Ft={programId:t,ammId:Te.id,ammAuthority:Te.authority,ammOpenOrders:Te.openOrders,lpMint:Te.lpMint,coinMint:Te.baseMint,pcMint:Te.quoteMint,coinVault:Te.baseVault,pcVault:Te.quoteVault,withdrawQueue:Te.withdrawQueue,ammTargetOrders:Te.targetOrders,poolTempLp:Te.lpVault,marketProgramId:Te.marketProgramId,marketId:Te.marketId,ammConfigId:Te.configId,feeDestinationId:o},{instruction:$e,instructionType:mn}=su(E(N({},Ft),{userWallet:this.scope.ownerPubKey,userCoinVault:Ce,userPcVault:ye,userLpVault:te(this.scope.ownerPubKey,Te.lpMint,r).publicKey,nonce:Te.nonce,openTime:l,coinAmount:s,pcAmount:u}));ge.addInstruction({instructions:[$e],instructionTypes:[mn]});let Oo=S||K?[((Na=Be==null?void 0:Be.instructions)==null?void 0:Na[0])||((fi=ue==null?void 0:ue.instructions)==null?void 0:fi[0])].filter(Et=>!!Et):void 0;return P===0?ge.sizeCheckBuildV0({computeBudgetConfig:w,splitIns:Oo,address:N({requestQueue:R.publicKey,eventQueue:O.publicKey,bids:L.publicKey,asks:M.publicKey,baseVault:W.publicKey,quoteVault:D.publicKey,baseMint:new it(i.mint),quoteMint:new it(a.mint)},Ft)}):ge.sizeCheckBuild({computeBudgetConfig:w,splitIns:Oo,address:N({requestQueue:R.publicKey,eventQueue:O.publicKey,bids:L.publicKey,asks:M.publicKey,baseVault:W.publicKey,quoteVault:D.publicKey,baseMint:new it(i.mint),quoteMint:new it(a.mint)},Ft)})}async getCreatePoolFee({programId:t}){let n=ma({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return Wl.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:r,slippage:i}){let[a,s]=[o.toString(),r.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(s!==t.mintA.address&&s!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,d=[u,l],p=[t.mintA.decimals,t.mintB.decimals],m=a==t.mintA.address?"base":"quote";m==="quote"&&(d.reverse(),p.reverse());let[f,y]=d,[b,g]=p,P=t.version===4,w;if(P)w=new ve(y.toString()).div(10**g).div(new ve(f.toString()).div(10**b));else{let O=Hl(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);m==="quote"?w=new ve(1e6).div(O*1e6):w=new ve(O*1e6).div(1e6)}let B=n,A=new De(0),h=new De(0);if(!B.isZero())if(P){h=Qn(B.mul(eu),ia);let O=B.sub(h),L=f.add(O);A=y.mul(O).div(L)}else{h=B.mul(new De(2)).div(new De(1e4));let O=B.sub(h);m==="quote"?A=new De(Xl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),O.toNumber())):A=new De(Yl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),O.toNumber()))}let x=new De(new ve(A.toString()).mul(1-i).toFixed(0)),S=A,K=x,I=new ve(A.toString()).div(new ve(B.sub(h).toString()).toFixed(0));!B.isZero()&&!A.isZero()&&(I=new ve(A.toString()).div(10**g).div(new ve(B.sub(h).toString()).div(10**b)));let C=w.sub(I).div(w).mul(100);return{amountOut:S,minAmountOut:K,currentPrice:w,executionPrice:I,priceImpact:C,fee:h}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:r,slippage:i}){let{baseReserve:a,quoteReserve:s}=t;o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",s.toString());let u=o.toString()===t.mintA.address,[l,d]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",d.symbol||d.address),this.logDebug("amountOut:",new ve(n.toString()).div(10**d.decimals).toDecimalPlaces(d.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${i*100}%`);let p=[a,s],m=u?"quote":"base";m==="base"&&p.reverse(),this.logDebug("output side:",m);let[f,y]=p,b=new ve(y.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new ve(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${d.symbol||d.address}`),this.logDebug("currentPrice invert:",`1 ${d.symbol||d.address} \u2248 ${new ve(1).div(b).toString()} ${l.symbol||l.address}`);let g=new De(0),P=n,w=new De(0);if(!P.isZero()){P.gt(y)&&(P=y.sub(new De(1)));let I=y.sub(P),C=f.mul(P).div(I);g=C.mul(ia).div(ia.sub(eu)),w=g.sub(C)}let B=new De(new ve(g.toString()).mul(1+i).toFixed(0)),A=g,h=B;this.logDebug("amountIn:",new ve(A.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new ve(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let x=null;!g.isZero()&&!P.isZero()&&(x=new ve(P.toString()).div(10**d.decimals).div(new ve(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${d.symbol||d.address} \u2248 ${x.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${d.symbol||d.address} \u2248 ${new ve(1).div(x).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(A.toString()),K=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${K.toString()}%`),{amountIn:A,maxAmountIn:h,currentPrice:b,executionPrice:x,priceImpact:K,fee:w}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:r,inputMint:i,fixedSide:a,txVersion:s,config:u,computeBudgetConfig:l,txTipConfig:d,feePayer:p}){let m=this.createTxBuilder(p),{associatedOnly:f=!0,inputUseSolBalance:y=!0,outputUseSolBalance:b=!0}=u||{},[g,P]=i===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],w=y&&g.address===J.toBase58(),B=b&&P.address===J.toBase58(),{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ro,mint:new it(g.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:f});m.addInstruction(h||{}),A||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:A,inputTokenUseSolBalance:w,associatedOnly:f});let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ro,mint:new it(P.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:B?!1:f});m.addInstruction(S||{}),x===void 0&&this.logAndCreateError("output token account not found",{token:P.symbol||P.address,tokenAccountOut:x,outputTokenUseSolBalance:B,associatedOnly:f});let K=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),m.addInstruction({instructions:[I===4?sa({version:I,poolKeys:K,userKeys:{tokenAccountIn:A,tokenAccountOut:x,owner:this.scope.ownerPubKey},amountIn:o,amountOut:r,fixedSide:a}):ua({version:I,poolKeys:K,userKeys:{tokenAccountIn:A,tokenAccountOut:x,owner:this.scope.ownerPubKey},amountIn:o,amountOut:r,fixedSide:a})],instructionTypes:[I===4?Y.AmmV4SwapBaseIn:Y.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.addTipInstruction(d),m.versionBuild({txVersion:s})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await Ne(this.scope.connection,t.map(l=>({pubkey:new it(l)})),n),r={},i=[];for(let l=0;l<t.length;l++){let d=o[l];if(d===null||!d.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let p=Zi.decode(d.accountInfo.data);r[String(t[l])]=E(N({},p),{programId:d.accountInfo.owner}),i.push(p.baseVault,p.quoteVault)}let a={},s=await Ne(this.scope.connection,i.map(l=>({pubkey:new it(l)})),n);for(let l=0;l<i.length;l++){let d=s[l].accountInfo;if(d===null)throw Error("fetch vault info error: "+i[l]);a[String(i[l])]=new De(Df.decode(d.data).amount.toString())}let u={};for(let[l,d]of Object.entries(r)){let p=a[d.baseVault.toString()].sub(d.baseNeedTakePnl),m=a[d.quoteVault.toString()].sub(d.quoteNeedTakePnl);u[l]=E(N({},d),{baseReserve:p,mintAAmount:a[d.baseVault.toString()],mintBAmount:a[d.quoteVault.toString()],quoteReserve:m,poolPrice:new ve(m.toString()).div(new ve(10).pow(d.quoteDecimal.toString())).div(new ve(p.toString()).div(new ve(10).pow(d.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=da({[t]:n}),r=o[t],i=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:i[0]}}async fetchPoolBalances(){await this.scope.account.fetchWalletTokenAccounts({forceUpdate:!0});let t=this.scope.account.tokenAccounts.filter(a=>!a.mint.equals(it.default)&&!a.amount.isZero()).map(a=>a.mint),r=(await wt(this.scope.connection,t)).map((a,s)=>a&&a.data.length===em.span?E(N({},em.decode(a.data)),{address:t[s]}):void 0).filter(Boolean).filter(a=>this.scope.cluster==="devnet"?a:Dl.has(a.mintAuthority.toString())),i=await this.scope.api.fetchPoolByLpMints({ids:r.map(a=>a.address.toBase58()).join(",")});return r.map((a,s)=>{var u,l;return{mintData:a,address:a.address,poolInfo:i[s],balance:(l=(u=this.scope.account.tokenAccounts.find(d=>d.mint.equals(a.address)))==null?void 0:u.amount)!=null?l:new De(0)}})}};import{PublicKey as q}from"@solana/web3.js";import{AccountLayout as ay,NATIVE_MINT as ri,TOKEN_2022_PROGRAM_ID as fm,TOKEN_PROGRAM_ID as Gt,createAssociatedTokenAccountIdempotentInstruction as ai}from"@solana/spl-token";import nm from"bn.js";import ya from"bn.js";function pu(c,e){if(e.isZero())throw Error("divisor is zero");return c.mod(e)}function Wf(c,e){if(e.isZero())throw Error("rhs is zero");let t=c.div(e);return pu(c,e).gt(er)&&(t=t.add(new ya(1))),[t,e]}var er=new ya(0),tr=class{static swapBaseInputWithoutFees(e,t,n){let o=e.mul(n),r=t.add(e);return o.div(r)}static swapBaseOutputWithoutFees(e,t,n){let o=t.mul(e),r=n.sub(e),[i]=Wf(o,r);return i}static lpTokensToTradingTokens(e,t,n,o,r){let i=e.mul(n).div(t),a=e.mul(o).div(t);if(r===0)return{tokenAmount0:i,tokenAmount1:a};if(r===1)return pu(e.mul(n),t).gt(er)&&i.gt(er)&&(i=i.add(new ya(1))),pu(e.mul(o),t).gt(er)&&a.gt(er)&&(a=a.add(new ya(1))),{tokenAmount0:i,tokenAmount1:a};throw Error("roundDirection value error")}};import qf from"bn.js";var Zt=class{static tradingFee(e,t){return Pi(e,t,Qe)}static protocolFee(e,t){return Sr(e,t,Qe)}static fundFee(e,t){return Sr(e,t,Qe)}static creatorFee(e,t){return Pi(e,t,Qe)}static splitCreatorFee(e,t,n){return Sr(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Qe),o=Qe.sub(t);return n.add(o).sub(new qf(1)).div(o)}};var tm=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(tm||{}),Uf=(t=>(t[t.ZeroForOne=0]="ZeroForOne",t[t.OneForZero=1]="OneForZero",t))(Uf||{}),Gf=(t=>(t[t.OneForZero=0]="OneForZero",t[t.ZeroForOne=1]="ZeroForOne",t))(Gf||{}),nr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swapBaseInput(e,t,n,o,r,i,a,s){let u=new nm(0),l=Zt.tradingFee(e,o),d;s?(u=Zt.creatorFee(e,r),d=e.sub(l).sub(u)):d=e.sub(l);let p=Zt.protocolFee(l,i),m=Zt.protocolFee(l,a),f=tr.swapBaseInputWithoutFees(d,t,n),y;return s?y=f:(u=Zt.creatorFee(f,r),y=f.sub(u)),{newInputVaultAmount:t.add(d),newOutputVaultAmount:n.sub(f),inputAmount:e,outputAmount:y,tradeFee:l,protocolFee:p,fundFee:m,creatorFee:u}}static swapBaseOutput(e,t,n,o,r,i,a,s){let u,l=new nm(0),d;if(s)d=e;else{let b=Zt.calculatePreFeeAmount(e,r);l=b.sub(e),d=b}let p=tr.swapBaseOutputWithoutFees(d,t,n),m;if(s){let b=Zt.calculatePreFeeAmount(p,o.add(r)),g=b.sub(p);l=Zt.splitCreatorFee(g,o,r),u=g.sub(l),m=b}else{let b=Zt.calculatePreFeeAmount(p,o);u=b.sub(p),m=b}let f=Zt.protocolFee(u,i),y=Zt.fundFee(u,a);return{newInputVaultAmount:t.add(p),newOutputVaultAmount:n.sub(d),inputAmount:m,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import Xe from"bn.js";import cn from"decimal.js";import{PublicKey as or,TransactionInstruction as Nn,Keypair as oy,SystemProgram as ba}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as ir,TOKEN_2022_PROGRAM_ID as Pu,TOKEN_PROGRAM_ID as Xn}from"@solana/spl-token";var zf=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Xf=Buffer.from("amm_config","utf8"),Yf=Buffer.from("pool","utf8"),Hf=Buffer.from("pool_lp_mint","utf8"),Qf=Buffer.from("pool_vault","utf8"),Zf=Buffer.from("observation","utf8"),$f=Buffer.from("permission","utf8"),jf=Buffer.from("support_mint","utf8"),Jf=Buffer.from("creator_fee_share","utf8");function Co(c){return oe([zf],c)}function OK(c,e){return oe([Xf,ty(e)],c)}function fu(c,e,t,n){return oe([Yf,e.toBuffer(),t.toBuffer(),n.toBuffer()],c)}function ey(c,e){return oe([Hf,e.toBuffer()],c)}function om(c,e,t){return oe([Qf,e.toBuffer(),t.toBuffer()],c)}function Ro(c,e){return oe([Zf,e.toBuffer()],c)}function ty(c){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,c,!1),new Uint8Array(e)}function yu({poolId:c,programId:e,configId:t,mintA:n,mintB:o}){let r=Co(e).publicKey,i=c||fu(e,t,n,o).publicKey,a=ey(e,i).publicKey,s=om(e,i,n).publicKey,u=om(e,i,o).publicKey,l=Ro(e,i).publicKey;return{poolId:i,configId:t,authority:r,lpMint:a,vaultA:s,vaultB:u,observationId:l}}var ny=Buffer.from("locked_liquidity","utf8");function oi(c,e){return oe([ny,e.toBuffer()],c)}function im(c,e){return oe([$f,e.toBuffer()],c)}function bu(c,e){return oe([jf,e.toBuffer()],c)}function gu(c,e,t){return oe([Jf,e.toBuffer(),t.toBuffer()],c)}var iy=ke("Raydium_cpmm"),Mn={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])};function rm(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w,B){let A=v([k("amountMaxA"),k("amountMaxB"),k("openTime")]),h=fu(c,t,r,i).publicKey,x=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!o.equals(h),isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Xn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:mc,isSigner:!1,isWritable:!1},{pubkey:yt,isSigner:!1,isWritable:!1},...(B!=null?B:[]).map(K=>({pubkey:K,isSigner:!1,isWritable:!1}))],S=Buffer.alloc(A.span);return A.encode({amountMaxA:g,amountMaxB:P,openTime:w},S),new Nn({keys:x,programId:c,data:Buffer.from([...Mn.initialize,...S])})}function am(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f){let y=v([k("lpAmount"),k("amountMaxA"),k("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:Xn,isSigner:!1,isWritable:!1},{pubkey:Pu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0}],g=Buffer.alloc(y.span);return iy.debug("cpmm deposit data",{lpAmount:p.toString(),amountMaxA:m.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:p,amountMaxA:m,amountMaxB:f},g),new Nn({keys:b,programId:c,data:Buffer.from([...Mn.deposit,...g])})}function sm(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f){let y=v([k("lpAmount"),k("amountMinA"),k("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:Xn,isSigner:!1,isWritable:!1},{pubkey:Pu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:en,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:p,amountMinA:m,amountMinB:f},g),new Nn({keys:b,programId:c,data:Buffer.from([...Mn.withdraw,...g])})}function ii(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y){let b=v([k("amountIn"),k("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountIn:f,amounOutMin:y},P),new Nn({keys:g,programId:c,data:Buffer.from([...Mn.swapBaseInput,...P])})}function um(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y){let b=v([k("amountInMax"),k("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountInMax:f,amountOut:y},P),new Nn({keys:g,programId:c,data:Buffer.from([...Mn.swapBaseOutput,...P])})}async function cm(c){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:o,getEphemeralSigners:r}=c,i=[],[a,s]=[new or(t.id),new or(t.lpMint.address)],u;if(r)u=new or((await r(1))[0]);else{let g=oy.generate();i.push(g),u=g.publicKey}let{publicKey:l}=te(o,u,Xn),{publicKey:d}=qn(u),{publicKey:p}=oi(c.lockProgram,u),{publicKey:m}=te(e.wallet,s,Xn),{publicKey:f}=te(c.lockAuthProgram,s,Xn),y=ry({programId:c.lockProgram,auth:c.lockAuthProgram,payer:e.feePayer,liquidityOwner:e.wallet,nftOwner:o,nftMint:u,nftAccount:l,poolId:a,lockPda:p,mintLp:s,userLpVault:m,lockLpVault:f,poolVaultA:new or(n.vault.A),poolVaultB:new or(n.vault.B),metadataAccount:d,lpAmount:c.lpAmount,withMetadata:(b=c.withMetadata)!=null?b:!0});return{address:{nftMint:u,nftAccount:l,metadataAccount:d,lockPda:p,userLpVault:m,lockLpVault:f},instructions:[y],signers:i,instructionTypes:[Y.CpmmLockLp],lookupTableAddress:[]}}function ry({programId:c,auth:e,payer:t,liquidityOwner:n,nftOwner:o,nftMint:r,nftAccount:i,poolId:a,lockPda:s,mintLp:u,userLpVault:l,lockLpVault:d,poolVaultA:p,poolVaultB:m,metadataAccount:f,lpAmount:y,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:yt,isSigner:!1,isWritable:!1},{pubkey:ba.programId,isSigner:!1,isWritable:!1},{pubkey:Xn,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:pn,isSigner:!1,isWritable:!1}],P=v([k("lpAmount"),Ze("withMetadata")]),w=Buffer.alloc(P.span);P.encode({lpAmount:y,withMetadata:b},w);let B=Buffer.from([...Mn.lockCpLiquidity,...w]);return new Nn({keys:g,programId:c,data:B})}function Au({programId:c,nftOwner:e,auth:t,nftAccount:n,lockPda:o,poolId:r,mintLp:i,userVaultA:a,userVaultB:s,poolVaultA:u,poolVaultB:l,mintA:d,mintB:p,lockLpVault:m,lpFeeAmount:f,cpmmProgram:y,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:y!=null?y:Vn,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:ts,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Xn,isSigner:!1,isWritable:!1},{pubkey:Pu,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1}],P=v([k("lpFeeAmount")]),w=Buffer.alloc(P.span);P.encode({lpFeeAmount:f},w);let B=Buffer.from([...Mn.collectCpFee,...w]);return new Nn({keys:g,programId:c,data:B})}function wu(c,e,t,n,o,r,i,a,s,u,l,d,p){let m=gu(c,e,o).publicKey,f=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:ba.programId,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1}];return new Nn({keys:f,programId:c,data:Mn.collectCreatorFee})}function lm(c,e,t,n,o,r,i,a,s,u,l,d,p,m){let f=gu(c,t,r).publicKey,y=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:ba.programId,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1}];return new Nn({keys:y,programId:c,data:Mn.collectCreatorFeePermissionless})}function mm(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w,B,A,h,x){let S=v([k("amountA"),k("amountB"),k("openTime"),_("feeOn")]),K=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:P,isSigner:!1,isWritable:!0},{pubkey:Xn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:ba.programId,isSigner:!1,isWritable:!1},...(x!=null?x:[]).map(C=>({pubkey:C,isSigner:!1,isWritable:!1}))],I=Buffer.alloc(S.span);return S.encode({amountA:w,amountB:B,openTime:A,feeOn:h},I),new Nn({keys:K,programId:c,data:Buffer.from([...Mn.initializeWithPermission,...I])})}var dm=v([we(8),_("bump"),Ze("disableCreatePool"),_e("index"),k("tradeFeeRate"),k("protocolFeeRate"),k("fundFeeRate"),k("createPoolFee"),F("protocolOwner"),F("fundOwner"),k("creatorFeeRate"),k("creatorFeeShareRate"),$(k(),14)]),ga=v([we(8),F("configId"),F("poolCreator"),F("vaultA"),F("vaultB"),F("mintLp"),F("mintA"),F("mintB"),F("mintProgramA"),F("mintProgramB"),F("observationId"),_("bump"),_("status"),_("lpDecimals"),_("mintDecimalA"),_("mintDecimalB"),k("lpAmount"),k("protocolFeesMintA"),k("protocolFeesMintB"),k("fundFeesMintA"),k("fundFeesMintB"),k("openTime"),k("epoch"),_("feeOn"),Ze("enableCreatorFee"),$(_(),6),k("creatorFeesMintA"),k("creatorFeesMintB"),$(k(),28)]),XK=v([we(8),F("configId"),$(k(),30)]),YK=v([we(8),_("bump"),F("creator"),F("ammConfig"),k("shareRate"),$(k(),8)]);var pm=(n=>(n[n.BothToken=0]="BothToken",n[n.OnlyTokenA=1]="OnlyTokenA",n[n.OnlyTokenB=2]="OnlyTokenB",n))(pm||{});var rr=class extends tt{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Ne(this.scope.connection,e.map(d=>({pubkey:new q(d)}))),o={},r=new Set,i=[];for(let d=0;d<e.length;d++){let p=n[d];if(p.accountInfo===null)throw Error("fetch pool info error: "+String(e[d]));let m=ga.decode(p.accountInfo.data);o[String(e[d])]=E(N({},m),{programId:p.accountInfo.owner}),r.add(String(m.configId)),i.push(m.vaultA,m.vaultB)}let a={};if(t){let d=[...r],p=await Ne(this.scope.connection,d.map(m=>({pubkey:new q(m)})));for(let m=0;m<d.length;m++){let f=p[m].accountInfo;if(f===null)throw Error("fetch pool config error: "+d[m]);a[d[m]]=dm.decode(f.data)}}let s={},u=await Ne(this.scope.connection,i.map(d=>({pubkey:new q(d)})));for(let d=0;d<i.length;d++){let p=u[d].accountInfo;if(p===null)throw Error("fetch vault info error: "+i[d]);s[String(i[d])]=new Xe(ay.decode(p.data).amount.toString())}let l={};for(let[d,p]of Object.entries(o)){let m=s[p.vaultA.toString()].sub(p.protocolFeesMintA).sub(p.fundFeesMintA).sub(p.creatorFeesMintA),f=s[p.vaultB.toString()].sub(p.protocolFeesMintB).sub(p.fundFeesMintB).sub(p.creatorFeesMintB);l[d]=E(N({},p),{baseReserve:m,quoteReserve:f,vaultAAmount:s[p.vaultA.toString()],vaultBAmount:s[p.vaultB.toString()],configInfo:a[p.configId.toString()],poolPrice:new cn(f.toString()).div(new cn(10).pow(p.mintDecimalB)).div(new cn(m.toString()).div(new cn(10).pow(p.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var s,u,l,d;let r=e[o],[i,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return E(N({},n),{[o]:E(N({},r),{id:new q(o),configInfo:r.configInfo,version:7,authority:Co(r.programId).publicKey,mintA:gt({address:i,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(s=t[i])!=null&&s.feeConfig?Cn((u=t[i])==null?void 0:u.feeConfig):void 0}}),mintB:gt({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Cn((d=t[a])==null?void 0:d.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await fo({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=gt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Cn(n[t.mintA.toBase58()].feeConfig):void 0}}),r=gt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Cn(n[t.mintB.toBase58()].feeConfig):void 0}}),i=gt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Gt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},s={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:i,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new cn(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new cn(t.vaultBAmount.toString()).div(10**r.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:s,week:s,month:s,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,feeOn:"",hasDynamicFee:!1,launchMigratePool:!1,tips:[]},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Co(t.programId).publicKey.toBase58(),mintLp:i,config:a,observationId:Ro(t.programId,new q(e)).publicKey.toBase58()},rpcData:t,computePoolInfo:E(N({},t),{id:new q(e),configInfo:t.configInfo,version:7,authority:Co(t.programId).publicKey,mintA:o,mintB:r})}}async createPool(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:a=!1,txVersion:s,feeConfig:u,computeBudgetConfig:l,txTipConfig:d,feePayer:p,addSupportMintExt:m}=b,f=Ye(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","addSupportMintExt"]);var Z,H,ne;let g=r.feePayer||((Z=this.scope.owner)==null?void 0:Z.publicKey),P=new Xe(new q(f.mintA.address).toBuffer()).lte(new Xe(new q(f.mintB.address).toBuffer())),[w,B]=P?[f.mintA,f.mintB]:[f.mintB,f.mintA],[A,h]=P?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],x=r.useSOLBalance&&w.address===ri.toBase58(),S=r.useSOLBalance&&B.address===ri.toBase58(),[K,I]=[new q(w.address),new q(B.address)],C=this.createTxBuilder(p),{account:R,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:w.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:A}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:i,checkCreateATAOwner:a});C.addInstruction(O||{});let{account:L,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({mint:new q(B.address),tokenProgram:B.programId,owner:this.scope.ownerPubKey,createInfo:S?{payer:g,amount:h}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:i,checkCreateATAOwner:a});if(C.addInstruction(M||{}),R===void 0||L===void 0)throw Error(`you don't has some token account, userVaultA: ${R==null?void 0:R.toBase58()}, userVaultB: ${L==null?void 0:L.toBase58()}`);let W=yu({poolId:e,programId:t,configId:new q(u.id),mintA:K,mintB:I}),D=[],X=[];return m&&(w.programId===fm.toBase58()&&X.push(bu(t,new q(w.address)).publicKey),B.programId===fm.toBase58()&&X.push(bu(t,new q(B.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(X)).forEach((j,pe)=>{j&&D.push(X[pe])})),C.addInstruction({instructions:[rm(t,this.scope.ownerPubKey,new q(u.id),W.authority,W.poolId,K,I,W.lpMint,R,L,te(this.scope.ownerPubKey,W.lpMint).publicKey,W.vaultA,W.vaultB,n,new q((H=w.programId)!=null?H:Gt),new q((ne=B.programId)!=null?ne:Gt),W.observationId,A,h,o,D)],instructionTypes:[Y.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(d),C.versionBuild({txVersion:s,extInfo:{address:E(N({},W),{mintA:w,mintB:B,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:r,slippage:i,computeResult:a,computeBudgetConfig:s,txTipConfig:u,config:l,txVersion:d,feePayer:p}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:y}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:P,anotherAmount:w}=a||this.computePairAmount({poolInfo:E(N({},t),{lpAmount:new cn(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new ht(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new cn(o.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),B=w.amount,A=t.mintA.address===ri.toString(),h=t.mintB.address===ri.toString(),x=this.createTxBuilder(p),[S,K]=[new q(t.mintA.address),new q(t.mintB.address)],{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new q(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(r?o:B).isZero()?{payer:this.scope.ownerPubKey,amount:r?o:B}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:y});x.addInstruction(C||{});let{account:R,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||(r?B:o).isZero()?{payer:this.scope.ownerPubKey,amount:r?B:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:y});x.addInstruction(O||{}),!I&&!R&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let L=await m.getCreatedTokenAccount({mint:new q(t.lpMint.address)}),Z=await m.handleTokenAccount({side:"out",amount:0,mint:new q(t.lpMint.address),tokenAccount:L,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:M}=Z,W=Ye(Z,["tokenAccount"]);x.addInstruction(W);let D=n!=null?n:await this.getCpmmPoolKeys(t.id),X=new ht(new Xe(1)).sub(i);return x.addInstruction({instructions:[am(new q(t.programId),this.scope.ownerPubKey,new q(D.authority),new q(t.id),M,I,R,new q(D.vault.A),new q(D.vault.B),S,K,new q(t.lpMint.address),a?a==null?void 0:a.liquidity:X.mul(g).quotient,r?P.amount:B,r?B:P.amount)],instructionTypes:[Y.CpmmAddLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),x.addCustomComputeBudget(s),x.addTipInstruction(u),x.versionBuild({txVersion:d,lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:void 0})}async withdrawLiquidity(e){var W,D;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:r,computeBudgetConfig:i,txTipConfig:a,txVersion:s,feePayer:u,closeWsol:l=!0}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let d=new ht(new Xe(1)).sub(r),p=await this.getRpcPoolInfo(t.id),[m,f]=[d.mul(o.mul(p.baseReserve).div(p.lpAmount)).quotient,d.mul(o.mul(p.quoteReserve).div(p.lpAmount)).quotient],y=await this.scope.fetchEpochInfo(),[b,g]=[bt(m,t.mintA.extensions.feeConfig,y,!1),bt(f,t.mintB.extensions.feeConfig,y,!1)],{account:P}=this.scope,w=this.createTxBuilder(u),[B,A]=[new q(t.mintA.address),new q(t.mintB.address)],h=B.equals(J),x=A.equals(J),S,K,{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new q(t.mintA.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(h&&l),associatedOnly:!h,checkCreateATAOwner:!1});S=I,C&&w.addInstruction(C);let{account:R,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new q(t.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(x&&l),associatedOnly:!x,checkCreateATAOwner:!1});K=R,O&&w.addInstruction(O),(!S||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",P.tokenAccounts);let L=await P.getCreatedTokenAccount({mint:new q(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",P.tokenAccounts);let M=n!=null?n:await this.getCpmmPoolKeys(t.id);return w.addInstruction({instructions:[sm(new q(t.programId),this.scope.ownerPubKey,new q(M.authority),new q(t.id),L,S,K,new q(M.vault.A),new q(M.vault.B),B,A,new q(t.lpMint.address),o,m.sub((W=b.fee)!=null?W:new Xe(0)),f.sub((D=g.fee)!=null?D:new Xe(0)))],instructionTypes:[Y.CpmmWithdrawLiquidity],lookupTableAddress:M.lookupTableAccount?[M.lookupTableAccount]:[]}),w.addCustomComputeBudget(i),w.addTipInstruction(a),w.versionBuild({txVersion:s,lookupTableAddress:M.lookupTableAccount?[M.lookupTableAccount]:void 0})}async swap(e){var C,R,O,L,M,W;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:r,inputAmount:i,swapResult:a,slippage:s=0,config:u,computeBudgetConfig:l,txTipConfig:d,txVersion:p,feePayer:m}=e,{bypassAssociatedCheck:f,checkCreateATAOwner:y,associatedOnly:b}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(m),[P,w]=[new q(t.mintA.address),new q(t.mintB.address)];r?a.inputAmount=a.inputAmount.mul(new Xe((1+s)*1e4)).div(new Xe(1e4)):a.outputAmount=a.outputAmount.mul(new Xe((1-s)*1e4)).div(new Xe(1e4));let B=t.mintA.address===J.toBase58(),A=t.mintB.address===J.toBase58(),{account:h,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:P,tokenProgram:new q((C=t.mintA.programId)!=null?C:Gt),owner:this.scope.ownerPubKey,createInfo:B||!o?{payer:m||this.scope.ownerPubKey,amount:o?a.inputAmount:0}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:b,checkCreateATAOwner:y});x&&g.addInstruction(x);let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:w,tokenProgram:new q((R=t.mintB.programId)!=null?R:Gt),owner:this.scope.ownerPubKey,createInfo:A||o?{payer:m||this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:b,checkCreateATAOwner:y});K&&g.addInstruction(K),(!h||!S)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:S,mintAUseSOLBalance:B,mintBUseSOLBalance:A,associatedOnly:b});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[r?um(new q(t.programId),this.scope.ownerPubKey,new q(I.authority),new q(I.config.id),new q(t.id),o?h:S,o?S:h,new q(I.vault[o?"A":"B"]),new q(I.vault[o?"B":"A"]),new q((M=t[o?"mintA":"mintB"].programId)!=null?M:Gt),new q((W=t[o?"mintB":"mintA"].programId)!=null?W:Gt),o?P:w,o?w:P,Ro(new q(t.programId),new q(t.id)).publicKey,a.inputAmount,a.outputAmount):ii(new q(t.programId),this.scope.ownerPubKey,new q(I.authority),new q(I.config.id),new q(t.id),o?h:S,o?S:h,new q(I.vault[o?"A":"B"]),new q(I.vault[o?"B":"A"]),new q((O=t[o?"mintA":"mintB"].programId)!=null?O:Gt),new q((L=t[o?"mintB":"mintA"].programId)!=null?L:Gt),o?P:w,o?w:P,Ro(new q(t.programId),new q(t.id)).publicKey,i,a.outputAmount)],instructionTypes:[r?Y.CpmmSwapBaseOut:Y.ClmmSwapBaseIn]}),g.addCustomComputeBudget(l),g.addTipInstruction(d),g.versionBuild({txVersion:p,lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:void 0})}async lockLp(e){var p,m,f,y,b;let{poolInfo:t,lpAmount:n,computeBudgetConfig:o,txTipConfig:r,txVersion:i,feePayer:a,feeNftOwner:s}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let u=this.createTxBuilder(a),l=(p=e.poolKeys)!=null?p:await this.getCpmmPoolKeys(t.id),d=await cm({poolInfo:t,poolKeys:l,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(m=e.feePayer)!=null?m:this.scope.ownerPubKey},feeNftOwner:s!=null?s:this.scope.ownerPubKey,lockProgram:(f=e.programId)!=null?f:vo,lockAuthProgram:(y=e.authProgram)!=null?y:hi,lpAmount:n,withMetadata:(b=e.withMetadata)!=null?b:!0,getEphemeralSigners:e.getEphemeralSigners});return u.addInstruction(d),u.addCustomComputeBudget(o),u.addTipInstruction(r),u.versionBuild({txVersion:i,extInfo:d.address,lookupTableAddress:l.lookupTableAccount?[l.lookupTableAccount]:void 0})}async harvestLockLp(e){var R;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:r=vo,authProgram:i=hi,cpmmProgram:a,computeBudgetConfig:s,txTipConfig:u,txVersion:l,closeWsol:d=!0}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let p=e.feePayer||this.scope.ownerPubKey,m=this.createTxBuilder(p),[f,y]=[new q(t.mintA.address),new q(t.mintB.address)],b=f.equals(J),g=y.equals(J),P,w,{account:B,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new q(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(b&&d),associatedOnly:!b,checkCreateATAOwner:!1});P=B,A&&m.addInstruction(A);let{account:h,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new q(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&d),associatedOnly:!g,checkCreateATAOwner:!1});w=h,x&&m.addInstruction(x),(!P||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:P,tokenAccountB:w});let S=(R=e.poolKeys)!=null?R:await this.getCpmmPoolKeys(t.id),{publicKey:K}=te(p,o,Gt),{publicKey:I}=oi(r,o),{publicKey:C}=te(i,new q(t.lpMint.address),Gt);return m.addInstruction({instructions:[Au({programId:r,nftOwner:this.scope.ownerPubKey,auth:i,nftMint:o,nftAccount:K,lockPda:I,poolId:new q(t.id),mintLp:new q(S.mintLp.address),userVaultA:P,userVaultB:w,poolVaultA:new q(S.vault.A),poolVaultB:new q(S.vault.B),mintA:f,mintB:y,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[Y.CpmmCollectLockFee]}),m.addCustomComputeBudget(s),m.addTipInstruction(u),m.versionBuild({txVersion:l,lookupTableAddress:S.lookupTableAccount?[S.lookupTableAccount]:void 0})}async harvestMultiLockLp(e){var m;let{lockInfo:t,programId:n=vo,authProgram:o=hi,cpmmProgram:r,computeBudgetConfig:i,txVersion:a,closeWsol:s=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),d={},p=[];for(let f of t){let{poolInfo:y,lpFeeAmount:b,nftMint:g}=f;if(b.isZero())continue;let[P,w]=[new q(y.mintA.address),new q(y.mintB.address)],B=P.equals(J),A=w.equals(J),h=d[y.mintA.address],x=d[y.mintB.address];if(!h)if(B){let{account:R,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new q(y.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!s,associatedOnly:!1,checkCreateATAOwner:!1});h=R,O&&l.addInstruction(O),d[y.mintA.address]=R}else{let R=new q(y.mintA.address);h=this.scope.account.getAssociatedTokenAccount(R,new q(y.mintA.programId)),l.addInstruction({instructions:[ai(this.scope.ownerPubKey,h,this.scope.ownerPubKey,R,new q(y.mintA.programId))]}),d[y.mintA.address]=h}if(!x)if(A){let{account:R,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new q(y.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!s,associatedOnly:!1,checkCreateATAOwner:!1});x=R,O&&l.addInstruction(O),d[y.mintB.address]=R}else{let R=new q(y.mintB.address);x=this.scope.account.getAssociatedTokenAccount(R,new q(y.mintB.programId)),l.addInstruction({instructions:[ai(this.scope.ownerPubKey,x,this.scope.ownerPubKey,R,new q(y.mintB.programId))]}),d[y.mintB.address]=x}(!h||!x)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:h,tokenAccountB:x});let S=(m=f.poolKeys)!=null?m:await this.getCpmmPoolKeys(y.id);S.lookupTableAccount&&p.push(S.lookupTableAccount);let{publicKey:K}=te(u,g,Gt),{publicKey:I}=oi(n,g),{publicKey:C}=te(o,new q(y.lpMint.address),Gt);l.addInstruction({instructions:[Au({programId:n,nftOwner:this.scope.ownerPubKey,auth:o,nftMint:g,nftAccount:K,lockPda:I,poolId:new q(y.id),mintLp:new q(S.mintLp.address),userVaultA:h,userVaultB:x,poolVaultA:new q(S.vault.A),poolVaultB:new q(S.vault.B),mintA:P,mintB:w,lockLpVault:C,lpFeeAmount:b,cpmmProgram:r==null?void 0:r.programId,cpmmAuthProgram:r==null?void 0:r.authProgram})],instructionTypes:[Y.CpmmCollectLockFee]})}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:i,lookupTableAddress:p}):l.sizeCheckBuild({computeBudgetConfig:i})}async createPoolWithPermission(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:a=!1,txVersion:s,feeConfig:u,computeBudgetConfig:l,txTipConfig:d,feePayer:p,feeOn:m}=b,f=Ye(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var D,X,Z;console.log("***this method only available for wallet with permissions***");let g=r.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),P=new Xe(new q(f.mintA.address).toBuffer()).lte(new Xe(new q(f.mintB.address).toBuffer())),[w,B]=P?[f.mintA,f.mintB]:[f.mintB,f.mintA],[A,h]=P?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],x=r.useSOLBalance&&w.address===ri.toBase58(),S=r.useSOLBalance&&B.address===ri.toBase58(),[K,I]=[new q(w.address),new q(B.address)],C=this.createTxBuilder(p),{account:R,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:w.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:A}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:i,checkCreateATAOwner:a});C.addInstruction(O||{});let{account:L,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({mint:new q(B.address),tokenProgram:B.programId,owner:this.scope.ownerPubKey,createInfo:S?{payer:g,amount:h}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:i,checkCreateATAOwner:a});if(C.addInstruction(M||{}),R===void 0||L===void 0)throw Error("you don't has some token account");let W=yu({poolId:e,programId:t,configId:new q(u.id),mintA:K,mintB:I});return C.addInstruction({instructions:[mm(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new q(u.id),W.authority,W.poolId,K,I,W.lpMint,R,L,te(this.scope.ownerPubKey,W.lpMint).publicKey,W.vaultA,W.vaultB,n,new q((X=w.programId)!=null?X:Gt),new q((Z=B.programId)!=null?Z:Gt),W.observationId,im(t,this.scope.ownerPubKey).publicKey,A,h,o,m)],instructionTypes:[Y.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(d),C.versionBuild({txVersion:s,extInfo:{address:E(N({},W),{mintA:w,mintB:B,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=Vn,txVersion:o,computeBudgetConfig:r,txTipConfig:i,feePayer:a}){let s=a||this.scope.ownerPubKey,u=this.createTxBuilder(s),l=t!=null?t:await this.getCpmmPoolKeys(e.id),[d,p,m,f]=[new q(e.mintA.address),new q(e.mintB.address),new q(e.mintA.programId),new q(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(d,m),b=this.scope.account.getAssociatedTokenAccount(p,f);return u.addInstruction({instructions:[ai(this.scope.ownerPubKey,y,this.scope.ownerPubKey,d,new q(e.mintA.programId)),ai(this.scope.ownerPubKey,b,this.scope.ownerPubKey,p,new q(e.mintB.programId))]}),u.addInstruction({instructions:[wu(n,this.scope.ownerPubKey,new q(l.authority),new q(l.id),new q(l.config.id),new q(l.vault.A),new q(l.vault.B),d,p,y,b,m,f)],instructionTypes:[]}),u.addCustomComputeBudget(r),u.addTipInstruction(i),u.versionBuild({txVersion:o})}async collectMultiCreatorFees({poolInfoList:e,poolKeyList:t,programId:n=Vn,txVersion:o,computeBudgetConfig:r,feePayer:i}){let a=i||this.scope.ownerPubKey,s=this.createTxBuilder(a),u={},l=t!=null?t:[];if(!l.length){let p=e.map(b=>b.id),m=95,f=[];for(let b=0;b<p.length;b+=m)f.push(p.slice(b,b+m));l=(await Promise.all(f.map(b=>this.scope.api.fetchPoolKeysById({idList:b})))).flat()}let d=l.reduce((p,m)=>E(N({},p),{[m.id]:m}),{});for(let p of e){let m=d[p.id]||await this.getCpmmPoolKeys(p.id),[f,y,b,g]=[new q(p.mintA.address),new q(p.mintB.address),new q(p.mintA.programId),new q(p.mintB.programId)],P=u[p.mintA.address]||this.scope.account.getAssociatedTokenAccount(f,b),w=u[p.mintB.address]||this.scope.account.getAssociatedTokenAccount(y,g);u[p.mintA.address]=P,u[p.mintB.address]=w,s.addInstruction({instructions:[wu(n,this.scope.ownerPubKey,new q(m.authority),new q(m.id),new q(m.config.id),new q(m.vault.A),new q(m.vault.B),f,y,P,w,b,g)],instructionTypes:[]})}return o===0?s.sizeCheckBuildV0({computeBudgetConfig:r,lookupTableAddress:l.map(p=>p.lookupTableAccount).filter(Boolean),insCountLimit:6}):s.sizeCheckBuild({computeBudgetConfig:r})}async collectCreatorFeesPermissionless({poolInfo:e,poolKeys:t,programId:n=Vn,txVersion:o,computeBudgetConfig:r,txTipConfig:i,feePayer:a}){let s=a||this.scope.ownerPubKey,u=this.createTxBuilder(s),l=t!=null?t:await this.getCpmmPoolKeys(e.id),[d,p,m,f]=[new q(e.mintA.address),new q(e.mintB.address),new q(e.mintA.programId),new q(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(d,m),b=this.scope.account.getAssociatedTokenAccount(p,f);return u.addInstruction({instructions:[ai(this.scope.ownerPubKey,y,this.scope.ownerPubKey,d,new q(e.mintA.programId)),ai(this.scope.ownerPubKey,b,this.scope.ownerPubKey,p,new q(e.mintB.programId))]}),u.addInstruction({instructions:[lm(n,s,this.scope.ownerPubKey,new q(l.authority),new q(l.id),new q(l.config.id),new q(l.vault.A),new q(l.vault.B),d,p,y,b,m,f)],instructionTypes:[]}),u.addCustomComputeBudget(r),u.addTipInstruction(i),u.versionBuild({txVersion:o})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o,swapBaseIn:r=!0}){let i=n.toString()===e.mintB.address,a=e.feeOn===0||e.feeOn===2,s=r?nr.swapBaseInput(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,a):nr.swapBaseOutput(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,a),u=new cn(s.outputAmount.toString()).div(s.inputAmount.toString()),l=s.outputAmount.mul(new Xe((1-o)*1e4)).div(new Xe(1e4));return{allTrade:r?s.inputAmount.eq(t):s.outputAmount.eq(t),amountIn:r?t:s.inputAmount,amountOut:s.outputAmount,minAmountOut:l,executionPrice:u,fee:s.tradeFee,priceImpact:e.poolPrice.sub(u).div(e.poolPrice),swapResult:s}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:r,epochInfo:i,baseIn:a}){var B,A,h,x,S,K,I,C,R;let s=1-Number(r.toSignificant())/100,u=new Xe(new cn(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(s).toFixed(0)),l=bt(u,e[a?"mintA":"mintB"].extensions.feeConfig,i,!1),d=u.sub((B=l.fee)!=null?B:new Xe(0)),p=new Xe(new cn(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,cn.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(h=(A=l.fee)==null?void 0:A.toString())!=null?h:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let m=a?"base":"quote";this.logDebug("input side:",m);let f=d.mul(p).div(m==="base"?t:n),y={amount:ee,fee:void 0,expirationTime:void 0};if(!d.isZero()){let O=sy(f,t,n,p);this.logDebug("lpAmountData:",{amountA:O.amountA.toString(),amountB:O.amountB.toString()}),y=bt(O[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,i,!0)}let b=new ht(new Xe(1)).add(r),g=new ht(new Xe(1)).sub(r),P=bt(b.mul(y.amount.sub((x=y.fee)!=null?x:new Xe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,i,!0),w=bt(g.mul(y.amount.sub((S=y.fee)!=null?S:new Xe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,i,!0);return this.logDebug("anotherAmount:",y.amount.toString(),"anotherAmountFee:",(I=(K=y.fee)==null?void 0:K.toString())!=null?I:0,"maxAnotherAmount:",P.amount.toString(),"maxAnotherAmountFee:",(R=(C=P.fee)==null?void 0:C.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:P,minAnotherAmount:w,liquidity:f}}async fetchCpmmLockBalances(){await this.scope.account.fetchWalletTokenAccounts({forceUpdate:!0});let e=this.scope.account.tokenAccountRawInfos.filter(a=>a.accountInfo.amount.eq(new Xe(1))),t=e.map(a=>oi(this.scope.cluster==="mainnet"?vo:yn.LOCK_CPMM_PROGRAM,a.accountInfo.mint).publicKey),n=await Ne(this.scope.connection,t.map(a=>({pubkey:a}))),o=new Map,r=n.filter((a,s)=>(o.set(a.pubkey.toString(),e[s].accountInfo.mint.toString()),!!a.accountInfo)).map(a=>a.pubkey);return(await Promise.all(r.map(a=>this.scope.api.fetchCpmmLockInfo(a)))).map((a,s)=>E(N({},a),{nftMint:new q(o.get(r[s].toString()))}))}};function sy(c,e,t,n){let o=c.mul(e).div(n);!o.isZero()&&!c.mul(e).mod(n).isZero()&&(o=o.add(new Xe(1)));let r=c.mul(t).div(n);return!r.isZero()&&!c.mul(t).mod(n).isZero()&&(r=r.add(new Xe(1))),{amountA:o,amountB:r}}import{PublicKey as de,SystemProgram as Wm}from"@solana/web3.js";import{createTransferInstruction as qm,TOKEN_PROGRAM_ID as We,TOKEN_2022_PROGRAM_ID as mi,createAssociatedTokenAccountIdempotentInstruction as di,createSyncNativeInstruction as Um,createTransferCheckedInstruction as Oy}from"@solana/spl-token";import Ae from"bn.js";import Ke from"decimal.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Pa,TOKEN_2022_PROGRAM_ID as Py,TOKEN_PROGRAM_ID as Su}from"@solana/spl-token";import{SystemProgram as Ct,TransactionInstruction as ct}from"@solana/web3.js";import ci from"bn.js";var uy=Buffer.from("vault_auth_seed","utf8"),cy=Buffer.from("global_config","utf8"),ly=Buffer.from("pool_vesting","utf8"),my=Buffer.from("platform_config","utf8"),dy=Buffer.from("platform_fee_vault_auth_seed","utf8"),py=Buffer.from("creator_fee_vault_auth_seed","utf8"),fy=Buffer.from("platform_global_access","utf8"),yy=Buffer.from("platform_allow_config","utf8"),by=Buffer.from("platform_curve_rule","utf8");function zt(c){return oe([uy],c)}function ku(c,e,t,n){return oe([cy,e.toBuffer(),gy(t),$r(n)],c)}function si(c,e,t){return oe([jr,e.toBuffer(),t.toBuffer()],c)}function Tu(c,e,t){return oe([Ks,e.toBuffer(),t.toBuffer()],c)}function ao(c){return oe([Buffer.from("__event_authority","utf8")],c)}function gy(c){let e=new ArrayBuffer(1);return new DataView(e).setUint8(0,c),new Uint8Array(e)}function hu(c,e){return oe([my,e.toBuffer()],c)}function ui(c,e,t){return oe([ly,e.toBuffer(),t.toBuffer()],c)}function kn(c,e,t){return oe([e.toBuffer(),t.toBuffer()],c)}function Bu(c){return oe([dy],c)}function Tn(c,e,t){return oe([e.toBuffer(),t.toBuffer()],c)}function Iu(c){return oe([py],c)}function jC(c,e,t){return oe([fy,e.toBuffer(),t.toBuffer()],c)}function ar(c,e,t){return oe([yy,e.toBuffer(),t.toBuffer()],c)}function xu(c,e,t){return oe([by,e.toBuffer(),t.toBuffer()],c)}var lt={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])};function uR(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w){throw new Error("*** launchlab initialize has been deprecated, please use initializeV2 instead! ***")}function ym(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w,B,A,h,x){let S=v([_("decimals"),Nt("name"),Nt("symbol"),Nt("uri")]),K=v([k("totalLockedAmount"),k("cliffPeriod"),k("unlockPeriod"),_("cpmmCreatorFeeOn")]),I=v([_("index"),k("supply"),k("totalFundRaisingB"),_("migrateType")]),C=v([_("index"),k("supply"),k("totalSellA"),k("totalFundRaisingB"),_("migrateType")]),R=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Su,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:pn,isSigner:!1,isWritable:!1},{pubkey:Ct.programId,isSigner:!1,isWritable:!1},{pubkey:yt,isSigner:!1,isWritable:!1},{pubkey:ao(c).publicKey,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1}];h&&R.push({pubkey:h,isSigner:!1,isWritable:!1}),x&&R.push({pubkey:x,isSigner:!1,isWritable:!1});let O=Buffer.alloc(Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+Buffer.from(b,"utf-8").length+4*3+1),L=Buffer.alloc(K.span),M=Buffer.alloc(g.type==="ConstantCurve"?C.span:I.span);return S.encode({decimals:m,name:f,symbol:y,uri:b},O),g.type==="ConstantCurve"?C.encode(E(N({index:0},g),{migrateType:g.migrateType==="amm"?0:1}),M):g.type==="FixedCurve"?I.encode(E(N({index:1},g),{migrateType:g.migrateType==="amm"?0:1}),M):g.type==="LinearCurve"&&I.encode(E(N({index:2},g),{migrateType:g.migrateType==="amm"?0:1}),M),K.encode({totalLockedAmount:P,cliffPeriod:w,unlockPeriod:B,cpmmCreatorFeeOn:A},L),new ct({keys:R,programId:c,data:Buffer.from([...lt.initializeV2,...O,...M,...L])})}function bm(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w,B,A,h,x){let S=v([_("decimals"),Nt("name"),Nt("symbol"),Nt("uri")]),K=v([k("totalLockedAmount"),k("cliffPeriod"),k("unlockPeriod"),_("cpmmCreatorFeeOn"),_("transferFeeExtensionParamsOption"),v([_e("transferFeeBasePoints"),k("maxinumFee")]).replicate("transferFeeExtensionParams")]),I=v([_("index"),k("supply"),k("totalFundRaisingB"),_("migrateType")]),C=v([_("index"),k("supply"),k("totalSellA"),k("totalFundRaisingB"),_("migrateType")]),R=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Py,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Ct.programId,isSigner:!1,isWritable:!1},{pubkey:ao(c).publicKey,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1}];h&&R.push({pubkey:h,isSigner:!1,isWritable:!1}),x&&R.push({pubkey:x,isSigner:!1,isWritable:!1});let O=Buffer.alloc(Buffer.from(m,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),L=Buffer.alloc(K.span),M=Buffer.alloc(b.type==="ConstantCurve"?C.span:I.span);return S.encode({decimals:p,name:m,symbol:f,uri:y},O),b.type==="ConstantCurve"?C.encode(E(N({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),M):b.type==="FixedCurve"?I.encode(E(N({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),M):b.type==="LinearCurve"&&I.encode(E(N({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),M),K.encode({totalLockedAmount:g,cliffPeriod:P,unlockPeriod:w,cpmmCreatorFeeOn:B,transferFeeExtensionParamsOption:A?1:0,transferFeeExtensionParams:A!=null?A:{transferFeeBasePoints:0,maxinumFee:new ci(0)}},L),new ct({keys:R,programId:c,data:Buffer.from([...lt.initializeWithToken2022,...O,...M,...L])})}function sr(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w){let B=v([k("amountB"),k("minAmountA"),k("shareFeeRate")]),A=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:ao(c).publicKey,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1}];w&&A.push({pubkey:w,isSigner:!1,isWritable:!0}),A.push({pubkey:Ct.programId,isSigner:!1,isWritable:!1}),A.push({pubkey:f,isSigner:!1,isWritable:!0}),A.push({pubkey:y,isSigner:!1,isWritable:!0});let h=Buffer.alloc(B.span);return B.encode({amountB:b,minAmountA:g,shareFeeRate:P!=null?P:new ci(0)},h),new ct({keys:A,programId:c,data:Buffer.from([...lt.buyExactIn,...h])})}function gm(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w){let B=v([k("amountA"),k("maxAmountB"),k("shareFeeRate")]),A=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:ao(c).publicKey,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1}];w&&A.push({pubkey:w,isSigner:!1,isWritable:!0}),A.push({pubkey:Ct.programId,isSigner:!1,isWritable:!1}),A.push({pubkey:f,isSigner:!1,isWritable:!0}),A.push({pubkey:y,isSigner:!1,isWritable:!0});let h=Buffer.alloc(B.span);return B.encode({amountA:b,maxAmountB:g,shareFeeRate:P!=null?P:new ci(0)},h),new ct({keys:A,programId:c,data:Buffer.from([...lt.buyExactOut,...h])})}function Aa(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w){let B=v([k("amountA"),k("minAmountB"),k("shareFeeRate")]),A=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:ao(c).publicKey,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1}];w&&A.push({pubkey:w,isSigner:!1,isWritable:!0}),A.push({pubkey:Ct.programId,isSigner:!1,isWritable:!1}),A.push({pubkey:f,isSigner:!1,isWritable:!0}),A.push({pubkey:y,isSigner:!1,isWritable:!0});let h=Buffer.alloc(B.span);return B.encode({amountA:b,minAmountB:g,shareFeeRate:P!=null?P:new ci(0)},h),new ct({keys:A,programId:c,data:Buffer.from([...lt.sellExactIn,...h])})}function Pm(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f,y,b,g,P,w){let B=v([k("amountB"),k("maxAmountA"),k("shareFeeRate")]),A=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:ao(c).publicKey,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1}];w&&A.push({pubkey:w,isSigner:!1,isWritable:!0}),A.push({pubkey:Ct.programId,isSigner:!1,isWritable:!1}),A.push({pubkey:f,isSigner:!1,isWritable:!0}),A.push({pubkey:y,isSigner:!1,isWritable:!0});let h=Buffer.alloc(B.span);return B.encode({amountB:b,maxAmountA:g,shareFeeRate:P!=null?P:new ci(0)},h),new ct({keys:A,programId:c,data:Buffer.from([...lt.sellExactOut,...h])})}function Ku(c,e,t,n,o,r,i,a,s){let u=v([]),l=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,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:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ct.programId,isSigner:!1,isWritable:!1},{pubkey:Pa,isSigner:!1,isWritable:!1}],d=Buffer.alloc(u.span);return u.encode({},d),new ct({keys:l,programId:c,data:Buffer.from([...lt.claimVestedToken,...d])})}function Cu(c,e,t,n,o,r){let i=v([k("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ct.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);return i.encode({shareAmount:r},s),new ct({keys:a,programId:c,data:Buffer.from([...lt.createVestingAccount,...s])})}function Ru(c,e,t,n,o,r,i,a,s){let u=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:Ct.programId,isSigner:!1,isWritable:!0},{pubkey:Pa,isSigner:!1,isWritable:!0}];return new ct({keys:u,programId:c,data:lt.claimPlatformFee})}function Am(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f){let y=v([k("platformScale"),k("creatorScale"),k("burnScale"),k("feeRate"),Nt("name"),Nt("web"),Nt("img"),k("creatorFeeRate"),k("platformVestingScale")]),b=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Ct.programId,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1}],g=Buffer.alloc(8*6+Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(m,"utf-8").length+4*3);return y.encode({platformScale:s.platformScale,creatorScale:s.creatorScale,burnScale:s.burnScale,feeRate:u,name:d,web:p,img:m,creatorFeeRate:l,platformVestingScale:f},g),new ct({keys:b,programId:c,data:Buffer.from([...lt.createPlatformConfig,...g])})}function wm(c,e,t,n){let o=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],r;if(n.type==="updateClaimFeeWallet"){let i=v([_("index"),F("value")]);r=Buffer.alloc(i.span),i.encode({index:0,value:n.value},r)}else if(n.type==="updateLockNftWallet"){let i=v([_("index"),F("value")]);r=Buffer.alloc(i.span),i.encode({index:1,value:n.value},r)}else if(n.type==="migrateCpLockNftScale"){let i=v([_("index"),k("platformScale"),k("creatorScale"),k("burnScale")]);r=Buffer.alloc(i.span),i.encode(N({index:2},n.value),r)}else if(n.type==="updateFeeRate"){let i=v([_("index"),k("value")]);r=Buffer.alloc(i.span),i.encode({index:3,value:n.value},r)}else if(n.type==="updateImg"||n.type==="updateName"||n.type==="updateWeb"){let i=v([_("index"),Nt("value")]);r=Buffer.alloc(Buffer.from(n.value,"utf-8").length+4+1*1),n.type==="updateName"?i.encode({index:4,value:n.value},r):n.type==="updateWeb"?i.encode({index:5,value:n.value},r):n.type==="updateImg"&&i.encode({index:6,value:n.value},r)}else if(n.type==="updateCpConfigId"){o.push({pubkey:n.value,isSigner:!1,isWritable:!1});let i=v([_("index")]);r=Buffer.alloc(i.span),i.encode({index:7},r)}else if(n.type==="updateAll"){o.push({pubkey:n.value.cpConfigId,isSigner:!1,isWritable:!1});let i=v([_("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),k("platformScale"),k("creatorScale"),k("burnScale"),k("feeRate"),Nt("name"),Nt("web"),Nt("img"),F("transferFeeExtensionAuth"),k("creatorFeeRate"),k("platformVestingScale"),F("platformVestingWallet")]);r=Buffer.alloc(1+32+32+32+8*5+4*3+Buffer.from(n.value.name,"utf-8").length+Buffer.from(n.value.web,"utf-8").length+Buffer.from(n.value.img,"utf-8").length+32+8),i.encode({index:8,platformClaimFeeWallet:n.value.platformClaimFeeWallet,platformLockNftWallet:n.value.platformLockNftWallet,platformVestingWallet:n.value.platformVestingWallet,platformScale:n.value.migrateCpLockNftScale.platformScale,creatorScale:n.value.migrateCpLockNftScale.creatorScale,burnScale:n.value.migrateCpLockNftScale.burnScale,feeRate:n.value.feeRate,name:n.value.name,web:n.value.web,img:n.value.img,transferFeeExtensionAuth:n.value.transferFeeExtensionAuth,creatorFeeRate:n.value.creatorFeeRate,platformVestingScale:n.value.platformVestingScale},r)}else if(n.type==="updateVestingWallet"){let i=v([_("index"),F("value")]);r=Buffer.alloc(i.span),i.encode({index:9,value:n.value},r)}else if(n.type==="updatePlatformVestingScale"){let i=v([_("index"),k("value")]);r=Buffer.alloc(i.span),i.encode({index:10,value:n.value},r)}else if(n.type==="updatePlatformCpCreator"){let i=v([_("index"),F("value")]);r=Buffer.alloc(i.span),i.encode({index:11,value:n.value},r)}else if(n.type==="updateRestrictGlobalConfig"){let i=v([_("index"),k("value")]);r=Buffer.alloc(i.span),i.encode({index:12,value:n.value},r)}else if(n.type==="updateRestrictCurveParam"){let i=v([_("index"),k("value")]);r=Buffer.alloc(i.span),i.encode({index:13,value:n.value},r)}else if(n.type==="updateCurveRuleManager"){let i=v([_("index"),F("value")]);r=Buffer.alloc(i.span),i.encode({index:14,value:n.value},r)}else throw Error("updateInfo params type error");return new ct({keys:o,programId:c,data:Buffer.from([...lt.updatePlaformConfig,...r])})}function Lu(c,e,t,n,o,r,i,a){let s=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Ct.programId,isSigner:!1,isWritable:!1},{pubkey:Pa,isSigner:!1,isWritable:!1}];return new ct({keys:s,programId:c,data:lt.claimPlatformFeeFromVault})}function Ou(c,e,t,n,o,r,i){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:Ct.programId,isSigner:!1,isWritable:!1},{pubkey:Pa,isSigner:!1,isWritable:!1}];return new ct({keys:a,programId:c,data:lt.claimCreatorFee})}var cR=new ci("18446744073709551615");function km(c,e,t,n,o,r){let i=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Ct.programId,isSigner:!1,isWritable:!1}];return new ct({keys:i,programId:c,data:lt.createPlatformVestingAccount})}function Tm(c,e,t,n,o){let r=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ct.programId,isSigner:!1,isWritable:!1}];return new ct({keys:r,programId:c,data:lt.createPlatformAllowConfig})}function hm(c,e,t,n,o){let r=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0}];return new ct({keys:r,programId:c,data:lt.closePlatformAllowConfig})}function Ay(c){let e=v([_("field"),_("op"),se("value")]),t=Buffer.alloc(4+c.length*e.span);return t.writeUInt32LE(c.length,0),c.forEach((n,o)=>{e.encode(n,t,4+o*e.span)}),t}function Bm(c,e,t,n,o){let r=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ct.programId,isSigner:!1,isWritable:!1}];return new ct({keys:r,programId:c,data:lt.createPlatformCurveRule})}function Im(c,e,t,n,o,r,i){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ct.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(_e().span);return _e().encode(r,s),new ct({keys:a,programId:c,data:Buffer.from([...lt.updatePlatformCurveRule,...s,...Ay(i)])})}function xm(c,e,t,n,o,r){let i=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ct.programId,isSigner:!1,isWritable:!1}],a=Buffer.alloc(_e().span);return _e().encode(r,a),new ct({keys:i,programId:c,data:Buffer.from([...lt.removePlatformCurveRule,...a])})}function Sm(c,e,t,n,o){let r=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0}];return new ct({keys:r,programId:c,data:lt.closePlatformCurveRule})}var Km=(w=>(w[w.CurveType=0]="CurveType",w[w.MigrateType=1]="MigrateType",w[w.MigrateCpmmFeeOn=2]="MigrateCpmmFeeOn",w[w.Supply=3]="Supply",w[w.TotalSellA=4]="TotalSellA",w[w.TotalFundRaisingB=5]="TotalFundRaisingB",w[w.TotalLockedAmount=6]="TotalLockedAmount",w[w.CliffPeriod=7]="CliffPeriod",w[w.UnlockPeriod=8]="UnlockPeriod",w[w.BaseTokenProgram=9]="BaseTokenProgram",w[w.TransferFeeEnabled=10]="TransferFeeEnabled",w[w.TransferFeeBasisPoints=11]="TransferFeeBasisPoints",w[w.TransferFeeMaximumFee=12]="TransferFeeMaximumFee",w[w.SellRateA=13]="SellRateA",w[w.LockRate=14]="LockRate",w[w.MigrateAmountA=15]="MigrateAmountA",w[w.MigrateRateA=16]="MigrateRateA",w[w.FundRaisingRateB=17]="FundRaisingRateB",w[w.UnixTimestamp=18]="UnixTimestamp",w))(Km||{}),Cm=[4,13,15,16],Rm=(o=>(o[o.Eq=0]="Eq",o[o.Gte=1]="Gte",o[o.Lte=2]="Lte",o[o.Neq=3]="Neq",o))(Rm||{}),wy=(t=>(t[t.SplToken=0]="SplToken",t[t.Token2022=1]="Token2022",t))(wy||{}),Nu=10,Mu=25,Lm=(t=>(t[t.OnlyTokenB=0]="OnlyTokenB",t[t.BothToken=1]="BothToken",t))(Lm||{});var so=v([k(),k("epoch"),_("curveType"),_e("index"),k("migrateFee"),k("tradeFeeRate"),k("maxShareFeeRate"),k("minSupplyA"),k("maxLockRate"),k("minSellRateA"),k("minMigrateRateA"),k("minFundRaisingB"),F("mintB"),F("protocolFeeOwner"),F("migrateFeeOwner"),F("migrateToAmmWallet"),F("migrateToCpmmWallet"),$(k(),16)]),ky=v([k("totalLockedAmount"),k("cliffPeriod"),k("unlockPeriod"),k("startTime"),k("totalAllocatedShare")]),hn=v([k(),k("epoch"),_("bump"),_("status"),_("mintDecimalsA"),_("mintDecimalsB"),_("migrateType"),k("supply"),k("totalSellA"),k("virtualA"),k("virtualB"),k("realA"),k("realB"),k("totalFundRaisingB"),k("protocolFee"),k("platformFee"),k("migrateFee"),ky.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),_("mintProgramFlag"),_("cpmmCreatorFeeOn"),k("platformVestingShare"),$(_(),54)]),pR=v([k(),k("epoch"),F("poolId"),F("beneficiary"),k("claimedAmount"),k("tokenShareAmount"),$(k(),8)]),Ty=v([_("migrateType"),_("migrateCpmmFeeOn"),k("supply"),k("totalSellA"),k("totalFundRaisingB"),k("totalLockedAmount"),k("cliffPeriod"),k("unlockPeriod")]),fR=v([k("epoch"),_("index"),F("configId"),Ty.replicate("bondingCurveParam"),$(k(),50)]),Bn=v([k(),k("epoch"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),k("platformScale"),k("creatorScale"),k("burnScale"),k("feeRate"),$(_(),64,"name"),$(_(),256,"web"),$(_(),256,"img"),F("cpConfigId"),k("creatorFeeRate"),F("transferFeeExtensionAuth"),F("platformVestingWallet"),k("platformVestingScale"),F("platformCpCreator"),_("restrictGlobalConfig"),_("restrictCurveParam"),F("curveRuleManager"),$(_(),78)]),hy=v([_("field"),_("op"),se("value")]),By=v([_e("groupId"),k("epoch"),As(hy,"constraints")]),wa=v([k(),_("bump"),_("version"),F("platformId"),F("configId"),k("epoch"),$(k(),8),As(By,"groups")]);import{TOKEN_2022_PROGRAM_ID as Fu,TOKEN_PROGRAM_ID as Iy}from"@solana/spl-token";var xy=(t=>(t[t.MintA=0]="MintA",t[t.MintB=1]="MintB",t))(xy||{});function Om(c,e){return c>>e&1?Fu:Iy}function ka(c){return Om(c,0)}function gR(c){return Om(c,1)}function Nm({mintAProgram:c,mintBProgram:e}){return(c.equals(Fu)?1<<0:0)|(e.equals(Fu)?1<<1:0)}import uo from"bn.js";var Sy=new uo(1e6);function Mm(c,e){var o,r,i,a;let t=s=>c.supply.isZero()?void 0:s.mul(Sy).div(c.supply),n=()=>{let s=c.supply.sub(c.totalSellA).sub(c.totalLockedAmount);return s.isNeg()?void 0:s};switch(e){case 0:return new uo(c.curveType);case 1:return new uo(c.migrateType);case 2:return new uo(c.migrateCpmmFeeOn);case 3:return c.supply;case 4:return c.totalSellA;case 5:return c.totalFundRaisingB;case 6:return c.totalLockedAmount;case 7:return c.cliffPeriod;case 8:return c.unlockPeriod;case 9:return new uo(c.baseTokenProgram);case 10:return new uo(c.transferFee===void 0?0:1);case 11:return new uo((r=(o=c.transferFee)==null?void 0:o.basisPoints)!=null?r:0);case 12:return(a=(i=c.transferFee)==null?void 0:i.maximumFee)!=null?a:new uo(0);case 13:return t(c.totalSellA);case 14:return t(c.totalLockedAmount);case 15:return n();case 16:{let s=n();return s===void 0?void 0:t(s)}case 17:return t(c.totalFundRaisingB);case 18:return c.unixTimestamp;default:return}}function Ky(c,e){let t=Mm(e,c.field);if(t===void 0)return!1;switch(c.op){case 0:return t.eq(c.value);case 1:return t.gte(c.value);case 2:return t.lte(c.value);case 3:return!t.eq(c.value);default:return!1}}function BR({rule:c,context:e}){var o;let t=(o=c==null?void 0:c.groups)!=null?o:[];if(t.length===0)return{ok:!0,groupFailures:[]};let n=[];for(let r of t){let i=r.constraints.filter(a=>!Ky(a,e)).map(a=>E(N({},a),{actual:Mm(e,a.field)}));if(i.length===0)return{ok:!0,matchedGroupId:r.groupId,groupFailures:[]};n.push({groupId:r.groupId,unsatisfied:i})}return{ok:!1,groupFailures:n}}function IR({groupId:c,constraints:e,curveType:t,existingGroupIds:n=[]}){let o=[];!n.includes(c)&&n.length>=Nu&&o.push({code:"CurveRuleGroupsExceeded",message:`a rule holds at most ${Nu} groups, and group ${c} would be a new one`}),e.length>Mu&&o.push({code:"InvalidCurveRuleConstraint",message:`a group holds at most ${Mu} constraints, got ${e.length}`});let r=new Set;return e.forEach((i,a)=>{i.field>18&&o.push({code:"InvalidCurveRuleConstraint",message:`constraint ${a}: unknown field id ${i.field}`}),i.op>3&&o.push({code:"InvalidCurveRuleConstraint",message:`constraint ${a}: unknown op id ${i.op}`});let s=`${i.field}/${i.op}`;r.has(s)&&o.push({code:"InvalidCurveRuleConstraint",message:`constraint ${a}: field ${i.field} already has an op ${i.op} constraint in this group. A range uses two different ops on one field`}),r.add(s),t!==0&&Cm.includes(i.field)&&o.push({code:"CurveRuleFieldNotSupportedByCurve",message:`constraint ${a}: field ${i.field} reads totalSellA, which curve type ${t} derives itself, so the program refuses it on this config`})}),{ok:o.length===0,errors:o}}import Ta from"bn.js";import ur from"decimal.js";var co=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:i,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var ha=class extends co{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new ur(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new ur(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new ur(e.virtualB.add(e.realB).toString()).div(e.virtualA.sub(e.realA).toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:i,decimalB:a}){return new ur(o.sub(r).toString()).div(e.sub(t).sub(n).toString()).mul(10**(i-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),r=e.totalFundRaisingB.sub(e.realB);return new ur(e.virtualB.add(e.realB.add(r)).toString()).div(e.virtualA.sub(e.realA.add(o)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){if(e.lte(n))throw Error("supply need gt total sell");let i=e.sub(n).sub(o);if(i.lte(new Ta(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(r);if(a.lte(new Ta(0)))throw Error("tfMinusMf <= 0");let s=a.mul(n).mul(n).div(i),u=a.mul(n).div(i).sub(t),l=s.div(u),d=t.mul(t).div(u);if(l.lt(new Ta(0))||d.lt(new Ta(0)))throw Error("invalid input 0");return{a:l,b:d,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let o=e.mul(n),r=t.add(e);return o.div(r)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let o=t.mul(e),r=n.sub(e);return bo(o,r)}};import jt from"bn.js";import Fm from"decimal.js";import Ba from"bn.js";import cr from"decimal.js";var Ia=class extends co{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new cr(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new cr(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new cr(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:i,decimalB:a}){return new cr(o.sub(r).toString()).div(e.sub(t).sub(n).toString()).mul(10**(i-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),r=e.totalFundRaisingB.sub(e.realB);return new cr(e.virtualB.add(e.realB).add(r).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){let i=e.sub(o);if(i.lte(new Ba(0)))throw Error("invalid input 1");let a=new Ba(2).mul(t).sub(r),u=t.mul(i).div(a);if(u.lt(new Ba(0))||t.lt(new Ba(0)))throw Error("invalid input 0");return{a:u,b:t,c:u}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let o=t.mul(e);return bo(o,n)}};import $t from"bn.js";import Lo from"decimal.js";import li from"bn.js";import xa from"decimal.js";var lr=class{static _multipler(e){return new xa(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new xa(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 li(o.mul(this._Q64).toFixed(0))}};lr._Q64=new xa(new li(1).shln(64).toString());function qR({supply:c,totalFundRaisingB:e,totalLockedAmount:t,totalSellA:n,migrateType:o,decimalsA:r}){let i=c.sub(n).sub(t),a=new li(new xa(i.mul(e).toString()).sqrt().toFixed(0));if(o==="amm"){if(a.gt(new li(10).pow(new li(r))))return!0}else if(o==="cpmm"){if(a.gt(new li(100)))return!0}else throw Error("migrate type error");return!1}var Sa=class extends co{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Lo(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Lo(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Lo(e.virtualA.mul(e.realA).toString()).div(lr._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:i,decimalB:a}){return new Lo(o.sub(r).toString()).div(e.sub(t).sub(n).toString()).mul(10**(i-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),r=e.totalFundRaisingB.sub(e.realB);return new Lo(e.virtualB.add(e.realB).add(r).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){let i=e.sub(o);if(i.lte(new $t(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new $t(3)).sub(r),u=t.mul(new $t(2)).mul(i).div(a),l=u.mul(u),d=t.mul(new $t(2)).mul(xe).div(l);if(!d.gt(new $t(0)))throw Error("a need gt 0");if(!Rn.gt(d))throw Error("a need lt u64 max");if(d.lt(new $t(0))||u.lt(new $t(0)))throw Error("invalid input 0");return{a:d,b:new $t(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new $t(2).mul(n).mul(xe).div(e.virtualA);return new $t(new Lo(o.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),o=n.mul(n);return bo(e.virtualA.mul(o),new $t(2).mul(xe)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),r=bo(e.virtualA.mul(o),new $t(2).mul(xe));return e.realB.sub(r)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new $t(2).mul(n).mul(xe).div(e.virtualA),r=new $t(new Lo(o.toString()).sqrt().toFixed(0));return e.realA.sub(r)}};var Mt=class{static getPoolCurvePointByPoolInfo({curveType:e,pointCount:t,poolInfo:n}){return this.getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n.supply,totalFundRaising:n.totalFundRaisingB,totalSell:n.totalSellA,totalLockedAmount:n.vestingSchedule.totalLockedAmount,migrateFee:n.migrateFee,decimalA:n.mintDecimalsA,decimalB:n.mintDecimalsB})}static getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n,totalFundRaising:o,totalSell:r,totalLockedAmount:i,migrateFee:a,decimalA:s,decimalB:u}){if(t<3)throw Error("point count < 3");let l=this.getCurve(e),d=l.getInitParam({supply:n,totalFundRaising:o,totalSell:r,totalLockedAmount:i,migrateFee:a}),p=l.getPoolInitPriceByInit(E(N({},d),{decimalA:s,decimalB:u})),m=o.div(new jt(t-1)),f=new jt(0),y=[{price:p,totalSellSupply:0}],{a:b,b:g}=d,P=f,w=f;for(let B=1;B<t;B++){let A=B!==t-1?m:o.sub(w),h=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:P,realB:w,totalFundRaisingB:o,totalSellA:r},amountB:A,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,transferFeeConfigB:void 0,slot:0});P=P.add(h.amountA.amount),w=w.add(h.amountB);let x=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:P,realB:w},decimalA:s,decimalB:u,curveType:e});y.push({price:x,totalSellSupply:new Fm(P.toString()).div(10**s).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:o}){return this.getCurve(o).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o,curveType:r}){return this.getCurve(r).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:o})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,decimals:r,config:i,migrateType:a}){if(Number(r)!==6)throw Error("decimals = 6");if(e.mul(i.maxLockRate).div(Qe).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(i.minSupplyA.mul(new jt(10**r))))throw Error("supply lt min supply");let u=e.mul(i.minSellRateA).div(Qe);if(n.lt(u))throw Error("invalid input");if(t.lt(i.minFundRaisingB))throw Error("total fund raising lt min fund raising");let l=e.sub(n).sub(o),d=e.mul(i.minMigrateRateA).div(Qe);if(l.lt(d))throw Error("migrate lt min migrate amoount");let p=e.sub(n).sub(o),m=new jt(new Fm(p.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new jt(10).pow(new jt(r));if(m.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new jt(100);if(m.lte(f))throw Error("check migrate lp error")}else throw Error("migrate type error")}static buyExactIn({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:i,creatorFeeRate:a,transferFeeConfigA:s,transferFeeConfigB:u,slot:l}){var S;let d=Bi(t,u,l),p=t.sub((S=d.fee)!=null?S:new jt(0)),m=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:i,creatorFeeRate:a}),f=this.calculateFee({amount:p,feeRate:m}),y=p.sub(f),b=this.getCurve(r),g=b.buyExactIn({poolInfo:e,amount:y}),P=e.totalSellA.sub(e.realA),w,B,A,h;if(g.gt(P)){w=P;let K=b.buyExactOut({poolInfo:e,amount:w}),I=this.calculatePreFee({postFeeAmount:K,feeRate:m});A=I.sub(K);let C=_o(I,u,l);B=C.amount,h=C.fee}else w=g,B=t,A=f,h=d.fee;let x=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:i,creatorFeeRate:a});return{amountA:Bi(w,s,l),amountB:B,splitFee:x,transferFeeB:h}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:i,creatorFeeRate:a,transferFeeConfigA:s,transferFeeConfigB:u,slot:l}){let d=e.totalSellA.sub(e.realA),p=_o(t,s,l),m=p.fee?p.amount.add(p.fee):p.amount;t.gt(d)&&(m=d);let y=this.getCurve(r).buyExactOut({poolInfo:e,amount:m}),b=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:i,creatorFeeRate:a}),g=this.calculatePreFee({postFeeAmount:y,feeRate:b}),P=g.sub(y),w=_o(g,u,l),B=this.splitFee({totalFee:P,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:i,creatorFeeRate:a});return{amountA:p,amountB:w.amount,splitFee:B,transferFeeB:w.fee}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:i,creatorFeeRate:a,transferFeeConfigA:s,transferFeeConfigB:u,slot:l}){var w;let d=this.getCurve(r),p=Bi(t,s,l),m=p.fee?p.amount.sub(p.fee):p.amount,f=d.sellExactIn({poolInfo:e,amount:m}),y=this.calculateFee({amount:f,feeRate:this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:i,creatorFeeRate:a})}),b=this.splitFee({totalFee:y,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:i,creatorFeeRate:a}),g=f.sub(y),P=Bi(g,u,l);return{amountA:p,amountB:g.sub((w=P.fee)!=null?w:new jt(0)),splitFee:b,transferFeeB:P.fee}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:i,creatorFeeRate:a,transferFeeConfigA:s,transferFeeConfigB:u,slot:l}){let d=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:i,creatorFeeRate:a}),p=_o(t,u,l),m=p.amount,f=this.calculatePreFee({postFeeAmount:m,feeRate:d});if(e.realB.lt(f))throw Error("Insufficient liquidity");let y=f.sub(m),g=Mt.getCurve(r).sellExactOut({poolInfo:e,amount:f});if(g.gt(e.realA))throw Error();let P=this.splitFee({totalFee:y,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:i,creatorFeeRate:a});return{amountA:_o(g,s,l),amountB:t,splitFee:P,transferFeeB:p.fee}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:r}){let i=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:r}),a=i.isZero()?new jt(0):e.mul(n).div(i),s=i.isZero()?new jt(0):e.mul(o).div(i),u=i.isZero()?new jt(0):e.mul(r).div(i),l=e.sub(a).sub(s).sub(u);return{platformFee:a,shareFee:s,protocolFee:l,creatorFee:u}}static calculateFee({amount:e,feeRate:t}){return Pi(e,t,Qe)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Qe),o=Qe.sub(t);return n.add(o).sub(new jt(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new jt(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(o)}static getCurve(e){switch(e){case 0:return ha;case 1:return Ia;case 2:return Sa}throw Error("find curve error")}};import{NATIVE_MINT as Fn,TOKEN_2022_PROGRAM_ID as vn,TOKEN_PROGRAM_ID as Rt,createAssociatedTokenAccountIdempotentInstruction as Jt,createSyncNativeInstruction as Cy,getTransferFeeConfig as mr,unpackMint as dr}from"@solana/spl-token";import ce from"bn.js";import{PublicKey as pr,SystemProgram as Ry}from"@solana/web3.js";import rn from"decimal.js";var Ka={initPriceX64:new ce("515752397214619"),supply:new ce(1e15),totalSellA:new ce(7931e11),totalFundRaisingB:new ce(85e9),totalFundRaisingBUSD:new ce(125e8),totalLockedAmount:new ce("0"),cliffPeriod:new ce("0"),unlockPeriod:new ce("0"),decimals:6,virtualA:new ce("1073471847374405"),virtualB:new ce("30050573465"),realA:new ce(0),realB:new ce(0),protocolFee:new ce(0),platformId:new pr("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ce(0),cliffPeriod:new ce(0),unlockPeriod:new ce(0),startTime:new ce(0),totalAllocatedShare:new ce(0)}},lo=new ce(1e4),HL=new Set(["USDCoctVLVnvTXBEuP9s8hntucdJokbo17RwHuNXemT","USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB"]),fr=class extends tt{constructor(e){super(e)}async getMintBTokenInfo({mintB:e,mintBProgram:t,transferFeeConfigB:n,skipCheckMintB:o}){if(e.equals(Fn))return{mintBProgram:Rt,transferFeeConfigB:void 0};if(n)return{mintBProgram:t!=null?t:vn,transferFeeConfigB:n};if(o||(t==null?void 0:t.equals(Rt)))return{mintBProgram:t!=null?t:Rt,transferFeeConfigB:void 0};let r=await this.scope.connection.getAccountInfo(e);return!r||!r.owner.equals(vn)?{mintBProgram:t!=null?t:Rt,transferFeeConfigB:void 0}:{mintBProgram:r.owner,transferFeeConfigB:mr(dr(e,r,r.owner))||void 0}}async createLaunchpad(M){var W=M,{programId:e=Ve,authProgramId:t,platformId:n=Ka.platformId,mintA:o,decimals:r=6,mintBDecimals:i=9,name:a,symbol:s,uri:u,migrateType:l,configId:d,configInfo:p,txVersion:m,computeBudgetConfig:f,txTipConfig:y,feePayer:b,buyAmount:g,minMintAAmount:P,slippage:w,associatedOnly:B=!0,checkCreateATAOwner:A=!1,extraSigners:h,token2022:x,transferFeeExtensionParams:S,creatorFeeOn:K=0,platformAllowConfig:I,mintBProgram:C,transferFeeConfigB:R,skipCheckMintB:O}=W,L=Ye(W,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn","platformAllowConfig","mintBProgram","transferFeeConfigB","skipCheckMintB"]);var Gu,zu,Xu,Yu,Hu,Qu,Zu,$u,ju,Ju,ec;let D=this.createTxBuilder(b);t=t!=null?t:zt(e).publicKey,x=!!S,x&&(l="cpmm");let X=p;if(!X&&d){let _n=await this.scope.connection.getAccountInfo(d);_n&&(X=so.decode(_n.data))}X||this.logAndCreateError("config not found");let Z=X.mintB,H=X.curveType,{mintBProgram:ne,transferFeeConfigB:re}=await this.getMintBTokenInfo({mintB:Z,mintBProgram:C,transferFeeConfigB:R,skipCheckMintB:O}),{publicKey:j}=si(e,o,Z),{publicKey:pe}=Tu(e,j,o),{publicKey:ae}=Tu(e,j,Z),{publicKey:ge}=qn(o);this.logDebug(`create token: ${o.toBase58()}, mintB: ${Z.toBase58()}, decimals A:${r}/B:${i}, config:${d.toBase58()}`),s.length>10&&this.logAndCreateError("Symbol length should shorter than 11"),u||this.logAndCreateError("uri should not empty");let Be=(await this.scope.api.fetchLaunchConfigs()).find(_n=>_n.key.pubKey===d.toBase58()),ye=(Gu=L==null?void 0:L.supply)!=null?Gu:new ce(Be.defaultParams.supplyInit),ue=(zu=L==null?void 0:L.totalSellA)!=null?zu:new ce(Be.defaultParams.totalSellA),Te=(Xu=L==null?void 0:L.totalFundRaisingB)!=null?Xu:new ce(Be.defaultParams.totalFundRaisingB),Ft=(Yu=L==null?void 0:L.totalLockedAmount)!=null?Yu:new ce(0),$e=await this.scope.connection.getAccountInfo(n);$e||this.logAndCreateError("platform id not found:",n.toString());let mn=Bn.decode($e.data),Oo=mn.platformVestingScale,pi=mn.feeRate,fi=Mt.getCurve(X.curveType).getInitParam({supply:ye,totalFundRaising:Te,totalSell:ue,totalLockedAmount:Ft,migrateFee:X.migrateFee}),Et;try{Et=await this.scope.token.getTokenInfo(Z)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let dn={epoch:new ce(896),bump:254,status:0,mintDecimalsA:r,mintDecimalsB:(Hu=Et==null?void 0:Et.decimals)!=null?Hu:i,supply:ye,totalSellA:ue,mintA:new pr(o),mintB:Z,virtualA:fi.a,virtualB:fi.b,realA:Ka.realA,realB:Ka.realB,migrateFee:X.migrateFee,migrateType:l==="amm"?0:1,protocolFee:Ka.protocolFee,platformFee:pi,platformId:n,configId:d,vaultA:pe,vaultB:ae,creator:this.scope.ownerPubKey,totalFundRaisingB:Te,vestingSchedule:{totalLockedAmount:Ft,cliffPeriod:new ce(0),unlockPeriod:new ce(0),startTime:new ce(0),totalAllocatedShare:new ce(0)},mintProgramFlag:Nm({mintAProgram:x?vn:Rt,mintBProgram:ne}),cpmmCreatorFeeOn:K,platformVestingShare:Oo!=null?Oo:new ce(0)},Xm=Mt.getCurve(X.curveType),{c:Ym}=Xm.getInitParam({supply:dn.supply,totalFundRaising:dn.totalFundRaisingB,totalLockedAmount:Ft,totalSell:X.curveType===0?dn.totalSellA:new ce(0),migrateFee:X.migrateFee});try{Mt.checkParam({supply:dn.supply,totalFundRaising:dn.totalFundRaisingB,totalSell:Ym,totalLockedAmount:Ft,decimals:dn.mintDecimalsA,config:X,migrateType:l}),this.logDebug("check init params success")}catch(_n){this.logAndCreateError(`check create mint params failed, ${_n.message}`)}let Uu=mn.restrictCurveParam?xu(e,n,d).publicKey:void 0;D.addInstruction({instructions:[x?bm(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,d,n,t,j,o,Z,pe,ae,ne,r,a,s,u||"https://",{type:H===0?"ConstantCurve":H===1?"FixedCurve":H===2?"LinearCurve":"ConstantCurve",totalSellA:ue,migrateType:l,supply:ye,totalFundRaisingB:Te},Ft,(Qu=L==null?void 0:L.cliffPeriod)!=null?Qu:new ce(0),(Zu=L==null?void 0:L.unlockPeriod)!=null?Zu:new ce(0),K,S,I?ar(e,n,d).publicKey:void 0,Uu):ym(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,d,n,t,j,o,Z,pe,ae,ge,ne,r,a,s,u||"https://",{type:H===0?"ConstantCurve":H===1?"FixedCurve":H===2?"LinearCurve":"ConstantCurve",totalSellA:ue,migrateType:l,supply:ye,totalFundRaisingB:Te},Ft,($u=L==null?void 0:L.cliffPeriod)!=null?$u:new ce(0),(ju=L==null?void 0:L.unlockPeriod)!=null?ju:new ce(0),K,I?ar(e,n,d).publicKey:void 0,Uu)]});let Ma=x?await this.scope.connection.getEpochInfo():void 0,Ar=S?{epoch:BigInt((Ma==null?void 0:Ma.epoch)||0),maximumFee:BigInt((Ju=S==null?void 0:S.maxinumFee.toString())!=null?Ju:0),transferFeeBasisPoints:(ec=S==null?void 0:S.transferFeeBasePoints)!=null?ec:0}:void 0,Fa={amountA:{amount:new ce(0),fee:void 0,expirationTime:void 0},amountB:new ce(0),splitFee:{platformFee:new ce(0),shareFee:new ce(0),protocolFee:new ce(0),creatorFee:new ce(0)},transferFeeB:void 0},va;if(h!=null&&h.length&&D.addInstruction({signers:h}),!L.createOnly){let{builder:_n,extInfo:Hm}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:x?vn:void 0,mintA:o,mintB:Z,mintBProgram:ne,transferFeeConfigB:re,skipCheckMintB:!0,poolInfo:dn,buyAmount:g,minMintAAmount:P,shareFeeRate:L.shareFeeRate,shareFeeReceiver:L.shareFeeReceiver,configInfo:X,platformFeeRate:pi,slippage:w,associatedOnly:B,checkCreateATAOwner:A,skipCheckMintA:!Ar,transferFeeConfigA:Ar?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:Ar,newerTransferFee:Ar}:void 0,fromCreate:!0});D.addInstruction(N({},_n.AllTxData)),Fa=N({},Hm),va=(this.scope.cluster==="devnet"||m===1)&&L.shareFeeReceiver?[_n.allInstructions[0]]:void 0}return D.addTipInstruction(y),m===0?D.sizeCheckBuildV0({computeBudgetConfig:f,swapInfo:Fa,splitIns:va,address:E(N({},dn),{poolId:j})}):D.sizeCheckBuild({computeBudgetConfig:f,swapInfo:Fa,splitIns:va,address:E(N({},dn),{poolId:j})})}async buyToken({programId:e=Ve,authProgramId:t,mintA:n,mintAProgram:o=Rt,mintB:r=Fn,poolInfo:i,configInfo:a,platformFeeRate:s,txVersion:u,computeBudgetConfig:l,txTipConfig:d,feePayer:p,buyAmount:m,minMintAAmount:f,slippage:y,shareFeeRate:b=new ce(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:w=!1,fromCreate:B=!1,transferFeeConfigA:A,skipCheckMintA:h=!1,mintBProgram:x,transferFeeConfigB:S,skipCheckMintB:K=!1}){var ue,Te,Ft;m.lte(new ce(0))&&this.logAndCreateError("buy amount should gt 0:",m.toString());let I=this.createTxBuilder(p),{publicKey:C}=si(e,n,r);t=t!=null?t:zt(e).publicKey;let R=A;if(!h)if(R)o=vn;else{let $e=await this.scope.connection.getAccountInfo(n);if($e&&$e.owner.equals(vn)){o=$e.owner;let mn=dr(n,$e,o);R=mr(mn)||void 0}}let{mintBProgram:O,transferFeeConfigB:L}=await this.getMintBTokenInfo({mintB:r,mintBProgram:x,transferFeeConfigB:S,skipCheckMintB:K}),M=this.scope.account.getAssociatedTokenAccount(n,o),W=r.equals(Fn),D=B&&W,X=D?this.scope.account.getAssociatedTokenAccount(r,O):null,Z=W;if(I.addInstruction({instructions:[Jt(this.scope.ownerPubKey,M,this.scope.ownerPubKey,n,o),...D?[Jt(this.scope.ownerPubKey,X,this.scope.ownerPubKey,r,O),Ry.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:X,lamports:BigInt(m.toString())}),Cy(X)]:[]]}),!D){let{account:$e,instructionParams:mn}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O,mint:r,owner:this.scope.ownerPubKey,createInfo:Z?{payer:this.scope.ownerPubKey,amount:m}:void 0,skipCloseAccount:!Z,notUseTokenAccount:Z,associatedOnly:Z?!1:P,checkCreateATAOwner:w});$e&&(X=$e),I.addInstruction(mn||{})}X||this.logAndCreateError(`cannot found mintB(${r.toBase58()}) buy token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let H=i;if(!H){let $e=await this.scope.connection.getAccountInfo(C,{commitment:"processed"});$e||this.logAndCreateError("cannot found pool:",C.toBase58()),H=hn.decode($e.data)}let ne=a,re=await Ne(this.scope.connection,[ne?void 0:H.configId,H.platformId].filter(Boolean).map($e=>({pubkey:$e})));if(!ne){let $e=re.find(mn=>mn.pubkey.equals(H.configId));(!$e||!$e.accountInfo)&&this.logAndCreateError("config not found: ",H.configId.toBase58()),ne=so.decode($e.accountInfo.data)}let j=re.find($e=>$e.pubkey.equals(H.platformId));(!j||!j.accountInfo)&&this.logAndCreateError("platform info not found: ",H.configId.toBase58());let pe=Bn.decode(j.accountInfo.data);s=s||pe.feeRate;let ae=Mt.buyExactIn({poolInfo:H,amountB:m,protocolFeeRate:ne.tradeFeeRate,platformFeeRate:s,curveType:ne.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:R,transferFeeConfigB:L,slot:await this.scope.connection.getSlot()}),ge=new rn(ae.amountA.amount.toString()).sub((Te=(ue=ae.amountA.fee)==null?void 0:ue.toString())!=null?Te:0),Ce=y?new rn(lo.sub(y).toNumber()/lo.toNumber()).clampedTo(0,1):new rn(1),Be=f!=null?f:y?new ce(ge.mul(Ce).toFixed(0)):ae.amountA.amount.sub((Ft=ae.amountA.fee)!=null?Ft:new ce(0));ae.amountB.lt(m)&&console.log(`maximum ${n.toBase58()} amount can buy is ${ae.amountA.toString()}, input ${r.toBase58()} amount: ${ae.amountB.toString()}`);let ye=g?te(g,r,O).publicKey:void 0;return ye&&I.addInstruction({instructions:[Jt(this.scope.ownerPubKey,ye,g,r,O)]}),I.addInstruction({instructions:[sr(e,this.scope.ownerPubKey,t,H.configId,H.platformId,C,M,X,H.vaultA,H.vaultB,n,r,o,O,kn(e,H.platformId,r).publicKey,Tn(e,H.creator,r).publicKey,ae.amountB.lt(m)?ae.amountB:m,Be,b,ye)]}),I.addCustomComputeBudget(l),I.addTipInstruction(d),I.versionBuild({txVersion:u,extInfo:E(N({},ae),{decimalOutAmount:ge,minDecimalOutAmount:new rn(Be.toString())})})}async buyTokenExactOut({programId:e=Ve,authProgramId:t,mintA:n,mintAProgram:o=Rt,mintB:r=Fn,poolInfo:i,configInfo:a,transferFeeConfigA:s,platformFeeRate:u,txVersion:l,computeBudgetConfig:d,txTipConfig:p,feePayer:m,maxBuyAmount:f,outAmount:y,slippage:b,shareFeeRate:g=new ce(0),shareFeeReceiver:P,associatedOnly:w=!0,checkCreateATAOwner:B=!1,skipCheckMintA:A=!1,mintBProgram:h,transferFeeConfigB:x,skipCheckMintB:S=!1}){y.lte(new ce(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let K=this.createTxBuilder(m),{publicKey:I}=si(e,n,r);t=t!=null?t:zt(e).publicKey;let C=i;if(!C){let ye=await this.scope.connection.getAccountInfo(I,{commitment:"processed"});ye||this.logAndCreateError("cannot found pool:",I.toBase58()),C=hn.decode(ye.data)}let R=a,O=await Ne(this.scope.connection,[R?void 0:C.configId,C.platformId].filter(Boolean).map(ye=>({pubkey:ye})));if(!R){let ye=O.find(ue=>ue.pubkey.equals(C.configId));(!ye||!ye.accountInfo)&&this.logAndCreateError("config not found: ",C.configId.toBase58()),R=so.decode(ye.accountInfo.data)}let L=O.find(ye=>ye.pubkey.equals(C.platformId));(!L||!L.accountInfo)&&this.logAndCreateError("platform info not found: ",C.configId.toBase58());let M=Bn.decode(L.accountInfo.data);u=u||M.feeRate;let W=s;if(!A)if(W)o=vn;else{let ye=await this.scope.connection.getAccountInfo(n);if(ye&&ye.owner.equals(vn)){o=ye.owner;let ue=dr(n,ye,o);W=mr(ue)||void 0}}let{mintBProgram:D,transferFeeConfigB:X}=await this.getMintBTokenInfo({mintB:r,mintBProgram:h,transferFeeConfigB:x,skipCheckMintB:S}),Z=Mt.buyExactOut({poolInfo:C,amountA:y,protocolFeeRate:R.tradeFeeRate,platformFeeRate:u,curveType:R.curveType,shareFeeRate:g,creatorFeeRate:M.creatorFeeRate,transferFeeConfigA:W,transferFeeConfigB:X,slot:await this.scope.connection.getSlot()}),H=new rn(Z.amountB.toString()),ne=b?new rn(lo.add(b).toNumber()/lo.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new rn(1),re=(f!=null?f:b)?new ce(H.mul(ne).toFixed(0)):Z.amountB,j=this.scope.account.getAssociatedTokenAccount(n,o),pe=null,ae=r.equals(Fn);K.addInstruction({instructions:[Jt(this.scope.ownerPubKey,j,this.scope.ownerPubKey,n,o)]});let{account:ge,instructionParams:Ce}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D,mint:r,owner:this.scope.ownerPubKey,createInfo:ae?{payer:this.scope.ownerPubKey,amount:Z.amountB}:void 0,skipCloseAccount:!ae,notUseTokenAccount:ae,associatedOnly:ae?!1:w,checkCreateATAOwner:B});ge&&(pe=ge),K.addInstruction(Ce||{}),pe===void 0&&this.logAndCreateError(`cannot found mintB(${r.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let Be=P?te(P,r,D).publicKey:void 0;return Be&&K.addInstruction({instructions:[Jt(this.scope.ownerPubKey,Be,P,r,D)]}),K.addInstruction({instructions:[gm(e,this.scope.ownerPubKey,t,C.configId,C.platformId,I,j,pe,C.vaultA,C.vaultB,n,r,o,D,kn(e,C.platformId,r).publicKey,Tn(e,C.creator,r).publicKey,y,re,g,Be)]}),K.addCustomComputeBudget(d),K.addTipInstruction(p),K.versionBuild({txVersion:l,extInfo:{maxSpentAmount:re,outAmount:y}})}async sellToken({programId:e=Ve,authProgramId:t,mintAProgram:n=Rt,mintA:o,mintB:r=Fn,poolInfo:i,configInfo:a,platformFeeRate:s,txVersion:u,computeBudgetConfig:l,txTipConfig:d,feePayer:p,sellAmount:m,minAmountB:f,slippage:y,shareFeeRate:b=new ce(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:w=!1,skipCheckMintA:B=!1,mintBProgram:A,transferFeeConfigB:h,skipCheckMintB:x=!1}){t=t!=null?t:zt(e).publicKey;let S=this.createTxBuilder(p);m.lte(new ce(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:K}=si(e,o,r),I;if(!B){let ue=await this.scope.connection.getAccountInfo(o);if(ue&&ue.owner.equals(vn)){n=ue.owner;let Te=dr(o,ue,n);I=mr(Te)||void 0}}let{mintBProgram:C,transferFeeConfigB:R}=await this.getMintBTokenInfo({mintB:r,mintBProgram:A,transferFeeConfigB:h,skipCheckMintB:x}),O=null,L=null,M=r.equals(Fn),{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:w});W&&(O=W),S.addInstruction(D||{}),O===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:X,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C,mint:r,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!M,notUseTokenAccount:M,associatedOnly:M?!1:P,checkCreateATAOwner:w});X&&(L=X),S.addInstruction(Z||{}),L||this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",{userTokenAccountB:L});let H=i;if(!H){let ue=await this.scope.connection.getAccountInfo(K,{commitment:"processed"});ue||this.logAndCreateError("cannot found pool",K.toBase58()),H=hn.decode(ue.data)}let ne=a,re=await Ne(this.scope.connection,[ne?void 0:H.configId,H.platformId].filter(Boolean).map(ue=>({pubkey:ue})));if(!ne){let ue=re.find(Te=>Te.pubkey.equals(H.configId));(!ue||!ue.accountInfo)&&this.logAndCreateError("config not found: ",H.configId.toBase58()),ne=so.decode(ue.accountInfo.data)}let j=re.find(ue=>ue.pubkey.equals(H.platformId));(!j||!j.accountInfo)&&this.logAndCreateError("platform info not found: ",H.configId.toBase58());let pe=Bn.decode(j.accountInfo.data);s=s||pe.feeRate;let ae=Mt.sellExactIn({poolInfo:H,amountA:m,protocolFeeRate:ne.tradeFeeRate,platformFeeRate:s,curveType:ne.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:I,transferFeeConfigB:R,slot:await this.scope.connection.getSlot()}),ge=new rn(ae.amountB.toString()),Ce=y?new rn(lo.sub(y).toNumber()/lo.toNumber()).clampedTo(0,1):new rn(1),Be=f!=null?f:y?new ce(ge.mul(Ce).toFixed(0)):ae.amountB;Be.lte(new ce(0))&&this.logAndCreateError(`out ${r.toBase58()} amount should be gt 0`);let ye=g?te(g,r,C).publicKey:void 0;return ye&&S.addInstruction({instructions:[Jt(this.scope.ownerPubKey,ye,g,r,C)]}),S.addInstruction({instructions:[Aa(e,this.scope.ownerPubKey,t,H.configId,H.platformId,K,O,L,H.vaultA,H.vaultB,o,r,n,C,kn(e,H.platformId,r).publicKey,Tn(e,H.creator,r).publicKey,ae.amountA.amount.lt(m)?ae.amountA.amount:m,Be,b,ye)]}),S.addCustomComputeBudget(l),S.addTipInstruction(d),S.versionBuild({txVersion:u,extInfo:{outAmount:Be}})}async sellTokenExactOut({programId:e=Ve,authProgramId:t,mintAProgram:n=Rt,mintA:o,mintB:r=Fn,poolInfo:i,configInfo:a,platformFeeRate:s,txVersion:u,computeBudgetConfig:l,txTipConfig:d,feePayer:p,inAmount:m,maxSellAmount:f,slippage:y,shareFeeRate:b=new ce(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:w=!1,skipCheckMintA:B=!1,mintBProgram:A,transferFeeConfigB:h,skipCheckMintB:x=!1}){t=t!=null?t:zt(e).publicKey;let S=this.createTxBuilder(p);f!=null&&f.lte(new ce(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:K}=si(e,o,r),I;if(!B){let ue=await this.scope.connection.getAccountInfo(o);if(ue&&ue.owner.equals(vn)){n=ue.owner;let Te=dr(o,ue,n);I=mr(Te)||void 0}}let{mintBProgram:C,transferFeeConfigB:R}=await this.getMintBTokenInfo({mintB:r,mintBProgram:A,transferFeeConfigB:h,skipCheckMintB:x}),O=null,L=null,M=r.equals(Fn),{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:w});W&&(O=W),S.addInstruction(D||{}),O===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:X,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C,mint:r,owner:this.scope.ownerPubKey,createInfo:M?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!M,notUseTokenAccount:M,associatedOnly:M?!1:P,checkCreateATAOwner:w});X&&(L=X),S.addInstruction(Z||{}),L===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let H=i;if(!H){let ue=await this.scope.connection.getAccountInfo(K,{commitment:"processed"});ue||this.logAndCreateError("cannot found pool",K.toBase58()),H=hn.decode(ue.data)}let ne=a,re=await Ne(this.scope.connection,[ne?void 0:H.configId,H.platformId].filter(Boolean).map(ue=>({pubkey:ue})));if(!ne){let ue=re.find(Te=>Te.pubkey.equals(H.configId));(!ue||!ue.accountInfo)&&this.logAndCreateError("config not found: ",H.configId.toBase58()),ne=so.decode(ue.accountInfo.data)}let j=re.find(ue=>ue.pubkey.equals(H.platformId));(!j||!j.accountInfo)&&this.logAndCreateError("platform info not found: ",H.configId.toBase58());let pe=Bn.decode(j.accountInfo.data);s=s||pe.feeRate;let ae=Mt.sellExactOut({poolInfo:H,amountB:m,protocolFeeRate:ne.tradeFeeRate,platformFeeRate:s,curveType:ne.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:I,transferFeeConfigB:R,slot:await this.scope.connection.getSlot()}),ge=new rn(ae.amountA.amount.toString()),Ce=y?new rn(lo.add(y).toNumber()/lo.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new rn(1),Be=(f!=null?f:y)?new ce(ge.mul(Ce).toFixed(0)):ae.amountA.amount,ye=g?te(g,r,C).publicKey:void 0;return ye&&S.addInstruction({instructions:[Jt(this.scope.ownerPubKey,ye,g,r,C)]}),S.addInstruction({instructions:[Pm(e,this.scope.ownerPubKey,t,H.configId,H.platformId,K,O,L,H.vaultA,H.vaultB,o,r,n,C,kn(e,H.platformId,r).publicKey,Tn(e,H.creator,r).publicKey,m,Be,b,ye)]}),S.addCustomComputeBudget(l),S.addTipInstruction(d),S.versionBuild({txVersion:u,extInfo:{maxSellAmount:Be}})}async createPlatformConfig({programId:e=Ve,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,platformVestingWallet:r,cpConfigId:i,migrateCpLockNftScale:a,transferFeeExtensionAuth:s,creatorFeeRate:u,feeRate:l,name:d,web:p,img:m,platformVestingScale:f=new ce(0),txVersion:y,computeBudgetConfig:b,txTipConfig:g,feePayer:P}){let w=this.createTxBuilder(P),{publicKey:B}=hu(e,t);return w.addInstruction({instructions:[Am(e,t,n,o,r,B,i,s,a,l,u,d,p,m,f)]}),w.addCustomComputeBudget(b),w.addTipInstruction(g),w.versionBuild({txVersion:y,extInfo:{platformId:B}})}async updatePlatformConfig({programId:e=Ve,platformAdmin:t,platformId:n,updateInfo:o,txVersion:r,computeBudgetConfig:i,txTipConfig:a,feePayer:s}){let u=this.createTxBuilder(s),l=n!=null?n:hu(e,t).publicKey;return u.addInstruction({instructions:[wm(e,t,l,o)]}),u.addCustomComputeBudget(i),u.addTipInstruction(a),u.versionBuild({txVersion:r})}async createPlatformVestingAccount({programId:e=Ve,platformVestingWallet:t,beneficiary:n,platformId:o,poolId:r,vestingRecord:i,txVersion:a,computeBudgetConfig:s,txTipConfig:u,feePayer:l}){let d=this.createTxBuilder(l),p=i!=null?i:ui(e,r,n).publicKey;return d.addInstruction({instructions:[km(e,t,n,o,r,p)]}),d.addCustomComputeBudget(s),d.addTipInstruction(u),d.versionBuild({txVersion:a})}async claimPlatformFee({programId:e=Ve,authProgramId:t,platformId:n,poolId:o,platformClaimFeeWallet:r,mintB:i,vaultB:a,mintBProgram:s,txVersion:u,computeBudgetConfig:l,txTipConfig:d,feePayer:p}){var P;let m=this.createTxBuilder(p);t=t!=null?t:zt(e).publicKey;let f=i,y=a;if(!f){let w=await this.scope.connection.getAccountInfo(o,{commitment:"processed"});w||this.logAndCreateError("cannot found pool:",o.toBase58());let B=hn.decode(w.data),A=await this.scope.connection.getAccountInfo(B.configId,{commitment:"processed"});A||this.logAndCreateError("cannot found config:",B.configId.toBase58()),f=so.decode(A.data).mintB,y=y!=null?y:B.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(P=y==null?void 0:y.toBase58())!=null?P:"");let{mintBProgram:b}=await this.getMintBTokenInfo({mintB:f,mintBProgram:s}),g=te(this.scope.ownerPubKey,f,b).publicKey;return m.addInstruction({instructions:[Jt(this.scope.ownerPubKey,g,this.scope.ownerPubKey,f,b)]}),m.addInstruction({instructions:[Ru(e,r,t,o,n,y,g,f,b)]}),m.addCustomComputeBudget(l),m.addTipInstruction(d),m.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=Ve,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:r,computeBudgetConfig:i,txTipConfig:a,feePayer:s}){let u=this.createTxBuilder(s);t=t!=null?t:zt(e).publicKey;let d=(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:hn.span},{memcmp:{offset:hn.offsetOf("platformId"),bytes:n.toString()}}]})).map(f=>({poolId:f.pubkey,pool:hn.decode(f.account.data)})).filter(({pool:f})=>f.platformFee.gt(new ce(0))),p={},m=[...new Set(d.map(({pool:f})=>f.mintB.toBase58()))];return m.length&&(await Ne(this.scope.connection,m.map(y=>({pubkey:new pr(y)})))).forEach(y=>{var b,g;p[y.pubkey.toBase58()]=(g=(b=y.accountInfo)==null?void 0:b.owner)!=null?g:Rt}),d.forEach(({poolId:f,pool:y})=>{var P;let b=(P=p[y.mintB.toBase58()])!=null?P:Rt,g=te(this.scope.ownerPubKey,y.mintB,b).publicKey;u.addInstruction({instructions:[Jt(this.scope.ownerPubKey,g,this.scope.ownerPubKey,y.mintB,b)]}),u.addInstruction({instructions:[Ru(e,o,t,f,n,y.vaultB,g,y.mintB,b)]})}),u.addTipInstruction(a),r===0?u.sizeCheckBuildV0({computeBudgetConfig:i}):u.sizeCheckBuild({computeBudgetConfig:i})}async createVesting({programId:e=Ve,poolId:t,beneficiary:n,shareAmount:o,txVersion:r,computeBudgetConfig:i,txTipConfig:a,feePayer:s}){let u=this.createTxBuilder(s),l=await this.getRpcPoolInfo({poolId:t});o.add(l.vestingSchedule.totalAllocatedShare).gt(l.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount");let d=ui(e,t,n).publicKey;return u.addInstruction({instructions:[Cu(e,this.scope.ownerPubKey,n,t,d,o)]}),u.addCustomComputeBudget(i),u.addTipInstruction(a),u.versionBuild({txVersion:r})}async createMultipleVesting({programId:e=Ve,poolId:t,beneficiaryList:n,txVersion:o,computeBudgetConfig:r,feePayer:i}){let a=this.createTxBuilder(i);n.length===0&&this.logAndCreateError("beneficiaryList is null");let s=await this.getRpcPoolInfo({poolId:t});return n.reduce((l,d)=>l.add(d.shareAmount),s.vestingSchedule.totalAllocatedShare).gt(s.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount"),n.forEach(l=>{let d=ui(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Cu(e,this.scope.ownerPubKey,l.wallet,t,d,l.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:r}):a.sizeCheckBuild({computeBudgetConfig:r})}async claimVesting({programId:e=Ve,poolId:t,poolInfo:n,vestingRecord:o,txVersion:r,computeBudgetConfig:i,txTipConfig:a,feePayer:s}){let u=this.createTxBuilder(s),l=zt(e).publicKey,d=o||ui(e,t,this.scope.ownerPubKey).publicKey,p=n;if(!p){let f=await this.scope.connection.getAccountInfo(t);f||this.logAndCreateError("pool not found"),p=hn.decode(f.data)}let m=te(this.scope.ownerPubKey,p.mintA,Rt).publicKey;return u.addInstruction({instructions:[Jt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,p.mintA)]}),u.addInstruction({instructions:[Ku(e,this.scope.ownerPubKey,l,t,d,m,p.vaultA,p.mintA,Rt)]}),u.addCustomComputeBudget(i),u.addTipInstruction(a),u.versionBuild({txVersion:r})}async claimMultiVesting({programId:e=Ve,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:r,computeBudgetConfig:i,feePayer:a}){let s=this.createTxBuilder(a),u=N({},n),l=zt(e).publicKey,d=t.filter(p=>!u[p.toBase58()]);if(d.length){let p=await this.getRpcPoolsInfo({poolIdList:d});u=N(N({},u),p.poolInfoMap)}return t.forEach(p=>{let m=p.toBase58(),f=u[m];f||this.logAndCreateError(`pool info not found: ${m}`);let y=o[m]||ui(e,p,this.scope.ownerPubKey).publicKey,b=te(this.scope.ownerPubKey,f.mintA,Rt).publicKey;s.addInstruction({instructions:[Jt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),s.addInstruction({instructions:[Ku(e,this.scope.ownerPubKey,l,p,y,b,f.vaultA,f.mintA,Rt)]})}),r===0?s.sizeCheckBuildV0({computeBudgetConfig:i}):s.sizeCheckBuild({computeBudgetConfig:i})}async claimVaultPlatformFee({programId:e=Ve,platformId:t,mintB:n,mintBProgram:o,claimFeeWallet:r,txVersion:i,computeBudgetConfig:a,txTipConfig:s,feePayer:u}){let l=this.createTxBuilder(u),d=kn(e,t,n).publicKey,p=Bu(e).publicKey,{mintBProgram:m}=await this.getMintBTokenInfo({mintB:n,mintBProgram:o}),f=this.scope.account.getAssociatedTokenAccount(n,m);return l.addInstruction({instructions:[Jt(this.scope.ownerPubKey,f,this.scope.ownerPubKey,n,m),Lu(e,t,r!=null?r:this.scope.ownerPubKey,p,d,f,n,m)]}),l.addCustomComputeBudget(a),l.addTipInstruction(s),l.versionBuild({txVersion:i})}async claimMultipleVaultPlatformFee({programId:e=Ve,platformList:t,unwrapSol:n=!0,txVersion:o,computeBudgetConfig:r,feePayer:i,associatedOnly:a=!0,checkCreateATAOwner:s=!1}){let u=this.createTxBuilder(i),l={};return t.forEach(async d=>{var b,g,P;let p=Bu(e).publicKey,m=kn(e,d.id,d.mintB).publicKey,f=d.mintB.equals(Fn)&&n,y=l[d.mintB.toBase58()];if(!y){let{account:w,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:(b=d.mintBProgram)!=null?b:Rt,mint:d.mintB,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:a,checkCreateATAOwner:s});w&&(y=w),u.addInstruction(B||{}),y===void 0&&this.logAndCreateError(`cannot found platform ${d.id.toBase58()} mintB(${d.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}u.addInstruction({instructions:[Lu(e,d.id,(g=d.claimFeeWallet)!=null?g:this.scope.ownerPubKey,p,m,y,d.mintB,(P=d.mintBProgram)!=null?P:Rt)]})}),o===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async claimCreatorFee({programId:e=Ve,mintB:t,mintBProgram:n,txVersion:o,computeBudgetConfig:r,txTipConfig:i,feePayer:a}){let s=this.createTxBuilder(a),u=Tn(e,this.scope.ownerPubKey,t).publicKey,l=Iu(e).publicKey,{mintBProgram:d}=await this.getMintBTokenInfo({mintB:t,mintBProgram:n}),p=this.scope.account.getAssociatedTokenAccount(t,d);return s.addInstruction({instructions:[Jt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,t,d),Ou(e,this.scope.ownerPubKey,l,u,p,t,d)]}),s.addCustomComputeBudget(r),s.addTipInstruction(i),s.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=Ve,mintBList:t,txVersion:n,computeBudgetConfig:o,feePayer:r}){let i=this.createTxBuilder(r);return t.forEach(a=>{var m;let s=a.pubKey,u=(m=a.programId)!=null?m:Rt,l=Tn(e,this.scope.ownerPubKey,s).publicKey,d=Iu(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(s,u);i.addInstruction({instructions:[Jt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,s,u),Ou(e,this.scope.ownerPubKey,d,l,p,s,u)]})}),n==0?i.sizeCheckBuildV0({computeBudgetConfig:o}):i.sizeCheckBuild({computeBudgetConfig:o})}async createPlatformAllowConfig({programId:e=Ve,platformAdmin:t,platformId:n,configInfo:o,txVersion:r,computeBudgetConfig:i,txTipConfig:a,feePayer:s}){let u=this.createTxBuilder(s),{publicKey:l}=ku(e,new pr(o.mintB),o.curveType,o.index),{publicKey:d}=ar(e,n,l);return u.addInstruction({instructions:[Tm(e,t,n,l,d)]}),u.addCustomComputeBudget(i),u.addTipInstruction(a),u.versionBuild({txVersion:r,extInfo:{platformId:n}})}async closePlatformAllowConfig({programId:e=Ve,platformAdmin:t,platformId:n,configInfo:o,txVersion:r,computeBudgetConfig:i,txTipConfig:a,feePayer:s}){let u=this.createTxBuilder(s),{publicKey:l}=ku(e,new pr(o.mintB),o.curveType,o.index),{publicKey:d}=ar(e,n,l);return u.addInstruction({instructions:[hm(e,t,n,l,d)]}),u.addCustomComputeBudget(i),u.addTipInstruction(a),u.versionBuild({txVersion:r,extInfo:{platformAllowConfig:d}})}async createPlatformCurveRule({programId:e=Ve,curveRuleAuthority:t,platformId:n,configId:o,txVersion:r,computeBudgetConfig:i,txTipConfig:a,feePayer:s}){let u=this.createTxBuilder(s),{publicKey:l}=xu(e,n,o);return u.addInstruction({instructions:[Bm(e,t!=null?t:this.scope.ownerPubKey,n,o,l)]}),u.addCustomComputeBudget(i),u.addTipInstruction(a),u.versionBuild({txVersion:r,extInfo:{platformCurveRuleId:l}})}async updatePlatformCurveRule({programId:e=Ve,curveRuleAuthority:t,platformCurveRuleId:n,groupId:o,constraints:r,txVersion:i,computeBudgetConfig:a,txTipConfig:s,feePayer:u}){let l=this.createTxBuilder(u),d=await this.scope.connection.getAccountInfo(n);if(!d)throw new Error(`platformCurveRule ${n} not found`);let p=wa.decode(d.data);return l.addInstruction({instructions:[Im(e,t!=null?t:this.scope.ownerPubKey,p.platformId,p.configId,n,o,r)]}),l.addCustomComputeBudget(a),l.addTipInstruction(s),l.versionBuild({txVersion:i})}async removePlatformCurveRule({programId:e=Ve,curveRuleAuthority:t,platformCurveRuleId:n,groupId:o,txVersion:r,computeBudgetConfig:i,txTipConfig:a,feePayer:s}){let u=this.createTxBuilder(s),l=await this.scope.connection.getAccountInfo(n);if(!l)throw new Error(`platformCurveRule ${n} not found`);let d=wa.decode(l.data);return u.addInstruction({instructions:[xm(e,t!=null?t:this.scope.ownerPubKey,d.platformId,d.configId,n,o)]}),u.addCustomComputeBudget(i),u.addTipInstruction(a),u.versionBuild({txVersion:r})}async closePlatformCurveRule({programId:e=Ve,curveRuleAuthority:t,platformCurveRuleId:n,txVersion:o,computeBudgetConfig:r,txTipConfig:i,feePayer:a}){let s=this.createTxBuilder(a),u=await this.scope.connection.getAccountInfo(n);if(!u)throw new Error(`platformCurveRule ${n} not found`);let l=wa.decode(u.data);return s.addInstruction({instructions:[Sm(e,t!=null?t:this.scope.ownerPubKey,l.platformId,l.configId,n)]}),s.addCustomComputeBudget(r),s.addTipInstruction(i),s.versionBuild({txVersion:o})}async getRpcPoolInfo({poolId:e}){return(await this.getRpcPoolsInfo({poolIdList:[e]})).poolInfoMap[e.toBase58()]}async getRpcPoolsInfo({poolIdList:e,config:t}){let n=await Ne(this.scope.connection,e.map(s=>({pubkey:s})),t),o={},r=[];for(let s=0;s<e.length;s++){let u=n[s];if(u===null||!u.accountInfo)throw Error("fetch pool info error: "+e[s].toBase58());let l=hn.decode(u.accountInfo.data);o[e[s].toBase58()]=E(N({},l),{poolId:e[s],programId:u.accountInfo.owner}),r.push(l.configId)}let i=await Ne(this.scope.connection,r.map(s=>({pubkey:s})),t),a={};for(let s=0;s<r.length;s++){let u=i[s];if(u===null||!u.accountInfo)throw Error("fetch config info error: "+r[s].toBase58());let l=so.decode(u.accountInfo.data);a[r[s].toBase58()]=E(N({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((s,u)=>E(N({},s),{[u]:E(N({},o[u]),{configInfo:a[o[u].configId.toBase58()]})}),{})}}};var vm={[Lr.toBase58()]:3},_m={3:Lr};var vu=v([we(5),we(8),F("ownAddress"),k("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),k("baseDepositsTotal"),k("baseFeesAccrued"),F("quoteVault"),k("quoteDepositsTotal"),k("quoteFeesAccrued"),k("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),k("baseLotSize"),k("quoteLotSize"),k("feeRateBps"),k("referrerRebatesAccrued"),we(7)]),Vm={3:vu};import{PublicKey as Em}from"@solana/web3.js";var Ca=ke("Serum"),Ra=class{static getProgramId(e){let t=_m[e];return t||Ca.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=vm[t];return n||Ca.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Vm[e];return t||Ca.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,r;for(;o<100;){try{let i=n.concat(Buffer.from([o]),Buffer.alloc(7));r=Em.createProgramAddressSync(i,e)}catch(i){if(i instanceof TypeError)throw i;o++;continue}return{publicKey:r,nonce:o}}return Ca.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Em.default,nonce:o}}};import{ASSOCIATED_TOKEN_PROGRAM_ID as _u,TOKEN_2022_PROGRAM_ID as Vu,TOKEN_PROGRAM_ID as mo}from"@solana/spl-token";import{PublicKey as V,SystemProgram as yr,TransactionInstruction as br}from"@solana/web3.js";import In from"bn.js";function MO(c,e,t,n,o,r,i,a,s,u,l,d){let p=v([_("instruction"),k("amountIn"),k("amountOut")]),m=[{pubkey:yr.programId,isSigner:!1,isWritable:!1},{pubkey:mo,isSigner:!1,isWritable:!1},{pubkey:new V(t.programId),isSigner:!1,isWritable:!1},{pubkey:new V(t.id),isSigner:!1,isWritable:!0},{pubkey:new V(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let y=Je(t);m.push({pubkey:y.config.id,isSigner:!1,isWritable:!1},{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:y.mintA.address.equals(s)?y.vault.A:y.vault.B,isSigner:!1,isWritable:!0},{pubkey:y.mintA.address.equals(s)?y.vault.B:y.vault.A,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0},...d.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let y=Je(t);m.push({pubkey:y.authority,isSigner:!1,isWritable:!1},{pubkey:y.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:new V("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:y.openOrders,isSigner:!1,isWritable:!0},{pubkey:y.vault.A,isSigner:!1,isWritable:!0},{pubkey:y.vault.B,isSigner:!1,isWritable:!0},{pubkey:y.marketId,isSigner:!1,isWritable:!0},{pubkey:y.marketBids,isSigner:!1,isWritable:!0},{pubkey:y.marketAsks,isSigner:!1,isWritable:!0},{pubkey:y.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0})}else{let y=Je(t);m.push({pubkey:y.authority,isSigner:!1,isWritable:!1},{pubkey:y.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:y.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:y.openOrders,isSigner:!1,isWritable:!0},{pubkey:y.vault.A,isSigner:!1,isWritable:!0},{pubkey:y.vault.B,isSigner:!1,isWritable:!0},{pubkey:y.marketId,isSigner:!1,isWritable:!0},{pubkey:y.marketBids,isSigner:!1,isWritable:!0},{pubkey:y.marketAsks,isSigner:!1,isWritable:!0},{pubkey:y.marketEventQueue,isSigner:!1,isWritable:!0},...y.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:y.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:y.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0}])}let f=Buffer.alloc(p.span);return p.encode({instruction:4,amountIn:u,amountOut:l},f),new br({keys:m,programId:c,data:f})}function FO(c,e,t,n,o,r,i,a,s,u){let l=v([_("instruction")]),d=[{pubkey:yr.programId,isSigner:!1,isWritable:!1},{pubkey:mo,isSigner:!1,isWritable:!1},{pubkey:new V(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new V(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new V(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let m=Je(n);d.push({pubkey:m.config.id,isSigner:!1,isWritable:!1},{pubkey:m.id,isSigner:!1,isWritable:!0},{pubkey:m.mintA.address.equals(s)?m.vault.A:m.vault.B,isSigner:!1,isWritable:!0},{pubkey:m.mintA.address.equals(s)?m.vault.B:m.vault.A,isSigner:!1,isWritable:!0},{pubkey:m.id,isSigner:!1,isWritable:!0},...u.map(f=>({pubkey:f,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let m=Je(n);d.push({pubkey:m.authority,isSigner:!1,isWritable:!1},{pubkey:m.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:m.id,isSigner:!1,isWritable:!0},{pubkey:new V("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:m.openOrders,isSigner:!1,isWritable:!0},{pubkey:m.vault.A,isSigner:!1,isWritable:!0},{pubkey:m.vault.B,isSigner:!1,isWritable:!0},{pubkey:m.marketId,isSigner:!1,isWritable:!0},{pubkey:m.marketBids,isSigner:!1,isWritable:!0},{pubkey:m.marketAsks,isSigner:!1,isWritable:!0},{pubkey:m.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:m.id,isSigner:!1,isWritable:!0},{pubkey:m.id,isSigner:!1,isWritable:!0})}else{let m=Je(n);d.push({pubkey:m.authority,isSigner:!1,isWritable:!1},{pubkey:m.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:m.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:m.openOrders,isSigner:!1,isWritable:!0},{pubkey:m.vault.A,isSigner:!1,isWritable:!0},{pubkey:m.vault.B,isSigner:!1,isWritable:!0},{pubkey:m.marketId,isSigner:!1,isWritable:!0},{pubkey:m.marketBids,isSigner:!1,isWritable:!0},{pubkey:m.marketAsks,isSigner:!1,isWritable:!0},{pubkey:m.marketEventQueue,isSigner:!1,isWritable:!0},...m.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:m.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:m.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:m.id,isSigner:!1,isWritable:!0},{pubkey:m.id,isSigner:!1,isWritable:!0}])}let p=Buffer.alloc(l.span);return l.encode({instruction:5},p),new br({keys:d,programId:c,data:p})}function Ly(c,e,t,n,o,r,i,a,s,u,l,d,p,m,f){var h;let y=[],b=[T({pubkey:mo,isWritable:!1}),T({pubkey:Vu,isWritable:!1}),T({pubkey:_u,isWritable:!1}),T({pubkey:yr.programId,isWritable:!1}),T({pubkey:e,isSigner:!0})];b.push(T({pubkey:t})),b.push(T({pubkey:o}));let g=[s,u],P=[l,d],w=[r,i,a];for(let x=0;x<g.length;x++){let S=g[x],K=w[x]===S.mintA.address;if(b.push(T({pubkey:new V(S.programId),isWritable:!1})),x===g.length-1?b.push(T({pubkey:o})):b.push(T({pubkey:n})),b.push(T({pubkey:new V(w[x])})),b.push(T({pubkey:new V(w[x+1])})),S.version===6){let I=P[x];b.push(T({pubkey:new V(I.config.id)})),b.push(T({pubkey:new V(I.id)})),b.push(T({pubkey:new V(K?I.vault.A:I.vault.B)})),b.push(T({pubkey:new V(K?I.vault.B:I.vault.A)})),b.push(T({pubkey:new V(S.observationId)})),b.push(T({pubkey:en})),b.push(T({pubkey:Ge(new V(S.programId),new V(S.id)).publicKey})),y.push(Eu(S.sqrtPriceX64.toString(),K));for(let C of(h=f[x])!=null?h:[])b.push(T({pubkey:new V(C)}))}else if(S.version===5){let I=P[x];b.push(T({pubkey:new V(I.id)})),b.push(T({pubkey:new V(I.authority),isWritable:!1})),b.push(T({pubkey:new V(I.marketProgramId)})),b.push(T({pubkey:new V(I.marketAuthority)})),b.push(T({pubkey:Or,isWritable:!1})),b.push(T({pubkey:new V(I.openOrders)})),b.push(T({pubkey:new V(I.vault.A)})),b.push(T({pubkey:new V(I.vault.B)})),b.push(T({pubkey:new V(I.id)})),b.push(T({pubkey:new V(I.id)})),b.push(T({pubkey:new V(I.id)})),b.push(T({pubkey:new V(I.id)})),b.push(T({pubkey:new V(I.id)})),b.push(T({pubkey:new V(I.id)})),b.push(T({pubkey:new V(I.marketId)})),b.push(T({pubkey:new V(I.marketBids)})),b.push(T({pubkey:new V(I.marketAsks)})),b.push(T({pubkey:new V(I.marketEventQueue)})),b.push(T({pubkey:new V(I.marketBaseVault)})),b.push(T({pubkey:new V(I.marketQuoteVault)}))}else if(S.version===4){let I=P[x],C=S.status!==1;b.push(T({pubkey:new V(I.id)})),b.push(T({pubkey:new V(I.authority),isWritable:!1})),b.push(T({pubkey:new V(C?I.id:I.marketProgramId)})),b.push(T({pubkey:new V(C?I.id:I.marketAuthority)})),b.push(T({pubkey:new V(C?I.id:I.openOrders)})),b.push(T({pubkey:new V(I.vault.A)})),b.push(T({pubkey:new V(I.vault.B)})),b.push(T({pubkey:new V(C?I.id:I.marketId)})),b.push(T({pubkey:new V(C?I.id:I.marketBids)})),b.push(T({pubkey:new V(C?I.id:I.marketAsks)})),b.push(T({pubkey:new V(C?I.id:I.marketEventQueue)})),b.push(T({pubkey:new V(C?I.id:I.marketBaseVault)})),b.push(T({pubkey:new V(C?I.id:I.marketQuoteVault)}))}else if(S.version===7){let I=P[x];b.push(T({pubkey:new V(I.authority)})),b.push(T({pubkey:new V(I.config.id)})),b.push(T({pubkey:new V(I.id)})),b.push(T({pubkey:new V(K?I.vault.A:I.vault.B)})),b.push(T({pubkey:new V(K?I.vault.B:I.vault.A)})),b.push(T({pubkey:new V(S.observationId)}))}else throw Error("pool type error")}let B=v([_("insId"),k("amountIn"),k("amountOut"),$(se(),y.length,"clmmPriceLimit")]),A=Buffer.alloc(B.span);return B.encode({insId:0,amountIn:p,amountOut:m,clmmPriceLimit:y},A),new br({keys:b,programId:c,data:A})}function Eu(c,e){if(c)if(e){let t=new In(c).div(new In(25));return t.gt(Bt.add(rt))?t:Bt.add(rt)}else{let t=new In(c).mul(new In(25));return t.lt(It.sub(rt))?t:It.sub(rt)}else return e?Bt.add(rt):It.sub(rt)}function Dm({routeProgram:c,ownerInfo:e,inputMint:t,swapInfo:n}){var o,r,i,a,s,u,l,d,p;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],f=Je(m),y=t.equals(f.mintA.address)?Bt.add(rt):It.sub(rt);return be.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:f.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:f.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((r=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?r:new In(0)),sqrtPriceLimitX64:y,remainingAccounts:(i=n.remainingAccounts[0])!=null?i:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],f=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[ii(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,f?m.vaultA:m.vaultB,f?m.vaultB:m.vaultA,f?m.mintProgramA:m.mintProgramB,f?m.mintProgramB:m.mintProgramA,new V(m[f?"mintA":"mintB"].address),new V(m[f?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[f?Y.CpmmSwapBaseIn:Y.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[n.poolInfo[0].pooltype.includes("StablePool")?ua({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((s=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?s:new In(0)),fixedSide:"in"}):sa({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new In(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?Y.AmmV5SwapBaseIn:Y.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],f=n.poolInfo[1],y=n.poolKey[0],b=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Ly(c,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,f,y,b,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((p=(d=n.minAmountOut.fee)==null?void 0:d.raw)!=null?p:new In(0)),n.remainingAccounts)],instructionTypes:[Y.RouteSwap],lookupTableAddress:[y.lookupTableAccount,b.lookupTableAccount].filter(g=>g!==void 0),address:{}}}else throw Error("route type error")}function vO({programId:c,wallet:e,amount:t,inputAccount:n,outputAccount:o,routeInfo:r,poolKeys:i}){var p;if(r.success===!1)throw Error("route info error");let a=[],s=[T({pubkey:mo,isWritable:!1}),T({pubkey:Vu,isWritable:!1}),T({pubkey:_u,isWritable:!1}),T({pubkey:yr.programId,isWritable:!1}),T({pubkey:e,isSigner:!0})],u={[r.data.inputMint]:n,[r.data.outputMint]:o};s.push(T({pubkey:u[r.data.inputMint]})),s.push(T({pubkey:u[r.data.outputMint]}));for(let m=0;m<i.length;m++){let f=r.data.routePlan[m],y=i[m],b=f.inputMint===y.mintA.address;if(s.push(T({pubkey:new V(y.programId),isWritable:!1})),m===i.length-1)s.push(T({pubkey:u[f.outputMint]}));else{let g=f.outputMint;if(u[g]===void 0){let P=te(e,new V(g),y.programId===Wt.CLMM_PROGRAM_ID.toBase58()||y.programId===Wt.CREATE_CPMM_POOL_PROGRAM.toBase58()?new V(b?y.mintB.programId:y.mintA.programId):mo).publicKey;u[g]=P}s.push(T({pubkey:u[g]}))}if(s.push(T({pubkey:new V(f.inputMint)})),s.push(T({pubkey:new V(f.outputMint)})),y.programId===Wt.CLMM_PROGRAM_ID.toBase58()){let g=y;s.push(T({pubkey:new V(g.config.id)})),s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(b?g.vault.A:g.vault.B)})),s.push(T({pubkey:new V(b?g.vault.B:g.vault.A)})),s.push(T({pubkey:new V(g.observationId)})),s.push(T({pubkey:en,isWritable:!1})),s.push(T({pubkey:new V(g.exBitmapAccount)})),a.push(Eu(f.lastPoolPriceX64,b));for(let P of(p=f.remainingAccounts)!=null?p:[])s.push(T({pubkey:new V(P)}))}else if(y.programId===Wt.AMM_STABLE.toBase58()){let g=y;s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(g.authority),isWritable:!1})),s.push(T({pubkey:new V(g.marketProgramId),isWritable:!1})),s.push(T({pubkey:new V(g.marketAuthority),isWritable:!1})),s.push(T({pubkey:Or,isWritable:!1})),s.push(T({pubkey:new V(g.openOrders)})),s.push(T({pubkey:new V(g.vault.A)})),s.push(T({pubkey:new V(g.vault.B)})),s.push(T({pubkey:new V(g.marketId)})),s.push(T({pubkey:new V(g.marketBids)})),s.push(T({pubkey:new V(g.marketAsks)})),s.push(T({pubkey:new V(g.marketEventQueue)})),s.push(T({pubkey:new V(g.marketBaseVault)})),s.push(T({pubkey:new V(g.marketQuoteVault)}))}else if(y.programId===Wt.AMM_V4.toBase58()){let g=y;s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(g.authority),isWritable:!1})),s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(g.vault.A)})),s.push(T({pubkey:new V(g.vault.B)})),s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(g.id)}))}else if(y.programId===Wt.CREATE_CPMM_POOL_PROGRAM.toBase58()){let g=y;s.push(T({pubkey:new V(g.authority)})),s.push(T({pubkey:new V(g.config.id)})),s.push(T({pubkey:new V(g.id)})),s.push(T({pubkey:new V(b?g.vault.A:g.vault.B)})),s.push(T({pubkey:new V(b?g.vault.B:g.vault.A)})),s.push(T({pubkey:new V(g.observationId)}))}else throw Error("pool type error")}let l=v([_("insId"),k("amountIn"),k("amountOut"),$(se(),a.length,"clmmPriceLimit")]),d=Buffer.alloc(l.span);return l.encode({insId:0,amountIn:t,amountOut:new In(r.data.otherAmountThreshold),clmmPriceLimit:a},d),new br({keys:s,programId:c,data:d})}function _O({programId:c,wallet:e,inputAccount:t,outputAccount:n,routeInfo:o,poolKeys:r}){var d;if(o.success===!1)throw Error("route info error");let i=[],a=[T({pubkey:mo,isWritable:!1}),T({pubkey:Vu,isWritable:!1}),T({pubkey:_u,isWritable:!1}),T({pubkey:yr.programId,isWritable:!1}),T({pubkey:e,isSigner:!0})],s={[o.data.inputMint]:t,[o.data.outputMint]:n};for(let p=r.length-1;p>=0;p--){let m=o.data.routePlan[p],f=r[p],y=m.inputMint===f.mintA.address;if(a.push(T({pubkey:new V(f.programId)})),p===0)a.push(T({pubkey:s[m.inputMint]}));else{let b=m.inputMint;if(s[b]===void 0){let g=te(e,new V(b),f.programId===Wt.CLMM_PROGRAM_ID.toBase58()||f.programId===Wt.CREATE_CPMM_POOL_PROGRAM.toBase58()?new V(y?f.mintA.programId:f.mintB.programId):mo).publicKey;s[b]=g}a.push(T({pubkey:s[b]}))}if(p===r.length-1)a.push(T({pubkey:s[m.outputMint]}));else{let b=m.outputMint;if(s[b]===void 0){let g=te(e,new V(b),f.programId===Wt.CLMM_PROGRAM_ID.toBase58()||f.programId===Wt.CREATE_CPMM_POOL_PROGRAM.toBase58()?new V(y?f.mintB.programId:f.mintA.programId):mo).publicKey;s[b]=g}a.push(T({pubkey:s[b]}))}if(a.push(T({pubkey:new V(m.inputMint)})),a.push(T({pubkey:new V(m.outputMint)})),f.programId===Wt.CLMM_PROGRAM_ID.toBase58()){let b=f;a.push(T({pubkey:new V(b.config.id)})),a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(y?b.vault.A:b.vault.B)})),a.push(T({pubkey:new V(y?b.vault.B:b.vault.A)})),a.push(T({pubkey:new V(b.observationId)})),a.push(T({pubkey:en,isWritable:!1})),a.push(T({pubkey:new V(b.exBitmapAccount)})),i.push(Eu(m.lastPoolPriceX64,y));for(let g of(d=m.remainingAccounts)!=null?d:[])a.push(T({pubkey:new V(g)}))}else if(f.programId===Wt.AMM_STABLE.toBase58()){let b=f;a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(b.authority),isWritable:!1})),a.push(T({pubkey:new V(b.marketProgramId),isWritable:!1})),a.push(T({pubkey:new V(b.marketAuthority),isWritable:!1})),a.push(T({pubkey:Or,isWritable:!1})),a.push(T({pubkey:new V(b.openOrders)})),a.push(T({pubkey:new V(b.vault.A)})),a.push(T({pubkey:new V(b.vault.B)})),a.push(T({pubkey:new V(b.marketId)})),a.push(T({pubkey:new V(b.marketBids)})),a.push(T({pubkey:new V(b.marketAsks)})),a.push(T({pubkey:new V(b.marketEventQueue)})),a.push(T({pubkey:new V(b.marketBaseVault)})),a.push(T({pubkey:new V(b.marketQuoteVault)}))}else if(f.programId===Wt.AMM_V4.toBase58()){let b=f;a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(b.authority),isWritable:!1})),a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(b.vault.A)})),a.push(T({pubkey:new V(b.vault.B)})),a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(b.id)}))}else if(f.programId===Wt.CREATE_CPMM_POOL_PROGRAM.toBase58()){let b=f;a.push(T({pubkey:new V(b.authority)})),a.push(T({pubkey:new V(b.config.id)})),a.push(T({pubkey:new V(b.id)})),a.push(T({pubkey:new V(y?b.vault.A:b.vault.B)})),a.push(T({pubkey:new V(y?b.vault.B:b.vault.A)})),a.push(T({pubkey:new V(b.observationId)}))}else throw Error("pool type error")}let u=v([_("insId"),k("amountIn"),k("amountOut"),$(se(),i.length,"clmmPriceLimit")]),l=Buffer.alloc(u.span);return u.encode({insId:1,amountIn:new In(o.data.otherAmountThreshold),amountOut:new In(o.data.outputAmount),clmmPriceLimit:i},l),new br({keys:a,programId:c,data:l})}var Lt=new Ae(0);function po(c,e){var n,o,r,i,a;let t=(n=c.extensions)==null?void 0:n.feeConfig;if(!!t)return{transferFeeConfigAuthority:de.default,withdrawWithheldAuthority:de.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((r=(o=t.olderTransferFee.epoch)!=null?o:e)!=null?r:0),maximumFee:BigInt(t.olderTransferFee.maximumFee),transferFeeBasisPoints:t.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((a=(i=t.newerTransferFee.epoch)!=null?i:e)!=null?a:0),maximumFee:BigInt(t.newerTransferFee.maximumFee),transferFeeBasisPoints:t.newerTransferFee.transferFeeBasisPoints}}}function La(c){return c.programId?new de(c.programId):We}var gr=class extends tt{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(J));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1,feePayer:r}=e,i=await this.getWSolAccounts(),a=this.createTxBuilder(r);a.addCustomComputeBudget(e.computeBudgetConfig);let s=le(t);for(let u=0;u<i.length;u++)s.gte(i[u].amount)?(a.addInstruction({instructions:[Dn({tokenAccount:i[u].publicKey,destination:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),s.sub(i[u].amount)):a.addInstruction({instructions:[Dn({tokenAccount:i[u].publicKey,destination:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:o})}async wrapWSol(e,t,n,o){let r=this.createTxBuilder(o),i=await jn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return r.addInstruction(i),r.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:r,txVersion:i,feePayer:a}){let s=this.createTxBuilder(a),u=e.amountIn,l=e.amountOut,d=u.amount.token.mint.equals(J),p=l.amount.token.mint.equals(J),m=u.amount.token.mint,f=l.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?mi:We,mint:m,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:d?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:d?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&s.addInstruction(b),y===void 0)throw Error("input account check error");let g;if(e.routeType==="route"&&!p)g=this.scope.account.getAssociatedTokenAccount(f,l.amount.token.isToken2022?mi:We);else{let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?mi:We,mint:f,notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});g=A,h&&s.addInstruction(h)}p&&s.addInstruction({endInstructions:[Dn({owner:this.scope.ownerPubKey,destination:this.scope.ownerPubKey,tokenAccount:g,programId:We})],endInstructionTypes:[Y.CloseAccount]});let P;if(e.routeType==="route"){let A=e.middleToken;P=this.scope.account.getAssociatedTokenAccount(A.mint,A.isToken2022?mi:We)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),B=Dm({routeProgram:r,inputMint:m,swapInfo:E(N({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:P,destinationToken:g}});if(e.feeConfig!==void 0){let A=this.createTxBuilder(),h=u.amount.token.isToken2022?Oy(y,u.amount.token.mint,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber(),u.amount.token.decimals,[],mi):qm(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber());A.addInstruction({instructions:[h],instructionTypes:[Y.TransferAmount]}),A.addInstruction(B);let{transactions:x}=i===0?await A.sizeCheckBuildV0():await A.sizeCheckBuild();x.length<2&&s.addInstruction({instructions:[qm(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[Y.TransferAmount]})}return s.addInstruction(B),i===0?s.sizeCheckBuildV0({computeBudgetConfig:o,address:B.address}):s.sizeCheckBuild({computeBudgetConfig:o,address:B.address})}async swapClmmToLaunchMint({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:r,priceLimit:i,slippage:a=.01,shareFeeRate:s=new Ae(0),shareFeeReceiver:u,launchPlatformInfo:l,slot:d,mintInfo:p,epochInfo:m,ownerInfo:f={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:g,blockTimestamp:P}){let w=(f==null?void 0:f.feePayer)||this.scope.ownerPubKey,B=m!=null?m:await this.scope.fetchEpochInfo(),{clmmPoolData:A,clmmComputeAmount:{maxClmmAmountIn:h,clmmAmountOut:x,remainingAccounts:S},launchPoolInfo:K,launchAuthProgramId:I,launchSwapInfo:C,launchMintProgramB:R,outAmount:O,minOutAmount:L}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:r,slippage:a,epochInfo:B,shareFeeRate:s,launchPlatformInfo:l,slot:d,mintInfo:p,blockTimestamp:P}),M=e.toString()===A.poolInfo.mintA.address,W=f.useSOLBalance&&A.poolInfo.mintA.address===J.toBase58(),D=f.useSOLBalance&&A.poolInfo.mintB.address===J.toBase58(),X={},Z;!i||i.equals(new Ke(0))?Z=M?Bt.add(new Ae(1)):It.sub(new Ae(1)):Z=ie.priceToSqrtPriceX64(i,A.poolInfo.mintA.decimals,A.poolInfo.mintB.decimals);let H=this.createTxBuilder(w),[ne,re]=[new de(A.poolInfo.mintA.address),new de(A.poolInfo.mintB.address)],[j,pe]=[new de(A.poolInfo.mintA.programId),new de(A.poolInfo.mintB.programId)],ae=this.scope.account.getAssociatedTokenAccount(ne,j),ge=this.scope.account.getAssociatedTokenAccount(re,pe);H.addInstruction({instructions:[di(this.scope.ownerPubKey,ae,this.scope.ownerPubKey,ne,j),di(this.scope.ownerPubKey,ge,this.scope.ownerPubKey,re,pe)]}),(M&&W||!M&&D)&&H.addInstruction({instructions:[Wm.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:M?ae:ge,lamports:BigInt(h.toString())}),Um(M?ae:ge)]}),X[A.poolInfo.mintA.address]=ae,X[A.poolInfo.mintB.address]=ge,(!ae||!ge)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ae,ownerTokenAccountB:ge}),H.addInstruction(n?be.makeSwapBaseOutInstructions({poolInfo:A.poolInfo,poolKeys:A.poolKeys,observationId:A.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ae,tokenAccountB:ge},outputMint:M?re:ne,amountOut:x,amountInMax:h,sqrtPriceLimitX64:Z,remainingAccounts:S}):be.makeSwapBaseInInstructions({poolInfo:A.poolInfo,poolKeys:A.poolKeys,observationId:A.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ae,tokenAccountB:ge},inputMint:new de(e),amountIn:t,amountOutMin:x,sqrtPriceLimitX64:Z,remainingAccounts:S}));let Ce=ka(K.mintProgramFlag),Be=this.scope.account.getAssociatedTokenAccount(K.mintA,Ce),ye=X[K.mintB.toBase58()];if(H.addInstruction({instructions:[di(this.scope.ownerPubKey,Be,this.scope.ownerPubKey,K.mintA,Ce)]}),!ye){let ue=K.mintB.equals(J),{account:Te,instructionParams:Ft}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R,mint:K.mintB,notUseTokenAccount:ue,owner:this.scope.ownerPubKey,skipCloseAccount:!ue,createInfo:ue?{payer:this.scope.ownerPubKey,amount:x}:void 0,associatedOnly:!1,checkCreateATAOwner:y});ye=Te,Ft&&H.addInstruction(Ft)}return H.addInstruction({instructions:[sr(K.programId,this.scope.ownerPubKey,I,K.configId,K.platformId,new de(r),Be,ye,K.vaultA,K.vaultB,K.mintA,K.mintB,Ce,R,kn(K.programId,K.platformId,K.mintB).publicKey,Tn(K.programId,K.creator,K.mintB).publicKey,C.amountB.lt(x)?C.amountB:x,L,s,u)]}),H.addCustomComputeBudget(b),H.versionBuild({txVersion:g,extInfo:{routes:[{mint:new de(e),amount:n?h:t,decimal:A.poolInfo[M?"mintA":"mintB"].decimals},{mint:M?re:ne,amount:x,decimal:A.poolInfo[M?"mintB":"mintA"].decimals},{mint:K.mintA,amount:O,decimal:K.mintDecimalsA}],outAmount:O,minOutAmount:L}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:r,slippage:i,epochInfo:a,shareFeeRate:s=new Ae(0),clmmPoolData:u,launchPoolInfo:l,launchPlatformInfo:d,slot:p,mintInfo:m,blockTimestamp:f}){var D,X;let y=i>0?new Ke(i).div(2).toDecimalPlaces(4,Ke.ROUND_DOWN).toNumber():i,b=u!=null?u:await this.scope.clmm.getPoolInfoFromRpc(o.toString());if(e.toString()!==b.poolInfo.mintA.address&&e.toString()!==b.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let g=e.toString()===b.poolInfo.mintA.address,P=b.poolInfo[g?"mintB":"mintA"],w=l;if(w||(w=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(r)})),P.address!==w.mintB.toBase58())throw new Error(`clmm swap mint(${P.address}) != launch pool mintB(${w.mintB.toBase58()})`);let B=n?await ft.computeAmountIn({poolInfo:b.computePoolInfo,tickarrayBitmapExtension:b.computePoolInfo.exBitmapInfo,tickArrayCache:b.tickData[o.toString()],amountOut:t,baseMint:new de(b.poolInfo[g?"mintB":"mintA"].address),slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:f}):await ft.computeAmountOutFormat({poolInfo:b.computePoolInfo,tickarrayBitmapExtension:b.computePoolInfo.exBitmapInfo,tickArrayCache:b.tickData[o.toString()],amountIn:t,tokenOut:P,slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:f}),A=d;if(!A){let Z=await this.scope.connection.getAccountInfo(w.platformId);A=Bn.decode(Z.data)}let h=m!=null?m:await this.scope.token.getTokenInfo(w.mintA),x=zt(w.programId).publicKey,S=po(h,a==null?void 0:a.epoch),K=La(P),I=po(P,a==null?void 0:a.epoch),C=n?t:B.minAmountOut.amount.raw,R=Mt.buyExactIn({poolInfo:w,amountB:C,protocolFeeRate:w.configInfo.tradeFeeRate,platformFeeRate:A.feeRate,curveType:w.configInfo.curveType,shareFeeRate:s,creatorFeeRate:A.creatorFeeRate,transferFeeConfigA:S,transferFeeConfigB:I,slot:p!=null?p:await this.scope.connection.getSlot()}),O=R.amountA.amount.sub((D=R.amountA.fee)!=null?D:new Ae(0)),L=new Ke(O.toString()),M=new Ae(1e4),W=y?new Ke(M.sub(new Ae(y*1e4)).toNumber()/M.toNumber()).clampedTo(0,1):new Ke(1);return{clmmPoolData:b,clmmComputeAmount:{maxClmmAmountIn:n?B.maxAmountIn.amount:t,clmmAmountOut:C,remainingAccounts:B.remainingAccounts},clmmComputeInfo:B,launchPoolInfo:w,launchAuthProgramId:x,launchMintTransferFeeConfig:S,launchMintProgramB:K,launchMintTransferFeeConfigB:I,launchSwapInfo:R,outAmount:R.amountA.amount.sub((X=R.amountA.fee)!=null?X:new Ae(0)),minOutAmount:new Ae(L.mul(W).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:r=.01,shareFeeRate:i=new Ae(0),shareFeeReceiver:a,ownerInfo:s={useSOLBalance:!0},checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:d,blockTimestamp:p}){let m=(s==null?void 0:s.feePayer)||this.scope.ownerPubKey,f=await this.scope.fetchEpochInfo(),{clmmPoolData:y,clmmComputeAmount:{remainingAccounts:b},launchPoolInfo:g,launchAuthProgramId:P,launchSwapInfo:w,launchMintProgramB:B,minLaunchOutAmount:A,outAmount:h,minOutAmount:x}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:r,epochInfo:f,shareFeeRate:i,blockTimestamp:p}),S=this.createTxBuilder(m),K={},I=ka(g.mintProgramFlag),{account:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I,mint:g.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:u});if(!C)throw new Error(`do not have launch mint(${g.mintA.toString()}) token account`);let R=g.mintB.equals(J),{account:O,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B,mint:g.mintB,notUseTokenAccount:R,owner:this.scope.ownerPubKey,skipCloseAccount:!R,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:u});if(L&&S.addInstruction(L),!O)throw new Error(`do not have launch mint(${g.mintA.toString()}) token account`);K[g.mintB.toBase58()]=O,S.addInstruction({instructions:[Aa(g.programId,this.scope.ownerPubKey,P,g.configId,g.platformId,new de(n),C,O,g.vaultA,g.vaultB,g.mintA,g.mintB,I,B,kn(g.programId,g.platformId,g.mintB).publicKey,Tn(g.programId,g.creator,g.mintB).publicKey,w.amountA.amount.lt(e)?w.amountA.amount:e,A,i,a)]});let M=g.mintB.toString()===y.poolInfo.mintA.address,W=s.useSOLBalance&&y.poolInfo.mintA.address===J.toBase58(),D=s.useSOLBalance&&y.poolInfo.mintB.address===J.toBase58(),X;!o||o.equals(new Ke(0))?X=M?Bt.add(new Ae(1)):It.sub(new Ae(1)):X=ie.priceToSqrtPriceX64(o,y.poolInfo.mintA.decimals,y.poolInfo.mintB.decimals);let[Z,H]=[new de(y.poolInfo.mintA.address),new de(y.poolInfo.mintB.address)],[ne,re]=[new de(y.poolInfo.mintA.programId),new de(y.poolInfo.mintB.programId)],j=W?void 0:this.scope.account.getAssociatedTokenAccount(Z,ne),pe=D?void 0:this.scope.account.getAssociatedTokenAccount(H,re);if(!j){let{account:ae,instructionParams:ge}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ne,mint:Z,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:s.feePayer||this.scope.ownerPubKey,amount:M?e:0},associatedOnly:!1,checkCreateATAOwner:u});j=ae,ge&&S.addInstruction(ge)}if(!pe){let{account:ae,instructionParams:ge}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:re,mint:H,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:s.feePayer||this.scope.ownerPubKey,amount:M?0:e},associatedOnly:!1,checkCreateATAOwner:u});pe=ae,ge&&S.addInstruction(ge)}return K[y.poolInfo.mintA.address]=j,K[y.poolInfo.mintB.address]=pe,(!j||!pe)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:j,ownerTokenAccountB:pe}),S.addInstruction(be.makeSwapBaseInInstructions({poolInfo:y.poolInfo,poolKeys:y.poolKeys,observationId:y.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:j,tokenAccountB:pe},inputMint:new de(y.poolKeys[M?"mintA":"mintB"].address),amountIn:A,amountOutMin:x,sqrtPriceLimitX64:X,remainingAccounts:b})),S.addCustomComputeBudget(l),S.versionBuild({txVersion:d,extInfo:{routes:[{mint:g.mintA,amount:e,decimal:g.mintDecimalsA},{mint:g.mintB,amount:A,decimal:g.mintDecimalsB},{mint:new de(y.poolKeys[M?"mintB":"mintA"].address),amount:h,decimal:y.poolKeys[M?"mintB":"mintA"].decimals}],outAmount:h,minOutAmount:x}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:r,shareFeeRate:i=new Ae(0),clmmPoolData:a,launchPoolInfo:s,launchPlatformInfo:u,blockTimestamp:l}){let d=o>0?new Ke(o).div(2).toDecimalPlaces(4,Ke.ROUND_DOWN).toNumber():o,p=s;p||(p=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(n)}));let m=p.mintB,f=a!=null?a:await this.scope.clmm.getPoolInfoFromRpc(t.toString());if(m.toString()!==f.poolInfo.mintA.address&&m.toString()!==f.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=m.toString()===f.poolInfo.mintA.address,b=f.poolInfo[y?"mintB":"mintA"],g=f.poolInfo[y?"mintA":"mintB"],P=u;if(!P){let M=await this.scope.connection.getAccountInfo(p.platformId);P=Bn.decode(M.data)}let w=await this.scope.token.getTokenInfo(p.mintA),B=zt(p.programId).publicKey,A=po(w,r==null?void 0:r.epoch),h=La(g),x=po(g,r==null?void 0:r.epoch),S=Mt.sellExactIn({poolInfo:p,amountA:e,protocolFeeRate:p.configInfo.tradeFeeRate,platformFeeRate:P.feeRate,curveType:p.configInfo.curveType,shareFeeRate:i,creatorFeeRate:P.creatorFeeRate,transferFeeConfigA:A,transferFeeConfigB:x,slot:await this.scope.connection.getSlot()}),K=S.amountB,I=new Ke(K.toString()),C=new Ae(1e4),R=d?new Ke(C.sub(new Ae(d*1e4)).toNumber()/C.toNumber()).clampedTo(0,1):new Ke(1),O=new Ae(I.mul(R).toFixed(0)),L=await ft.computeAmountOutFormat({poolInfo:f.computePoolInfo,tickarrayBitmapExtension:f.computePoolInfo.exBitmapInfo,tickArrayCache:f.tickData[t.toString()],amountIn:O,tokenOut:b,slippage:d,epochInfo:r!=null?r:await this.scope.fetchEpochInfo(),blockTimestamp:l});return{clmmPoolData:f,clmmComputeAmount:L,launchPoolInfo:p,launchAuthProgramId:B,launchMintTransferFeeConfig:A,launchMintProgramB:h,launchMintTransferFeeConfigB:x,launchSwapInfo:S,minLaunchOutAmount:O,outAmount:L.amountOut.amount.raw,minOutAmount:L.minAmountOut.amount.raw}}async swapCpmmToLaunchMint({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,poolKeys:r,slippage:i=.01,shareFeeRate:a=new Ae(0),shareFeeReceiver:s,launchPlatformInfo:u,slot:l,mintInfo:d,epochInfo:p,ownerInfo:m={useSOLBalance:!0},checkCreateATAOwner:f=!1,computeBudgetConfig:y,txVersion:b}){let g=(m==null?void 0:m.feePayer)||this.scope.ownerPubKey,P=p!=null?p:await this.scope.fetchEpochInfo(),{computePoolInfo:w,poolKeys:B}=await this.scope.cpmm.getPoolInfoFromRpc(n.toString()),{cpmmComputInfo:A,cpmmPoolData:h,launchPoolInfo:x,launchAuthProgramId:S,launchSwapInfo:K,launchMintProgramB:I,outAmount:C,minOutAmount:R}=await this.computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,cpmmPoolData:w,launchPoolId:o,slippage:i,epochInfo:P,shareFeeRate:a,launchPlatformInfo:u,slot:l,mintInfo:d}),O=e.toString()===h.mintA.address,L=m.useSOLBalance&&h.mintA.address===J.toBase58(),M=m.useSOLBalance&&h.mintB.address===J.toBase58(),W={},D=this.createTxBuilder(g),[X,Z]=[new de(h.mintA.address),new de(h.mintB.address)],[H,ne]=[new de(h.mintA.programId),new de(h.mintB.programId)],re=this.scope.account.getAssociatedTokenAccount(X,H),j=this.scope.account.getAssociatedTokenAccount(Z,ne);D.addInstruction({instructions:[di(this.scope.ownerPubKey,re,this.scope.ownerPubKey,X,H),di(this.scope.ownerPubKey,j,this.scope.ownerPubKey,Z,ne)]}),(O&&L||!O&&M)&&D.addInstruction({instructions:[Wm.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:O?re:j,lamports:BigInt(A.amountIn.toString())}),Um(O?re:j)]}),W[h.mintA.address]=re,W[h.mintB.address]=j,(!re||!j)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:re,ownerTokenAccountB:j});let pe=r!=null?r:B;D.addInstruction({instructions:[ii(h.programId,this.scope.ownerPubKey,new de(pe.authority),new de(pe.config.id),h.id,O?re:j,O?j:re,new de(pe.vault[O?"A":"B"]),new de(pe.vault[O?"B":"A"]),new de(O?H:ne!=null?ne:We),new de(O?ne:H!=null?H:We),O?X:Z,O?Z:X,Ro(h.programId,h.id).publicKey,t,A.swapResult.outputAmount)]});let ae=ka(x.mintProgramFlag),ge=this.scope.account.getAssociatedTokenAccount(x.mintA,ae),Ce=W[x.mintB.toBase58()];if(D.addInstruction({instructions:[di(this.scope.ownerPubKey,ge,this.scope.ownerPubKey,x.mintA,ae)]}),!Ce){let Be=x.mintB.equals(J),{account:ye,instructionParams:ue}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I,mint:x.mintB,notUseTokenAccount:Be,owner:this.scope.ownerPubKey,skipCloseAccount:!Be,createInfo:Be?{payer:this.scope.ownerPubKey,amount:A.minAmountOut}:void 0,associatedOnly:!1,checkCreateATAOwner:f});Ce=ye,ue&&D.addInstruction(ue)}return D.addInstruction({instructions:[sr(x.programId,this.scope.ownerPubKey,S,x.configId,x.platformId,new de(o),ge,Ce,x.vaultA,x.vaultB,x.mintA,x.mintB,ae,I,kn(x.programId,x.platformId,x.mintB).publicKey,Tn(x.programId,x.creator,x.mintB).publicKey,K.amountB.lt(A.minAmountOut)?K.amountB:A.minAmountOut,R,a,s)]}),D.addCustomComputeBudget(y),D.versionBuild({txVersion:b,extInfo:{routes:[{mint:new de(e),amount:t,decimal:h[O?"mintDecimalA":"mintDecimalB"]},{mint:O?Z:X,amount:A.minAmountOut,decimal:h[O?"mintB":"mintA"].decimals},{mint:x.mintA,amount:C,decimal:x.mintDecimalsA}],outAmount:C,minOutAmount:R}})}async computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,slippage:r,epochInfo:i,shareFeeRate:a=new Ae(0),cpmmPoolData:s,launchPoolInfo:u,launchPlatformInfo:l,slot:d,mintInfo:p}){var M,W;let m=r>0?new Ke(r).div(2).toDecimalPlaces(4,Ke.ROUND_DOWN).toNumber():r,f=s!=null?s:(await this.scope.cpmm.getPoolInfoFromRpc(n.toString())).computePoolInfo;if(e.toString()!==f.mintA.address&&e.toString()!==f.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=e.toString()===f.mintA.address,b=f[y?"mintB":"mintA"],g=u;if(g||(g=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(o)})),b.address!==g.mintB.toBase58())throw new Error(`clmm swap mint(${b.address}) != launch pool mintB(${g.mintB.toBase58()})`);let P=l;if(!P){let D=await this.scope.connection.getAccountInfo(g.platformId);P=Bn.decode(D.data)}let w=p!=null?p:await this.scope.token.getTokenInfo(g.mintA),B=zt(g.programId).publicKey,A=po(w,i==null?void 0:i.epoch),h=La(b),x=po(b,i==null?void 0:i.epoch),S=await this.scope.cpmm.computeSwapAmount({pool:f,amountIn:t,outputMint:new de(b.address),slippage:m}),K=S.minAmountOut,I=Mt.buyExactIn({poolInfo:g,amountB:K,protocolFeeRate:g.configInfo.tradeFeeRate,platformFeeRate:P.feeRate,curveType:g.configInfo.curveType,shareFeeRate:a,creatorFeeRate:P.creatorFeeRate,transferFeeConfigA:A,transferFeeConfigB:x,slot:d!=null?d:await this.scope.connection.getSlot()}),C=I.amountA.amount.sub((M=I.amountA.fee)!=null?M:new Ae(0)),R=new Ke(C.toString()),O=new Ae(1e4),L=m?new Ke(O.sub(new Ae(m*1e4)).toNumber()/O.toNumber()).clampedTo(0,1):new Ke(1);return{cpmmPoolData:f,cpmmComputInfo:S,launchPoolInfo:g,launchAuthProgramId:B,launchMintTransferFeeConfig:A,launchMintProgramB:h,launchMintTransferFeeConfigB:x,launchSwapInfo:I,outAmount:I.amountA.amount.sub((W=I.amountA.fee)!=null?W:new Ae(0)),minOutAmount:new Ae(R.mul(L).toFixed(0))}}async computeCpClToLaunchAmount({inputMint:e,inputAmount:t,clmmPoolId:n,cpmmPoolId:o,launchPoolId:r,slippage:i,epochInfo:a,shareFeeRate:s=new Ae(0),cpmmPoolData:u,clmmPoolData:l,launchPoolInfo:d,launchPlatformInfo:p,slot:m,mintInfo:f,blockTimestamp:y}){var j,pe;let b=i>0?new Ke(i).div(2).toDecimalPlaces(4,Ke.ROUND_DOWN).toNumber():i,g=l!=null?l:await this.scope.clmm.getPoolInfoFromRpc(n.toString());if(e.toString()!==g.poolInfo.mintA.address&&e.toString()!==g.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let P=e.toString()===g.poolInfo.mintA.address,w=g.poolInfo[P?"mintB":"mintA"],B=d;if(B||(B=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(r)})),w.address!==B.mintB.toBase58())throw new Error(`clmm swap mint(${w.address}) != launch pool mintB(${B.mintB.toBase58()})`);let A=p;if(!A){let ae=await this.scope.connection.getAccountInfo(B.platformId);A=Bn.decode(ae.data)}let h=f!=null?f:await this.scope.token.getTokenInfo(B.mintA),x=zt(B.programId).publicKey,S=po(h,a==null?void 0:a.epoch),K=La(w),I=po(w,a==null?void 0:a.epoch),C=await ft.computeAmountOutFormat({poolInfo:g.computePoolInfo,tickArrayCache:g.tickData[n.toString()],amountIn:t,tokenOut:w,slippage:b,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:y,tickarrayBitmapExtension:g.computePoolInfo.exBitmapInfo}),R=u!=null?u:(await this.scope.cpmm.getPoolInfoFromRpc(o.toString())).computePoolInfo,O=await this.scope.cpmm.computeSwapAmount({pool:R,amountIn:t,outputMint:new de(w.address),slippage:b}),[L,M]=[C.minAmountOut.amount.raw,O.minAmountOut],W=L.gte(M)?"clmm":"cpmm",D=L.gte(M)?L:M,X=Mt.buyExactIn({poolInfo:B,amountB:D,protocolFeeRate:B.configInfo.tradeFeeRate,platformFeeRate:A.feeRate,curveType:B.configInfo.curveType,shareFeeRate:s,creatorFeeRate:A.creatorFeeRate,transferFeeConfigA:S,transferFeeConfigB:I,slot:m!=null?m:await this.scope.connection.getSlot()}),Z=X.amountA.amount.sub((j=X.amountA.fee)!=null?j:new Ae(0)),H=new Ke(Z.toString()),ne=new Ae(1e4),re=b?new Ke(ne.sub(new Ae(b*1e4)).toNumber()/ne.toNumber()).clampedTo(0,1):new Ke(1);return{clmmPoolData:g,clmmComputeAmount:{maxClmmAmountIn:t,clmmAmountOut:D,remainingAccounts:C.remainingAccounts},clmmComputeInfo:C,cpmmComputInfo:O,swapPoolType:W,launchPoolInfo:B,launchAuthProgramId:x,launchMintTransferFeeConfig:S,launchMintProgramB:K,launchMintTransferFeeConfigB:I,launchSwapInfo:X,outAmount:X.amountA.amount.sub((pe=X.amountA.fee)!=null?pe:new Ae(0)),minOutAmount:new Ae(H.mul(re).toFixed(0))}}async fetchRoutePoolBasicInfo(e){let{amm:t=ki,clmm:n=Sn,cpmm:o=Vn}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Zi.offsetOf("baseMint"),length:64}}),i=v([F("baseMint"),F("quoteMint")]),a=r.map(m=>({id:m.pubkey,version:4,mintA:i.decode(m.account.data).baseMint,mintB:i.decode(m.account.data).quoteMint})),s=v([F("mintA"),F("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:wo.span}],dataSlice:{offset:wo.offsetOf("mintA"),length:64}})).map(m=>{let f=s.decode(m.account.data);return{id:m.pubkey,version:6,mintA:f.mintA,mintB:f.mintB}}),p=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:ga.offsetOf("mintA"),length:64}})).map(m=>{let f=s.decode(m.account.data);return{id:m.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:p}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:r}){e=e.toString()===de.default.toString()?J:e,t=t.toString()===de.default.toString()?J:t;let i={},a={},s={},u=[],l={};for(let p of n!=null?n:[]){if((p.mintA.equals(e)&&p.mintB.equals(t)||p.mintA.equals(t)&&p.mintB.equals(e))&&(u.push(p),a[p.id.toString()]=p),p.mintA.equals(e)){let m=p.mintB.toString();l[m]===void 0&&(l[m]={mintProgram:We,in:[],out:[],mDecimals:0}),l[m].in.push(p)}if(p.mintB.equals(e)){let m=p.mintA.toString();l[m]===void 0&&(l[m]={mintProgram:We,in:[],out:[],mDecimals:0}),l[m].in.push(p)}if(p.mintA.equals(t)){let m=p.mintB.toString();l[m]===void 0&&(l[m]={mintProgram:We,in:[],out:[],mDecimals:0}),l[m].out.push(p)}if(p.mintB.equals(t)){let m=p.mintA.toString();l[m]===void 0&&(l[m]={mintProgram:We,in:[],out:[],mDecimals:0}),l[m].out.push(p)}}let d=[];for(let p of o)(p.mintA.equals(e)&&p.mintB.equals(t)||p.mintA.equals(t)&&p.mintB.equals(e))&&(u.push(p),i[p.id.toBase58()]=p,d.push(p)),p.mintA.equals(e)&&(l[p.mintB.toBase58()]===void 0&&(l[p.mintB.toBase58()]={mintProgram:We,in:[],out:[],mDecimals:0}),l[p.mintB.toBase58()].in.push(p)),p.mintB.equals(e)&&(l[p.mintA.toBase58()]===void 0&&(l[p.mintA.toBase58()]={mintProgram:We,in:[],out:[],mDecimals:0}),l[p.mintA.toBase58()].in.push(p)),p.mintA.equals(t)&&(l[p.mintB.toBase58()]===void 0&&(l[p.mintB.toBase58()]={mintProgram:We,in:[],out:[],mDecimals:0}),l[p.mintB.toBase58()].out.push(p)),p.mintB.equals(t)&&(l[p.mintA.toBase58()]===void 0&&(l[p.mintA.toBase58()]={mintProgram:We,in:[],out:[],mDecimals:0}),l[p.mintA.toBase58()].out.push(p));for(let p of r)(p.mintA.equals(e)&&p.mintB.equals(t)||p.mintA.equals(t)&&p.mintB.equals(e))&&(u.push(p),s[p.id.toBase58()]=p),p.mintA.equals(e)&&(l[p.mintB.toBase58()]===void 0&&(l[p.mintB.toBase58()]={mintProgram:We,in:[],out:[],mDecimals:0}),l[p.mintB.toBase58()].in.push(p)),p.mintB.equals(e)&&(l[p.mintA.toBase58()]===void 0&&(l[p.mintA.toBase58()]={mintProgram:We,in:[],out:[],mDecimals:0}),l[p.mintA.toBase58()].in.push(p)),p.mintA.equals(t)&&(l[p.mintB.toBase58()]===void 0&&(l[p.mintB.toBase58()]={mintProgram:We,in:[],out:[],mDecimals:0}),l[p.mintB.toBase58()].out.push(p)),p.mintB.equals(t)&&(l[p.mintA.toBase58()]===void 0&&(l[p.mintA.toBase58()]={mintProgram:We,in:[],out:[],mDecimals:0}),l[p.mintA.toBase58()].out.push(p));for(let p of Object.keys(l)){if(l[p].in.length===1&&l[p].out.length===1&&l[p].in[0].id.equals(l[p].out[0].id)){delete l[p];continue}if(l[p].in.length===0||l[p].out.length===0){delete l[p];continue}let m=l[p];for(let f of m.in)for(let y of m.out)f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&s[f.id.toString()]===void 0?s[f.id.toString()]=f:(f.version===4||f.version===5)&&i[f.id.toString()]===void 0&&(i[f.id.toString()]=f),y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&s[y.id.toString()]===void 0?s[y.id.toString()]=y:(y.version===4||y.version===5)&&i[y.id.toString()]===void 0&&(i[y.id.toString()]=y)}return{directPath:u,addLiquidityPools:d,routePathDict:l,needSimulate:Object.values(i),needTickArray:Object.values(a),cpmmPoolList:Object.values(s)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(y=>[y.mintA.toBase58(),y.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let r=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),i=da(r),a={};Object.values(i).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new de(y.mintA.address),programId:We,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(y.mintB.address),a[y.mintB.address]={address:new de(y.mintB.address),programId:We,mintAuthority:null,supply:BigInt(0),decimals:y.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let s=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(y=>y.id.toBase58()),!0);Object.values(s).forEach(y=>{let[b,g]=[y.mintA.toBase58(),y.mintB.toBase58()];y.mintProgramA.equals(We)?(o.delete(b),a[b]={address:y.mintA,programId:y.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),y.mintProgramB.equals(We)?(o.delete(g),a[g]={address:y.mintB,programId:y.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await fo({connection:this.scope.connection,mints:Array.from(o).map(y=>new de(y))});a=N(N({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:s,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let d=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:p,computePoolTickData:m}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:d,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((y,b)=>E(N({},y),{[b]:E(N({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>i[g.id.toBase58()]||p[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>i[g.id.toBase58()]||p[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:r,ammSimulateCache:i,clmmPoolsRpcInfo:d,computeClmmPoolInfo:p,computePoolTickData:m,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:r,tickCache:i,slippage:a,chainTime:s,epochInfo:u,feeConfig:l,blockTimestamp:d}){var P,w,B,A,h,x,S,K,I;let p=l===void 0?new Ae(0):e.raw.mul(new Ae(l.feeBps.toNumber())).div(new Ae(1e4)),m=e.raw.sub(p),f=new Le(e.token,m),y=l===void 0?void 0:{feeAmount:p,feeAccount:l.feeAccount},b=E(N({},t),{address:Ot(t.address).toString()}),g=[];for(let C of n)try{g.push(E(N({},this.computeAmountOut({itemPool:C,tickCache:i,simulateCache:r,chainTime:s,epochInfo:u,slippage:a,outputToken:b,amountIn:f,blockTimestamp:d})),{feeConfig:y}))}catch(R){this.logDebug("direct error",C.version,C.id.toString(),R.message)}this.logDebug("direct done");for(let[C,R]of Object.entries(o)){let O={chainId:101,address:C,programId:R.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:R.mDecimals,tags:[],extensions:{}},L=R.in.map(W=>{try{return{pool:W,data:this.computeAmountOut({itemPool:W,tickCache:i,simulateCache:r,chainTime:s,epochInfo:u,slippage:a,outputToken:O,amountIn:f,blockTimestamp:d})}}catch(D){this.logDebug("route in error",W.version,W.id.toString(),D.message);return}}).sort((W,D)=>{var H,ne,re,j;let X=W===void 0?Lt:W.data.amountOut.amount.raw.sub((ne=(H=W.data.amountOut.fee)==null?void 0:H.raw)!=null?ne:Lt),Z=D===void 0?Lt:D.data.amountOut.amount.raw.sub((j=(re=D.data.amountOut.fee)==null?void 0:re.raw)!=null?j:Lt);return X.lt(Z)?1:-1})[0];if(L===void 0)continue;let M=new Le(Ri(O),L.data.amountOut.amount.raw.sub((w=(P=L.data.amountOut.fee)==null?void 0:P.raw)!=null?w:Lt));for(let W of R.out)try{let D=this.computeAmountOut({itemPool:W,tickCache:i,simulateCache:r,chainTime:s,epochInfo:u,slippage:a,outputToken:b,amountIn:M,blockTimestamp:d});g.push(E(N({},D),{allTrade:!!(L.data.allTrade&&D.allTrade),amountIn:L.data.amountIn,amountOut:D.amountOut,minAmountOut:D.minAmountOut,currentPrice:void 0,executionPrice:new Ke(new Dt({baseToken:L.data.amountIn.amount.token,denominator:L.data.amountIn.amount.raw,quoteToken:D.amountOut.amount.token,numerator:D.amountOut.amount.raw.sub((A=(B=D.amountOut.fee)==null?void 0:B.raw)!=null?A:Lt)}).toFixed()),priceImpact:new Ke(L.data.priceImpact.add(D.priceImpact).toFixed()),fee:[L.data.fee[0],D.fee[0]],routeType:"route",poolInfoList:[L.pool,W],remainingAccounts:[L.data.remainingAccounts[0],D.remainingAccounts[0]],minMiddleAmountFee:(h=D.amountOut.fee)!=null&&h.raw?new Le(L.data.amountOut.amount.token,((S=(x=L.data.amountOut.fee)==null?void 0:x.raw)!=null?S:Lt).add((I=(K=D.amountOut.fee)==null?void 0:K.raw)!=null?I:Lt)):void 0,middleToken:L.data.amountOut.amount.token,poolReady:L.data.poolReady&&D.poolReady,poolType:[L.data.poolType,D.poolType],feeConfig:y,expirationTime:En(L.data.expirationTime,D.expirationTime)}))}catch(D){this.logDebug("route out error",W.version,W.id.toString(),D.message)}}return g.filter(C=>(C.allTrade||this.logDebug(`pool ${C.poolInfoList.map(R=>R.id.toString()).join(",")} filter out since not all trade`),C.allTrade)).sort((C,R)=>C.amountOut.amount.raw.sub(R.amountOut.amount.raw).gt(Lt)?-1:1)}getAllRouteComputeAmountIn({outputTokenAmount:e,directPath:t,routePathDict:n,simulateCache:o,tickCache:r,slippage:i,chainTime:a,epochInfo:s,blockTimestamp:u,feeConfig:l}){var m,f,y,b,g,P,w,B,A;let d=gt({address:Ot(e.token.mint).toBase58(),decimals:e.token.decimals,programId:e.token.isToken2022?mi.toBase58():We.toBase58(),extensions:{}}),p=[];for(let h of t)try{let x=this.computeAmountIn({itemPool:h,tickCache:r,simulateCache:o,chainTime:a,epochInfo:s,slippage:i,outputToken:d,amountOut:e.raw,blockTimestamp:u}),S=l===void 0?new Ae(0):x.amountIn.amount.raw.mul(new Ae(l.feeBps.toNumber())).div(new Ae(1e4));p.push(E(N({},x),{feeConfig:l===void 0?void 0:{feeAmount:S,feeAccount:l.feeAccount}}))}catch(x){this.logDebug("direct error",h.version,h.id.toString(),x.message)}this.logDebug("direct done");for(let[h,x]of Object.entries(n)){let S={chainId:101,address:h,programId:x.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:x.mDecimals,tags:[],extensions:{}},K=x.out.map(C=>{try{return{pool:C,data:this.computeAmountIn({itemPool:C,tickCache:r,simulateCache:o,chainTime:a,epochInfo:s,slippage:i,outputToken:d,amountOut:e.raw,blockTimestamp:u})}}catch(R){this.logDebug("route in error",C.version,C.id.toString(),R.message);return}}).sort((C,R)=>{var M,W,D,X;let O=C===void 0?Lt:C.data.amountIn.amount.raw.add((W=(M=C.data.amountIn.fee)==null?void 0:M.raw)!=null?W:Lt),L=R===void 0?Lt:R.data.amountIn.amount.raw.add((X=(D=R.data.amountIn.fee)==null?void 0:D.raw)!=null?X:Lt);return O.lt(L)?-1:1})[0];if(K===void 0)continue;let I=new Le(Ri(S),K.data.amountIn.amount.raw.add((f=(m=K.data.amountIn.fee)==null?void 0:m.raw)!=null?f:Lt));for(let C of x.in)try{let R=this.computeAmountIn({itemPool:C,tickCache:r,simulateCache:o,chainTime:a,epochInfo:s,slippage:i,outputToken:S,amountOut:I.raw,blockTimestamp:u}),O=l===void 0?new Ae(0):R.amountIn.amount.raw.mul(new Ae(l.feeBps.toNumber())).div(new Ae(1e4));p.push(E(N({},R),{allTrade:!!(R.allTrade&&K.data.allTrade),amountIn:R.amountIn,amountOut:K.data.amountOut,maxAmountIn:R.maxAmountIn,currentPrice:void 0,executionPrice:new Ke(new Dt({baseToken:K.data.amountIn.amount.token,denominator:K.data.amountIn.amount.raw,quoteToken:R.amountOut.amount.token,numerator:R.amountOut.amount.raw.sub((b=(y=R.amountOut.fee)==null?void 0:y.raw)!=null?b:Lt)}).toFixed()),priceImpact:new Ke(K.data.priceImpact.add(R.priceImpact).toFixed()),fee:[R.fee[0],K.data.fee[0]],routeType:"route",poolInfoList:[K.pool,C],remainingAccounts:[K.data.remainingAccounts[0],R.remainingAccounts[0]],minMiddleAmountFee:(g=R.amountOut.fee)!=null&&g.raw?new Le(K.data.amountOut.amount.token,((w=(P=K.data.amountOut.fee)==null?void 0:P.raw)!=null?w:Lt).add((A=(B=R.amountOut.fee)==null?void 0:B.raw)!=null?A:Lt)):void 0,middleToken:K.data.amountOut.amount.token,poolReady:K.data.poolReady&&R.poolReady,poolType:[K.data.poolType,R.poolType],feeConfig:l===void 0?void 0:{feeAmount:O,feeAccount:l.feeAccount},expirationTime:En(K.data.expirationTime,R.expirationTime)}))}catch(R){this.logDebug("route out error",C.version,C.id.toString(),R.message)}}return p.filter(h=>(h.allTrade||this.logDebug(`pool ${h.poolInfoList.map(x=>x.id.toString()).join(",")} filter out since not all trade`),h.allTrade)).sort((h,x)=>x.amountIn.amount.raw.sub(h.amountIn.amount.raw).gt(Lt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:r,slippage:i,outputToken:a,amountIn:s,blockTimestamp:u}){if(e.version===6){let{allTrade:l,realAmountIn:d,amountOut:p,minAmountOut:m,expirationTime:f,currentPrice:y,executionPrice:b,priceImpact:g,fee:P,remainingAccounts:w,executionPriceX64:B}=ft.computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:e.exBitmapInfo,tickArrayCache:t[e.id.toString()],amountIn:s.raw,tokenOut:a,slippage:i,epochInfo:r,catchLiquidityInsufficient:!0,blockTimestamp:u});return{allTrade:l,amountIn:d,amountOut:p,minAmountOut:m,currentPrice:new Ke(y.toFixed()),executionPrice:new Ke(b.toFixed()),priceImpact:new Ke(g.toFixed()),fee:[P],remainingAccounts:[w],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:i,clmmExPriceX64:[B],expirationTime:En(d.expirationTime,f)}}else if(e.version===7){let{allTrade:l,executionPrice:d,amountOut:p,minAmountOut:m,priceImpact:f,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:s.raw,slippage:i});return{allTrade:l,amountIn:{amount:s,fee:void 0,expirationTime:void 0},amountOut:{amount:dt(E(N({},a),{amount:p})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:dt(E(N({},a),{amount:m})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:d,priceImpact:f,fee:[new Le(s.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:i,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:l,minAmountOut:d,currentPrice:p,executionPrice:m,priceImpact:f,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:s.raw,mintIn:s.token.mint,mintOut:a.address,slippage:i});return{amountIn:{amount:s,fee:void 0,expirationTime:void 0},amountOut:{amount:dt(E(N({},a),{amount:l})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:dt(E(N({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:p,executionPrice:m,priceImpact:f,fee:[new Le(s.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:i,clmmExPriceX64:[void 0]}}}computeAmountIn({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:r,slippage:i,amountOut:a,outputToken:s,blockTimestamp:u}){let l=s.address===e.mintB.address?e.mintA:e.mintB;if(e.version===6){let{allTrade:d,realAmountOut:p,amountIn:m,maxAmountIn:f,expirationTime:y,currentPrice:b,executionPrice:g,priceImpact:P,fee:w,remainingAccounts:B}=ft.computeAmountIn({poolInfo:e,tickarrayBitmapExtension:e.exBitmapInfo,tickArrayCache:t[e.id.toString()],amountOut:a,baseMint:new de(l.address),slippage:i,epochInfo:r,blockTimestamp:u});return{allTrade:d,amountOut:{amount:dt(E(N({},s),{amount:p.amount})),fee:p.fee?dt(E(N({},s),{amount:p.fee})):void 0,expirationTime:void 0},amountIn:{amount:dt(E(N({},l),{amount:m.amount})),fee:m.fee?dt(E(N({},l),{amount:m.fee})):void 0,expirationTime:m.expirationTime},maxAmountIn:{amount:dt(E(N({},l),{amount:f.amount})),fee:f.fee?dt(E(N({},l),{amount:f.fee})):void 0,expirationTime:f.expirationTime},currentPrice:new Ke(b.toFixed()),executionPrice:new Ke(g.toFixed()),priceImpact:new Ke(P.toFixed()),fee:[dt(E(N({},l),{amount:w}))],remainingAccounts:[B],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:i,clmmExPriceX64:[ho(g)],expirationTime:En(p.expirationTime,y)}}else if(e.version===7){let{allTrade:d,executionPrice:p,amountIn:m,amountOut:f,priceImpact:y,fee:b}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:s.address,amountIn:a,swapBaseIn:!1,slippage:i});return{allTrade:d,amountOut:{amount:dt(E(N({},s),{amount:f})),fee:void 0,expirationTime:void 0},amountIn:{amount:dt(E(N({},l),{amount:m})),fee:void 0,expirationTime:void 0},maxAmountIn:{amount:dt(E(N({},l),{amount:m.mul(new Ae((1+i)*1e4)).div(new Ae(1e4))})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:p,priceImpact:y,fee:[dt(E(N({},l),{amount:b}))],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:i,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountIn:d,maxAmountIn:p,currentPrice:m,executionPrice:f,priceImpact:y}=this.scope.liquidity.computeAmountIn({poolInfo:n[e.id.toString()],amountOut:a,mintIn:l.address,mintOut:s.address,slippage:i});return{amountOut:{amount:dt(E(N({},s),{amount:a})),fee:void 0,expirationTime:void 0},amountIn:{amount:dt(E(N({},l),{amount:d})),fee:void 0,expirationTime:void 0},maxAmountIn:{amount:dt(E(N({},l),{amount:p})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:f,priceImpact:y,fee:[dt(E(N({},l),{amount:ee}))],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:i,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}let r=new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString()));if(r.size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(r));Object.keys(u).forEach(l=>{n[l]=u[l]})}let i=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};i.size>0&&(await Ne(this.scope.connection,Array.from(i).map(l=>({pubkey:new de(l)})))).forEach(l=>{if(!l.accountInfo)return;let d=vu.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Ra.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:d.baseVault.toString(),marketQuoteVault:d.quoteVault.toString(),marketBids:d.bids.toString(),marketAsks:d.asks.toString(),marketEventQueue:d.eventQueue.toString()}});let s=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],d={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:E(N({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};s.push(d)}else if(u.version===4){let l=n[u.id.toString()],d=N({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:lu({programId:new de(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]||{marketProgramId:l.marketProgramId.toBase58(),marketId:l.marketId.toBase58(),marketAuthority:de.default.toBase58(),marketBaseVault:de.default.toBase58(),marketQuoteVault:de.default.toBase58(),marketBids:de.default.toBase58(),marketAsks:de.default.toBase58(),marketEventQueue:de.default.toBase58()});s.push(d)}else u.version===7&&s.push({observationId:u.observationId.toBase58(),programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Co(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:gt({address:u.mintLp.toBase58(),programId:We.toBase58(),decimals:u.lpDecimals}),config:E(N({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),s}};import{PublicKey as Ny,Transaction as Du,TransactionInstruction as My}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fy}from"@solana/spl-token";import Gm from"bn.js";var Vt=class extends tt{static getPdaPoolId(e,t){return oe([Vt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return oe([Vt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Gm(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:r}){if(n.length===0)return[];let i=n.map(l=>Vt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Vt.VERSION_PROJECT.length;l++)a.push(...i.map(d=>Vt.getPdaOwnerId(t,d,o,l).publicKey));let s=await wt(e,[...i,...a]),u=[];for(let l=0;l<s.length;l++){let d=Math.floor(l/n.length),p=l%n.length,m=i[p],f=a[l],y=s[p],b=s[n.length+l];if(!(y&&b)||y.data.length!==Vt.POOL_LAYOUT.span||b.data.length!==Vt.OWNER_LAYOUT.span)continue;let g=Vt.POOL_LAYOUT.decode(y.data),P=Vt.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),B=g.endTime.toNumber(),A=P.tokenInfo.map(S=>S.debtAmount.gt(new Gm(0))).filter(S=>!S).length!==3,h=r>w&&r<B&&g.status===1,x=A&&h;u.push({programId:t,poolId:m,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:P.lpAmount,project:Vt.VERSION_PROJECT[d],openTime:w,endTime:B,canClaim:x,canClaimErrorType:A?h?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((S,K)=>({mintAddress:S.mintAddress,mintVault:S.mintVault,mintDecimals:S.mintDecimals,perLpLoss:S.perLpLoss,debtAmount:P.tokenInfo[K].debtAmount.add(P.tokenInfo[K].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),r=t.wallet||this.scope.ownerPubKey,i=[];for(let u of e.tokenInfo){let{account:l,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(He.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(He.WSOL.mint),associatedOnly:u.mintAddress.equals(He.WSOL.mint)?!1:t.associatedOnly});d&&o.addInstruction(d),i.push(l)}o.addInstruction({instructions:[Vt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:i}})]});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),r=t.wallet||this.scope.ownerPubKey,i={};for(let l of e){let d=[];for(let p of l.tokenInfo){let{account:m,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({mint:p.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:p.mintAddress.equals(He.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!p.mintAddress.equals(He.WSOL.mint),associatedOnly:p.mintAddress.equals(He.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),m&&(i[p.mintAddress.toString()]=m,d.push(m))}o.addInstruction({instructions:[Vt.makeClaimInstruction({programId:l.programId,poolInfo:l,ownerInfo:{wallet:r,ownerPda:l.ownerAccountId,claimAddress:d}})]})}let{transaction:a,signers:s}=o.build(),u=o.allInstructions;return Qa(u,[r,...s.map(l=>l.publicKey)])?[{transaction:a,signer:s}]:[{transaction:new Du().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:s},{transaction:new Du().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Du().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=v([]),r=[{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:Fy,isSigner:!1,isWritable:!1}],i=Buffer.alloc(o.span);o.encode({},i);let a=Buffer.from([10,66,208,184,161,6,191,98,...i]);return new My({keys:r,programId:e,data:a})}},ln=Vt;ln.CLAIMED_NUM=3,ln.POOL_LAYOUT=v([we(8),_("bump"),_("status"),k("openTime"),k("endTime"),F("ammId"),$(v([_("mintDecimals"),F("mintAddress"),F("mintVault"),k("perLpLoss"),k("totalClaimedAmount")]),Vt.CLAIMED_NUM,"tokenInfo"),$(k(),10,"padding")]),ln.OWNER_LAYOUT=v([we(8),_("bump"),_("version"),F("poolId"),F("owner"),k("lpAmount"),$(v([F("mintAddress"),k("debtAmount"),k("claimedAmount")]),Vt.CLAIMED_NUM,"tokenInfo"),$(k(),4,"padding")]),ln.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Ny(e)),ln.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},ln.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as zm}from"@solana/web3.js";import{getTransferFeeConfig as vy,MintLayout as _y,TOKEN_2022_PROGRAM_ID as Wu,TOKEN_PROGRAM_ID as qu,unpackMint as Vy}from"@solana/spl-token";var Pr=class extends tt{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Set;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:r,blacklist:i,whiteList:a}=await this.scope.fetchV3TokenList(n),s=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Set(i),this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(xn.address,xn),this._mintGroup.official.add(xn.address),r.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,E(N({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Wu.toBase58():qu.toBase58()})),this._mintGroup.official.add(u.address))}),s.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,E(N({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Wu.toBase58():qu.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,E(N({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Wu.toBase58():qu.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return xn;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(N({},r),{priority:2})),r;let i=await this.scope.connection.getAccountInfo(new zm(n));if(!i)throw new Error(`mint address not found: ${n}`);let a=_y.decode(i.data),s=n.toString().substring(0,6),u=vy(Vy(new zm(t),i,i.owner)),l={chainId:101,address:n,programId:i.owner.toBase58(),logoURI:"",symbol:s,name:s,decimals:a.decimals,tags:[],extensions:u?{feeConfig:Cn(u)}:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,l),l}};var Oa=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:r,defaultChainTime:i,defaultChainTimeOffset:a,apiCacheTime:s,blockhashCommitment:u="confirmed",loopMultiTxStatus:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new fn(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=r,this._apiCacheTime=s||5*60*1e3,this.logger=ke("Raydium"),this.farm=new Qi({scope:this,moduleName:"Raydium_Farm"}),this.account=new Ci({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ji({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Pr({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new gr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new _i({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new rr({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new ln({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new ni({scope:this,moduleName:"Raydium_marketV2"}),this.launchpad=new fr({scope:this,moduleName:"Raydium_lauchpad"}),this.availability={};let d=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:d,value:{chainTime:i||Date.now()-a,offset:a}})}static async load(e){var l;let t=Ey({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:r,logRequests:i,urlConfigs:a}=t,s=new _r({cluster:n,timeout:o,urlConfigs:a,logCount:r,logRequests:i}),u=new Oa(E(N({},t),{api:s}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Vr);return this._owner.publicKey}setOwner(e){return this._owner=e?new fn(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Ic);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw console.error(Vr),new Error(Vr)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){if(this.cluster==="devnet")return[];let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(o=>E(N({},o),{mintAuthority:o.mint_authority||void 0,freezeAuthority:o.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var gM=c=>c;export{Lp as AMM_CONFIG_SEED,uy as AUTH_SEED,Gc as BIT_PRECISION,Xk as BN_NEGATIVE_ONE,rt as BN_ONE,ee as BN_ZERO,Ty as BondingCurveParam,cy as CONFIG_SEED,py as CREATOR_FEE_VAULT_AUTH_SEED,_i as Clmm,Is as ClmmConfigLayout,be as ClmmInstrument,Bs as CollectFeeOn,tr as ConstantProductCurve,dm as CpmmConfigInfoLayout,Lm as CpmmCreatorFeeOn,YK as CpmmCreatorFeeShareLayout,Zt as CpmmFee,XK as CpmmPermission,ga as CpmmPoolInfoLayout,Mt as Curve,co as CurveBase,nr as CurveCalculator,By as CurveRuleGroup,yI as DEV_FARM_LOCK_MINT,bI as DEV_FARM_LOCK_VAULT,Hk as DYNAMIC_CONFIG_INDEX,Vp as DYNAMIC_FEE_CONFIG_SEED,Yc as DYNAMIC_FEE_CONTROL_DENOMINATOR,wf as DataElement,eT as DynamicFeeConfigLayout,Zo as DynamicFeeInfo,xp as DynamicFeeInfoLayout,Xo as EXTENSION_TICKARRAY_BITMAP_SIZE,Kl as FARM_LOCK_MINT,Cl as FARM_LOCK_VAULT,on as FARM_PROGRAM_TO_VERSION,Wi as FARM_VERSION_TO_LEDGER_LAYOUT,Di as FARM_VERSION_TO_STATE_LAYOUT,Wn as FEE_RATE_DENOMINATOR,pm as FeeOn,Ia as FixedPriceCurve,Cm as LAUNCHPAD_CURVE_RULE_CONSTANT_PRODUCT_ONLY_FIELDS,Mu as LAUNCHPAD_MAX_CONSTRAINTS_PER_GROUP,Nu as LAUNCHPAD_MAX_CURVE_RULE_GROUPS,ia as LIQUIDITY_FEES_DENOMINATOR,eu as LIQUIDITY_FEES_NUMERATOR,df as LIQUIDITY_VERSION_TO_SERUM_VERSION,Ex as LIQUIDITY_VERSION_TO_STATE_LAYOUT,ny as LOCK_LIQUIDITY_SEED,Wc as LOG_B_2_X32,qc as LOG_B_P_ERR_MARGIN_LOWER_X64,Uc as LOG_B_P_ERR_MARGIN_UPPER_X64,ha as LaunchConstantProductCurve,so as LaunchpadConfig,wy as LaunchpadCurveRuleBaseTokenProgram,Km as LaunchpadCurveRuleField,Rm as LaunchpadCurveRuleOp,xy as LaunchpadMintProgramBit,hn as LaunchpadPool,Ka as LaunchpadPoolInitParam,pR as LaunchpadVesting,ko as LimitOrderLayout,eo as LimitOrderMath,Jc as LimitOrderNonceLayout,Sa as LinearPriceCurve,at as LiquidityMathUtil,el as LockClPositionLayoutV2,tT as LockPositionLayout,Wk as MAGIC_SQRT_10001,du as MARKET_STATE_LAYOUT_V2,vu as MARKET_STATE_LAYOUT_V3,Vm as MARKET_VERSION_TO_STATE_LAYOUT,qk as MAX_FEE_RATE,Yr as MAX_FEE_RATE_NUMERATOR,It as MAX_SQRT_PRICE_X64,sn as MAX_TICK,Uk as MAX_TICK_SPACING,Bt as MIN_SQRT_PRICE_X64,an as MIN_TICK,Ra as Market,lr as MathLaunch,Hc as OBSERVATION_NUM,zk as OBSERVATION_UPDATE_DURATION_DEFAULT,Mp as OPERATION_SEED,Qc as OPERATION_SIZE_USIZE,Ip as ObservationItemLayout,$c as ObservationLayout,jc as OperationLayout,Ep as PERMISSION_SEED,yy as PLATFORM_ALLOW_CONFIG_SEED,by as PLATFORM_CURVE_RULE_SEED,dy as PLATFORM_FEE_VAULT_AUTH_SEED,fy as PLATFORM_GLOBAL_ACCESS_SEED,my as PLATFORM_SEED,ml as POOL_LOCK_ID_SEED,vp as POOL_OBSERVATION_SEED,Op as POOL_REWARD_VAULT_SEED,jr as POOL_SEED,Fp as POOL_TICK_ARRAY_BITMAP_SEED,Ks as POOL_VAULT_SEED,ly as POOL_VESTING_SEED,il as POSITION_SEED,hy as ParamConstraint,Qr as PersonalPositionLayout,Bn as PlatformConfig,fR as PlatformCurveParam,wa as PlatformCurveRule,vi as PoolFee,wo as PoolInfoLayout,kp as PoolStatusBitFlag,wp as PoolStatusBitIndex,Yt as PoolUtil,ft as PoolUtils,Kp as PositionRewardInfoLayout,Pl as PositionUtils,Jk as ProtocolPositionLayout,hs as Q128,xe as Q64,Xc as REDUCTION_FACTOR_DENOMINATOR,zo as RESOLUTION,Oi as REWARD_NUM,Oa as Raydium,Sp as RewardInfoLayout,Tp as RewardState,tm as RoundDirection,vm as SERUM_PROGRAMID_TO_VERSION,_m as SERUM_VERSION_TO_PROGRAMID,xn as SOL_INFO,Ts as SPL_MINT_LAYOUT,_p as SUPPORT_MINT_SEED,Mi as SqrtPriceMath,ca as StableLayout,Fi as SwapMathUtil,wn as SwapState,Xr as TICK_ARRAY_BITMAP_SIZE,Np as TICK_ARRAY_SEED,Xt as TICK_ARRAY_SIZE,Gk as TICK_ARRAY_SIZE_USIZE,zc as TICK_TO_SQRT_PRICE_FACTORS,kt as TOKEN_WSOL,Zr as TickArrayBitmapExtensionLayout,Un as TickArrayBitmapUtil,Yo as TickArrayLayout,Pe as TickArrayUtil,Cp as TickLayout,ie as TickUtil,Uf as TradeDirection,Gf as TradeDirectionOpposite,zr as U128_MAX,hT as U256_MAX,Qk as U64_IGNORE_RANGE,Rn as U64_MAX,hp as UpdateAmmConfigParam,Bp as UpdateOperationAccountParam,Li as VOLATILITY_ACCUMULATOR_SCALE,ky as VestingSchedule,Sl as Voter,Zp as VoterDepositEntry,Qp as VoterLockup,xl as VoterRegistrar,Hp as VoterVotingMintConfig,Zc as WHITE_MINT_SIZE_USIZE,NT as abs,iu as addLiquidityLayout,lt as anchorDataBuf,vs as associatedLedgerAccountLayout,sr as buyExactInInstruction,gm as buyExactOutInstruction,Zs as calFarmRewardAmount,IR as checkCurveRuleGroupWritable,BR as checkLaunchAgainstCurveRule,qR as checkPoolToAmm,yT as checkedAdd,gT as checkedMul,bT as checkedSub,Ou as claimCreatorFee,Ru as claimPlatformFee,Lu as claimPlatformFeeFromVault,Ku as claimVestedToken,CT as clearBit,gl as clmmComputeInfoToApiInfo,Dn as closeAccountInstruction,hm as closePlatformAllowConfigIns,Sm as closePlatformCurveRuleIns,Au as collectCpFeeInstruction,lm as collectCreatorFeePermissionlessInInstruction,ry as cpmmLockPositionInstruction,zi as createAssociatedLedgerAccountInstruction,Tm as createPlatformAllowConfigIns,Am as createPlatformConfig,Bm as createPlatformCurveRuleIns,km as createPlatformVestingAccountIns,Wl as createPoolFeeLayout,su as createPoolV4InstructionV2,Vx as createPoolV4Layout,Cu as createVestingAccount,jn as createWSolAccountInstructions,ho as decimalToX64,Jr as divRoundingUp,Ut as dwLayout,Ds as farmAddRewardLayout,iI as farmLedgerLayoutV3_1,Ei as farmLedgerLayoutV3_2,rI as farmLedgerLayoutV5_1,Bl as farmLedgerLayoutV5_2,Il as farmLedgerLayoutV6_1,Ll as farmRewardInfoToConfig,Vs as farmRewardLayout,Es as farmRewardRestartLayout,Yp as farmRewardTimeInfoLayout,Tl as farmStateV3Layout,hl as farmStateV5Layout,Vi as farmStateV6Layout,NI as fetchMultipleFarmInfoAndUpdate,fl as fetchTickArrays,tu as fixedSwapInLayout,nu as fixedSwapOutLayout,Rf as formatLayout,OT as fromSignedI128,nt as generatePubKey,Rl as getAssociatedAuthority,ma as getAssociatedConfigId,_t as getAssociatedLedgerAccount,Ui as getAssociatedLedgerPoolAccount,Ff as getAssociatedOpenOrders,mu as getAssociatedPoolKeys,Yk as getCollectFeeOnDescription,oi as getCpLockPda,OK as getCpmmPdaAmmConfigId,fu as getCpmmPdaPoolId,yu as getCreatePoolKeys,gu as getCreatorFeeSharePda,Mm as getCurveRuleFieldValue,$s as getDepositEntryIndex,Yl as getDxByDyBaseIn,Xl as getDyByDxBaseIn,ei as getFarmLedgerLayout,jp as getFarmStateLayout,ka as getLaunchpadPoolMintAProgram,gR as getLaunchpadPoolMintBProgram,Om as getLaunchpadPoolMintProgram,lu as getLiquidityAssociatedAuthority,So as getLiquidityAssociatedId,th as getOrderTick,cT as getPdaAmmConfigId,ao as getPdaCpiEvent,Iu as getPdaCreatorFeeVaultAuth,Tn as getPdaCreatorVault,lT as getPdaDynamicFeeConfigAddress,Ge as getPdaExBitmapAccount,zt as getPdaLaunchpadAuth,ku as getPdaLaunchpadConfigId,si as getPdaLaunchpadPoolId,Tu as getPdaLaunchpadVaultId,cl as getPdaLimitOrderAddress,ll as getPdaLimitOrderNonceAddress,Ho as getPdaLockClPositionIdV2,Rs as getPdaLockPositionId,ey as getPdaLpMint,qn as getPdaMetadataKey,To as getPdaMintExAccount,bu as getPdaMintExAccountCp,Cs as getPdaObservationAccount,Ro as getPdaObservationId,Ni as getPdaOperationAccount,al as getPdaPermission,im as getPdaPermissionId,sl as getPdaPermissionedPoolId,nn as getPdaPersonalPositionAddress,ar as getPdaPlatformAllowConfig,jC as getPdaPlatformConfigAccess,xu as getPdaPlatformCurveRule,Bu as getPdaPlatformFeeVaultAuth,hu as getPdaPlatformId,kn as getPdaPlatformVault,Co as getPdaPoolAuthority,rl as getPdaPoolId,ul as getPdaPoolRewardVaultId,tn as getPdaPoolVaultId,Pn as getPdaProtocolPositionAddress,Oe as getPdaTickArrayAddress,om as getPdaVault,ui as getPdaVestId,Gs as getRegistrarAddress,Hl as getStablePrice,Qs as getTokenOwnerRecordAddress,Ys as getVoterAddress,Hs as getVoterWeightRecordAddress,Xs as getVotingMintAuthority,zs as getVotingTokenMint,uf as governanceCreateTokenOwnerRecord,Ss as i32ToBytes,tl as i32ToBytesBE,ou as initPoolLayout,ws as initTokenAccountInstruction,uR as initialize,Ef as initializeMarket,ym as initializeV2,mm as initializeWithPermission,bm as initializeWithToken2022,ST as isBitSet,Ky as isCurveRuleConstraintSatisfied,qs as isValidFarmVersion,MI as judgeFarmType,xT as leastSignificantBit,Zi as liquidityStateV4Layout,pf as liquidityStateV5Layout,ua as makeAMMSwapInstruction,sa as makeAMMSwapV2Instruction,Ul as makeAddLiquidityInstruction,Js as makeAddNewRewardInstruction,wu as makeCollectCreatorFeeInstruction,cm as makeCpmmLockInstruction,rm as makeCreateCpmmPoolInInstruction,Ol as makeCreateFarmInstruction,pa as makeCreateMarketInstruction,Nl as makeCreatorWithdrawFarmRewardInstruction,am as makeDepositCpmmInInstruction,Fl as makeDepositInstructionV3,vl as makeDepositInstructionV5,_l as makeDepositInstructionV6,ZI as makeDepositTokenInstruction,jI as makeDepositWithdrawInstruction,Jx as makeInitPoolInstructionV4,js as makeRestartRewardInstruction,ii as makeSwapCpmmBaseInInstruction,um as makeSwapCpmmBaseOutInstruction,bf as makeSwapFixedInInstruction,gf as makeSwapFixedOutInstruction,Dm as makeSwapInstruction,Dc as makeTransferInstruction,sm as makeWithdrawCpmmInInstruction,Hi as makeWithdrawInstructionV3,Ml as makeWithdrawInstructionV4,Yi as makeWithdrawInstructionV5,Xi as makeWithdrawInstructionV6,$I as makeWithdrawTokenInstruction,Os as mask,Hr as mockV3CreatePoolInfo,kf as modelDataInfoLayout,dl as mostSignificantBit,ze as mulDivCeil,Ee as mulDivFloor,AT as mulDivRound,PT as mulFull,Ec as parseTokenAccountResp,Rk as parseTokenInfo,Dl as poolLpAuthority,to as poolTypeV6,Gp as realFarmStateV3Layout,zp as realFarmStateV5Layout,Xp as realFarmV6Layout,au as removeLiquidityInstruction,ru as removeLiquidityLayout,xm as removePlatformCurveRuleIns,MO as route1Instruction,FO as route2Instruction,Ly as routeInstruction,Aa as sellExactInInstruction,Pm as sellExactOut,KT as setBit,jx as simulatePoolInfoInstruction,Ok as solToWSolToken,gn as splAccountLayout,vO as swapBaseInAutoAccount,Pf as swapBaseInV2Instruction,_O as swapBaseOutAutoAccount,Af as swapBaseOutV2Instruction,Ns as swapInternal,da as toAmmComputePoolInfo,gt as toApiV3Token,Cn as toFeeConfig,Nm as toLaunchpadMintProgramFlag,LT as toSignedI128,Ri as toToken,dt as toTokenAmount,Lk as toTokenInfo,po as toTransferFeeConfig,RT as toggleBit,TT as u128CheckedMul,wT as u128SaturatingAdd,kT as u128SaturatingSub,$r as u16ToBytes,xs as u16ToBytesBE,IT as u256MulDivCeil,BT as u256MulDivFloor,nl as u64ToBytes,ol as u8ToBytes,gM as unionArr,Jp as updateFarmPoolInfo,wm as updatePlatformConfig,Im as updatePlatformCurveRuleIns,HL as usdMintBSet,Us as validateFarmRewards,lf as voterStakeRegistryCreateDepositEntry,cf as voterStakeRegistryCreateVoter,rf as voterStakeRegistryDeposit,af as voterStakeRegistryUpdateVoterWeightRecord,sf as voterStakeRegistryWithdraw,Nk as wSolToSolToken,_s as withdrawRewardLayout,vt as wrappingSubU128,pl as x64ToDecimal};
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
//# sourceMappingURL=index.mjs.map