@raydium-io/raydium-sdk-v2
Version:
An SDK for building applications on top of Raydium.
3 lines • 459 kB
JavaScript
var Ql=Object.defineProperty,Zl=Object.defineProperties;var jl=Object.getOwnPropertyDescriptors;var tr=Object.getOwnPropertySymbols;var uu=Object.prototype.hasOwnProperty,cu=Object.prototype.propertyIsEnumerable;var su=(d,e,t)=>e in d?Ql(d,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):d[e]=t,N=(d,e)=>{for(var t in e||(e={}))uu.call(e,t)&&su(d,t,e[t]);if(tr)for(var t of tr(e))cu.call(e,t)&&su(d,t,e[t]);return d},V=(d,e)=>Zl(d,jl(e));var We=(d,e)=>{var t={};for(var n in d)uu.call(d,n)&&e.indexOf(n)<0&&(t[n]=d[n]);if(d!=null&&tr)for(var n of tr(d))e.indexOf(n)<0&&cu.call(d,n)&&(t[n]=d[n]);return t};import{merge as pf}from"lodash";import Dl from"axios";import{PublicKey as du}from"@solana/web3.js";import{get as lu,set as $l}from"lodash";var ya=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}},mu={},Jl={};function ke(d){let e=lu(mu,d);if(!e){let t=lu(Jl,d);e=new ya({name:d,logLevel:t}),$l(mu,d,e)}return e}import{MINT_SIZE as em,TOKEN_PROGRAM_ID as tm,getTransferFeeConfig as nm,unpackMint as om}from"@solana/spl-token";var ba=ke("Raydium_accountInfo_util");async function yt(d,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=N({batchRequest:!1},t),r=ga(e,i),a=new Array(r.length).fill([]);if(n){let u=r.map(l=>{let m=d._buildArgs([l.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:m}}),s=ga(u,10);a=(await(await Promise.all(s.map(async l=>await d._rpcBatchRequest(l)))).flat()).map(l=>(l.error&&ba.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${l.error.message}`),l.result.value.map(m=>{if(m){let{data:p,executable:f,lamports:y,owner:b,rentEpoch:g}=m;return p.length!==2&&p[1]!=="base64"&&ba.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new du(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(r.map(u=>d.getMultipleAccountsInfo(u,o)))}catch(u){u instanceof Error&&ba.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Me(d,e,t){let n=await yt(d,e.map(o=>o.pubkey),t);return e.map((o,i)=>V(N({},o),{accountInfo:n[i]}))}async function io({connection:d,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await Me(d,e.map(u=>({pubkey:Bt(u)})),t),o={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<em){console.log("invalid mint account",u.pubkey.toBase58());continue}let s=om(u.pubkey,u.accountInfo,(i=u.accountInfo)==null?void 0:i.owner);o[u.pubkey.toString()]=V(N({},s),{programId:((r=u.accountInfo)==null?void 0:r.owner)||tm,feeConfig:(a=nm(s))!=null?a:void 0})}return o[du.default.toBase58()]=o[j.toBase58()],o}import $n from"bn.js";import XK from"decimal.js";import mm from"big.js";import ir from"bn.js";import im from"toformat";var rm=im,ti=rm;import or from"big.js";import sm from"bn.js";import um from"decimal.js-light";import ni from"bn.js";var pu=9007199254740991;function ue(d){let e=ke("Raydium_parseBigNumberish");if(d instanceof ni)return d;if(typeof d=="string"){if(d.match(/^-?[0-9]+$/))return new ni(d);e.logWithError(`invalid BigNumberish string: ${d}`)}return typeof d=="number"?(d%1&&e.logWithError(`BigNumberish number underflow: ${d}`),(d>=pu||d<=-pu)&&e.logWithError(`BigNumberish number overflow: ${d}`),new ni(String(d))):typeof d=="bigint"?new ni(d.toString()):(e.error(`invalid BigNumberish value: ${d}`),new ni(0))}var nr=ke("module/fraction"),Pa=ti(or),oi=ti(um),cm={[0]:oi.ROUND_DOWN,[1]:oi.ROUND_HALF_UP,[2]:oi.ROUND_UP},lm={[0]:or.roundDown,[1]:or.roundHalfUp,[2]:or.roundUp},Ce=class{constructor(e,t=new sm(1)){this.numerator=ue(e),this.denominator=ue(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Ce(this.denominator,this.numerator)}add(e){let t=e instanceof Ce?e:new Ce(ue(e));return this.denominator.eq(t.denominator)?new Ce(this.numerator.add(t.numerator),this.denominator):new Ce(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Ce?e:new Ce(ue(e));return this.denominator.eq(t.denominator)?new Ce(this.numerator.sub(t.numerator),this.denominator):new Ce(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Ce?e:new Ce(ue(e));return new Ce(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Ce?e:new Ce(ue(e));return new Ce(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||nr.logWithError(`${e} is not an integer.`),e<=0&&nr.logWithError(`${e} is not positive.`),oi.set({precision:e+1,rounding:cm[n]});let o=new oi(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)||nr.logWithError(`${e} is not an integer.`),e<0&&nr.logWithError(`${e} is negative.`),Pa.DP=e,Pa.RM=lm[n]||1,new Pa(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var dm=ke("Raydium_amount"),fu=ti(mm);function pm(d,e){let t="0",n="0";if(d.includes(".")){let o=d.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):dm.logWithError(`invalid number string, num: ${d}`)}else t=d;return[t,n.slice(0,e)||n]}var Re=class extends Ce{constructor(t,n,o=!0,i){let r=new ir(0),a=Aa.pow(new ir(t.decimals));if(o)r=ue(n);else{let u=new ir(0),s=new ir(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[c,l]=pm(n.toString(),t.decimals);u=ue(c),s=ue(l)}u=u.mul(a),r=u.add(s)}super(r,a);this.logger=ke(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new Re(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Re(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 fu.DP=this.token.decimals,new fu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as fm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as yu}from"@solana/spl-token";var En={chainId:101,address:fm.default.toBase58(),programId:yu.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:yu.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 ha}from"@solana/web3.js";import{PublicKey as Ye,SystemProgram as bu,SYSVAR_RENT_PUBKEY as ym}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as bm}from"@solana/spl-token";function K({pubkey:d,isSigner:e=!1,isWritable:t=!0}){return{pubkey:d,isWritable:t,isSigner:e}}var wa=[K({pubkey:bm,isWritable:!1}),K({pubkey:bu.programId,isWritable:!1}),K({pubkey:ym,isWritable:!1})];function ka({publicKey:d,transformSol:e}){let t=Ta(d.toString());if(t instanceof Ye)return e&&t.equals(bt)?j:t;if(e&&t.toString()===bt.toBase58())return j;if(typeof t=="string"){if(t===Ye.default.toBase58())return Ye.default;try{return new Ye(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Ta(d){try{return new Ye(d)}catch{return d}}var sn=new Ye("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Ct=new Ye("SysvarRent111111111111111111111111111111111"),ty=new Ye("SysvarC1ock11111111111111111111111111111111"),Pn=new Ye("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),gm=new Ye("Sysvar1nstructions1111111111111111111111111"),gu=bu.programId,ny=new Ye("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),oy=new Ye("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),iy=new Ye("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),ry=new Ye("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),ay=new Ye("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),sy=new Ye("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),uy=new Ye("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),cy=new Ye("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),ly=new Ye("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),my=new Ye("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),dy=new Ye("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new Ye("So11111111111111111111111111111111111111112"),bt=Ye.default;function Bt(d){return ka({publicKey:d,transformSol:!0})}var Ia=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===bt.toBase58()||e instanceof ha&&bt.equals(e)){this.decimals=Kt.decimals,this.symbol=Kt.symbol,this.name=Kt.name,this.mint=new ha(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=i?ha.default:ka({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},qe=Ia;qe.WSOL=new Ia(V(N({},Kt),{mint:Kt.address}));var Ba=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},rr=Ba;rr.SOL=new Ba(En);import Pm from"bn.js";var Pu=new Ce(new Pm(100)),gt=class extends Ce{toSignificant(e=5,t,n){return this.mul(Pu).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Pu).toFixed(e,t,n)}};var Am=ke("Raydium_price"),Mt=class extends Ce{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new Ce(xa(n.decimals),xa(o.decimals))}get raw(){return new Ce(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Mt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Am.logWithError("mul token not equals");let n=super.mul(t);return new Mt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};import{PublicKey as Lm}from"@solana/web3.js";import Tu,{isBN as hu}from"bn.js";import{bits as wm,BitStructure as Ly,blob as km,Blob as Oy,cstr as Ny,f32 as My,f32be as Fy,f64 as vy,f64be as _y,greedy as Vy,Layout as Tm,ns64 as Ey,ns64be as Dy,nu64 as Wy,nu64be as qy,offset as hm,s16 as Uy,s16be as Gy,s24 as zy,s24be as Xy,s32 as Im,s32be as Yy,s40 as Hy,s40be as Qy,s48 as Zy,s48be as jy,s8 as $y,seq as Bm,struct as Jy,Structure as xm,u16 as Sm,u16be as eb,u24 as tb,u24be as nb,u32 as Km,u32be as ob,u40 as ib,u40be as rb,u48 as ab,u48be as sb,u8 as Cm,UInt as Rm,union as ub,Union as cb,unionLayoutDiscriminator as lb,utf8 as mb}from"@solana/buffer-layout";var ar=Tm,Au=xm;var Sa=Rm;var wu=Cm,je=Sm;var ii=Km;var st=Im;var ku=Bm;var Ae=km;var Ka=wm,Ca=hm;var ro=class extends ar{constructor(t,n,o){super(t,o);this.blob=Ae(t),this.signed=n}decode(t,n=0){let o=new Tu(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 Tu(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},sr=class extends ar{constructor(t){super(8,t);this._lower=Ka(ii(),!1),this._upper=Ka(ii(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return N(N({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function D(d){return new Sa(1,d)}function Ue(d){return new Sa(4,d)}function w(d){return new ro(8,!1,d)}function ce(d){return new ro(16,!1,d)}function Iu(d){return new ro(1,!0,d)}function xo(d){return new ro(8,!0,d)}function Bu(d){return new ro(16,!0,d)}var ao=class extends ar{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function M(d){return new ao(Ae(32),e=>new Lm(e),e=>e.toBuffer(),d)}function He(d){return new ao(wu(),Om,Nm,d)}function Om(d){if(d===0)return!1;if(d===1)return!0;throw new Error("Invalid bool: "+d)}function Nm(d){return d?1:0}function xu(d,e){let t=ii("length"),n=v([t,$(d,Ca(t,-t.span),"values")]);return new ao(n,({values:o})=>o,o=>({values:o}),e)}function Mm(d){let e=ii("length"),t=v([e,Ae(Ca(e,-e.span),"data")]);return new ao(t,({data:n})=>n,n=>({data:n}),d)}function Et(d){return new ao(Mm(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),d)}var Ra=class extends Au{decode(e,t){return super.decode(e,t)}};function v(d,e,t){return new Ra(d,e,t)}function $(d,e,t){let n,o=typeof e=="number"?e:hu(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=hu(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,r)},set(i,r,a){return r==="count"&&(n=a),Reflect.set(i,r,a)}});return ku(d,o,t)}var Kn=v([M("mint"),M("owner"),w("amount"),Ue("delegateOption"),M("delegate"),D("state"),Ue("isNativeOption"),w("isNative"),w("delegatedAmount"),Ue("closeAuthorityOption"),M("closeAuthority")]);import{Keypair as Em,PublicKey as Ou}from"@solana/web3.js";import Dm from"bn.js";import{TOKEN_PROGRAM_ID as Wm}from"@solana/spl-token";function Fm(d){return d instanceof Uint8Array||d!=null&&typeof d=="object"&&d.constructor.name==="Uint8Array"}function La(d,...e){if(!Fm(d))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(d.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${d.length}`)}function Oa(d,e=!0){if(d.destroyed)throw new Error("Hash instance has been destroyed");if(e&&d.finished)throw new Error("Hash#digest() has already been called")}function Su(d,e){La(d);let t=e.outputLen;if(d.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var cr=d=>new DataView(d.buffer,d.byteOffset,d.byteLength),un=(d,e)=>d<<32-e|d>>>e;var Bb=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function vm(d){if(typeof d!="string")throw new Error(`utf8ToBytes expected string, got ${typeof d}`);return new Uint8Array(new TextEncoder().encode(d))}function Na(d){return typeof d=="string"&&(d=vm(d)),La(d),d}var ur=class{clone(){return this._cloneInto()}},xb={}.toString;function Ku(d){let e=n=>d().update(Na(n)).digest(),t=d();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>d(),e}function _m(d,e,t,n){if(typeof d.setBigUint64=="function")return d.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),r=Number(t>>o&i),a=Number(t&i),u=n?4:0,s=n?0:4;d.setUint32(e+u,r,n),d.setUint32(e+s,a,n)}var Cu=(d,e,t)=>d&e^~d&t,Ru=(d,e,t)=>d&e^d&t^e&t,lr=class extends ur{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=cr(this.buffer)}update(e){Oa(this);let{view:t,buffer:n,blockLen:o}=this;e=Na(e);let i=e.length;for(let r=0;r<i;){let a=Math.min(o-this.pos,i-r);if(a===o){let u=cr(e);for(;o<=i-r;r+=o)this.process(u,r);continue}n.set(e.subarray(r,r+a),this.pos),this.pos+=a,r+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Oa(this),Su(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:r}=this;t[r++]=128,this.buffer.subarray(r).fill(0),this.padOffset>o-r&&(this.process(n,0),r=0);for(let l=r;l<o;l++)t[l]=0;_m(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=cr(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let s=u/4,c=this.get();if(s>c.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l<s;l++)a.setUint32(4*l,c[l],i)}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:i,destroyed:r,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=r,o%t&&e.buffer.set(n),e}};var Vm=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]),Dn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Wn=new Uint32Array(64),Ma=class extends lr{constructor(){super(64,32,8,!1),this.A=Dn[0]|0,this.B=Dn[1]|0,this.C=Dn[2]|0,this.D=Dn[3]|0,this.E=Dn[4]|0,this.F=Dn[5]|0,this.G=Dn[6]|0,this.H=Dn[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:r,G:a,H:u}=this;return[e,t,n,o,i,r,a,u]}set(e,t,n,o,i,r,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=r|0,this.G=a|0,this.H=u|0}process(e,t){for(let l=0;l<16;l++,t+=4)Wn[l]=e.getUint32(t,!1);for(let l=16;l<64;l++){let m=Wn[l-15],p=Wn[l-2],f=un(m,7)^un(m,18)^m>>>3,y=un(p,17)^un(p,19)^p>>>10;Wn[l]=y+Wn[l-7]+f+Wn[l-16]|0}let{A:n,B:o,C:i,D:r,E:a,F:u,G:s,H:c}=this;for(let l=0;l<64;l++){let m=un(a,6)^un(a,11)^un(a,25),p=c+m+Cu(a,u,s)+Vm[l]+Wn[l]|0,y=(un(n,2)^un(n,13)^un(n,22))+Ru(n,o,i)|0;c=s,s=u,u=a,a=r+p|0,r=i,i=o,o=n,n=p+y|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,r=r+this.D|0,a=a+this.E|0,u=u+this.F|0,s=s+this.G|0,c=c+this.H|0,this.set(n,o,i,r,a,u,s,c)}roundClean(){Wn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Lu=Ku(()=>new Ma);function Nu({owner:d,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:r}of t.value){let a=Kn.decode(r.data),{mint:u,amount:s}=a;n.push({publicKey:i,mint:u,amount:s,isAssociated:te(d,u,r.owner).publicKey.equals(i),isNative:!1,programId:r.owner}),o.push({pubkey:i,accountInfo:a,programId:r.owner})}return e&&n.push({mint:Ou.default,amount:new Dm(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function $e({fromPublicKey:d,programId:e=Wm,assignSeed:t}){let n=t?btoa(t).slice(0,32):Em.generate().publicKey.toBase58().slice(0,32);return{publicKey:qm(d,n,e),seed:n}}function qm(d,e,t){let n=Buffer.concat([d.toBuffer(),Buffer.from(e),t.toBuffer()]),o=Lu(n);return new Ou(o)}import{PublicKey as Um,SystemProgram as Gm}from"@solana/web3.js";import zm from"bn.js";import{createCloseAccountInstruction as Xm,createInitializeAccountInstruction as Ym,createTransferInstruction as Hm,TOKEN_PROGRAM_ID as So}from"@solana/spl-token";var X={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"};function Fa(d){let{mint:e,tokenAccount:t,owner:n,programId:o=So}=d;return Ym(t,e,n,o)}function Cn(d){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=So}=d;return Xm(e,t,o,n,i)}async function qn(d){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:r}=d,a=await e.getMinimumBalanceForRentExemption(Kn.span,n),u=ue(t).add(new zm(a)),s=$e({fromPublicKey:o,programId:So});return{addresses:{newAccount:s.publicKey},signers:[],instructions:[Gm.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:s.seed,newAccountPubkey:s.publicKey,lamports:u.toNumber(),space:Kn.span,programId:So}),Fa({mint:new Um(Kt.address),tokenAccount:s.publicKey,owner:i,programId:So})],instructionTypes:[X.CreateAccount,X.InitAccount],endInstructionTypes:r?[]:[X.CloseAccount],endInstructions:r?[]:[Cn({tokenAccount:s.publicKey,payer:o,owner:i})]}}function Mu({source:d,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=So}){return Hm(d,e,t,BigInt(String(n)),o,i)}import{PublicKey as _a}from"@solana/web3.js";import{PublicKey as le}from"@solana/web3.js";var Fu=new le("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),vu=new le("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),_u=new le("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),ri=new le("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),mg=new le("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Vu=new le("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),va=new le("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),mr=new le("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),dg=new le("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Eu=new le("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Rn=new le("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ai=new le("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),dr=new le("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),so=new le("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),pg=new le("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Du=new le("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Un=new le("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Wu=new le("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),fg=new le("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),si=new le("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),pr=new le("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),nt=new le("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),yg=new le("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),bg=new le("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),gg=new le("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Pg=new le("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Ag=new le("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX");var cn={OPEN_BOOK_PROGRAM:new le("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new le("Ray1111111111111111111111111111111111111111"),AMM_V4:new le("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new le("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new le("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new le("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new le("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new le("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new le("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new le("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new le("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new le("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:le.default,Router:new le("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new le("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new le("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new le("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new le("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new le("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new le("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new le("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new le("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new le("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new le("Ray1111111111111111111111111111111111111111")};import{NATIVE_MINT as Kg}from"@solana/spl-token";var Cg=ke("Raydium_farm_config"),qu=new _a("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Uu=new _a("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var Rg=new _a("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX"),fr={3:Gu,5:zu,6:ci},ui={3:Da,5:Xu,6:Yu},Va=d=>[3,4,5,6].indexOf(d)!==-1,Ea=d=>{var r;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=d,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={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(r=i[e])==null?void 0:r.call(i)},Gn={"Standard SPL":0,"Option tokens":1},Yt={[Fu.toString()]:3,[vu.toString()]:4,[_u.toString()]:5,[ri.toString()]:6,[cn.FARM_PROGRAM_ID_V3.toString()]:3,[cn.FARM_PROGRAM_ID_V4.toString()]:4,[cn.FARM_PROGRAM_ID_V5.toString()]:5,[cn.FARM_PROGRAM_ID_V6.toString()]:6};var Wa=v([D("instruction")]),qa=v([D("instruction")]),Qm=v([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),ce("accRewardPerShare"),M("rewardVault"),M("rewardMint"),M("rewardSender"),w("rewardType"),$(w(),15,"padding")]),Zm=v([w("state"),w("nonce"),M("lpVault"),M("rewardVault"),M(),M(),w(),w(),w("totalReward"),ce("perShareReward"),w("lastSlot"),w("perSlotReward")]),jm=v([w("state"),w("nonce"),M("lpVault"),M("rewardVaultA"),w("totalRewardA"),ce("perShareRewardA"),w("perSlotRewardA"),D("option"),M("rewardVaultB"),Ae(7),w("totalRewardB"),ce("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),M()]),$m=v([w(),w("state"),w("nonce"),w("validRewardTokenNum"),ce("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),M("lpMint"),M("lpVault"),$(Qm,5,"rewardInfos"),M("creator"),M(),$(w(),32,"padding")]),Gu=new Proxy(Zm,{get(d,e,t){return e==="decode"?(...n)=>{let o=d.decode(...n);return V(N({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(d,e,t)}}),zu=new Proxy(jm,{get(d,e,t){return e==="decode"?(...n)=>{let o=d.decode(...n);return V(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(d,e,t)}}),ci=new Proxy($m,{get(d,e,t){return e==="decode"?(...n)=>{let o=d.decode(...n);return V(N({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return V(N({},i),{rewardType:((r=Object.entries(Gn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(d,e,t)}}),Jm=v([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Ua=v([D("instruction"),w("nonce"),$(Jm,5,"rewardTimeInfo")]),Ga=v([D("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),za=v([D("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),_g=v([w("state"),M("id"),M("owner"),w("deposited"),$(w(),1,"rewardDebts")]),Da=v([w("state"),M("id"),M("owner"),w("deposited"),$(ce(),1,"rewardDebts"),w(""),w("voteLockedBalance"),$(w(),15)]),Vg=v([w("state"),M("id"),M("owner"),w("deposited"),$(w(),2,"rewardDebts")]),Xu=v([w("state"),M("id"),M("owner"),w("deposited"),$(ce(),2,"rewardDebts"),$(w(),17)]),Yu=v([w(),w("state"),M("id"),M("owner"),w("deposited"),$(ce(),5,"rewardDebts"),$(w(),16)]),Ht=v([D("instruction"),w("amount")]),ed=v([M("mint"),M("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Iu("digitShift"),$(D(),7,"reserved1"),$(w(),7,"reserved2")]),td=v([Ae(8),M("governanceProgramId"),M("realm"),M("realmGoverningTokenMint"),M("realmAuthority"),$(D(),32,"reserved1"),$(ed,4,"votingMints"),xo("timeOffset"),D("bump"),$(D(),7,"reserved2"),$(w(),11,"reserved3")]),nd=v([xo("startTime"),xo("endTime"),D("kind"),$(D(),15,"reserved")]),od=v([$(nd,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),He("isUsed"),He("allowClawback"),D("votingMintConfigIdx"),$(D(),29,"reserved")]),id=v([Ae(8),M("voterAuthority"),M("registrar"),$(od,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),$(D(),94,"reserved")]);import pd from"bn.js";import{ComputeBudgetProgram as Hu,Keypair as Zu,PublicKey as rd,Transaction as ju,TransactionMessage as ad,VersionedTransaction as $u}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sd}from"@solana/spl-token";var Qu=ke("Raydium_txUtil"),Ju=1644;function yr(d){let e=[],t=[];return d.microLamports&&(e.push(Hu.setComputeUnitPrice({microLamports:d.microLamports})),t.push(X.SetComputeUnitPrice)),d.units&&(e.push(Hu.setComputeUnitLimit({units:d.units})),t.push(X.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Ko(d,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=d.getLatestBlockhash)==null?void 0:n.call(d,{commitment:t})))==null?void 0:o.blockhash}async function br(d,e){return d.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);d.onSignature(e,i=>{if(clearTimeout(o),!i.err){t("");return}n(Object.assign(i.err,{txId:e}))},"confirmed")})}function Xa(d,e){d.length<1&&Qu.logWithError(`no instructions provided: ${d.toString()}`),e.length<1&&Qu.logWithError(`no signers provided:, ${e.toString()}`);let t=new ju;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...d);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Ju}catch{return!1}}function se(d,e){let[t,n]=rd.findProgramAddressSync(d,e);return{publicKey:t,nonce:n}}function li({instructions:d,payer:e,signers:t}){return Xa(d,[e,...t])}function mi({instructions:d,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Zu.generate().publicKey.toString()}){let i=new ad({payerKey:e,recentBlockhash:n,instructions:d}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new $u(i).serialize()).toString("base64").length<Ju}catch{return!1}}var ud=d=>Buffer.isBuffer(d)?d:d instanceof Uint8Array?Buffer.from(d.buffer,d.byteOffset,d.byteLength):Buffer.from(d),cd=d=>{let e=d.serialize({requireAllSignatures:!1,verifySignatures:!1});d instanceof $u&&(e=ud(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function uo(d){let e=[];return d.forEach(t=>{t instanceof ju&&(t.recentBlockhash||(t.recentBlockhash=sd.toBase58()),t.feePayer||(t.feePayer=Zu.generate().publicKey)),e.push(cd(t))}),console.log("simulate tx string:",e),e}import{PublicKey as ld}from"@solana/web3.js";import md from"bn.js";function dd(d){return typeof d=="object"&&d!==null&&![qe,Re,ld,Ce,md,Mt,gt].some(e=>typeof e=="object"&&d instanceof e)}function Ft(d){return typeof d=="string"?Ta(d):Array.isArray(d)?d.map(e=>Ft(e)):dd(d)?Object.fromEntries(Object.entries(d).map(([e,t])=>[e,Ft(t)])):d}var fd=ke("Raydium.farm.util");function di({programId:d,poolId:e,mint:t,type:n}){let{publicKey:o}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],d);return o}function $t({programId:d,poolId:e,owner:t,version:n}){let{publicKey:o}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],d);return o}var ec=({programId:d,poolId:e})=>se([e.toBuffer()],d);function tc(d){return{isSet:new pd(1),rewardPerSecond:ue(d.perSecond),rewardOpenTime:ue(d.openTime),rewardEndTime:ue(d.endTime),rewardType:ue(Gn[d.rewardType])}}function Ya(d){return ue(d.endTime).sub(ue(d.openTime)).mul(ue(d.perSecond))}function pi(d){let e=ui[d];return e||fd.logWithError("invalid version",d),e}import{PublicKey as we,SystemProgram as nc,SYSVAR_CLOCK_PUBKEY as fi,SYSVAR_RENT_PUBKEY as gd,TransactionInstruction as Jt}from"@solana/web3.js";import oc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as UP,createAssociatedTokenAccountIdempotentInstruction as GP,TOKEN_PROGRAM_ID as Ln}from"@solana/spl-token";import{PublicKey as yd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as bd}from"@solana/spl-token";function te(d,e,t){return se([d.toBuffer(),(t!=null?t:bd).toBuffer(),e.toBuffer()],new yd("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}var Pd=ke("Raydium_farm_instruction"),tA={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 yi(d){let{version:e,id:t,ledger:n,programId:o,owner:i}=d,r={3:9,5:10}[e];r||Pd.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Wa.span);Wa.encode({instruction:r},a);let u=[K({pubkey:t}),K({pubkey:n}),K({pubkey:i,isWritable:!1}),K({pubkey:nc.programId,isWritable:!1}),K({pubkey:gd,isWritable:!1})];return{instruction:new Jt({programId:o,keys:u,data:a}),instructionType:X.FarmV3CreateLedger}}function ic(d){var n;let e=Buffer.alloc(Ua.span);Ua.encode({instruction:0,nonce:new oc(d.nonce),rewardTimeInfo:d.rewardInfoConfig},e);let t=[...wa,K({pubkey:d.farmId}),K({pubkey:d.farmAuthority,isWritable:!1}),K({pubkey:d.lpVault}),K({pubkey:d.lpMint,isWritable:!1}),K({pubkey:d.lockVault}),K({pubkey:d.lockMint,isWritable:!1}),K({pubkey:(n=d.lockUserAccount)!=null?n:bt}),K({pubkey:d.owner,isWritable:!1,isSigner:!0})];for(let o of d.rewardInfo)t.push(K({pubkey:o.rewardMint,isWritable:!1}),K({pubkey:o.rewardVault}),K({pubkey:o.userRewardToken}));return{instruction:new Jt({programId:d.programId,keys:t,data:e}),instructionType:X.FarmV6Create}}function rc(d){let e=Buffer.alloc(qa.span);qa.encode({instruction:5},e);let t=[K({pubkey:Ln,isWritable:!1}),K({pubkey:d.id}),K({pubkey:d.authority,isWritable:!1}),K({pubkey:d.lpVault,isWritable:!1}),K({pubkey:d.rewardVault}),K({pubkey:d.userRewardToken}),K({pubkey:d.owner,isWritable:!1,isSigner:!0})];return{instruction:new Jt({programId:d.programId,keys:t,data:e}),instructionType:X.FarmV6CreatorWithdraw}}function Ha({payer:d,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(Ga.span);Ga.encode({instruction:3,rewardReopenTime:ue(o.openTime),rewardEndTime:ue(o.endTime),rewardPerSecond:ue(o.perSecond)},i);let r=[K({pubkey:Ln,isWritable:!1}),K({pubkey:n.id}),K({pubkey:n.lpVault,isWritable:!1}),K({pubkey:e}),K({pubkey:t}),K({pubkey:d,isWritable:!1,isSigner:!0})];return new Jt({programId:n.programId,keys:r,data:i})}function Qa({payer:d,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(za.span);za.encode({instruction:4,isSet:new oc(1),rewardPerSecond:ue(o.perSecond),rewardOpenTime:ue(o.openTime),rewardEndTime:ue(o.endTime),rewardType:ue(Gn[o.rewardType])},i);let r=[...wa,K({pubkey:t.id}),K({pubkey:t.authority,isWritable:!1}),K({pubkey:o.mint,isWritable:!1}),K({pubkey:n}),K({pubkey:e}),K({pubkey:d,isWritable:!1,isSigner:!0})];return new Jt({programId:t.programId,keys:r,data:i})}function bi(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=d,[a,u]=[new we(e.programId),new we(e.id)],s=$t({programId:a,poolId:u,owner:i,version:6}),c=Buffer.alloc(Ht.span);Ht.encode({instruction:2,amount:ue(r)},c);let l=[K({pubkey:Ln,isWritable:!1}),K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:new we(t.lpVault)}),K({pubkey:s}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n})];for(let m=0;m<t.rewardInfos.length;m++)l.push(K({pubkey:new we(t.rewardInfos[m].vault)})),l.push(K({pubkey:o[m]}));return new Jt({programId:a,keys:l,data:c})}function gi(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=d,[u,s]=[new we(e.programId),new we(e.id)],c=$t({programId:u,poolId:s,owner:i,version:5}),l=Buffer.alloc(Ht.span);Ht.encode({instruction:12,amount:ue(r)},l);let m=[K({pubkey:s}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:c}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:fi,isWritable:!1}),K({pubkey:Ln,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)m.push(K({pubkey:o[p]})),m.push(K({pubkey:new we(t.rewardInfos[p].vault)}));if(a)for(let p of a)m.push(K({pubkey:p}));return new Jt({programId:u,keys:m,data:l})}function ac(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=d,[u,s]=[new we(e.programId),new we(e.id)],c=v([D("instruction"),w("amount")]),l=[K({pubkey:s}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:a[0]}),K({pubkey:i,isSigner:!0,isWritable:!1}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:fi,isWritable:!1}),K({pubkey:Ln,isWritable:!1}),K({pubkey:o[1]}),K({pubkey:new we(t.rewardInfos[1].vault)})],m=Buffer.alloc(c.span);return c.encode({instruction:2,amount:r},m),new Jt({keys:l,programId:u,data:m})}function Pi(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=d,[u,s]=[new we(e.programId),new we(e.id)],c=$t({programId:u,poolId:s,owner:i,version:3}),l=Buffer.alloc(Ht.span);Ht.encode({instruction:11,amount:ue(r)},l);let m=[K({pubkey:s}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:c}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:fi,isWritable:!1}),K({pubkey:Ln,isWritable:!1})];if(a)for(let p of a)m.push(K({pubkey:p}));return new Jt({programId:u,keys:m,data:l})}function sc(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=d,[u,s]=[new we(e.programId),new we(e.id)],c=$t({programId:u,poolId:s,owner:i,version:3}),l=Buffer.alloc(Ht.span);Ht.encode({instruction:10,amount:ue(r)},l);let m=[K({pubkey:s}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:c}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:fi,isWritable:!1}),K({pubkey:Ln,isWritable:!1})];if(a)for(let p of a)m.push(K({pubkey:p}));return new Jt({programId:u,keys:m,data:l})}function uc(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=d,[u,s]=[new we(e.programId),new we(e.id)],c=$t({programId:u,poolId:s,owner:i,version:5}),l=Buffer.alloc(Ht.span);Ht.encode({instruction:11,amount:ue(r)},l);let m=[K({pubkey:s}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:c}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:fi,isWritable:!1}),K({pubkey:Ln,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)m.push(K({pubkey:o[p]})),m.push(K({pubkey:new we(t.rewardInfos[p].vault)}));if(a)for(let p of a)m.push(K({pubkey:p}));return new Jt({programId:u,keys:m,data:l})}function cc(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=d,[a,u]=[new we(e.programId),new we(e.id)],s=$t({programId:a,poolId:u,owner:i,version:6}),c=Buffer.alloc(Ht.span);Ht.encode({instruction:1,amount:ue(r)},c);let l=[K({pubkey:Ln,isWritable:!1}),K({pubkey:nc.programId,isWritable:!1}),K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:new we(t.lpVault)}),K({pubkey:s}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n})];for(let m=0;m<t.rewardInfos.length;m++)l.push(K({pubkey:new we(t.rewardInfos[m].vault)})),l.push(K({pubkey:o[m]}));return new Jt({programId:a,keys:l,data:c})}var Ad=v([Ue("mintAuthorityOption"),M("mintAuthority"),w("supply"),D("decimals"),D("isInitialized"),Ue("freezeAuthorityOption"),M("freezeAuthority")]);import{TOKEN_PROGRAM_ID as fA}from"@solana/spl-token";import{PublicKey as PA}from"@solana/web3.js";var Ai=d=>new qe({mint:d.address,decimals:d.decimals,symbol:d.symbol,name:d.name}),ut=o=>{var i=o,{amount:d,isRaw:e,name:t}=i,n=We(i,["amount","isRaw","name"]);return new Re(new qe({mint:Bt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),d,e,t)};var dt=o=>{var i=o,{address:d,programId:e,decimals:t}=i,n=We(i,["address","programId","decimals"]);return N({chainId:101,address:Bt(d).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},An=d=>d?V(N({},d),{transferFeeConfigAuthority:d.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:d.withdrawWithheldAuthority.toBase58(),withheldAmount:d.withheldAmount.toString(),olderTransferFee:V(N({},d.olderTransferFee),{epoch:d.olderTransferFee.epoch.toString(),maximumFee:d.olderTransferFee.maximumFee.toString()}),newerTransferFee:V(N({},d.newerTransferFee),{epoch:d.newerTransferFee.epoch.toString(),maximumFee:d.newerTransferFee.maximumFee.toString()})}):void 0;import{PublicKey as de,SystemProgram as Rl}from"@solana/web3.js";import{createTransferInstruction as Ll,TOKEN_PROGRAM_ID as ve,TOKEN_2022_PROGRAM_ID as Yo,createAssociatedTokenAccountIdempotentInstruction as Ho,createSyncNativeInstruction as Ol,createTransferCheckedInstruction as Hp}from"@solana/spl-token";import Pe from"bn.js";import xe from"decimal.js";import{createAssociatedTokenAccountIdempotentInstruction as vn,TOKEN_2022_PROGRAM_ID as nn,TOKEN_PROGRAM_ID as Do}from"@solana/spl-token";import{PublicKey as G}from"@solana/web3.js";import at from"bn.js";import _n from"decimal.js";import{PublicKey as Oo,sendAndConfirmTransaction as es,SystemProgram as wd,Transaction as wi,TransactionMessage as ki,VersionedTransaction as Ti}from"@solana/web3.js";import kd from"axios";import{PublicKey as Za,AddressLookupTableAccount as Lo}from"@solana/web3.js";async function ja({connection:d,address:e,cluster:t="mainnet"}){let n=await yt(d,[...new Set(e.map(i=>i.toString()))].map(i=>new Za(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let u=new Lo({key:a,state:Lo.deserialize(r.data)});o[a.toString()]=u,t==="devnet"?Ro[a.toString()]=u:Co[a.toString()]=u}return o}var Co={},$a=async d=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Co[e])return Co;let t=new Za(e),n=await d.getAccountInfo(t);return n&&(Co[e]=new Lo({key:t,state:Lo.deserialize(n.data)})),Co},Ro={},Ja=async d=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Ro[e])return Ro;let t=new Za(e),n=await d.getAccountInfo(t);return n&&(Ro[e]=new Lo({key:t,state:Lo.deserialize(n.data)})),Ro};var gr=2e3,Pr=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 kd.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}=yr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(wd.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Oo(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(X.TransferTip),!0):!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:r=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...r.filter(a=>a!==Oo.default.toString())),this}async versionBuild({txVersion:e,extInfo:t,lookupTableAddress:n}){return e===0?await this.buildV0(V(N({},t||{}),{lookupTableAddress:n})):this.build(t)}build(e){var n;let t=new wi;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 c;let{recentBlockHash:i,skipPreflight:r=!0,sendAndConfirm:a,notSendToRpc:u}=o||{},s=i!=null?i:await Ko(this.connection,this.blockhashCommitment);if(t.recentBlockhash=s,this.signers.length&&t.sign(...this.signers),uo([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await es(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:r}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:r}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);if(this.signers.length)for(let m of l)try{m.sign(...this.signers)}catch{}return{txId:u?"":await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:r}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var s;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(c=>c.transaction.instructions.length>0),r=[o,...i.map(c=>c.transaction)],a=[this.signers,...i.map(c=>c.signers)],u=[...this.instructionTypes,...i.map(c=>c.instructionTypes).flat()];return(s=this.owner)!=null&&s.signer&&a.forEach(c=>{c.some(l=>l.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:u,execute:async c=>{var g;let{sequentially:l,onTxUpdate:m,skipTxCount:p=0,recentBlockHash:f,skipPreflight:y=!0}=c||{},b=f!=null?f:await Ko(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(l){let A=[],k=0;for(let h of r){if(++k,k<=p)continue;let P=await es(this.connection,h,this.signers.find(T=>T.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});A.push(P)}return{txIds:A,signedTxs:r}}return{txIds:await await Promise.all(r.map(async A=>(A.recentBlockhash=b,await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:y})))),signedTxs:r}}if(this.signAllTransactions){let A=r.map((h,P)=>(h.recentBlockhash=b,a[P].length&&h.sign(...a[P]),h));uo(A);let k=await this.signAllTransactions(A);if(l){let h=0,P=[],T=async()=>{if(!k[h])return;let I=await this.connection.sendRawTransaction(k[h].serialize(),{skipPreflight:y});P.push({txId:I,status:"sent",signedTx:k[h]}),m==null||m([...P]),h++;let x=!1,S=null,B=null,R=L=>{S!==null&&clearInterval(S),B!==null&&this.connection.removeSignatureListener(B);let O=P.findIndex(C=>C.txId===I);if(O>-1){if(P[O].status==="error"||P[O].status==="success")return;P[O].status=L.err?"error":"success"}m==null||m([...P]),L.err||T()};this.loopMultiTxStatus&&(S=setInterval(async()=>{var L;if(x){clearInterval(S);return}try{let O=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});O&&(x=!0,clearInterval(S),R({err:((L=O.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",I))}catch(O){x=!0,clearInterval(S),console.error("getTransaction timeout:",O,I)}},gr)),B=this.connection.onSignature(I,L=>{if(x){this.connection.removeSignatureListener(B);return}x=!0,R(L)},"confirmed"),this.connection.getSignatureStatus(I)};return await T(),{txIds:P.map(I=>I.txId),signedTxs:k}}else{let h=[];for(let P=0;P<k.length;P+=1){let T=await this.connection.sendRawTransaction(k[P].serialize(),{skipPreflight:y});h.push(T)}return{txIds:h,signedTxs:k}}}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:i}=f,r=We(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=N(N({},this.cluster==="devnet"?await Ja(this.connection):await $a(this.connection)),t),u=Array.from(new Set([...n,...this.lookupTableAddress])),s=[];for(let b of u)a[b]===void 0&&s.push(new Oo(b));let c=await ja({connection:this.connection,address:s});for(let[b,g]of Object.entries(c))a[b]=g;let l=o?Oo.default.toBase58():i!=null?i:await Ko(this.connection,this.blockhashCommitment),m=new ki({payerKey:this.feePayer,recentBlockhash:l,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 p=new Ti(m);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var h;let{skipPreflight:g=!0,sendAndConfirm:A,notSendToRpc:k}=b||{};if(uo([p]),(h=this.owner)!=null&&h.isKeyPair){let P=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await br(this.connection,P),{txId:P,signedTx:p}}if(this.signAllTransactions){let P=await this.signAllTransactions([p]);if(this.signers.length)for(let T of P)try{T.sign(this.signers)}catch{}return{txId:k?"":await this.connection.sendTransaction(P[0],{skipPreflight:g}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}async buildV0MultiTx(e){var s;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(c=>c.builder.instructions.length>0),r=[o,...i.map(c=>c.transaction)],a=[this.signers,...i.map(c=>c.signers)],u=[...this.instructionTypes,...i.map(c=>c.instructionTypes).flat()];return(s=this.owner)!=null&&s.signer&&a.forEach(c=>{c.some(l=>l.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),r.forEach(async(c,l)=>{c.sign(a[l])}),{builder:this,transactions:r,signers:a,instructionTypes:u,buildProps:n,execute:async c=>{var y;let{sequentially:l,onTxUpdate:m,recentBlockHash:p,skipPreflight:f=!0}=c||{};if(p&&r.forEach(b=>b.message.recentBlockhash=p),uo(r),(y=this.owner)!=null&&y.isKeyPair){if(l){let b=[];for(let g of r){let A=await this.connection.sendTransaction(g,{skipPreflight:f});await br(this.connection,A),b.push(A)}return{txIds:b,signedTxs:r}}return{txIds:await Promise.all(r.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:f}))),signedTxs:r}}if(this.signAllTransactions){let b=await this.signAllTransactions(r);if(l){let g=0,A=[],k=async()=>{if(!b[g])return;let h=await this.connection.sendTransaction(b[g],{skipPreflight:f});A.push({txId:h,status:"sent",signedTx:b[g]}),m==null||m([...A]),g++;let P=!1,T=null,I=null,x=S=>{T!==null&&clearInterval(T),I!==null&&this.connection.removeSignatureListener(I);let B=A.findIndex(R=>R.txId===h);if(B>-1){if(A[B].status==="error"||A[B].status==="success")return;A[B].status=S.err?"error":"success"}m==null||m([...A]),S.err||k()};this.loopMultiTxStatus&&(T=setInterval(async()=>{var S;if(P){clearInterval(T);return}try{let B=await this.connection.getTransaction(h,{commitment:"confirmed",maxSupportedTransactionVersion:0});B&&(P=!0,clearInterval(T),x({err:((S=B.meta)==null?void 0:S.err)||null}),console.log("tx status from getTransaction:",h))}catch(B){P=!0,clearInterval(T),console.error("getTransaction timeout:",B,h)}},gr)),I=this.connection.onSignature(h,S=>{if(P){this.connection.removeSignatureListener(I);return}P=!0,x(S)},"confirmed"),this.connection.getSignatureStatus(h)};return k(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let k=await this.connection.sendTransaction(b[A],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var m;let l=e||{},{splitIns:t=[],computeBudgetConfig:n}=l,o=We(l,["splitIns","computeBudgetConfig"]),i=n?yr(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,f)=>V(N({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],u=[],s=[],c=0;if(this.allInstructions.forEach(p=>{let f=[...s,p],y=n?[...i.instructions,...f]:f,g=[...new Set(f.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(A=>new Oo(A));if(p!==t[c]&&s.length<12&&(li({instructions:y,payer:this.feePayer,signers:g})||li({instructions:f,payer:this.feePayer,signers:g})))s.push(p);else{if(s.length===0)throw Error("item ins too big");c+=p===t[c]?1:0,li({instructions:n?[...i.instructions,...s]:[...s],payer:this.feePayer,signers:g})?a.push(new wi().add(...i.instructions,...s)):a.push(new wi().add(...s)),u.push(Array.from(new Set(s.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(A=>r[A]).filter(A=>A!==void 0)),s=[p]}}),s.length>0){let f=[...new Set(s.map(y=>y.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(y=>r[y]).filter(y=>y!==void 0);li({instructions:n?[...i.instructions,...s]:[...s],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new wi().add(...i.instructions,...s)):a.push(new wi().add(...s)),u.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(m=this.owner)!=null&&m.signer&&u.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:u,instructionTypes:this.instructionTypes,execute:async p=>{var h;let{sequentially:f,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:g,skipPreflight:A=!0}=p||{},k=g!=null?g:await Ko(this.connection,this.blockhashCommitment);if(a.forEach(async(P,T)=>{P.recentBlockhash=k,u[T].length&&P.sign(...u[T])}),uo(a),(h=this.owner)!=null&&h.isKeyPair){if(f){let P=0,T=[];for(let I of a){if(++P,P<=b){T.push("tx skipped");continue}let x=await es(this.connection,I,this.signers.find(S=>S.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});T.push(x)}return{txIds:T,signedTxs:a}}return{txIds:await Promise.all(a.map(async P=>await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let P=await this.signAllTransactions(a.slice(b,a.length)),T=[...a.slice(0,b),...P];if(f){let I=0,x=[],S=async()=>{if(!T[I])return;I<b&&(x.push({txId:"",status:"success",signedTx:T[I]}),y==null||y([...x]),I++,S());let B=await this.connection.sendRawTransaction(T[I].serialize(),{skipPreflight:A});x.push({txId:B,status:"sent",signedTx:T[I]}),y==null||y([...x]),I++;let R=!1,L=null,O=null,C=F=>{L!==null&&clearInterval(L),O!==null&&this.connection.removeSignatureListener(O);let E=x.findIndex(_=>_.txId===B);if(E>-1){if(x[E].status==="error"||x[E].status==="success")return;x[E].status=F.err?"error":"success"}y==null||y([...x]),F.err||S()};this.loopMultiTxStatus&&(L=setInterval(async()=>{var F;if(R){clearInterval(L);return}try{let E=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:0});E&&(R=!0,clearInterval(L),C({err:((F=E.meta)==null?void 0:F.err)||null}),console.log("tx status from getTransaction:",B))}catch(E){R=!0,clearInterval(L),console.error("getTransaction timeout:",E,B)}},gr)),O=this.connection.onSignature(B,F=>{if(R){this.connection.removeSignatureListener(O);return}R=!0,C(F)},"confirmed"),this.connection.getSignatureStatus(B)};return await S(),{txIds:x.map(B=>B.txId),signedTxs:T}}else{let I=[];for(let x=0;x<T.length;x+=1){let S=await this.connection.sendRawTransaction(T[x].serialize(),{skipPreflight:A});I.push(S)}return{txIds:I,signedTxs:T}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var h;let k=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[],insCountLimit:r=12}=k,a=We(k,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress","insCountLimit"]),u=N(N({},this.cluster==="devnet"?await Ja(this.connection):await $a(this.connection)),o),s=Array.from(new Set([...this.lookupTableAddress,...i])),c=[];for(let P of s)u[P]===void 0&&c.push(new Oo(P));let l=await ja({connection:this.connection,address:c});for(let[P,T]of Object.entries(l))u[P]=T;let m=t?yr(t):{instructions:[],instructionTypes:[]},p=await Ko(this.connection,this.blockhashCommitment),f=this.signers.reduce((P,T)=>V(N({},P),{[T.publicKey.toBase58()]:T}),{}),y=[],b=[],g=[],A=0;if(this.allInstructions.forEach(P=>{let T=[...g,P],I=t?[...m.instructions,...T]:T;if(P!==n[A]&&g.length<r&&(mi({instructions:I,payer:this.feePayer,lookupTableAddressAccount:u})||mi({instructions:T,payer:this.feePayer,lookupTableAddressAccount:u})))g.push(P);else{if(g.length===0)throw Error("item ins too big");A+=P===n[A]?1:0;let x={};for(let S of[...new Set(s)])u[S]!==void 0&&(x[S]=u[S]);if(t&&mi({instructions:[...m.instructions,...g],payer:this.feePayer,lookupTableAddressAccount:u,recentBlockhash:p})){let S=new ki({payerKey:this.feePayer,recentBlockhash:p,instructions:[...m.instructions,...g]}).compileToV0Message(Object.values(u));y.push(new Ti(S))}else{let S=new ki({payerKey:this.feePayer,recentBlockhash:p,instructions:[...g]}).compileToV0Message(Object.values(u));y.push(new Ti(S))}b.push(Array.from(new Set(g.map(S=>S.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat())).map(S=>f[S]).filter(S=>S!==void 0)),g=[P]}}),g.length>0){let T=[...new Set(g.map(I=>I.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(I=>f[I]).filter(I=>I!==void 0);if(t&&mi({instructions:[...m.instructions,...g],payer:this.feePayer,lookupTableAddressAccount:u,recentBlockhash:p})){let I=new ki({payerKey:this.feePayer,recentBlockhash:p,instructions:[...m.instructions,...g]}).compileToV0Message(Object.values(u));y.push(new Ti(I))}else{let I=new ki({payerKey:this.feePayer,recentBlockhash:p,instructions:[...g]}).compileToV0Message(Object.values(u));y.push(new Ti(I))}b.push(T)}return(h=this.owner)!=null&&h.signer&&b.forEach(P=>{P.some(T=>T.publicKey.equals(this.owner.publicKey))||P.push(this.owner.signer)}),y.forEach((P,T)=>{P.sign(b[T])}),{builder:this,transactions:y,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async P=>{var R;let{sequentially:T,onTxUpdate:I,skipTxCount:x=0,recentBlockHash:S,skipPreflight:B=!0}=P||{};if(y.map(async(L,O)=>{b[O].length&&L.sign(b[O]),S&&(L.message.recentBlockhash=S)}),uo(y),(R=this.owner)!=null&&R.isKeyPair){if(T){let L=0,O=[];for(let C of y){if(++L,L<=x){console.log("skip tx: ",L),O.push("tx skipped");continue}let F=await this.connection.sendTransaction(C,{skipPreflight:B});await br(this.connection,F),O.push(F)}return{txIds:O,signedTxs:y}}return{txIds:await Promise.all(y.map(async L=>await this.connection.sendTransaction(L,{skipPreflight:B}))),signedTxs:y}}if(this.signAllTransactions){let L=await this.signAllTransactions(y.slice(x,y.length)),O=[...y.slice(0,x),...L];if(T){let C=0,F=[],E=async()=>{if(!O[C])return;if(C<x){F.push({txId:"",status:"success",signedTx:O[C]}),I==null||I([...F]),C++,E();return}let _=await this.connection.sendTransaction(O[C],{skipPreflight:B});F.push({txId:_,status:"sent",signedTx:O[C]}),I==null||I([...F]),C++;let z=!1,Q=null,Y=null,ee=ne=>{Q!==null&&clearInterval(Q),Y!==null&&this.connection.removeSignatureListener(Y);let Z=F.findIndex(pe=>pe.txId===_);if(Z>-1){if(F[Z].status==="error"||F[Z].status==="success")return;F[Z].status=ne.err?"error":"success"}I==null||I([...F]),ne.err||E()};this.loopMultiTxStatus&&(Q=setInterval(async()=>{var ne;if(z){clearInterval(Q);return}try{let Z=await this.connection.getTransaction(_,{commitment:"confirmed",maxSupportedTransactionVersion:0});Z&&(z=!0,clearInterval(Q),ee({err:((ne=Z.meta)==null?void 0:ne.err)||null}),console.log("tx status from getTransaction:",_))}catch(Z){z=!0,clearInterval(Q),console.error("getTransaction timeout:",Z,_)}},gr)),Y=this.connection.onSignature(_,ne=>{if(z){this.connection.removeSignatureListener(Y);return}z=!0,ee(ne)},"confirmed"),this.connection.getSignatureStatus(_)};return E(),{txIds:[],signedTxs:O}}else{let C=[];for(let F=0;F<O.length;F+=1){let E=await this.connection.sendTransaction(O[F],{skipPreflight:B});C.push(E)}return{txIds:C,signedTxs:O}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:a||{}}}};var ts=(...d)=>d.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Qe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ke(t)}createTxBuilder(e){return this.scope.checkOwner(),new Pr({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(ts(e))}logInfo(...e){this.logger.info(ts(e))}logAndCreateError(...e){let t=ts(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{ASSOCIATED_TOKEN_PROGRAM_ID as ls,TOKEN_2022_PROGRAM_ID as rt,TOKEN_PROGRAM_ID as Ne}from"@solana/spl-token";import{Keypair as Kr,PublicKey as H,SystemProgram as kn,TransactionInstruction as et}from"@solana/web3.js";import Cr from"bn.js";import Be from"bn.js";var Oe=new Be(1).shln(64),No=64,Td=new Be(1).shln(128),wn=new Be(1).shln(64).subn(1),hd=new Be(1).shln(128).subn(1),en=-443636,tn=443636,Pt=new Be("4295048016"),At=new Be("79226673521066979257578248091"),lc=new Be("59543866431248"),mc=new Be("184467440737095516"),dc=new Be("15793534762490258745"),pc=16,Ar=512,Dt=60,ZA=new Be("18446743708227953217"),fc=[{bit:0,factor:new Be("fffcb933bd6fb800",16)},{bit:1,factor:new Be("fff97272373d4000",16)},{bit:2,factor:new Be("fff2e50f5f657000",16)},{bit:3,factor:new Be("ffe5caca7e10f000",16)},{bit:4,factor:new Be("ffcb9843d60f7000",16)},{bit:5,factor:new Be("ff973b41fa98e800",16)},{bit:6,factor:new Be("ff2ea16466c9b000",16)},{bit:7,factor:new Be("fe5dee046a9a3800",16)},{bit:8,factor:new Be("fcbe86c7900bb000",16)},{bit:9,factor:new Be("f987a7253ac65800",16)},{bit:10,factor:new Be("f3392b0822bb6000",16)},{bit:11,factor:new Be("e7159475a2caf000",16)},{bit:12,factor:new Be("d097f3bdfd2f2000",16)},{bit:13,factor:new Be("a9f746462d9f8000",16)},{bit:14,factor:new Be("70d869a156f31c00",16)},{bit:15,factor:new Be("31be135f97ed3200",16)},{bit:16,factor:new Be("9aa508b5b85a500",16)},{bit:17,factor:new Be("5d6af8dedc582c",16)},{bit:18,factor:new Be("2216e584f5fa",16)}],On=1e6;var wr=1e5,hi=1e4,yc=1e4,bc=1e5;var Ii=3,gc=100;var Pc=10,Ac=100,Mo=14;var J=new Be(0),ot=new Be(1),jA=new Be(-1),kr={tvl:0,volumeQuote:0,mintAmountA:0,mintAmountB:0,rewardDefaultInfos:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,day:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},week:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},month:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},pooltype:[]};var $A=new Be("18446744073700000000");var ns=v([Ae(8),D("bump"),je("index"),M("owner"),Ue("protocolFeeRate"),Ue("tradeFeeRate"),je("tickSpacing"),Ue("fundFeeRate"),$(Ue(),1),M("fundOwner"),$(w(),3)]),Id=v([Ue("blockTimestamp"),xo("tickCumulative"),$(w(),4)]),wc=v([Ae(8),He("initialized"),w("recentEpoch"),je("observationIndex"),M("poolId"),$(Id,gc,"observations"),$(w(),4)]),Bd=v([je("filterPeriod"),je("decayPeriod"),je("reductionFactor"),Ue("dynamicFeeControl"),Ue("maxVolatilityAccumulator"),st("tickSpacingIndexReference"),Ue("volatilityReference"),Ue("volatilityAccumulator"),w("lastUpdateTimestamp"),$(D(),46)]),xd=v([D("state"),w("openTime"),w("endTime"),w("lastUpdateTime"),ce("emissionsPerSecondX64"),w("totalEmissioned"),w("claimed"),M("mint"),M("vault"),M("creator"),ce("growthGlobalX64")]),lo=v([Ae(8),D("bump"),M("configId"),M("creator"),M("mintA"),M("mintB"),M("vaultA"),M("vaultB"),M("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),je("tickSpacing"),ce("liquidity"),ce("sqrtPriceX64"),st("tickCurrent"),Ue(),ce("feeGrowthGlobalX64A"),ce("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),$(ce(),4),D("status"),D("feeOn"),Ae(6),$(xd,Ii,"rewardInfos"),Ae(8*16,"tickArrayBitmap"),$(w(),4),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),w("recentEpoch"),Bd.replicate("dynamicFeeInfo"),$(w(),46)]),Sd=v([ce("growthInsideLastX64"),w("rewardAmountOwed")]),Tr=v([Ae(8),D("bump"),M("nftMint"),M("poolId"),st("tickLower"),st("tickUpper"),ce("liquidity"),ce("feeGrowthInsideLastX64A"),ce("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),$(Sd,Ii,"rewardInfos"),w("recentEpoch"),$(w(),7)]),nw=v([Ae(8),D("bump"),M("poolId"),st("tickLower"),st("tickUpper"),ce("liquidity"),ce("feeGrowthInsideLastX64A"),ce("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),$(ce(),Ii,"rewardGrowthInside"),w("recentEpoch"),$(w(),7)]),Kd=v([st("tick"),Bu("liquidityNet"),ce("liquidityGross"),ce("feeGrowthOutsideX64A"),ce("feeGrowthOutsideX64B"),$(ce(),Ii,"rewardGrowthsOutsideX64"),w("orderPhase"),w("ordersAmount"),w("partFilledOrdersRemaining"),ce("unfilledRatioX64"),$(Ue(),3)]),Fo=v([Ae(8),M("poolId"),st("startTickIndex"),$(Kd,Dt,"ticks"),D("initializedTickCount"),w("recentEpoch"),$(D(),107)]),kc=v([Ae(8),D("bump"),$(M(),Pc,"operationOwners"),$(M(),Ac,"whitelistMints")]),mo=v([Ae(8),M("poolId"),M("owner"),st("tick"),He("zeroForOne"),w("orderPhase"),w("totalAmount"),w("filledAmount"),w("settleBase"),w("settleOutput"),w("openTime"),ce("unfilledRatioX64"),$(w(),4)]),hr=v([Ae(8),M("poolId"),Ae(8*8*Mo,"positiveTickArrayBitmap"),Ae(8*8*Mo,"negativeTickArrayBitmap")]),ow=v([Ae(8),je("index"),je("filterPeriod"),je("decayPeriod"),je("reductionFactor"),Ue("dynamicFeeControl"),Ue("maxVolatilityAccumulator"),$(w(),8)]),Tc=v([Ae(8),M("wallet"),D("nonceIndex"),w("orderNonce"),$(w(),4)]),iw=v([w(),D("bump"),M("owner"),M("poolId"),M("positionId"),M("nftAccount"),$(w(),8)]),hc=v([Ae(8),D("bump"),M("lockOwner"),M("poolId"),M("positionId"),M("nftAccount"),M("lockNftMint"),w("recentEpoch"),$(w(),8)]);import Cd from"bn.js";function Ir(d){let e=Buffer.alloc(2);return e.writeUInt16LE(d),e}function os(d){let e=Buffer.alloc(4);return e.writeInt32LE(d),e}function Ic(d){let e=Buffer.alloc(4);return e.writeInt32BE(d),e}function Bc(d){return(typeof d=="number"||typeof d=="bigint")&&(d=new Cd(d.toString())),d.toArrayLike(Buffer,"be",8)}function xc(d){let e=new ArrayBuffer(1);return new DataView(e).setUint8(0,d),new Uint8Array(e)}var pw=Buffer.from("amm_config","utf8"),Br=Buffer.from("pool","utf8"),is=Buffer.from("pool_vault","utf8"),Rd=Buffer.from("pool_reward_vault","utf8"),Sc=Buffer.from("position","utf8"),Ld=Buffer.from("tick_array","utf8"),Od=Buffer.from("operation","utf8"),Nd=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Md=Buffer.from("observation","utf8"),Fd=Buffer.from("support_mint","utf8"),fw=Buffer.from("dynamic_fee_config","utf8"),vd=Buffer.from("permission","utf8");function Kc(d,e,t,n){return se([Br,e.toBuffer(),t.toBuffer(),n.toBuffer()],d)}function Cc(d,e){return se([vd,e.toBuffer()],d)}function Rc(d,e,t,n,o){return se([Br,e.toBuffer(),t.toBuffer(),n.toBuffer(),Ir(o)],d)}function Qt(d,e,t){return se([is,e.toBuffer(),t.toBuffer()],d)}function Lc(d,e,t){return se([Rd,e.toBuffer(),t.toBuffer()],d)}function Le(d,e,t){return se([Ld,e.toBuffer(),Ic(t)],d)}function ln(d,e,t,n){return se([Sc,e.toBuffer(),os(t),os(n)],d)}function Zt(d,e){return se([Sc,e.toBuffer()],d)}function Nn(d){return se([Buffer.from("metadata","utf8"),Pn.toBuffer(),d.toBuffer()],Pn)}function Bi(d){return se([Od],d)}function Ve(d,e){return se([Nd,e.toBuffer()],d)}function rs(d,e){return se([Md,e.toBuffer()],d)}function po(d,e){return se([Fd,e.toBuffer()],d)}function Oc(d,e,t,n){return se([e.toBuffer(),t.toBuffer(),Bc(n)],d)}function Nc(d,e,t){return se([e.toBuffer(),xc(t)],d)}var Mc=Buffer.from("locked_position","utf8");function as(d,e){return se([Mc,e.toBuffer()],d)}function vo(d,e){return se([Mc,e.toBuffer()],d)}import{sha256 as Dd}from"js-sha256";import Fc from"bn.js";import ss from"decimal.js";function Je(d,e,t){if(t.isZero())throw new Error("Division by zero");return d.mul(e).div(t)}function Ge(d,e,t){if(t.isZero())throw new Error("Division by zero");let n=d.mul(e),o=n.div(t);return n.mod(t).isZero()?o:o.addn(1)}function xr(d,e){return d.div(e).add(d.mod(e).isZero()?J:ot)}var Aw=new Fc(1).shln(256).subn(1);function vc(d){return d.isZero()?-1:d.bitLength()-1}function _c(d,e){return new ss(d.toString()).div(ss.pow(2,64)).toDecimalPlaces(e)}function fo(d){return new Fc(d.mul(ss.pow(2,64)).floor().toFixed())}import _d from"bn.js";import pt from"bn.js";import _o from"decimal.js";var Mn=class{static scanLinearBitmap({bitmap:e,tickSpacing:t,offset:n,checkInfo:o}){let i=[],r=e.length*8,a=0,u=r-1;if(o){let l=o.tick/(t*Dt)-n;o.valueType==="gte"?a=Math.max(0,Math.ceil(l)):u=Math.min(r-1,Math.floor(l))}if(a>u)return i;let s=Math.floor(a/8),c=Math.floor(u/8);for(let l=s;l<=c;l++){if(!e[l])continue;let m=l===s?a%8:0,p=l===c?u%8:7;for(let f=m;f<=p;f++)e[l]&1<<f&&i.push((l*8+f+n)*t*Dt)}return i}static findPoolBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/Dt/t);if(n.valueType==="lte"&&o<-512)return[];if(n.valueType==="gte"&&o>512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:-Ar,checkInfo:n})}static findPositiveTickArrayBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/Dt/t);if(n.valueType==="lte"&&o<512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:Ar,checkInfo:n})}static findNegativeTickArrayBitmap({bitmap:e,tickSpacing:t,count:n,checkInfo:o}){let i=[];if(o){let u=Math.floor(o.tick/Dt/t);if(o.valueType==="gte"&&u>=-512)return i}let r=(o==null?void 0:o.valueType)==="lte"?Math.floor(o.tick/(Dt*t))+7680:1/0,a=(o==null?void 0:o.valueType)==="gte"?Math.ceil(o.tick/(Dt*t))+7680:0;e:for(let u=0;u<Mo;u++){let s=Mo-1-u;for(let c=0;c<512;c++){let l=u*512+c;if(l>r)break e;if(l<a)continue;let m=s*64+Math.floor(c/8);if(!e[m]){c=Math.floor(c/8)*8+7;continue}if(e[m]&1<<c%8){let p=(u*512+c-7680)*Dt*t;if(i.push(p),n!==void 0&&i.length>=n)break e}}}return i}static findTickArrayStartIndex({tickSpacing:e,poolBitmap:t,tickArrayBitmap:n,findInfo:o}){if(o.type==="all")return[...this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap}),...this.findPoolBitmap({tickSpacing:e,bitmap:t}),...this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap})];let i=ge.getTickArrayStartIndex(o.tickArrayCurrent,e),{count:r}=o;if(o.type==="oneForZero"){let a={tick:i,valueType:"gte"},u=[()=>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(u,r)}if(o.type==="zeroForOne"){let a={tick:i,valueType:"lte"},u=[()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a}).sort((s,c)=>c-s),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}).sort((s,c)=>c-s),()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}).sort((s,c)=>c-s)];return this.collectUntil(u,r)}throw new Error("find info type check error")}static collectUntil(e,t){let n=[];for(let o of e){if(t!==void 0&&n.length>=t)break;n.push(...o())}return n.slice(0,t)}static findTickArrayAddress(e){return this.findTickArrayStartIndex(e).map(t=>Le(e.programId,e.poolId,t).publicKey)}static maxTickInTickarrayBitmap(e){return e*Dt*Ar}},ge=class{static firstinitializedTick({data:e,zeroForOne:t}){if(t){for(let n=e.ticks.length-1;n>=0;n--)if(re.isInitialized({data:e.ticks[n]}))return e.ticks[n]}else for(let n=0;n<e.ticks.length;n++)if(re.isInitialized({data:e.ticks[n]}))return e.ticks[n]}static nextInitalizedTick({data:e,currentTickIndex:t,tickSpacing:n,zeroForOne:o}){if(this.getTickArrayStartIndex(t,n)!==e.startTickIndex)return;let r=Math.floor((t-e.startTickIndex)/n);if(o){for(let a=r;a>=0;a--)if(re.isInitialized({data:e.ticks[a]}))return e.ticks[a]}else for(let a=r+1;a<Dt;a++)if(re.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 Dt*e}static getMinTick(e){return Math.ceil(en/e)*e}static getMaxTick(e){return Math.floor(tn/e)*e}},re=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>=en&&e<=tn}static checkTick(e){if(!this.isValidTick(e))throw new Error(`Tick ${e} is out of range [${en}, ${tn}]`)}static getSqrtPriceAtTick(e){this.checkTick(e);let t=Math.abs(e),n=Oe.clone();for(let{bit:o,factor:i}of fc)(t&1<<o)!==0&&(n=Je(n,i,Oe));return e>0&&(n=Je(Oe,Oe,n)),n}static getLimitOrderOutput({amountIn:e,tick:t,zeroForOne:n}){if(n){let o=re.getPriceAtTick(t,!1);return Je(e,o,Oe)}else{let o=re.getPriceAtTick(t,!0);return Je(e,Oe,o)}}static getLimitOrderInput({amountOut:e,tick:t,zeroForOne:n}){if(n){let o=re.getPriceAtTick(t,!0);return Ge(e,o,Oe)}else{let o=re.getPriceAtTick(t,!1);return Ge(e,Oe,o)}}static limitOrderUnfilledAmount({tick:e}){return e.ordersAmount.add(e.partFilledOrdersRemaining)}static matchLimitOrder({tick:e,swapAmount:t,swapDirectionZeroForOne:n,isBaseInput:o,feeRate:i,isFeeOnInput:r}){let a={amountIn:J,amountOut:J,ammFeeAmount:J},u=this.limitOrderUnfilledAmount({tick:e});if(t.isZero()||u.isZero())return a;if(o)r?(a.ammFeeAmount=Ge(t,new pt(i),ze),a.amountIn=t.sub(a.ammFeeAmount)):a.amountIn=t,a.amountOut=this.getLimitOrderOutput({amountIn:a.amountIn,tick:e.tick,zeroForOne:n}),a.amountOut.gt(u)&&(a.amountOut=u,a.amountIn=this.getLimitOrderInput({amountOut:u,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=Ge(a.amountIn,new pt(i),ze.sub(new pt(i)))));else{let l=pt.min(t,u);r?a.amountOut=l:a.amountOut=pt.min(Ge(l,ze,ze.sub(new pt(i))),u),a.amountIn=this.getLimitOrderInput({amountOut:a.amountOut,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=Ge(a.amountIn,new pt(i),ze.sub(new pt(i))))}let s=J;e.partFilledOrdersRemaining.gt(J)&&(s=pt.min(e.partFilledOrdersRemaining,a.amountOut),s.gt(J)&&(e.unfilledRatioX64=Je(e.unfilledRatioX64,e.partFilledOrdersRemaining.sub(s),e.partFilledOrdersRemaining)),e.partFilledOrdersRemaining=e.partFilledOrdersRemaining.sub(s));let c=a.amountOut.sub(s);if(c.gt(J)){if(!e.partFilledOrdersRemaining.isZero())throw Error("!tick.partFilledOrdersRemaining.isZero()");if(e.ordersAmount.lt(c))throw Error("InvalidLimitOrderAmount");e.orderPhase=e.orderPhase.add(ot),e.unfilledRatioX64=Je(Oe,e.ordersAmount.sub(c),e.ordersAmount),e.partFilledOrdersRemaining=e.ordersAmount.sub(c),e.ordersAmount=J}return r||(a.ammFeeAmount=Ge(a.amountOut,new pt(i),ze),a.amountOut=a.amountOut.sub(a.ammFeeAmount)),a}static getPriceAtTick(e,t){let n=this.getSqrtPriceAtTick(e);return t?n.mul(n).add(Oe.subn(1)).div(Oe):n.mul(n).div(Oe)}static getTickAtSqrtPrice(e){if(!(e.gte(Pt)&&e.lte(At)))throw Error("SqrtPriceX64");let t=vc(e),n=t-64,o;n>=0?o=new pt(n).shln(32):o=new pt(-n).shln(32).neg();let i;t>=64?i=e.shrn(t-63):i=e.shln(63-t);let r=new pt(0),a=new pt(1).shln(63);for(let b=0;b<pc&&!a.isZero();b++){i=i.mul(i);let g=i.shrn(127).toNumber();i=i.shrn(63+g),g&&(r=r.add(a)),a=a.shrn(1)}let u=r.shrn(32),c=o.add(u).mul(lc),l=c.sub(mc),m=c.add(dc),p=this.signedShrn64(l),f=this.signedShrn64(m);return p===f?p:re.getSqrtPriceAtTick(f).lte(e)?f:p}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),i=t-n,r=20,a=new pt(10).pow(new pt(r)),u=o.mul(a),s=new pt(1).shln(128),l=u.div(s).toString();for(;l.length<=r;)l="0"+l;let m=l.slice(0,-r),p=l.slice(-r),f=m+"."+p;return new _o(f).mul(new _o(10).pow(i))}static tickToPrice(e,t,n){let o=re.getSqrtPriceAtTick(e);return this.sqrtPriceX64ToPrice(o,t,n)}static priceToTick(e,t,n){let i=e.div(Math.pow(10,t-n)).log().div(new _o(1.0001).log()).floor();return Math.max(en,Math.min(tn,i.toNumber()))}static priceToSqrtPriceX64(e,t,n){let r=e.div(Math.pow(10,t-n)).sqrt().mul(new _o(2).pow(64));return new pt(r.toFixed(0))}static toTickIndex(e,t){return e>=0?e-e%t:e-e%t-(e%t!==0?t:0)}static getPriceAndTick({price:e,mintADecimals:t,mintBDecimals:n,zeroForOne:o,tickSpacing:i}){let r=e.clamp(1/10**Math.max(t,n),Number.MAX_SAFE_INTEGER);o||(r=new _o(1).div(r));let a=re.toTickIndex(re.priceToTick(r,t,n),i),u=re.tickToPrice(a,t,n);return{price:o?u:new _o(1).div(u),tick:a}}};async function Vc(d,e,t,n,o,i,r=!0){let a=[],u=Ve(d,t).publicKey,s=await e.getAccountInfo(u),c=Mn.findTickArrayAddress({programId:d,poolId:t,poolBitmap:i,tickArrayBitmap:hr.decode(s.data),tickSpacing:o,findInfo:{type:r?"zeroForOne":"oneForZero",tickArrayCurrent:n}});return(await yt(e,c)).forEach((m,p)=>{m&&a.push({address:c[p],value:Fo.decode(m.data)})}),a}var zn=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 J;if(e.orderPhase.eq(t.orderPhase))return J;if(e.orderPhase.add(ot).eq(t.orderPhase)){let n=e.settleBase.mul(t.unfilledRatioX64),o=e.unfilledRatioX64,i=n.div(o),r=n.mod(o).isZero(),a=e.settleBase.sub(i);if(a.isZero())return J;let u=r?a:a.sub(ot);return re.getLimitOrderOutput({amountIn:u,tick:t.tick,zeroForOne:e.zeroForOne}).sub(e.settleOutput)}else{if(e.orderPhase.add(new _d(2)).lte(t.orderPhase))return re.getLimitOrderOutput({amountIn:e.settleBase,tick:t.tick,zeroForOne:e.zeroForOne}).sub(e.settleOutput);throw Error("invalid order phase")}}};import Sr from"bn.js";import Ec from"decimal.js";var it=class{static getDeltaAmountAUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.shln(No),r=t.sub(e);if(!e.gt(J))throw Error("!sqrtPriceX64A.gt(BN_ZERO)");let a=o?xr(Ge(i,r,t),e):Je(i,r,t).div(e);if(a.gt(wn))throw Error("MaxTokenOverflow");return a}static getDeltaAmountBUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=o?Ge(n,t.sub(e),Oe):Je(n,t.sub(e),Oe);if(i.gt(wn))throw Error("MaxTokenOverflow");return i}static addDelta(e,t){if(t.isNeg()){let n=t.neg();if(e.lt(n))throw new Error("Liquidity underflow");return e.sub(n)}else return e.add(t)}static getLiquidityFromAmountA(e,t,n){if(n.isZero())return J;e.gt(t)&&([e,t]=[t,e]);let o=Je(e,t,Oe),i=t.sub(e);return Je(n,o,i)}static getLiquidityFromAmountB(e,t,n){if(n.isZero())return J;e.gt(t)&&([e,t]=[t,e]);let o=t.sub(e);return Je(n,Oe,o)}static getLiquidityFromAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return this.getLiquidityFromAmountA(t,n,o);if(e.lt(n)){let r=this.getLiquidityFromAmountA(e,n,o),a=this.getLiquidityFromAmountB(t,e,i);return r.lt(a)?r:a}else return this.getLiquidityFromAmountB(t,n,i)}static getAmountsForLiquidity(e,t,n,o,i){t.gt(n)&&([t,n]=[n,t]);let r=J,a=J;return e.lte(t)?r=this.getDeltaAmountAUnsigned(t,n,o,i):e.lt(n)?(r=this.getDeltaAmountAUnsigned(e,n,o,i),a=this.getDeltaAmountBUnsigned(t,e,o,i)):a=this.getDeltaAmountBUnsigned(t,n,o,i),{amountA:r,amountB:a}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,r,a){let{amountA:u,amountB:s}=this.getAmountsForLiquidity(e,t,n,o,r),c=i?1+a:1-a,l=new Sr(new Ec(u.toString()).mul(c).toFixed(0)),m=new Sr(new Ec(s.toString()).mul(c).toFixed(0));return{amountSlippageA:l,amountSlippageB:m}}static getLiquidityAndAmountsFromAmount({sqrtPriceCurrentX64:e,sqrtPriceLowerX64:t,sqrtPriceUpperX64:n,amountInfo:o}){let i;if(o.type==="liquidity")i=o.amount;else if(o.type==="amountA")i=e.gte(n)?J:this.getLiquidityFromAmountA(Sr.max(e,t),n,o.amount);else if(o.type==="amountB")i=e.lte(t)?J:this.getLiquidityFromAmountB(t,Sr.min(e,n),o.amount);else throw Error("amount info type check error");return N({liquidity:i},this.getAmountsForLiquidity(e,t,n,o.amount,!0))}};import{PublicKey as vt}from"@solana/web3.js";import wt from"bn.js";import{TOKEN_2022_PROGRAM_ID as Dc,TOKEN_PROGRAM_ID as Ed}from"@solana/spl-token";import he from"decimal.js";import Eo from"bn.js";import ct from"bn.js";var xi=class{static getNextSqrtPriceFromAmountARoundingUp(e,t,n,o){if(n.isZero())return e;let i=t.shln(No);if(o){let r=n.mul(e),a=i.add(r);if(a.gte(i))return Ge(i,e,a);let u=Je(i,ot,e);return Ge(i,ot,u.add(n))}else{let r=n.mul(e);if(i.lte(r))throw new Error("Insufficient liquidity for token0 removal");let a=i.sub(r);return Ge(i,e,a)}}static getNextSqrtPriceFromAmountBRoundingDown(e,t,n,o){if(n.isZero())return e;if(o){let i=n.shln(No).div(t);return e.add(i)}else{let i=xr(n.shln(No),t);return e.sub(i)}}static getNextSqrtPriceFromInput(e,t,n,o){if(!e.gt(J))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(J))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(J))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(J))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!1)}};var mn=class{static newValue({poolInfo:e,amountSpecified:t,zeroForOne:n,feeRate:o,blockTimestamp:i}){let r={amountSpecifiedRemaining:t,amountCalculated:J,sqrtPriceX64:e.sqrtPriceX64,tick:e.tickCurrent,feeGrowthGlobalX64:n?e.feeGrowthGlobalX64A:e.feeGrowthGlobalX64B,lpFee:J,protocolFee:J,fundFee:J,liquidity:e.liquidity,sqrtPriceNextX64:J,tickNext:0,baseFeeRate:o,tickSpacing:e.tickSpacing,tickSpacingIndex:0,dynamicFeeInfo:Vo.getDynamicFeeInfo({poolInfo:e})};return r.dynamicFeeInfo&&(r.tickSpacingIndex=Ki.tickSpacingIndexFromTick(r.tick,r.tickSpacing),Vo.updateReference({dynamicFeeInfo:r.dynamicFeeInfo,tickSpacingIndex:r.tickSpacingIndex,currentTimestamp:i})),r}static getTargetPriceBasedOnNextTick({data:e,tickNext:t,zeroForOne:n,sqrtPriceLimitX64:o}){e.tickNext=t,e.tickNext<en?e.tickNext=en:e.tickNext>tn&&(e.tickNext=tn),e.sqrtPriceNextX64=re.getSqrtPriceAtTick(e.tickNext);let i;if(n&&e.sqrtPriceNextX64.lt(o)||!n&&e.sqrtPriceNextX64.gt(o)?i=o:i=e.sqrtPriceNextX64,n){if(e.tick<e.tickNext)throw Error("data.tick < data.tickNext");if(e.sqrtPriceX64.lt(e.sqrtPriceNextX64))throw Error("data.sqrtPriceX64.lt(data.sqrtPriceNextX64)");if(e.sqrtPriceX64.lt(i))throw Error("data.sqrtPriceX64.lt(targetPrice)")}else{if(e.tickNext<=e.tick)throw Error("data.tickNext <= data.tick");if(e.sqrtPriceNextX64.lt(e.sqrtPriceX64))throw Error("data.sqrtPriceNextX64.lt(data.sqrtPriceX64)");if(i.lt(e.sqrtPriceX64))throw Error("targetPrice.lt(data.sqrtPriceX64)")}return i}static updateVolatilityAccumulator({state:e}){!e.dynamicFeeInfo||Vo.updateVolatilityAccumulator({state:e.dynamicFeeInfo,tickSpacingIndex:e.tickSpacingIndex})}static computeDynamicFeeRate({data:e,tickSpacing:t}){let n=e.volatilityAccumulator*t,o=n*n,i=bc*hi*hi,r=Ge(new ct(e.dynamicFeeControl),new ct(o),new ct(i)).toNumber();return r>wr?wr:r}static getTotalFeeRate({data:e}){if(e.dynamicFeeInfo){let t=this.computeDynamicFeeRate({data:e.dynamicFeeInfo,tickSpacing:e.tickSpacing}),n=e.baseFeeRate+t;return Math.min(wr,n)}return e.baseFeeRate}static getSpacingBoundedPrice({data:e,targetPrice:t,zeroForOne:n}){if(e.dynamicFeeInfo===void 0)return{isSkipped:!0,boundedPrice:t};if(e.liquidity.isZero()||e.dynamicFeeInfo.volatilityAccumulator===e.dynamicFeeInfo.maxVolatilityAccumulator)return{isSkipped:!0,boundedPrice:t};let o=e.tickSpacing,i=n?e.tickSpacingIndex*o:(e.tickSpacingIndex+1)*o,r=Math.max(en,Math.min(tn,i)),a=re.getSqrtPriceAtTick(r);return n?{isSkipped:!1,boundedPrice:ct.max(t,a)}:{isSkipped:!1,boundedPrice:ct.min(t,a)}}static applySwapAmounts({state:e,amountIn:t,amountOut:n,feeAmount:o,isBaseInput:i,isFeeOnInput:r,protocolFeeRate:a,fundFeeRate:u}){let s=r?t.add(o):t;i?(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(s),e.amountCalculated=e.amountCalculated.add(n)):(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(n),e.amountCalculated=e.amountCalculated.add(s)),this.splitFee({state:e,feeAmount:o,protocolFeeRate:a,fundFeeRate:u})}static updateDynamicFeeIndex({state:e,zeroForOne:t,isSkippedTickSpacing:n}){if(e.dynamicFeeInfo!==void 0){if(n){let o=e.sqrtPriceX64.eq(e.sqrtPriceNextX64)?e.tickNext:e.tick,i=Ki.tickSpacingIndexFromTick(o,e.tickSpacing);!t&&o%e.tickSpacing===0&&(i=i-1),e.tickSpacingIndex=i,e.dynamicFeeInfo.volatilityAccumulator!==e.dynamicFeeInfo.maxVolatilityAccumulator&&this.updateVolatilityAccumulator({state:e})}e.tickSpacingIndex+=t?-1:1}}static splitFee({state:e,feeAmount:t,protocolFeeRate:n,fundFeeRate:o}){let i=t;if(n.gt(J)){let r=t.mul(n).div(new ct(ze));e.protocolFee=e.protocolFee.add(r),i=i.sub(r)}if(o.gt(J)){let r=t.mul(o).div(new ct(ze));e.fundFee=e.fundFee.add(r),i=i.sub(r)}if(e.liquidity.gt(J)){let r=Je(i,Oe,e.liquidity);e.feeGrowthGlobalX64=e.feeGrowthGlobalX64.add(r),e.lpFee=e.lpFee.add(i)}}},Si=class{static newSwapComputationResult({sqrtPriceNextX64:e}){return{sqrtPriceNextX64:e!=null?e:J,amountIn:J,amountOut:J,feeAmount:J}}static calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:o,isBaseInput:i}){if(i)try{return o?it.getDeltaAmountAUnsigned(t,e,n,!0):it.getDeltaAmountBUnsigned(e,t,n,!0)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}else try{return o?it.getDeltaAmountBUnsigned(t,e,n,!1):it.getDeltaAmountAUnsigned(e,t,n,!1)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}}static computeSwap(e,t,n,o,i,r,a,u){let s=this.newSwapComputationResult({});if(r){let l=u?Je(o,new ct(On-i),new ct(On)):o,m=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});m!==null&&(s.amountIn=m),s.sqrtPriceNextX64=m!==null&&l.gte(s.amountIn)?t:xi.getNextSqrtPriceFromInput(e,n,l,a)}else{let l=u?o:Ge(o,new ct(On),new ct(On-i)),m=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});m!==null&&(s.amountOut=m),s.sqrtPriceNextX64=m!==null&&l.gte(s.amountOut)?t:xi.getNextSqrtPriceFromOutput(e,n,l,a)}if(a){if(!s.sqrtPriceNextX64.gte(t))throw Error("!result.sqrtPriceNextX64.gte(sqrtPriceTargetX64)")}else if(!t.gte(s.sqrtPriceNextX64))throw Error("!sqrtPriceTargetX64.gte(result.sqrtPriceNextX64)");let c=t.eq(s.sqrtPriceNextX64);if(a?(c&&r||(s.amountIn=it.getDeltaAmountAUnsigned(s.sqrtPriceNextX64,e,n,!0)),c&&!r||(s.amountOut=it.getDeltaAmountBUnsigned(s.sqrtPriceNextX64,e,n,!1))):(c&&r||(s.amountIn=it.getDeltaAmountBUnsigned(e,s.sqrtPriceNextX64,n,!0)),c&&!r||(s.amountOut=it.getDeltaAmountAUnsigned(e,s.sqrtPriceNextX64,n,!1))),r)u?s.sqrtPriceNextX64.eq(t)?s.feeAmount=Ge(s.amountIn,new ct(i),new ct(On-i)):s.feeAmount=o.sub(s.amountIn):(s.feeAmount=Ge(s.amountOut,new ct(i),new ct(On)),s.amountOut=s.amountOut.sub(s.feeAmount),c||(s.amountIn=o));else if(u)s.amountOut=ct.min(s.amountOut,o),s.feeAmount=Ge(s.amountIn,new ct(i),new ct(On-i));else{s.feeAmount=Ge(s.amountOut,new ct(i),new ct(On));let l=s.amountOut.sub(s.feeAmount);l.gt(o)?(s.feeAmount=s.amountOut.sub(o),s.amountOut=o):s.amountOut=l}return s}};function us({programId:d,poolId:e,poolInfo:t,tickArrays:n,configInfo:o,tickarrayBitmapExtension:i,amountSpecified:r,sqrtPriceLimitX64:a,zeroForOne:u,isBaseInput:s,blockTimestamp:c,includeExtraTickArrays:l}){a.isZero()&&(a=u?new Eo(Pt).addn(1):new Eo(At).subn(1));let m=0;if(n.length===0)return{allTrade:!1,amountSpecifiedRemaining:r,amountCalculated:J,feeAmount:J,sqrtPriceX64:t.sqrtPriceX64,liquidity:t.liquidity,tickCurrent:t.tickCurrent,accounts:[]};let p=l?Mn.findTickArrayAddress({programId:d,poolId:e,tickSpacing:t.tickSpacing,poolBitmap:t.tickArrayBitmap,tickArrayBitmap:i,findInfo:{type:u?"oneForZero":"zeroForOne",count:2,tickArrayCurrent:t.tickCurrent}}).filter(T=>T.toString()!==n[0].address.toString()):[],f=ge.getTickArrayStartIndex(t.tickCurrent,t.tickSpacing),{firstItckArrayContainsPoolTick:y,firstValidTickArrayStartIndex:b}={firstItckArrayContainsPoolTick:n[m].value.startTickIndex===f,firstValidTickArrayStartIndex:n[m].value.startTickIndex},g=y,A=b,k=n[m],h=Wt.isFeeOnInput(t.feeOn,u),P=mn.newValue({poolInfo:t,amountSpecified:r,zeroForOne:u,feeRate:o.tradeFeeRate,blockTimestamp:c});for(;!P.amountSpecifiedRemaining.isZero()&&!P.sqrtPriceX64.eq(a);){let T=(()=>{let S=ge.nextInitalizedTick({data:k.value,tickSpacing:P.tickSpacing,zeroForOne:u,currentTickIndex:P.tick});if(S!==void 0)return S;if(g){let B=n[++m];return B===void 0?void 0:(A=B.value.startTickIndex,k=B,ge.firstinitializedTick({data:B.value,zeroForOne:u}))}else return g=!0,ge.firstinitializedTick({data:k.value,zeroForOne:u})})();if(T===void 0)return{allTrade:!1,amountSpecifiedRemaining:P.amountSpecifiedRemaining,amountCalculated:P.amountCalculated,feeAmount:P.lpFee.add(P.fundFee).add(P.protocolFee),sqrtPriceX64:P.sqrtPriceX64,liquidity:P.liquidity,tickCurrent:P.tick,accounts:n.slice(0,m).map(S=>S.address)};let I=mn.getTargetPriceBasedOnNextTick({data:P,tickNext:T.tick,zeroForOne:u,sqrtPriceLimitX64:a}),x=P.liquidity;do{mn.updateVolatilityAccumulator({state:P});let S=mn.getTotalFeeRate({data:P}),{isSkipped:B,boundedPrice:R}=mn.getSpacingBoundedPrice({data:P,targetPrice:I,zeroForOne:u}),L=!P.sqrtPriceX64.eq(R),O;L?(O=Si.computeSwap(P.sqrtPriceX64,R,P.liquidity,P.amountSpecifiedRemaining,S,s,u,h),mn.applySwapAmounts({state:P,amountIn:O.amountIn,amountOut:O.amountOut,feeAmount:O.feeAmount,isBaseInput:s,isFeeOnInput:h,protocolFeeRate:new Eo(o.protocolFeeRate),fundFeeRate:new Eo(o.fundFeeRate)})):O=Si.newSwapComputationResult({sqrtPriceNextX64:R});let C=re.limitOrderUnfilledAmount({tick:T});if(P.sqrtPriceNextX64.eq(O.sqrtPriceNextX64)){let F=re.matchLimitOrder({tick:T,swapAmount:P.amountSpecifiedRemaining,swapDirectionZeroForOne:u,isBaseInput:s,feeRate:S,isFeeOnInput:h});if(F.amountIn.gt(J)&&mn.applySwapAmounts({state:P,amountIn:F.amountIn,amountOut:F.amountOut,feeAmount:F.ammFeeAmount,isBaseInput:s,isFeeOnInput:h,protocolFeeRate:new Eo(o.protocolFeeRate),fundFeeRate:new Eo(o.fundFeeRate)}),re.hasLiquidity({data:T})&&!re.hasLimitOrders({data:T})){let E=u?T.liquidityNet.neg():T.liquidityNet;x=it.addDelta(P.liquidity,E)}P.tick=u&&!re.hasLimitOrders({data:T})||!u&&re.hasLimitOrders({data:T})?P.tickNext-1:P.tickNext}else P.sqrtPriceX64.eq(O.sqrtPriceNextX64)||(P.tick=re.getTickAtSqrtPrice(O.sqrtPriceNextX64));if(P.sqrtPriceX64=O.sqrtPriceNextX64,mn.updateDynamicFeeIndex({state:P,zeroForOne:u,isSkippedTickSpacing:B}),P.amountSpecifiedRemaining.isZero()||P.sqrtPriceX64.eq(I)){let F=re.limitOrderUnfilledAmount({tick:T});if(!P.amountSpecifiedRemaining.isZero()&&!F.eq(C)&&!F.isZero())throw Error("!limitOrderUnfilledAmountAfter.isZero()");break}}while(!0);P.liquidity=x}return{allTrade:!0,amountSpecifiedRemaining:J,amountCalculated:P.amountCalculated,feeAmount:P.lpFee.add(P.fundFee).add(P.protocolFee),sqrtPriceX64:P.sqrtPriceX64,liquidity:P.liquidity,tickCurrent:P.tick,accounts:[...p,...n.slice(0,m+1+(l?1:0)).map(T=>T.address)]}}var Ki=class{static tickSpacingIndexFromTick(e,t){return Math.floor(e/t)}},Vo=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/yc),e.lastUpdateTimestamp=new wt(n)):(e.tickSpacingIndexReference=t,e.volatilityReference=0,e.lastUpdateTimestamp=new wt(n)))}static updateVolatilityAccumulator({state:e,tickSpacingIndex:t}){let n=Math.abs(e.tickSpacingIndexReference-t),o=e.volatilityReference+n*hi;e.volatilityAccumulator=Math.min(o,e.maxVolatilityAccumulator)}},Wt=class{static isFeeOnInput(e,t){switch(e){case 0:return!0;case 1:return t;case 2:return!t;default:return!0}}static isFeeOnTokenA(e,t){return e.feeOn===0?t:e.feeOn===1}static isOverflowDefaultTickarrayBitmap({tickSpacing:e,tickIndexs:t}){let{maxTickBoundary:n,minTickBoundary:o}=this.tickArrayStartIndexRange({tickSpacing:e});for(let i of t){let r=ge.getTickArrayStartIndex(i,e);if(r>=n||r<o)return!0}return!1}static tickArrayStartIndexRange({tickSpacing:e}){let t=Mn.maxTickInTickarrayBitmap(e),n=-t;return t>tn&&(t=ge.getTickArrayStartIndex(tn,e)+ge.tickCount(e)),n<en&&(n=ge.getTickArrayStartIndex(en,e)),{maxTickBoundary:t,minTickBoundary:n}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,u,s;let r=[];for(let c=0;c<i.length;c++){let l=i[c],m=(s=(a=t.rewardDefaultInfos[c])==null?void 0:a.mint.programId)!=null?s:(u=await e.getAccountInfo(l.mint))==null?void 0:u.owner;if(m===void 0)throw Error("get new reward mint info error");let p=V(N({},l),{perSecond:_c(l.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new vt(m)});if(p.mint.equals(vt.default)||p.totalEmissioned.eq(wn))continue;if(n<=p.openTime.toNumber()||o.eq(J)){r.push(p);continue}let f=new wt(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime);if(y.isZero()){r.push(p);continue}let b=Ge(y,p.emissionsPerSecondX64,Oe),g=Je(y,p.emissionsPerSecondX64,o),A,k=p.totalEmissioned.add(b);if(k.lte(wn))A=k;else{let P=wn.sub(p.totalEmissioned);A=wn,g=Je(P,Oe,o)}let h=p.growthGlobalX64.add(g);r.push(V(N({},p),{growthGlobalX64:h,totalEmissioned:A,lastUpdateTime:f}))}return r}},lt=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,r,a){let u=o.toBase58()===e.mintA.address,s=ge.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:c,amountCalculated:l,feeAmount:m,sqrtPriceX64:p,accounts:f}=us({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(y=>({address:y[1].address,value:y[1]})).filter(y=>u?y.value.startTickIndex<=s:y.value.startTickIndex>=s).sort((y,b)=>u?b.value.startTickIndex-y.value.startTickIndex:y.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:J,zeroForOne:u,isBaseInput:!0,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:c,expectedAmountOut:l,remainingAccounts:f,executionPrice:p,feeAmount:m}}static getInputAmountAndRemainAccounts(e,t,n,o,i,r,a){let u=o.toBase58()===e.mintB.address,s=ge.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:c,amountCalculated:l,feeAmount:m,sqrtPriceX64:p,accounts:f}=us({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(y=>({address:new vt(y[0]),value:y[1]})).filter(y=>u?y.value.startTickIndex<=s:y.value.startTickIndex>=s).sort((y,b)=>u?b.value.startTickIndex-y.value.startTickIndex:y.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:J,zeroForOne:u,isBaseInput:!1,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:c,expectedAmountIn:l,remainingAccounts:f,executionPrice:p,feeAmount:m}}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await Me(e,t.map(r=>({pubkey:r})),{batchRequest:n}),i={};for(let r of o)r.accountInfo!==null&&(i[r.pubkey.toString()]=hr.decode(r.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let u of t){let s=[...Mn.findTickArrayStartIndex({tickSpacing:u.tickSpacing,poolBitmap:u.tickArrayBitmap,tickArrayBitmap:u.exBitmapInfo,findInfo:{type:"zeroForOne",count:7,tickArrayCurrent:u.tickCurrent}}),...Mn.findTickArrayStartIndex({tickSpacing:u.tickSpacing,poolBitmap:u.tickArrayBitmap,tickArrayBitmap:u.exBitmapInfo,findInfo:{type:"oneForZero",count:7,tickArrayCurrent:u.tickCurrent}})];for(let c of s){let{publicKey:l}=Le(u.programId,u.id,c);o[l.toString()]===void 0&&(i.push({pubkey:l}),o[l.toString()]=u.id)}}let r=await Me(e,i,{batchRequest:n}),a={};for(let u of r){if(!u.accountInfo)continue;let s=o[u.pubkey.toString()];if(!s)continue;a[s.toString()]===void 0&&(a[s.toString()]={});let c=Fo.decode(u.accountInfo.data);a[s.toString()][c.startTickIndex]=V(N({},c),{address:u.pubkey})}return a}static computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountIn:r,slippage:a,blockTimestamp:u,priceLimit:s=new he(0)}){var O;let c,l=o.toBase58()===e.mintA.address,[m,p]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];s.equals(new he(0))?c=l?Pt.add(new wt(1)):At.sub(new wt(1)):c=re.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let f=ft(r,m,i,!1),{allTrade:y,expectedAmountOut:b,remainingAccounts:g,executionPrice:A,feeAmount:k}=lt.getOutputAmountAndRemainAccounts(e,t,n,o,f.amount.sub((O=f.fee)!=null?O:J),u,c),h=ft(b,p,i,!1),P=re.sqrtPriceX64ToPrice(A,e.mintA.decimals,e.mintB.decimals),T=l?P:new he(1).div(P),I=b.mul(new wt(Math.floor((1-a)*1e10))).div(new wt(1e10)),x=ft(I,p,i,!1),S=l?e.currentPrice:new he(1).div(e.currentPrice),B=new he(T).sub(S).abs(),R=S,L=new gt(new he(B).mul(10**15).toFixed(0),new he(R).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:f,amountOut:h,minAmountOut:x,expirationTime:Fn(f.expirationTime,h.expirationTime),currentPrice:e.currentPrice,executionPrice:T,priceImpact:L,fee:k,remainingAccounts:g,executionPriceX64:A}}static computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,amountIn:o,tokenOut:i,slippage:r,epochInfo:a,blockTimestamp:u,catchLiquidityInsufficient:s=!1}){let c=i.address===e.mintB.address,[l,m]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[p,f]=[new qe(V(N({},l),{mint:l.address,isToken2022:l.programId===Dc.toBase58()})),new qe(V(N({},m),{mint:m.address,isToken2022:m.programId===Dc.toBase58()}))],{allTrade:y,realAmountIn:b,amountOut:g,minAmountOut:A,expirationTime:k,currentPrice:h,executionPrice:P,priceImpact:T,fee:I,remainingAccounts:x,executionPriceX64:S}=lt.computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:new vt(l.address),amountIn:o,slippage:r,epochInfo:a,catchLiquidityInsufficient:s,blockTimestamp:u}),B=V(N({},b),{amount:new Re(p,b.amount),fee:b.fee===void 0?void 0:new Re(p,b.fee)}),R=V(N({},g),{amount:new Re(f,g.amount),fee:g.fee===void 0?void 0:new Re(f,g.fee)}),L=V(N({},A),{amount:new Re(f,A.amount),fee:A.fee===void 0?void 0:new Re(f,A.fee)}),O=new Mt({baseToken:p,denominator:new wt(10).pow(new wt(20+p.decimals)),quoteToken:f,numerator:h.mul(new he(10**(20+f.decimals))).toFixed(0)}),C=new Mt({baseToken:p,denominator:new wt(10).pow(new wt(20+p.decimals)),quoteToken:f,numerator:P.mul(new he(10**(20+f.decimals))).toFixed(0)}),F=new Re(p,I);return{allTrade:y,realAmountIn:B,amountOut:R,minAmountOut:L,expirationTime:k,currentPrice:O,executionPrice:C,priceImpact:T,fee:F,remainingAccounts:x,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountOut:r,slippage:a,priceLimit:u=new he(0),blockTimestamp:s}){var O;let c=o.toBase58()===e.mintA.address,l={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},m;u.equals(new he(0))?m=c?At.sub(new wt(1)):Pt.add(new wt(1)):m=re.priceToSqrtPriceX64(u,e.mintA.decimals,e.mintB.decimals);let p=ft(r,l[o.toString()],i,!0),{allTrade:f,expectedAmountIn:y,remainingAccounts:b,executionPrice:g,feeAmount:A}=lt.getInputAmountAndRemainAccounts(e,t,n,o,p.amount.sub((O=p.fee)!=null?O:J),s,m),k=c?e.mintB.address:e.mintA.address,h=ft(y,l[k],i,!1),P=re.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),T=c?P:new he(1).div(P),I=y.mul(new wt(Math.floor((1+a)*1e10))).div(new wt(1e10)),x=ft(I,l[k],i,!0),S=c?e.currentPrice:new he(1).div(e.currentPrice),B=new he(T).sub(S).abs(),R=S,L=new gt(new he(B).mul(10**15).toFixed(0),new he(R).mul(10**15).toFixed(0));return{allTrade:f,amountIn:h,maxAmountIn:x,realAmountOut:p,expirationTime:Fn(h.expirationTime,p.expirationTime),currentPrice:e.currentPrice,executionPrice:T,priceImpact:L,fee:A,remainingAccounts:b}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var f,y,b;let i=e[t],r=re.tickToPrice(n,e.mintA.decimals,e.mintB.decimals).toNumber(),a=re.tickToPrice(o,e.mintA.decimals,e.mintB.decimals).toNumber(),u=Math.max(r,i.priceMin),c=Math.min(a,i.priceMax)-u,l=a-r,m=i.priceMax-i.priceMin,p;return c<=0?p=0:l===c?p=m/c:m===c?p=c/l:p=c/m*(c/l),{feeApr:i.feeApr*p,rewardsApr:[((f=i.rewardApr[0])!=null?f:0)*p,((y=i.rewardApr[1])!=null?y:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:r,positionTickUpperIndex:a,chainTime:u}){let s=n==="day"?1:n==="week"?7:n==="month"?30:0,c=e[n],l=o[Bt(e.mintA.address).toString()],m=o[Bt(e.mintB.address).toString()],p=e.mintA.decimals,f=e.mintB.decimals;if(!c||!l||!m)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let y=re.priceToSqrtPriceX64(new he(e.price),e.mintA.decimals,e.mintB.decimals),b=re.getSqrtPriceAtTick(r),g=re.getSqrtPriceAtTick(a),{amountSlippageA:A,amountSlippageB:k}=it.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:h,amountSlippageB:P}=it.getAmountsFromLiquidityWithSlippage(y,b,g,i,!1,!1,0),T=new he(A.toString()).div(new he(10).pow(p)).mul(l.value).add(new he(k.toString()).div(new he(10).pow(f)).mul(m.value)),I=new he(h.toString()).div(new he(10).pow(p)).mul(l.value).add(new he(P.toString()).div(new he(10).pow(f)).mul(m.value)),x=new he(1).div(T.add(I)),B=new he(c.volumeFee).mul(365).div(s).mul(x).mul(100).toNumber(),R=3600*24*365,L=e.rewardDefaultInfos.map(O=>{var E,_;let C=O.mint.decimals,F=o[O.mint.address];return u<((E=O.startTime)!=null?E:0)||u>((_=O.endTime)!=null?_:0)||!O.perSecond||!F||C===void 0?0:new he(F.value).mul(new he(O.perSecond).mul(R)).div(new he(10).pow(C)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:L,apr:B+L.reduce((O,C)=>O+C,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:u,amountHasFee:s}){var g,A;let c=re.priceToSqrtPriceX64(new he(e.price),e.mintA.decimals,e.mintB.decimals),l=re.getSqrtPriceAtTick(n),m=re.getSqrtPriceAtTick(o),p=ft(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!s),f=new wt(new he(p.amount.sub((A=p.fee)!=null?A:J).toString()).toFixed(0)),y;if(c.lte(l))y=t?it.getLiquidityFromAmountA(l,m,f):new wt(0);else if(c.lte(m)){let k=it.getLiquidityFromAmountA(c,m,f),h=it.getLiquidityFromAmountB(l,c,f);y=t?k:h}else y=t?new wt(0):it.getLiquidityFromAmountB(l,m,f);let b=await lt.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:o,liquidity:y,slippage:r,add:a});return{liquidity:y,amountA:t?p:b.amountA,amountB:t?b.amountB:p,amountSlippageA:t?p:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:p,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:r,add:a}){var b,g,A,k;let u=re.getSqrtPriceAtTick(n),s=re.getSqrtPriceAtTick(o),c=a?1+r:1-r,l=it.getAmountsForLiquidity(re.priceToSqrtPriceX64(new he(t.price),t.mintA.decimals,t.mintB.decimals),u,s,i,a),[m,p]=[ft(l.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ft(l.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,y]=[ft(l.amountA.muln(c),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),ft(l.amountB.muln(c),(k=t.mintB.extensions)==null?void 0:k.feeConfig,e,!0)];return{liquidity:i,amountA:m,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:Fn(m.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(s=>!n[s.id]).map(s=>new vt(s.id));(await yt(e,o)).forEach((s,c)=>{!s||(n[o[c].toBase58()]=lo.decode(s.data))});let r=t.map(s=>Ve(new vt(s.programId),new vt(s.id)).publicKey),a=await lt.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1}),u={};return t.reduce((s,c)=>V(N({},s),{[c.id]:V(N({accInfo:n[c.id]},n[c.id]),{id:new vt(c.id),version:6,programId:new vt(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:V(N({},c.config),{id:new vt(c.config.id),fundOwner:""}),currentPrice:new he(c.price),exBitmapAccount:Ve(new vt(c.programId),new vt(c.id)).publicKey,exBitmapInfo:a[Ve(new vt(c.programId),new vt(c.id)).publicKey.toBase58()],startTime:n[c.id].startTime.toNumber(),rewardInfos:n[c.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}static async fetchTickArrayInfo({connection:e,programId:t,poolId:n,tick:o,tickSpacing:i}){let r=ge.getTickArrayStartIndex(o,i),a=Le(t,n,r).publicKey,u=await e.getAccountInfo(a);if(!u)throw new Error(`tick array ${a.toBase58()} not found`);return Fo.decode(u.data)}static async fetchMultipleTickArrayInfo({connection:e,tickInfoList:t}){let n=t.map(i=>{let r=ge.getTickArrayStartIndex(i.tick,i.tickSpacing);return Le(i.programId,i.poolId,r).publicKey});return(await yt(e,n)).map(i=>i&&Fo.decode(i.data))}},cs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Wc(d,e){let t=e!=null?e:{};return V(N({},d),{type:"Concentrated",programId:d.programId.toString(),id:d.id.toString(),rewardDefaultInfos:d.rewardInfos.filter(n=>!n.mint.equals(vt.default)).map(n=>{var o,i;return{mint:dt({address:n.mint.toBase58(),programId:Ed.toBase58(),decimals:(o=t[n.mint.toBase58()].decimals)!=null?o:6}),perSecond:Number(n.emissionsPerSecondX64.divn(10**((i=t[n.mint.toBase58()].decimals)!=null?i:6)).toString()),startTime:n.openTime.toNumber(),endTime:n.endTime.toNumber()}}),rewardDefaultPoolInfos:"Clmm",price:d.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:d.ammConfig.tradeFeeRate,openTime:d.startTime.toString(),tvl:0,day:cs,week:cs,month:cs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:V(N({},d.ammConfig),{id:d.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),hasDynamicFee:!1,feeOn:"",launchMigratePool:!1,tips:[]})}import Rk from"bn.js";function kt(d){let e=`global:${d}`;return Buffer.from(Dd.digest(e)).slice(0,8)}wc.span;var qc=ke("Raydium_Clmm"),Tt={createPool:kt("create_pool"),createCustomizablePool:kt("create_customizable_pool"),createPermissionedPool:kt("create_permissioned_pool"),openPositionV2:kt("open_position_v2"),openPositionWithToken22Nft:kt("open_position_with_token22_nft"),closePosition:kt("close_position"),increaseLiquidityV2:kt("increase_liquidity_v2"),decreaseLiquidityV2:kt("decrease_liquidity_v2"),initializeReward:kt("initialize_reward"),setRewardParams:kt("set_reward_params"),updateRewardInfos:kt("update_reward_infos"),collectRemainingRewards:kt("collect_remaining_rewards"),swapV2:kt("swap_v2"),openLimitOrder:kt("open_limit_order"),increaseLimitOrder:kt("increase_limit_order"),decreaseLimitOrder:kt("decrease_limit_order"),settleLimitOrder:kt("settle_limit_order"),closeLimitOrder:kt("close_limit_order")},Uc=[188,37,179,131,82,150,84,73],Gc=[16,72,250,198,14,162,212,19],ye=class{static createPoolInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f){let y=v([ce("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ct,isSigner:!1,isWritable:!1},...(f!=null?f:[]).map(k=>({pubkey:k,isSigner:!1,isWritable:!1}))],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,startTime:J},g);let A=Buffer.from([...Tt.createPool,...g]);return new et({keys:b,programId:e,data:A})}static createCustomizablePoolInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b){let g=v([ce("sqrtPriceX64"),D("collectFeeOn"),He("enableDynamicFee")]),A=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ct,isSigner:!1,isWritable:!1},...y.map(P=>({pubkey:P,isSigner:!1,isWritable:!1})),...b?[{pubkey:b,isSigner:!1,isWritable:!1}]:[]],k=Buffer.alloc(g.span);g.encode({sqrtPriceX64:p,collectFeeOn:f,enableDynamicFee:b!==void 0},k);let h=Buffer.from([...Tt.createCustomizablePool,...k]);return new et({keys:A,programId:e,data:h})}static createPermissionedPoolInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([ce("sqrtPriceX64"),D("collectFeeOn"),He("enableDynamicFee"),je("seedIndex")]),P=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ct,isSigner:!1,isWritable:!1},...A.map(x=>({pubkey:x,isSigner:!1,isWritable:!1})),...k?[{pubkey:k,isSigner:!1,isWritable:!1}]:[]],T=Buffer.alloc(h.span);h.encode({sqrtPriceX64:y,collectFeeOn:b,enableDynamicFee:k!==void 0,seedIndex:g},T);let I=Buffer.from([...Tt.createPermissionedPool,...T]);return new et({keys:P,programId:e,data:I})}static initializeRewardInstruction(e,t,n,o,i,r,a,u,s,c,l,m){let p=v([w("openTime"),w("endTime"),ce("emissionsPerSecondX64")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ct,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:c,endTime:l,emissionsPerSecondX64:m},y);let b=Buffer.from([...Tt.initializeReward,...y]);return new et({keys:f,programId:e,data:b})}static updateRewardInfosInstruction(e,t){let n=[{pubkey:t,isSigner:!1,isWritable:!0}],o=Buffer.from([...Tt.updateRewardInfos]);return new et({keys:n,programId:e,data:o})}static setRewardParamsInstruction(e,t,n,o,i,r,a,u,s,c,l,m){let p=v([D("rewardIndex"),ce("emissionsPerSecondX64"),w("openTime"),w("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:s,emissionsPerSecondX64:m,openTime:c,endTime:l},y);let b=Buffer.from([...Tt.setRewardParams,...y]);return new et({keys:f,programId:e,data:b})}static closePositionInstruction(e,t,n,o,i,r,a){let u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:r?rt:Ne,isSigner:!1,isWritable:!1}];a&&u.push({pubkey:a,isSigner:!1,isWritable:!0});let s=Buffer.from([...Tt.closePosition]);return new et({keys:u,programId:e,data:s})}static openPositionV2Instruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h,P,T,I,x,S,B,R){let L=v([st("tickLower"),st("tickUpper"),st("tickArrayLowerStart"),st("tickArrayUpperStart"),ce("liquidity"),w("amountMaxA"),w("amountMaxB"),He("withMetadata"),D("optionBaseFlag"),He("baseFlag")]),O=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:Ct,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...R?[{pubkey:R,isSigner:!1,isWritable:!0}]:[]],C=Buffer.alloc(L.span);L.encode({tickLower:A,tickUpper:k,tickArrayLowerStart:h,tickArrayUpperStart:P,liquidity:T,amountMaxA:I,amountMaxB:x,withMetadata:S,optionBaseFlag:B!==null?1:0,baseFlag:B!=null?B:!1},C);let F=Buffer.from([...Tt.openPositionV2,...C]);return new et({keys:O,programId:e,data:F})}static increaseLiquidityV2Instruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([ce("liquidity"),w("amountMaxA"),w("amountMaxB"),D("optionBaseFlag"),He("baseFlag")]),P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[]],T=Buffer.alloc(h.span);h.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:A!==null?1:0,baseFlag:A!=null?A:!1},T);let I=Buffer.from([...Tt.increaseLiquidityV2,...T]);return new et({keys:P,programId:e,data:I})}static decreaseLiquidityV2Instruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([ce("liquidity"),w("amountMinA"),w("amountMinB")]),P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...y.map(x=>[{pubkey:x.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=Buffer.alloc(h.span);h.encode({liquidity:b,amountMinA:g,amountMinB:A},T);let I=Buffer.from([...Tt.decreaseLiquidityV2,...T]);return new et({keys:P,programId:e,data:I})}static swapV2Instruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g){let A=v([w("amount"),w("otherAmountThreshold"),ce("sqrtPriceLimitX64"),He("isBaseInput")]),k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...l.map(T=>({pubkey:T,isSigner:!1,isWritable:!0}))],h=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let P=Buffer.from([...Tt.swapV2,...h]);return new et({keys:k,programId:e,data:P})}static collectRemainingRewardsInstruction(e,t,n,o,i,r,a){let u=v([D("rewardIndex")]),s=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1}],c=Buffer.alloc(u.span);u.encode({rewardIndex:a},c);let l=Buffer.from([...Tt.collectRemainingRewards,...c]);return new et({keys:s,programId:e,data:l})}static openPositionWithToken22NftInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h,P,T,I,x,S,B){let R=v([st("tickLower"),st("tickUpper"),st("tickArrayLowerStart"),st("tickArrayUpperStart"),ce("liquidity"),w("amountMaxA"),w("amountMaxB"),He("withMetadata"),D("optionBaseFlag"),He("baseFlag")]),L=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Ct,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],O=Buffer.alloc(R.span);R.encode({tickLower:g,tickUpper:A,tickArrayLowerStart:k,tickArrayUpperStart:h,liquidity:P,amountMaxA:T,amountMaxB:I,withMetadata:x,optionBaseFlag:S!==null?1:0,baseFlag:S!=null?S:!1},O);let C=Buffer.from([...Tt.openPositionWithToken22Nft,...O]);return new et({keys:L,programId:e,data:C})}static openLimitOrderInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A){let k=v([D("nonceIndex"),He("zeroForOne"),st("tickIndex"),w("amount")]),h=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],P=Buffer.alloc(k.span);k.encode({nonceIndex:f,zeroForOne:y,tickIndex:b,amount:g},P);let T=Buffer.from([...Tt.openLimitOrder,...P]);return new et({keys:h,programId:e,data:T})}static increaseLimitOrderInstruction(e,t,n,o,i,r,a,u,s,c){let l=v([w("amount")]),m=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],p=Buffer.alloc(l.span);l.encode({amount:c},p);let f=Buffer.from([...Tt.increaseLimitOrder,...p]);return new et({keys:m,programId:e,data:f})}static decreaseLimitOrderInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f){let y=v([w("amount"),w("amountMin")]),b=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},...f?[{pubkey:f,isSigner:!1,isWritable:!0}]:[]],g=Buffer.alloc(y.span);y.encode({amount:m,amountMin:p},g);let A=Buffer.from([...Tt.decreaseLimitOrder,...g]);return new et({keys:b,programId:e,data:A})}static settleLimitOrderInstruction(e,t,n,o,i,r,a,u,s){let c=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],l=Buffer.from([...Tt.settleLimitOrder]);return new et({keys:c,programId:e,data:l})}static closeLimitOrderInstruction(e,t,n,o){let i=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0}],r=Buffer.from([...Tt.closeLimitOrder]);return new et({keys:i,programId:e,data:r})}static createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:u}=e,[s,c]=[new H(o.address),new H(i.address)],[l,m]=[new H(o.programId||Ne),new H(i.programId||Ne)],{publicKey:p}=Kc(t,r,s,c),{publicKey:f}=rs(t,p),{publicKey:y}=Qt(t,p,s),{publicKey:b}=Qt(t,p,c),g=Ve(t,p).publicKey,A=[this.createPoolInstruction(t,p,n,r,f,s,y,l,c,b,m,g,a,u)];return{signers:[],instructions:A,instructionTypes:[X.CreateAccount,X.ClmmCreatePool],address:{poolId:p,observationId:f,exBitmapAccount:g,mintA:s,mintB:c,mintAProgram:l,mintBProgram:m,mintAVault:y,mintBVault:b},lookupTableAddress:[]}}static createPermissionedPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:u,payer:s,seedIndex:c}=e,[l,m]=[new H(o.address),new H(i.address)],[p,f]=[new H(o.programId||Ne),new H(i.programId||Ne)],{publicKey:y}=Rc(t,r,l,m,c),{publicKey:b}=Cc(t,s),{publicKey:g}=rs(t,y),{publicKey:A}=Qt(t,y,l),{publicKey:k}=Qt(t,y,m),h=Ve(t,y).publicKey,P=[this.createPoolInstruction(t,y,n,r,g,l,A,p,m,k,f,h,a,u)];return{signers:[],instructions:P,instructionTypes:[X.CreateAccount,X.ClmmCreatePool],address:{poolId:y,observationId:g,exBitmapAccount:h,mintA:l,mintB:m,mintAProgram:p,mintBProgram:f,mintAVault:A,mintBVault:k,permission:b},lookupTableAddress:[]}}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:u,base:s,withMetadata:c,getEphemeralSigners:l,nft2022:m}){let p=[],[f,y]=[new H(e.programId),new H(e.id)],b;if(l)b=new H((await l(1))[0]);else{let B=Kr.generate();p.push(B),b=B.publicKey}let g=ge.getTickArrayStartIndex(o,e.config.tickSpacing),A=ge.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:k}=Le(f,y,g),{publicKey:h}=Le(f,y,A),{publicKey:P}=m?te(n.wallet,b,rt):te(n.wallet,b,Ne),{publicKey:T}=Nn(b),{publicKey:I}=Zt(f,b),{publicKey:x}=ln(f,y,o,i),S=m?this.openPositionWithToken22NftInstruction(f,n.feePayer,y,n.wallet,b,P,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,g,A,r,a,u,c==="create",s&&s==="MintA",Wt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?Ve(f,y).publicKey:void 0):this.openPositionV2Instruction(f,n.feePayer,y,n.wallet,b,P,T,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,g,A,r,a,u,c==="create",null,Wt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?Ve(f,y).publicKey:void 0);return{signers:p,instructions:[S],instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:k,tickArrayUpper:h,positionNftAccount:P,metadataAccount:T,personalPosition:I,protocolPosition:x}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:u,liquidity:s,withMetadata:c,getEphemeralSigners:l,nft2022:m}){let p=[],[f,y]=[new H(e.programId),new H(e.id)],b;if(l)b=new H((await l(1))[0]);else{let B=Kr.generate();p.push(B),b=B.publicKey}let g=ge.getTickArrayStartIndex(o,e.config.tickSpacing),A=ge.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:k}=Le(f,y,g),{publicKey:h}=Le(f,y,A),{publicKey:P}=m?te(n.wallet,b,rt):te(n.wallet,b,Ne),{publicKey:T}=Nn(b),{publicKey:I}=Zt(f,b),{publicKey:x}=ln(f,y,o,i),S=m?this.openPositionWithToken22NftInstruction(f,n.feePayer,y,n.wallet,b,P,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,g,A,s,!r||r==="MintA"?a:u,!r||r==="MintA"?u:a,c==="create",r&&r==="MintA",Wt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?Ve(f,y).publicKey:void 0):this.openPositionV2Instruction(f,n.feePayer,y,n.wallet,b,P,T,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,g,A,J,r==="MintA"?a:u,r==="MintA"?u:a,c==="create",r==="MintA",Wt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?Ve(f,y).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:k,tickArrayUpper:h,positionNftAccount:P,metadataAccount:T,personalPosition:I,protocolPosition:x},instructions:[S],signers:p,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:u,base:s,withMetadata:c,getEphemeralSigners:l,nft2022:m}){let p,f=[];if(l)p=new H((await l(1))[0]);else{let B=Kr.generate();f.push(B),p=B.publicKey}let[y,b]=[new H(e.programId),new H(e.id)],g=ge.getTickArrayStartIndex(o,e.config.tickSpacing),A=ge.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:k}=Le(y,b,g),{publicKey:h}=Le(y,b,A),{publicKey:P}=m?te(n.wallet,p,rt):te(n.wallet,p,Ne),{publicKey:T}=Nn(p),{publicKey:I}=Zt(y,p),{publicKey:x}=ln(y,b,o,i),S=m?this.openPositionWithToken22NftInstruction(y,n.wallet,b,n.wallet,p,P,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,i,g,A,r,a,u,c==="create",s&&s==="MintA",Wt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?Ve(y,b).publicKey:void 0):this.openPositionV2Instruction(y,n.wallet,b,n.wallet,p,P,T,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,i,g,A,r,a,u,c==="create",null,Wt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?Ve(y,b).publicKey:void 0);return{address:{nftMint:p,tickArrayLower:k,tickArrayUpper:h,positionNftAccount:P,metadataAccount:T,personalPosition:I,protocolPosition:x},instructions:[S],signers:f,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new H(e.programId),a=i?te(n.wallet,o.nftMint,rt).publicKey:te(n.wallet,o.nftMint,Ne).publicKey,{publicKey:u}=Zt(r,o.nftMint),s=[];return s.push(this.closePositionInstruction(r,n.wallet,o.nftMint,a,u,!!i,new H(e.id))),{address:{positionNftAccount:a,personalPosition:u},signers:[],instructions:s,instructionTypes:[X.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:u}){let[s,c]=[new H(e.programId),new H(e.id)],l=ge.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),m=ge.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Le(s,c,l),{publicKey:f}=Le(s,c,m),{publicKey:y}=u?te(o.wallet,n.nftMint,rt):te(o.wallet,n.nftMint,Ne),{publicKey:b}=Zt(s,n.nftMint),{publicKey:g}=ln(s,c,n.tickLower,n.tickUpper),A=this.increaseLiquidityV2Instruction(s,o.wallet,y,b,c,g,p,f,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),i,r,a,null,Wt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[l,m]})?Ve(s,c).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},signers:[],instructions:[A],instructionTypes:[X.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:r,otherAmountMax:a,nft2022:u}){let[s,c]=[new H(e.programId),new H(e.id)],l=ge.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),m=ge.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Le(s,c,l),{publicKey:f}=Le(s,c,m),{publicKey:y}=u?te(o.wallet,n.nftMint,rt):te(o.wallet,n.nftMint,Ne),{publicKey:b}=Zt(s,n.nftMint),{publicKey:g}=ln(s,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},instructions:[this.increaseLiquidityV2Instruction(s,o.wallet,y,b,c,g,p,f,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),J,i==="MintA"?r:a,i==="MintA"?a:r,i==="MintA",Wt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[l,m]})?Ve(s,c).publicKey:void 0)],signers:[],instructionTypes:[X.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:r,amountMinB:a,programId:u,nft2022:s}){let[c,l]=[new H(e.programId),new H(e.id)],m=ge.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),p=ge.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:f}=Le(c,l,m),{publicKey:y}=Le(c,l,p),{publicKey:b}=s?te(o.wallet,n.nftMint,rt):te(o.wallet,n.nftMint,u),{publicKey:g}=Zt(c,n.nftMint),{publicKey:A}=ln(c,l,n.tickLower,n.tickUpper),k=new Map;for(let I=0;I<t.rewardInfos.length;I++)k.set(t.rewardInfos[I].mint.address,o.rewardAccounts[I]);let h=[];for(let I=0;I<t.rewardInfos.length;I++){let x=t.rewardInfos[I].mint.address,S=k.get(x);S&&h.push({poolRewardVault:new H(t.rewardInfos[I].vault),ownerRewardVault:S,rewardMint:new H(x)})}let P=[],T=this.decreaseLiquidityV2Instruction(c,o.wallet,b,g,l,A,f,y,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),h,i,r,a,Wt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[m,p]})?Ve(c,l).publicKey:void 0);return P.push(T),{address:{tickArrayLower:f,tickArrayUpper:y,positionNftAccount:b,personalPosition:g,protocolPosition:A},signers:[],instructions:P,instructionTypes:[X.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:s}){let[c,l]=[new H(e.programId),new H(e.id)],[m,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintA.address.toString()===i.toString(),g=[this.swapV2Instruction(c,o.wallet,l,new H(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?m:p,b?p:m,b?f:y,b?y:f,s,n,r,a,u,!0,Ve(c,l).publicKey)];return{signers:[],instructions:g,instructionTypes:[X.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:i,amountOut:r,amountInMax:a,sqrtPriceLimitX64:u,remainingAccounts:s}){let[c,l]=[new H(e.programId),new H(e.id)],[m,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintB.address.toString()===i.toBase58(),g=[this.swapV2Instruction(c,o.wallet,l,new H(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?m:p,b?p:m,b?f:y,b?y:f,s,n,r,a,u,!1,Ve(c,l).publicKey)];return{signers:[],instructions:g,instructionTypes:[X.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new H(e.programId),new H(e.id)],a=Lc(i,r,o.mint).publicKey,u=Bi(i).publicKey,s=[this.initializeRewardInstruction(i,n.wallet,r,u,new H(e.config.id),n.tokenAccount,o.programId,o.mint,a,new Cr(o.openTime),new Cr(o.endTime),o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:s,instructionTypes:[X.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new H(e.programId),new H(e.id)],a,u,s;for(let m=0;m<e.rewardDefaultInfos.length;m++)e.rewardDefaultInfos[m].mint.address===o.mint.toString()&&(a=m,u=new H(t.rewardInfos[m].vault),s=new H(t.rewardInfos[m].mint.address));(a===void 0||u===void 0)&&qc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=Bi(i).publicKey,l=[this.setRewardParamsInstruction(i,n.wallet,r,c,new H(e.config.id),n.tokenAccount,u,s,a,new Cr(o.openTime),new Cr(o.endTime),o.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:c},signers:[],instructions:l,instructionTypes:[X.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new H(e.programId),new H(e.id)],a,u;for(let c=0;c<e.rewardDefaultInfos.length;c++)e.rewardDefaultInfos[c].mint.address===o.toString()&&(a=c,u=new H(t.rewardInfos[c].vault));(a===void 0||u===void 0)&&qc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let s=[this.collectRemainingRewardsInstruction(i,n.wallet,r,n.tokenAccount,u,o,a)];return{address:{rewardVault:u},signers:[],instructions:s,instructionTypes:[X.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:i,nftMint:r,nft2022:a,getEphemeralSigners:u}){let s=[],c;if(u)c=new H((await u(1))[0]);else{let g=Kr.generate();s.push(g),c=g.publicKey}let l=a?te(i,r,rt).publicKey:te(i,r,Ne).publicKey,{publicKey:m}=Zt(n,r),p=vo(e,c).publicKey,f=te(i,c,Ne).publicKey,y=Nn(c).publicKey,b=ye.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:i,lockOwner:i,positionNftAccount:l,positionId:m,lockPositionId:p,lockNftMint:c,lockNftAccount:f,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:r,authPositionNftAccount:te(t,r,a?rt:Ne).publicKey,positionNftProgram:a?rt:Ne});return{address:{positionId:m,lockPositionId:p,lockNftAccount:f,lockNftMint:c,positionNftAccount:l,metadataAccount:y},instructions:[b],signers:s,instructionTypes:[X.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:i,positionNftAccount:r,positionId:a,positionNftMint:u,authPositionNftAccount:s,positionNftProgram:c,lockPositionId:l,lockNftMint:m,lockNftAccount:p,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:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:Ct,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}],g=v([He("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:y},A);let k=Buffer.from([...Uc,...A]);return new et({keys:b,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=te(o,i,Ne),{publicKey:a}=Zt(n,i),u=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:as(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}];return new et({keys:u,programId:e,data:Buffer.from(Uc)})}static harvestLockPositionInstruction(e){let[t,n]=[new H(e.poolKeys.programId),new H(e.poolKeys.id)],o=ge.getTickArrayStartIndex(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=ge.getTickArrayStartIndex(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=Le(t,n,o),{publicKey:a}=Le(t,n,i),{publicKey:u}=te(e.owner,e.ownerPosition.nftMint,Ne),{publicKey:s}=Zt(t,e.ownerPosition.nftMint),{publicKey:c}=ln(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),l=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)l.push({poolRewardVault:new H(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new H(e.poolKeys.rewardInfos[f].mint.address)});let m=[...l.map(f=>[{pubkey:f.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:as(e.programId,s).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:new H(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new H(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...m];return new et({keys:p,programId:e.programId,data:Buffer.from(Gc)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:i,lockNftMint:r,lockNftAccount:a,positionNftAccount:u,positionId:s,poolId:c,protocolPosition:l,vaultA:m,vaultB:p,tickArrayLower:f,tickArrayUpper:y,userVaultA:b,userVaultB:g,mintA:A,mintB:k,rewardAccounts:h,exTickArrayBitmap:P}){let T=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...h.map(x=>[{pubkey:x.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.rewardMint,isSigner:!1,isWritable:!1}]).flat()],I=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,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:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...T];return new et({keys:I,programId:e,data:Buffer.from(Gc)})}};var Ci=class extends Qe{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var P;let{programId:t,owner:n=((P=this.scope.owner)==null?void 0:P.publicKey)||G.default,mint1:o,mint2:i,ammConfig:r,initialPrice:a,computeBudgetConfig:u,txVersion:s,txTipConfig:c,feePayer:l}=e,m=this.createTxBuilder(l),[p,f,y]=new at(new G(o.address).toBuffer()).gt(new at(new G(i.address).toBuffer()))?[i,o,new _n(1).div(a)]:[o,i,a],b=re.priceToSqrtPriceX64(y,p.decimals,f.decimals),g=[],A=[];p.programId===nn.toBase58()&&A.push(po(t,new G(p.address)).publicKey),f.programId===nn.toBase58()&&A.push(po(t,new G(f.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(A)).forEach((T,I)=>{T&&g.push(A[I])});let h=await ye.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:f,ammConfigId:r.id,initialPriceX64:b,extendMintAccount:g});return m.addInstruction(h),m.addCustomComputeBudget(u),m.addTipInstruction(c),m.versionBuild({txVersion:s,extInfo:{address:V(N({},h.address),{observationId:h.address.observationId.toBase58(),exBitmapAccount:h.address.exBitmapAccount.toBase58(),programId:t.toString(),id:h.address.poolId.toString(),mintA:p,mintB:f,openTime:"0",vault:{A:h.address.mintAVault.toString(),B:h.address.mintBVault.toString()},rewardInfos:[],config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:N({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:h.address.poolId.toString(),mintA:p,mintB:f,feeRate:r.tradeFeeRate,openTime:"0",programId:t.toString(),price:y.toNumber(),config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]},feeOn:"Both",hasDynamicFee:!1,launchMigratePool:!1,burnPercent:0,tips:[]},kr)}})}async createCustomizablePool(e){var S;let{programId:t,owner:n=((S=this.scope.owner)==null?void 0:S.publicKey)||G.default,mint1:o,mint2:i,initialPrice:r,ammConfig:a,collectFeeOn:u=0,dynamicFeeConfig:s,computeBudgetConfig:c,txVersion:l,txTipConfig:m,feePayer:p,addSupportMintExt:f}=e,y=this.createTxBuilder(p),[b,g,A]=new at(new G(o.address).toBuffer()).gt(new at(new G(i.address).toBuffer()))?[i,o,new _n(1).div(r)]:[o,i,r],k=re.priceToSqrtPriceX64(A,b.decimals,g.decimals),h=[],P=[];f&&(b.programId===nn.toBase58()&&P.push(po(t,new G(b.address)).publicKey),g.programId===nn.toBase58()&&P.push(po(t,new G(g.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(P)).forEach((R,L)=>{R&&h.push(P[L])}));let{address:T}=await ye.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:g,ammConfigId:a.id,initialPriceX64:k,extendMintAccount:h}),I=[];if(s){if(!await this.scope.connection.getAccountInfo(s))throw new Error("Dynamic Fee Config not found. Run 03_admin_create_dynamic_fee_config.ts first.");console.log("Dynamic Fee Config",s.toBase58()),I.push({pubkey:s,isSigner:!1,isWritable:!1})}let x=ye.createCustomizablePoolInstruction(t,T.poolId,this.scope.ownerPubKey,a.id,T.mintA,T.mintB,T.mintAVault,T.mintBVault,T.observationId,T.exBitmapAccount,T.mintAProgram,T.mintBProgram,k,u,[...h,...I.map(B=>B.pubkey)],s);return y.addInstruction({instructions:[x]}),y.addCustomComputeBudget(c),y.addTipInstruction(m),y.versionBuild({txVersion:l,extInfo:{address:V(N({},T),{observationId:T.observationId.toBase58(),exBitmapAccount:T.exBitmapAccount.toBase58(),programId:t.toString(),id:T.poolId.toString(),mintA:b,mintB:g,openTime:"0",vault:{A:T.mintAVault.toString(),B:T.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:T.poolId.toString(),mintA:b,mintB:g,feeRate:a.tradeFeeRate,openTime:"0",programId:t.toString(),price:A.toNumber(),config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0,collectFeeOn:u,feeOn:u===0?"Both":u===1?"TokenA":"TokenB",hasDynamicFee:!!s,tips:[],launchMigratePool:!1},kr)}})}async createPermissionedPool(e){var R;let{programId:t,owner:n=((R=this.scope.owner)==null?void 0:R.publicKey)||G.default,mint1:o,mint2:i,initialPrice:r,ammConfig:a,collectFeeOn:u=0,dynamicFeeConfig:s,computeBudgetConfig:c,txVersion:l,txTipConfig:m,feePayer:p,addSupportMintExt:f}=e,y=this.createTxBuilder(p),[b,g,A]=new at(new G(o.address).toBuffer()).gt(new at(new G(i.address).toBuffer()))?[i,o,new _n(1).div(r)]:[o,i,r],k=re.priceToSqrtPriceX64(A,b.decimals,g.decimals),h=[],P=[];f&&(b.programId===nn.toBase58()&&P.push(po(t,new G(b.address)).publicKey),g.programId===nn.toBase58()&&P.push(po(t,new G(g.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(P)).forEach((O,C)=>{O&&h.push(P[C])}));let T=p!=null?p:this.scope.ownerPubKey,I=Math.floor(Math.random()*Math.pow(2,16))+1,{address:x}=await ye.createPermissionedPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:g,ammConfigId:a.id,initialPriceX64:k,extendMintAccount:h,payer:T,seedIndex:I}),S=[];if(s){if(!await this.scope.connection.getAccountInfo(s))throw new Error("Dynamic Fee Config not found. Run 03_admin_create_dynamic_fee_config.ts first.");console.log("Dynamic Fee Config",s.toBase58()),S.push({pubkey:s,isSigner:!1,isWritable:!1})}let B=ye.createPermissionedPoolInstruction(t,T,T,x.permission,a.id,x.poolId,x.mintA,x.mintB,x.mintAVault,x.mintBVault,x.observationId,x.exBitmapAccount,x.mintAProgram,x.mintBProgram,k,u,I,[...h,...S.map(L=>L.pubkey)],s);return y.addInstruction({instructions:[B]}),y.addCustomComputeBudget(c),y.addTipInstruction(m),y.versionBuild({txVersion:l,extInfo:{address:V(N({},x),{observationId:x.observationId.toBase58(),exBitmapAccount:x.exBitmapAccount.toBase58(),programId:t.toString(),id:x.poolId.toString(),mintA:b,mintB:g,openTime:"0",vault:{A:x.mintAVault.toString(),B:x.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:x.poolId.toString(),mintA:b,mintB:g,feeRate:a.tradeFeeRate,openTime:"0",programId:t.toString(),price:A.toNumber(),config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0,collectFeeOn:u,feeOn:u===0?"Both":u===1?"TokenA":"TokenB",hasDynamicFee:!!s,tips:[],launchMigratePool:!1},kr)}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r=null,baseAmount:a,otherAmountMax:u,liquidity:s=new at(0),nft2022:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:p="create",getEphemeralSigners:f,computeBudgetConfig:y,txTipConfig:b,txVersion:g,feePayer:A}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let k=this.createTxBuilder(A),h=null,P=null,T=n.useSOLBalance&&e.mintA.address===j.toString(),I=n.useSOLBalance&&e.mintB.address===j.toString(),[x,S]=r==="MintA"?[a,u]:[u,a],{account:B,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new G(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:T||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:l,checkCreateATAOwner:m});B&&(h=B),k.addInstruction(R||{});let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new G(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:I||S.isZero()?{payer:this.scope.ownerPubKey,amount:S}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:l,checkCreateATAOwner:m});L&&(P=L),k.addInstruction(O||{}),(!h||!P)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:h==null?void 0:h.toBase58(),ownerTokenAccountB:P==null?void 0:P.toBase58()});let C=t!=null?t:await this.getClmmPoolKeys(e.id.toString()),F=await ye.openPositionFromBaseInstructions({poolInfo:e,poolKeys:C,ownerInfo:V(N({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:P}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:u,liquidity:s,withMetadata:p,getEphemeralSigners:f,nft2022:c});return k.addInstruction(F),k.addCustomComputeBudget(y),k.addTipInstruction(b),k.versionBuild({txVersion:g,extInfo:N({},F.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,base:r=null,tickLower:a,tickUpper:u,liquidity:s,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:p,computeBudgetConfig:f,txTipConfig:y,getEphemeralSigners:b,nft2022:g,feePayer:A}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let k=this.createTxBuilder(A),h=null,P=null,T=n.useSOLBalance&&e.mintA.address===j.toBase58(),I=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new G(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:T||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:c,checkCreateATAOwner:l});x&&(h=x),k.addInstruction(S||{});let{account:B,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new G(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:I||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:c,checkCreateATAOwner:l});B&&(P=B),k.addInstruction(R||{}),(h===void 0||P===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let L=t||await this.getClmmPoolKeys(e.id.toString()),O=await ye.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:L,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:P},tickLower:a,tickUpper:u,liquidity:s,amountMaxA:o,amountMaxB:i,base:r,withMetadata:m,getEphemeralSigners:b,nft2022:g});return k.addInstruction(O),k.addCustomComputeBudget(f),k.addTipInstruction(y),k.versionBuild({txVersion:p,extInfo:{address:O.address}})}async increasePositionFromLiquidity(e){var B;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:r,liquidity:a,ownerInfo:u,associatedOnly:s=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:p,feePayer:f}=e,y=this.createTxBuilder(f),b,g,A=u.useSOLBalance&&t.mintA.address===j.toString(),k=u.useSOLBalance&&t.mintB.address===j.toString(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,associatedOnly:A?!1:s,checkCreateATAOwner:c});h&&(b=h),y.addInstruction(P||{});let{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:s,checkCreateATAOwner:c});T&&(g=T),y.addInstruction(I||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=n!=null?n:await this.getClmmPoolKeys(t.id),S=ye.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:x,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},liquidity:a,amountMaxA:i,amountMaxB:r,nft2022:(B=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:B.owner.equals(nn)});return y.addInstruction(S),y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:p,extInfo:{address:S.address}})}async increasePositionFromBase(e){var S;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:r,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:c,txTipConfig:l,txVersion:m,feePayer:p}=e,f=this.createTxBuilder(p),y,b,g=a.useSOLBalance&&t.mintA.address===j.toString(),A=a.useSOLBalance&&t.mintB.address===j.toString(),{account:k,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||(o==="MintA"?i:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:r}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:s});k&&(y=k),f.addInstruction(h||{});let{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(o==="MintA"?r:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:i}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:u,checkCreateATAOwner:s});P&&(b=P),f.addInstruction(T||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),x=ye.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:o,baseAmount:i,otherAmountMax:r,nft2022:(S=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:S.owner.equals(nn)});return f.addInstruction(x),f.addCustomComputeBudget(c),f.addTipInstruction(l),f.versionBuild({txVersion:m,extInfo:{address:x.address}})}async decreaseLiquidity(e){var O;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:r,amountMinB:a,liquidity:u,associatedOnly:s=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:p,feePayer:f}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let y=this.createTxBuilder(f),b=i.useSOLBalance&&t.mintA.address===j.toString(),g=i.useSOLBalance&&t.mintB.address===j.toString(),A,k,{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:s,checkCreateATAOwner:c});A=h,P&&y.addInstruction(P);let{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:s,checkCreateATAOwner:c});k=T,I&&y.addInstruction(I);let x=n!=null?n:await this.getClmmPoolKeys(t.id),S=[];for(let C of x.rewardInfos){let F=i.useSOLBalance&&C.mint.address===j.toString(),E;if(C.mint.address===t.mintA.address)E=A;else if(C.mint.address===t.mintB.address)E=k;else{let{account:_,instructionParams:z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(C.mint.programId),mint:new G(C.mint.address),notUseTokenAccount:F,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!F,associatedOnly:F?!1:s,checkCreateATAOwner:c});E=_,z&&y.addInstruction(z)}S.push(E)}!A&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let B=(O=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:O.owner.equals(nn),R=await ye.decreaseLiquidityInstructions({poolInfo:t,poolKeys:x,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k,rewardAccounts:S},liquidity:u,amountMinA:r,amountMinB:a,nft2022:B});y.addInstruction({instructions:R.instructions,instructionTypes:[X.ClmmDecreasePosition]});let L=N({},R.address);if(i.closePosition){let C=await ye.closePositionInstructions({poolInfo:t,poolKeys:x,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:B});y.addInstruction({endInstructions:C.instructions,endInstructionTypes:C.instructionTypes}),L=N(N({},L),C.address)}return y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:p,extInfo:{address:L}})}async lockPosition(e){var f;let{programId:t=ai,authProgramId:n=dr,poolProgramId:o=Rn,ownerPosition:i,payer:r,computeBudgetConfig:a,txTipConfig:u,txVersion:s,getEphemeralSigners:c,feePayer:l}=e,m=this.createTxBuilder(l),p=await ye.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:r!=null?r:this.scope.ownerPubKey,nftMint:i.nftMint,getEphemeralSigners:c,nft2022:(f=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:f.owner.equals(nn)});return m.addInstruction(p),m.addCustomComputeBudget(a),m.addTipInstruction(u),m.versionBuild({txVersion:s,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=ai,authProgramId:n=dr,clmmProgram:o=Rn,poolKeys:i,lockData:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:u=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:c,txTipConfig:l,txVersion:m,feePayer:p}=e,f=i||await this.getClmmPoolKeys(r.poolId.toString()),y=this.createTxBuilder(p),b=await this.scope.connection.getAccountInfo(r.positionId);b||this.logger.logWithError("position not found",r.positionId);let g=Tr.decode(b.data),A=a.useSOLBalance&&f.mintA.address===j.toString(),k=a.useSOLBalance&&f.mintB.address===j.toString(),h,P,{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new G(f.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:A?!1:u,checkCreateATAOwner:s});h=T,I&&y.addInstruction(I);let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new G(f.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:k?!1:u,checkCreateATAOwner:s});P=x,S&&y.addInstruction(S);let B={},R=[];for(let ee of f.rewardInfos){let ne=a.useSOLBalance&&ee.mint.address===j.toString(),Z=B[ee.mint.address];if(!Z){let{account:pe,instructionParams:oe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(ee.mint.programId),mint:new G(ee.mint.address),notUseTokenAccount:ne,owner:this.scope.ownerPubKey,skipCloseAccount:!ne,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ne?!1:u});Z=pe,oe&&y.addInstruction(oe)}B[ee.mint.address]=Z,R.push(Z)}let L=vo(t,r.lockNftMint).publicKey,O=te(this.scope.ownerPubKey,r.lockNftMint,Do).publicKey,C=ge.getTickArrayStartIndex(g.tickLower,f.config.tickSpacing),F=ge.getTickArrayStartIndex(g.tickUpper,f.config.tickSpacing),{publicKey:E}=Le(new G(f.programId),r.poolId,C),{publicKey:_}=Le(new G(f.programId),r.poolId,F),{publicKey:z}=ln(new G(f.programId),r.poolId,g.tickLower,g.tickUpper),Q=[];for(let ee=0;ee<f.rewardInfos.length;ee++){let ne=f.rewardInfos[ee].mint.address,Z=B[ne];Z&&Q.push({poolRewardVault:new G(f.rewardInfos[ee].vault),ownerRewardVault:Z,rewardMint:new G(ne)})}let Y=await ye.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:L,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:O,positionNftAccount:r.nftAccount,positionId:r.positionId,poolId:r.poolId,protocolPosition:z,vaultA:new G(f.vault.A),vaultB:new G(f.vault.B),tickArrayLower:E,tickArrayUpper:_,userVaultA:h,userVaultB:P,mintA:new G(f.mintA.address),mintB:new G(f.mintB.address),rewardAccounts:Q,exTickArrayBitmap:Ve(o,r.poolId).publicKey});return y.addInstruction({instructions:[Y],instructionTypes:[X.ClmmHarvestLockPosition]}),y.addCustomComputeBudget(c),y.addTipInstruction(l),y.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){var l;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let u=this.createTxBuilder(a),s=t!=null?t:await this.getClmmPoolKeys(e.id),c=ye.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(l=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:l.owner.equals(nn)});return u.addCustomComputeBudget(i),u.addTipInstruction(r),u.addInstruction(c).versionBuild({txVersion:o,extInfo:{address:c.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txVersion:a,feePayer:u}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let s=this.createTxBuilder(u),c=t.useSOLBalance&&n.mint.address.toString()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(n.mint.programId),mint:new G(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new at(new _n(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:o,checkCreateATAOwner:i});p&&s.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=ye.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new G(n.mint.programId),mint:new G(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:fo(n.perSecond)}});return s.addInstruction(y),s.addCustomComputeBudget(r),s.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:u,txVersion:s,feePayer:c}){for(let p of o)p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let l=this.createTxBuilder(c),m={};for(let p of o){let f=n.useSOLBalance&&p.mint.address===j.toString(),y=p.perSecond.mul(p.endTime-p.openTime),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(p.mint.programId),mint:new G(p.mint.address),notUseTokenAccount:!!f,skipCloseAccount:!f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new at(new _n(y.toFixed(0)).gte(y)?y.toFixed(0):y.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:i,checkCreateATAOwner:r});g&&l.addInstruction(g),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let A=t!=null?t:await this.getClmmPoolKeys(e.id),k=ye.initRewardInstructions({poolInfo:e,poolKeys:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new G(p.mint.programId),mint:new G(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:fo(p.perSecond)}});m=N(N({},m),k.address),l.addInstruction(k)}return l.addCustomComputeBudget(a),l.addTipInstruction(u),l.versionBuild({txVersion:s,extInfo:{address:m}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:u,feePayer:s}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(s),l=t.useSOLBalance&&n.mint.equals(j),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new at(new _n(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:l?!1:o,checkCreateATAOwner:i});p&&c.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=ye.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:fo(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(r),c.addTipInstruction(a),c.versionBuild({txVersion:u,extInfo:{address:y.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:u,txVersion:s,feePayer:c}){let l=this.createTxBuilder(c),m={};for(let p of o){p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let f=n.useSOLBalance&&p.mint.address===j.toString(),{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(p.mint.programId),mint:new G(p.mint.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new at(new _n(p.perSecond.mul(p.endTime-p.openTime).toFixed(0)).gte(p.perSecond.mul(p.endTime-p.openTime))?p.perSecond.mul(p.endTime-p.openTime).toFixed(0):p.perSecond.mul(p.endTime-p.openTime).add(1).toFixed(0))}:void 0,associatedOnly:f?!1:i,checkCreateATAOwner:r});b&&l.addInstruction(b),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),A=ye.setRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{mint:new G(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:fo(p.perSecond)}});l.addInstruction(A),m=N(N({},m),A.address)}return l.addCustomComputeBudget(a),l.addTipInstruction(u),l.versionBuild({txVersion:s,extInfo:{address:m}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:u,feePayer:s}){let c=e.rewardDefaultInfos.find(g=>g.mint.address===n.toString());c||this.logAndCreateError("reward mint error","not found reward mint",n);let l=this.createTxBuilder(s),m=t.useSOLBalance&&n.equals(j),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(c.mint.programId),mint:n,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!m,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:o,checkCreateATAOwner:i});f&&l.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),b=ye.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return l.addInstruction(b),l.addCustomComputeBudget(r),l.addTipInstruction(a),l.versionBuild({txVersion:u,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),c={};for(let l of n){let m=e.rewardDefaultInfos.find(A=>A.mint.address===l.toString());if(!m){this.logAndCreateError("reward mint error","not found reward mint",l);continue}let p=t.useSOLBalance&&l.equals(j),{account:f,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(m.mint.programId),mint:l,notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),y&&s.addInstruction(y);let b=await this.getClmmPoolKeys(e.id),g=ye.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:l});s.addInstruction(g),c=N(N({},c),g.address)}return s.addCustomComputeBudget(r),s.addTipInstruction(a),s.build({address:c})}async openLimitOrder({poolInfo:e,baseIn:t=!0,orderTick:n,amount:o,noneIndex:i=0,tickArrayBitmap:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:u=!0,feePayer:s,computeBudgetConfig:c,txTipConfig:l,txVersion:m}){let p=new G(e.id),f=new G(e.programId),y=t?new G(e.mintA.address):new G(e.mintB.address),b=t?new G(e.mintB.address):new G(e.mintA.address),g=new G(e[t?"mintA":"mintB"].programId),A=new G(e[t?"mintB":"mintA"].programId),k=y.equals(j),h=b.equals(j),P=a.useSOLBalance&&k,T=a.useSOLBalance&&h,I=this.createTxBuilder(),x=P||!u?void 0:te(this.scope.ownerPubKey,y,g).publicKey;if(x)I.addInstruction({instructions:[vn(this.scope.ownerPubKey,x,this.scope.ownerPubKey,y,g)]});else{let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:g,mint:y,notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:o},associatedOnly:!P});x=z,Q&&I.addInstruction(Q)}let S=T||!u?void 0:te(this.scope.ownerPubKey,b,A).publicKey;if(S)I.addInstruction({instructions:[vn(this.scope.ownerPubKey,S,this.scope.ownerPubKey,b,A)]});else{let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:A,mint:b,notUseTokenAccount:T,owner:this.scope.ownerPubKey,skipCloseAccount:!T,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:o},associatedOnly:!T});S=z,Q&&I.addInstruction(Q)}let B=Nc(f,this.scope.ownerPubKey,i).publicKey,R=await this.scope.connection.getAccountInfo(B),L=R?Tc.decode(R.data).orderNonce:new at(0),O=Oc(f,s||this.scope.ownerPubKey,B,L).publicKey,C=ge.getTickArrayStartIndex(n,e.config.tickSpacing),F=Le(f,p,C).publicKey,E=Qt(f,p,new G(e[t?"mintA":"mintB"].address)).publicKey,_=Qt(f,p,new G(e[t?"mintB":"mintA"].address)).publicKey;return I.addInstruction({instructions:[ye.openLimitOrderInstruction(f,s||this.scope.ownerPubKey,p,F,B,O,x,S,E,_,y,b,g,i,t,n,o,r)]}),I.addCustomComputeBudget(c),I.addTipInstruction(l),I.versionBuild({txVersion:m,extInfo:{limitOrder:O}})}async increaseLimitOrder({poolInfo:e,limitOrder:t,amount:n,ownerInfo:o={useSOLBalance:!0},associatedOnly:i=!0,feePayer:r,computeBudgetConfig:a,txTipConfig:u,txVersion:s}){let c=new G(e.id),l=new G(e.programId),m=await this.scope.connection.getAccountInfo(t);m||this.logAndCreateError(`limit order ${t.toBase58()} not exist`);let p=mo.decode(m.data),f=p.zeroForOne?new G(e.mintA.address):new G(e.mintB.address),y=new G(e[p.zeroForOne?"mintA":"mintB"].programId),b=f.equals(j),g=o.useSOLBalance&&b,A=this.createTxBuilder(),k=g||!i?void 0:te(this.scope.ownerPubKey,f,y).publicKey;if(k)A.addInstruction({instructions:[vn(this.scope.ownerPubKey,k,this.scope.ownerPubKey,f,y)]});else{let{account:I,instructionParams:x}=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});k=I,x&&A.addInstruction(x)}let h=Qt(l,c,new G(e[p.zeroForOne?"mintA":"mintB"].address)).publicKey,P=ge.getTickArrayStartIndex(p.tick,e.config.tickSpacing),T=Le(l,c,P).publicKey;return A.addInstruction({instructions:[ye.increaseLimitOrderInstruction(l,r||this.scope.ownerPubKey,p.poolId,T,t,k,h,f,y,n)]}),A.addCustomComputeBudget(a),A.addTipInstruction(u),A.versionBuild({txVersion:s})}async decreaseLimitOrder({poolInfo:e,limitOrder:t,limitOrderInfo:n,amount:o,slippage:i=1e3,tickArrayBitmap:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:u=!0,feePayer:s,computeBudgetConfig:c,txTipConfig:l,txVersion:m,forerunCreate:p}){let f=new G(e.id),y=new G(e.programId),b=n;if(!b){let z=await this.scope.connection.getAccountInfo(t);z||this.logAndCreateError(`limit order ${t.toBase58()} not exist`),b=mo.decode(z.data)}let g=o.muln(1e4-i).divn(1e4),A=zn.getUnFilledAmount({orderInfo:b});(A.isZero()||o.gt(A))&&this.logAndCreateError(`amount should be less than unfulfilled amount: ${A.toString()}, amount: ${o.toString()}`);let[k,h]=b.zeroForOne?[new G(e.mintA.address),new G(e.mintB.address)]:[new G(e.mintB.address),new G(e.mintA.address)],[P,T]=b.zeroForOne?[new G(e.mintA.programId),new G(e.mintB.programId)]:[new G(e.mintB.programId),new G(e.mintA.programId)],[I,x]=[k.equals(j),h.equals(j)],[S,B]=[a.useSOLBalance&&I,a.useSOLBalance&&x],R=this.createTxBuilder(),L=S||!u?void 0:te(this.scope.ownerPubKey,k,P).publicKey,O=B||!u?void 0:te(this.scope.ownerPubKey,h,T).publicKey;if(L)R.addInstruction({instructions:[vn(this.scope.ownerPubKey,L,this.scope.ownerPubKey,k,P)]});else{let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:P,mint:k,notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!S});L=z,Q&&R.addInstruction(Q)}if(O)R.addInstruction({instructions:[vn(this.scope.ownerPubKey,O,this.scope.ownerPubKey,h,T)]});else{let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:T,mint:h,notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!B});O=z,Q&&R.addInstruction(Q)}let[C,F]=[Qt(y,f,k).publicKey,Qt(y,f,h).publicKey],E=ge.getTickArrayStartIndex(b.tick,e.config.tickSpacing),_=Le(y,f,E).publicKey;return R.addInstruction({instructions:[ye.decreaseLimitOrderInstruction(y,s||this.scope.ownerPubKey,f,_,t,L,O,C,F,k,h,o,g,r)]}),R.addCustomComputeBudget(c),R.addTipInstruction(l),R.versionBuild({txVersion:m,extInfo:{forerunCreate:p}})}async closeLimitOrder({programId:e=Rn,limitOrder:t,autoWithdraw:n=!0,tickArrayBitmap:o,slippage:i=0,feePayer:r,computeBudgetConfig:a,txTipConfig:u,txVersion:s}){let c=await this.scope.connection.getAccountInfo(t);c||this.logAndCreateError(`limit order ${t.toBase58()} not exist`);let l=mo.decode(c.data),m=zn.getUnFilledAmount({orderInfo:l});!n&&!m.isZero()&&this.logAndCreateError(`unfulfilled amount should be 0, (${m.toString()} remaining), please withdraw first or set autoWithdraw: true`);let p=this.createTxBuilder(),f=(await this.scope.api.fetchPoolById({ids:l.poolId.toBase58()}))[0];f||(f=(await this.getSimplePoolInfo(l.poolId)).poolInfo);let y=await lt.fetchTickArrayInfo({connection:this.scope.connection,programId:e,poolId:l.poolId,tick:l.tick,tickSpacing:f.config.tickSpacing}),b=zn.settleFilledOrder({orderInfo:l,tickInfo:y.ticks.find(g=>g.tick===l.tick)});if(m.isZero()){if(!b.isZero()){let g=await this.settleLimitOrder({limitOrder:t});p.addInstruction(N({},g.builder.AllTxData))}}else{let{builder:g}=await this.decreaseLimitOrder({poolInfo:f,limitOrder:t,limitOrderInfo:l,amount:m,tickArrayBitmap:o,slippage:i,txVersion:0});p.addInstruction({instructions:g.allInstructions})}return p.addInstruction({instructions:[ye.closeLimitOrderInstruction(e,r||this.scope.ownerPubKey,this.scope.ownerPubKey,t)]}),p.addCustomComputeBudget(a),p.addTipInstruction(u),p.versionBuild({txVersion:s})}async closeAllLimitOrder({programId:e=Rn,limitOrders:t,autoWithdraw:n=!0,slippage:o=1e4,feePayer:i,computeBudgetConfig:r,txVersion:a}){let u=this.createTxBuilder(),c=(await yt(this.scope.connection,t)).map((A,k)=>A?V(N({},mo.decode(A.data)),{pda:t[k]}):null),l=c.filter(Boolean),m=l.map(A=>A.poolId.toBase58()),p=(await this.scope.api.fetchPoolById({ids:m.join(",")})).filter(Boolean),f={};p.forEach(A=>f[A.id]=A);let y=await lt.fetchMultipleTickArrayInfo({connection:this.scope.connection,tickInfoList:l.map(A=>({programId:e,poolId:A.poolId,tick:A.tick,tickSpacing:f[A.poolId.toString()].config.tickSpacing}))}),b={};y.forEach((A,k)=>{!A||(b[l[k].pda.toBase58()]=A)});let g=0;for(let A of t){let k=c[g];if(!k){g++;continue}let h=zn.getUnFilledAmount({orderInfo:k});!n&&!h.isZero()&&this.logAndCreateError(`${A.toBase58()} order unfulfilled amount should be 0 (${h.toString()} remaining), please withdraw first or set autoWithdraw: true`);let P=f[k.poolId.toBase58()],T=b[A.toBase58()],I=zn.settleFilledOrder({orderInfo:k,tickInfo:T.ticks.find(x=>x.tick===k.tick)});if(h.isZero()){if(!I.isZero()){let x=await this.settleLimitOrder({limitOrder:A,forerunCreate:!0});u.addInstruction(N({},x.builder.AllTxData))}}else{let{builder:x}=await this.decreaseLimitOrder({poolInfo:P,limitOrder:A,limitOrderInfo:k,amount:h,slippage:o,txVersion:0,forerunCreate:!0});u.addInstruction({instructions:x.allInstructions})}u.addInstruction({instructions:[ye.closeLimitOrderInstruction(e,i||this.scope.ownerPubKey,this.scope.ownerPubKey,A)]}),g++}return a===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async settleLimitOrder({limitOrder:e,feePayer:t,ownerInfo:n={useSOLBalance:!0},associatedOnly:o=!0,computeBudgetConfig:i,txTipConfig:r,txVersion:a,forerunCreate:u}){let s=await this.scope.connection.getAccountInfo(e);s||this.logAndCreateError(`limit order ${e.toBase58()} not exist`);let c=mo.decode(s.data),l=(await this.scope.api.fetchPoolById({ids:c.poolId.toBase58()}))[0];l||(l=(await this.getSimplePoolInfo(c.poolId)).poolInfo);let m=c.zeroForOne?l.mintB:l.mintA,[p,f]=[new G(m.address),new G(m.programId)],y=new G(l.programId),b=this.createTxBuilder(),g=p.equals(j),A=n.useSOLBalance&&g,k=A||!o?void 0:te(this.scope.ownerPubKey,p,f).publicKey;if(k)b.addInstruction({instructions:[vn(this.scope.ownerPubKey,k,this.scope.ownerPubKey,p,f)]});else{let{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f,mint:p,notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!A});k=P,T&&b.addInstruction(T)}let h=ge.getTickArrayStartIndex(c.tick,l.config.tickSpacing);return b.addInstruction({instructions:[ye.settleLimitOrderInstruction(y,t||this.scope.ownerPubKey,c.poolId,Le(y,c.poolId,h).publicKey,e,k,Qt(y,c.poolId,p).publicKey,p,f)]}),b.addCustomComputeBudget(i),b.addTipInstruction(r),b.versionBuild({txVersion:a,extInfo:{forerunCreate:u}})}async settleAllLimitOrder({limitOrders:e,feePayer:t,ownerInfo:n={useSOLBalance:!0},associatedOnly:o=!0,computeBudgetConfig:i,txVersion:r}){let a=await yt(this.scope.connection,e),u=[],s=a.map((p,f)=>{if(!p)return;let y=mo.decode(p.data);return u.push(y.poolId.toString()),V(N({},y),{pda:e[f]})}),c=await this.scope.api.fetchPoolById({ids:u.join(",")});c.filter(Boolean).length||(c=(await Promise.all(u.map(f=>this.getSimplePoolInfo(f)))).map(f=>f.poolInfo));let l=this.createTxBuilder(),m={};for(let p of s){if(!p)continue;let f=c.find(I=>I.id===p.poolId.toBase58());if(!f)continue;let y=new G(f.programId),b=new G(p.zeroForOne?f.mintB.address:f.mintA.address),g=b.equals(j),A=n.useSOLBalance&&g,k=new G(g?Do:(await this.scope.token.getTokenInfo(b)).programId),h=m[b.toBase58()],P=A||!o?void 0:te(this.scope.ownerPubKey,b,k).publicKey;if(h)P=h;else{if(P)l.addInstruction({instructions:[vn(this.scope.ownerPubKey,P,this.scope.ownerPubKey,b,k)]});else{let{account:I,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k,mint:b,notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!A});P=I,x&&l.addInstruction(x)}m[b.toBase58()]=P}let T=ge.getTickArrayStartIndex(p.tick,f.config.tickSpacing);l.addInstruction({instructions:[ye.settleLimitOrderInstruction(y,t||this.scope.ownerPubKey,p.poolId,Le(y,p.poolId,T).publicKey,p.pda,P,Qt(y,p.poolId,b).publicKey,b,k)]})}return r===0?l.sizeCheckBuildV0({computeBudgetConfig:i}):l.sizeCheckBuild({computeBudgetConfig:i})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:r,observationId:a,ownerInfo:u,remainingAccounts:s,associatedOnly:c=!0,checkCreateATAOwner:l=!1,txVersion:m,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintA.address.toString(),A=u.useSOLBalance&&e.mintA.address.toString()===j.toBase58(),k=u.useSOLBalance&&e.mintB.address.toString()===j.toBase58(),h;!r||r.equals(new _n(0))?h=g?Pt.add(new at(1)):At.sub(new at(1)):h=re.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new G(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!g?{payer:u.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:A?!1:c,checkCreateATAOwner:l});P=x,S&&b.addInstruction(S)}let T;if(!T){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new G(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:u.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:k?!1:c,checkCreateATAOwner:l});T=x,S&&b.addInstruction(S)}(!P||!T)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.address,tokenB:e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:T,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:c});let I=t!=null?t:await this.getClmmPoolKeys(e.id.toString());return b.addInstruction(ye.makeSwapBaseInInstructions({poolInfo:V(N({},e),{id:e.id.toString(),programId:e.programId.toString()}),poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:T},inputMint:new G(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:J,remainingAccounts:s})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:m})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:i,priceLimit:r,observationId:a,ownerInfo:u,remainingAccounts:s,associatedOnly:c=!0,checkCreateATAOwner:l=!1,txVersion:m,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintB.address.toString(),A=u.useSOLBalance&&e.mintA.address.toString()===j.toBase58(),k=u.useSOLBalance&&e.mintB.address.toString()===j.toBase58(),h;!r||r.equals(new _n(0))?h=g?Pt.add(new at(1)):At.sub(new at(1)):h=re.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new G(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!g?{payer:u.feePayer||this.scope.ownerPubKey,amount:g?i:0}:void 0,associatedOnly:A?!1:c,checkCreateATAOwner:l});P=x,S&&b.addInstruction(S)}let T;if(!T){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new G(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:u.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:k?!1:c,checkCreateATAOwner:l});T=x,S&&b.addInstruction(S)}(!P||!T)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.address,tokenB:e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:T,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:c});let I=t!=null?t:await this.getClmmPoolKeys(e.id.toString());return b.addInstruction(ye.makeSwapBaseOutInstructions({poolInfo:V(N({},e),{id:e.id.toString(),programId:e.programId.toString()}),poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:T},outputMint:new G(n),amountOut:o,amountInMax:i,sqrtPriceLimitX64:J,remainingAccounts:s})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:m})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,programId:a,txVersion:u,computeBudgetConfig:s,feePayer:c,lockProgram:l=ai,lockAuth:m=dr,clmmProgram:p=Rn}){var k,h;let f={};for(let P of this.scope.account.tokenAccountRawInfos)i?te(this.scope.ownerPubKey,P.accountInfo.mint,a).publicKey.equals(P.pubkey)&&(f[P.accountInfo.mint.toString()]=P.pubkey):f[P.accountInfo.mint.toString()]=P.pubkey;let y=Object.values(t).flat().map(P=>P.nftMint),b=await Me(this.scope.connection,y.map(P=>({pubkey:P}))),g={};b.forEach(P=>{var T,I;g[P.pubkey.toBase58()]=(I=(T=P==null?void 0:P.accountInfo)==null?void 0:T.owner)!=null?I:null});let A=this.createTxBuilder(c);for(let P of Object.values(e)){if(t[P.id]===void 0||!t[P.id].find(C=>!C.liquidity.isZero()||C.rewardInfos.find(F=>!F.rewardAmountOwed.isZero())))continue;let T=P,I=o.useSOLBalance&&T.mintA.address===j.toString(),x=o.useSOLBalance&&T.mintB.address===j.toString(),S=f[T.mintA.address];if(!S)if(I){let{account:C,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:T.mintA.programId,mint:new G(T.mintA.address),notUseTokenAccount:I,owner:this.scope.ownerPubKey,skipCloseAccount:!I,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:I?!1:i,checkCreateATAOwner:r});S=C,F&&A.addInstruction(F)}else{let C=new G(T.mintA.address);S=this.scope.account.getAssociatedTokenAccount(C,new G(T.mintA.programId)),A.addInstruction({instructions:[vn(this.scope.ownerPubKey,S,this.scope.ownerPubKey,C,new G(T.mintA.programId))]})}let B=f[T.mintB.address];if(!B)if(x){let{account:C,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:T.mintB.programId,mint:new G(T.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:i,checkCreateATAOwner:r});B=C,F&&A.addInstruction(F)}else{let C=new G(T.mintB.address);B=this.scope.account.getAssociatedTokenAccount(C,new G(T.mintB.programId)),A.addInstruction({instructions:[vn(this.scope.ownerPubKey,B,this.scope.ownerPubKey,C,new G(T.mintB.programId))]})}f[T.mintA.address]=S,f[T.mintB.address]=B;let R=[];for(let C of T.rewardDefaultInfos){let F=o.useSOLBalance&&C.mint.address===j.toString(),E=f[C.mint.address];if(!E){let{account:_,instructionParams:z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(C.mint.programId),mint:new G(C.mint.address),notUseTokenAccount:F,owner:this.scope.ownerPubKey,skipCloseAccount:!F,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:F?!1:i});E=_,z&&A.addInstruction(z)}f[C.mint.address]=E,R.push(E)}let L=await this.getClmmPoolKeys(T.id),O=[];for(let C=0;C<L.rewardInfos.length;C++)O.push({poolRewardVault:new G(L.rewardInfos[C].vault),ownerRewardVault:R[C],rewardMint:new G(L.rewardInfos[C].mint.address)});for(let C of t[P.id]){let F=(k=n==null?void 0:n[P.id])==null?void 0:k[C.nftMint.toBase58()];if(F){let E=te(this.scope.ownerPubKey,F.lockNftMint,Do).publicKey,_=ge.getTickArrayStartIndex(C.tickLower,L.config.tickSpacing),z=ge.getTickArrayStartIndex(C.tickUpper,L.config.tickSpacing),{publicKey:Q}=Le(new G(L.programId),F.poolId,_),{publicKey:Y}=Le(new G(L.programId),F.poolId,z),{publicKey:ee}=ln(new G(L.programId),F.poolId,C.tickLower,C.tickUpper),ne=vo(l,F.lockNftMint).publicKey,Z=ye.harvestLockPositionInstructionV2({programId:l,auth:m,lockPositionId:ne,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:F.lockNftMint,lockNftAccount:E,positionNftAccount:F.nftAccount,positionId:F.positionId,poolId:F.poolId,protocolPosition:ee,vaultA:new G(L.vault.A),vaultB:new G(L.vault.B),tickArrayLower:Q,tickArrayUpper:Y,userVaultA:S,userVaultB:B,mintA:new G(L.mintA.address),mintB:new G(L.mintB.address),rewardAccounts:O,exTickArrayBitmap:Ve(p,F.poolId).publicKey});A.addInstruction({instructions:[Z],instructionTypes:[X.ClmmHarvestLockPosition],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]})}else{let E=ye.decreaseLiquidityInstructions({poolInfo:T,poolKeys:L,ownerPosition:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:S,tokenAccountB:B,rewardAccounts:R},liquidity:new at(0),amountMinA:new at(0),amountMinB:new at(0),nft2022:(h=g[C.nftMint.toBase58()])==null?void 0:h.equals(nn)});A.addInstruction(E)}}}return u===0?A.sizeCheckBuildV0({computeBudgetConfig:s}):A.sizeCheckBuild({computeBudgetConfig:s})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Bi(e).publicKey);return t?kc.decode(t.data).whitelistMints.filter(o=>!o.equals(G.default)):[]}async getOwnerPositionInfo({programId:e=Rn}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new at(1))).map(r=>Zt(new G(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=Tr.decode(r.data);i.push(a)}),i}async getOwnerLockedPositionInfo({programId:e=ai}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(u=>u.accountInfo.amount.eq(new at(1))).map(u=>vo(new G(e),u.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(u=>{if(!u)return;let s=hc.decode(u.data);i.push(s)});let r=await this.scope.connection.getMultipleAccountsInfo(i.map(u=>u.positionId)),a=[];return r.forEach(u=>{if(!u)return;let s=Tr.decode(u.data);a.push(s)}),i.map((u,s)=>({position:a[s],lockInfo:u}))}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Me(this.scope.connection,e.map(i=>({pubkey:new G(i)})),t),o={};for(let i=0;i<e.length;i++){let r=n[i];if(r===null||!r.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=lo.decode(r.accountInfo.data),u=re.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=V(N({},a),{currentPrice:u,programId:r.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].configId.toBase58())),o=await Me(this.scope.connection,Array.from(n).map(u=>({pubkey:new G(u)}))),i={};o.forEach(u=>{!u.accountInfo||(i[u.pubkey.toBase58()]=ns.decode(u.accountInfo.data))});let r=await lt.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var l,m,p,f;let[s,c]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:dt({address:s,decimals:e[u].mintDecimalsA,programId:t[s].programId.toBase58()||Do.toBase58(),extensions:{feeConfig:(l=t[s])!=null&&l.feeConfig?An((m=t[s])==null?void 0:m.feeConfig):void 0}}),mintB:dt({address:c,decimals:e[u].mintDecimalsB,programId:t[c].programId.toBase58()||Do.toBase58(),extensions:{feeConfig:(p=t[c])!=null&&p.feeConfig?An((f=t[c])==null?void 0:f.feeConfig):void 0}}),price:e[u].currentPrice,config:V(N({},i[e[u].configId.toBase58()]),{id:e[u].configId.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await lt.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(r)});return{computeClmmPoolInfo:r,computePoolTickData:a}}async getPoolInfoFromRpc(e){let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58(),...t.rewardInfos.filter(c=>!c.mint.equals(G.default)).map(c=>c.mint.toBase58())]),o=await io({connection:this.scope.connection,mints:Array.from(n).map(c=>new G(c))}),{computeClmmPoolInfo:i,computePoolTickData:r}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await Me(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=Wc(i[e],o);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number(Kn.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number(Kn.decode(a[1].accountInfo.data).amount.toString());let s=V(N({},i[e]),{exBitmapAccount:i[e].exBitmapAccount.toBase58(),observationId:i[e].observationId.toBase58(),id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:u.config,rewardInfos:i[e].rewardInfos.filter(c=>!c.vault.equals(G.default)).map(c=>{var l;return{mint:dt({address:c.mint.toBase58(),programId:Do.toBase58(),decimals:(l=o[c.mint.toBase58()].decimals)!=null?l:6}),vault:c.vault.toBase58()}})});return{poolInfo:u,poolKeys:s,computePoolInfo:i[e],tickData:r,rpcPoolInfo:t,tickArrays:Object.values(r[e])}}async getSwapPoolInfo(e,t=!0){let{poolInfo:n,rpcData:o}=await this.getSimplePoolInfo(e),i=await this.scope.connection.getAccountInfo(o.configId),r=ns.decode(i.data),a=new G(n.programId),u=new G(e),s=await Vc(a,this.scope.connection,u,o.tickCurrent,r.tickSpacing,o.tickArrayBitmap,t);return{poolInfo:n,rpcData:o,configInfo:r,tickArrays:s}}async getSimplePoolInfo(e){let t=await this.getRpcClmmPoolInfo({poolId:e}),n=await this.scope.connection.getMultipleAccountsInfo([t.mintA,t.mintB]);return{poolInfo:{id:e.toString(),programId:t.programId.toString(),mintA:{address:t.mintA.toString(),programId:n[0].owner.toString(),decimals:t.mintDecimalsA},mintB:{address:t.mintB.toString(),programId:n[1].owner.toString(),decimals:t.mintDecimalsB},config:{id:t.configId.toBase58(),tickSpacing:t.tickSpacing}},rpcData:t}}async getMultipleSimplePoolInfo(e){let t=await this.getRpcClmmPoolInfos({poolIds:e}),n=new Set(Object.values(t).map(r=>[r.mintA.toBase58(),r.mintB.toBase58()]).flat()),o=await io({connection:this.scope.connection,mints:Array.from(n).map(r=>new G(r))}),i={};return e.forEach(r=>{let a=t[r.toString()];if(!a)return null;let u=o[a.mintA.toBase58()],s=o[a.mintB.toBase58()];i[r.toString()]={poolInfo:{id:r.toString(),programId:a.programId.toString(),mintA:{address:a.mintA.toString(),programId:u.programId.toString(),decimals:a.mintDecimalsA},mintB:{address:a.mintB.toString(),programId:s.programId.toString(),decimals:a.mintDecimalsB},config:{id:a.configId.toBase58(),tickSpacing:a.tickSpacing}},rpcData:a}}),i}};var zc=v([Ae(8),D("bump"),He("disableCreatePool"),je("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),M("protocolOwner"),M("fundOwner"),w("creatorFeeRate"),$(w(),15)]),Rr=v([Ae(8),M("configId"),M("poolCreator"),M("vaultA"),M("vaultB"),M("mintLp"),M("mintA"),M("mintB"),M("mintProgramA"),M("mintProgramB"),M("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),w("epoch"),D("feeOn"),He("enableCreatorFee"),$(D(),6),w("creatorFeesMintA"),w("creatorFeesMintB"),$(w(),28)]),zT=v([Ae(8),M("configId"),$(w(),30)]);import{PublicKey as Ri,TransactionInstruction as Tn,Keypair as Zd,SystemProgram as Lr}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Li,TOKEN_2022_PROGRAM_ID as fs,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";var Wd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),QT=Buffer.from("amm_config","utf8"),qd=Buffer.from("pool","utf8"),Ud=Buffer.from("pool_lp_mint","utf8"),Gd=Buffer.from("pool_vault","utf8"),zd=Buffer.from("observation","utf8"),Xd=Buffer.from("permission","utf8"),Yd=Buffer.from("support_mint","utf8");function yo(d){return se([Wd],d)}function ms(d,e,t,n){return se([qd,e.toBuffer(),t.toBuffer(),n.toBuffer()],d)}function Hd(d,e){return se([Ud,e.toBuffer()],d)}function Xc(d,e,t){return se([Gd,e.toBuffer(),t.toBuffer()],d)}function bo(d,e){return se([zd,e.toBuffer()],d)}function ds({poolId:d,programId:e,configId:t,mintA:n,mintB:o}){let i=yo(e).publicKey,r=d||ms(e,t,n,o).publicKey,a=Hd(e,r).publicKey,u=Xc(e,r,n).publicKey,s=Xc(e,r,o).publicKey,c=bo(e,r).publicKey;return{poolId:r,configId:t,authority:i,lpMint:a,vaultA:u,vaultB:s,observationId:c}}var Qd=Buffer.from("locked_liquidity","utf8");function Wo(d,e){return se([Qd,e.toBuffer()],d)}function Yc(d,e){return se([Xd,e.toBuffer()],d)}function ps(d,e){return se([Yd,e.toBuffer()],d)}var jd=ke("Raydium_cpmm"),hn={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 Hc(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h){let P=v([w("amountMaxA"),w("amountMaxB"),w("openTime")]),T=ms(d,t,i,r).publicKey,I=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!o.equals(T),isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:gu,isSigner:!1,isWritable:!1},{pubkey:Ct,isSigner:!1,isWritable:!1},...(h!=null?h:[]).map(S=>({pubkey:S,isSigner:!1,isWritable:!1}))],x=Buffer.alloc(P.span);return P.encode({amountMaxA:g,amountMaxB:A,openTime:k},x),new Tn({keys:I,programId:d,data:Buffer.from([...hn.initialize,...x])})}function Qc(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f){let y=v([w("lpAmount"),w("amountMaxA"),w("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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:fs,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0}],g=Buffer.alloc(y.span);return jd.debug("cpmm deposit data",{lpAmount:m.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:m,amountMaxA:p,amountMaxB:f},g),new Tn({keys:b,programId:d,data:Buffer.from([...hn.deposit,...g])})}function Zc(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f){let y=v([w("lpAmount"),w("amountMinA"),w("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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:fs,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:sn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:m,amountMinA:p,amountMinB:f},g),new Tn({keys:b,programId:d,data:Buffer.from([...hn.withdraw,...g])})}function qo(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y){let b=v([w("amountIn"),w("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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountIn:f,amounOutMin:y},A),new Tn({keys:g,programId:d,data:Buffer.from([...hn.swapBaseInput,...A])})}function jc(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y){let b=v([w("amountInMax"),w("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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountInMax:f,amountOut:y},A),new Tn({keys:g,programId:d,data:Buffer.from([...hn.swapBaseOutput,...A])})}async function $c(d){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:o,getEphemeralSigners:i}=d,r=[],[a,u]=[new Ri(t.id),new Ri(t.lpMint.address)],s;if(i)s=new Ri((await i(1))[0]);else{let g=Zd.generate();r.push(g),s=g.publicKey}let{publicKey:c}=te(o,s,Vn),{publicKey:l}=Nn(s),{publicKey:m}=Wo(d.lockProgram,s),{publicKey:p}=te(e.wallet,u,Vn),{publicKey:f}=te(d.lockAuthProgram,u,Vn),y=$d({programId:d.lockProgram,auth:d.lockAuthProgram,payer:e.feePayer,liquidityOwner:e.wallet,nftOwner:o,nftMint:s,nftAccount:c,poolId:a,lockPda:m,mintLp:u,userLpVault:p,lockLpVault:f,poolVaultA:new Ri(n.vault.A),poolVaultB:new Ri(n.vault.B),metadataAccount:l,lpAmount:d.lpAmount,withMetadata:(b=d.withMetadata)!=null?b:!0});return{address:{nftMint:s,nftAccount:c,metadataAccount:l,lockPda:m,userLpVault:p,lockLpVault:f},instructions:[y],signers:r,instructionTypes:[X.CpmmLockLp],lookupTableAddress:[]}}function $d({programId:d,auth:e,payer:t,liquidityOwner:n,nftOwner:o,nftMint:i,nftAccount:r,poolId:a,lockPda:u,mintLp:s,userLpVault:c,lockLpVault:l,poolVaultA:m,poolVaultB:p,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:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Ct,isSigner:!1,isWritable:!1},{pubkey:Lr.programId,isSigner:!1,isWritable:!1},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1}],A=v([w("lpAmount"),He("withMetadata")]),k=Buffer.alloc(A.span);A.encode({lpAmount:y,withMetadata:b},k);let h=Buffer.from([...hn.lockCpLiquidity,...k]);return new Tn({keys:g,programId:d,data:h})}function ys({programId:d,nftOwner:e,auth:t,nftAccount:n,lockPda:o,poolId:i,mintLp:r,userVaultA:a,userVaultB:u,poolVaultA:s,poolVaultB:c,mintA:l,mintB:m,lockLpVault:p,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:Un,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Wu,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:fs,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1}],A=v([w("lpFeeAmount")]),k=Buffer.alloc(A.span);A.encode({lpFeeAmount:f},k);let h=Buffer.from([...hn.collectCpFee,...k]);return new Tn({keys:g,programId:d,data:h})}function bs(d,e,t,n,o,i,r,a,u,s,c,l,m){let p=[{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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:Lr.programId,isSigner:!1,isWritable:!1}];return new Tn({keys:p,programId:d,data:hn.collectCreatorFee})}function Jc(d,e,t,n,o,i,r,a,u,s,c,l,m){let p=[{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:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:Lr.programId,isSigner:!1,isWritable:!1}];return new Tn({keys:p,programId:d,data:hn.collectCreatorFeePermissionless})}function el(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h,P,T,I){let x=v([w("amountA"),w("amountB"),w("openTime"),D("feeOn")]),S=[{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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:A,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:Lr.programId,isSigner:!1,isWritable:!1},...(I!=null?I:[]).map(R=>({pubkey:R,isSigner:!1,isWritable:!1}))],B=Buffer.alloc(x.span);return x.encode({amountA:k,amountB:h,openTime:P,feeOn:T},B),new Tn({keys:S,programId:d,data:Buffer.from([...hn.initializeWithPermission,...B])})}import tl from"bn.js";import Or from"bn.js";function gs(d,e){if(e.isZero())throw Error("divisor is zero");return d.mod(e)}function Jd(d,e){if(e.isZero())throw Error("rhs is zero");let t=d.div(e);return gs(d,e).gt(Oi)&&(t=t.add(new Or(1))),[t,e]}var Oi=new Or(0),Ni=class{static swapBaseInputWithoutFees(e,t,n){let o=e.mul(n),i=t.add(e);return o.div(i)}static swapBaseOutputWithoutFees(e,t,n){let o=t.mul(e),i=n.sub(e),[r]=Jd(o,i);return r}static lpTokensToTradingTokens(e,t,n,o,i){let r=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:r,tokenAmount1:a};if(i===1)return gs(e.mul(n),t).gt(Oi)&&r.gt(Oi)&&(r=r.add(new Or(1))),gs(e.mul(o),t).gt(Oi)&&a.gt(Oi)&&(a=a.add(new Or(1))),{tokenAmount0:r,tokenAmount1:a};throw Error("roundDirection value error")}};import tp from"bn.js";import ep from"bn.js";var ze=new ep(1e6);var qt=class{static tradingFee(e,t){return Mi(e,t,ze)}static protocolFee(e,t){return Nr(e,t,ze)}static fundFee(e,t){return Nr(e,t,ze)}static creatorFee(e,t){return Mi(e,t,ze)}static splitCreatorFee(e,t,n){return Nr(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(ze),o=ze.sub(t);return n.add(o).sub(new tp(1)).div(o)}};var Fi=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,i,r,a,u){let s=new tl(0),c=qt.tradingFee(e,o),l;u?(s=qt.creatorFee(e,i),l=e.sub(c).sub(s)):l=e.sub(c);let m=qt.protocolFee(c,r),p=qt.protocolFee(c,a),f=Ni.swapBaseInputWithoutFees(l,t,n),y;return u?y=f:(s=qt.creatorFee(f,i),y=f.sub(s)),{newInputVaultAmount:t.add(l),newOutputVaultAmount:n.sub(f),inputAmount:e,outputAmount:y,tradeFee:c,protocolFee:m,fundFee:p,creatorFee:s}}static swapBaseOutput(e,t,n,o,i,r,a,u){let s,c=new tl(0),l;if(u)l=e;else{let b=qt.calculatePreFeeAmount(e,i);c=b.sub(e),l=b}let m=Ni.swapBaseOutputWithoutFees(l,t,n),p;if(u){let b=qt.calculatePreFeeAmount(m,o.add(i)),g=b.sub(m);c=qt.splitCreatorFee(g,o,i),s=g.sub(c),p=b}else{let b=qt.calculatePreFeeAmount(m,o);s=b.sub(m),p=b}let f=qt.protocolFee(s,r),y=qt.fundFee(s,a);return{newInputVaultAmount:t.add(m),newOutputVaultAmount:n.sub(l),inputAmount:p,outputAmount:e,tradeFee:s,protocolFee:f,fundFee:y,creatorFee:c}}};import nl from"bn.js";var Ps=new nl(25),Mr=new nl(1e4);var ol=new Set(["5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1","3uaZBfHPfmpAHW7dsimC1SnyR61X4bJqQZKWmRSCXJxv","GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"]);var As=v([D("instruction"),w("amountIn"),w("minAmountOut")]),ws=v([D("instruction"),w("maxAmountIn"),w("amountOut")]),vh=v([D("instruction"),D("nonce")]),np=v([D("instruction"),D("nonce"),w("startTime")]),Fr=v([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),ce("swapBaseInAmount"),ce("swapQuoteOutAmount"),w("swapBase2QuoteFee"),ce("swapQuoteInAmount"),ce("swapBaseOutAmount"),w("swapQuote2BaseFee"),M("baseVault"),M("quoteVault"),M("baseMint"),M("quoteMint"),M("lpMint"),M("openOrders"),M("marketId"),M("marketProgramId"),M("targetOrders"),M("withdrawQueue"),M("lpVault"),M("owner"),w("lpReserve"),$(w(),3,"padding")]),_h=v([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),ce("swapBaseInAmount"),ce("swapQuoteOutAmount"),ce("swapQuoteInAmount"),ce("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),M("baseVault"),M("quoteVault"),M("baseMint"),M("quoteMint"),M("lpMint"),M("modelDataAccount"),M("openOrders"),M("marketId"),M("marketProgramId"),M("targetOrders"),M("owner"),$(w(),64,"padding")]),ks=v([D("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide"),w("otherAmountMin")]),Ts=v([D("instruction"),w("lpAmount"),w("baseAmountMin"),w("quoteAmountMin")]);var il=v([w("fee")]);import{PublicKey as rp}from"@solana/web3.js";import vr from"decimal.js";import{TOKEN_PROGRAM_ID as ap}from"@solana/spl-token";import{PublicKey as op}from"@solana/web3.js";var ip=ke("Raydium_liquidity_serum");function rl({programId:d,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=op.createProgramAddressSync(i,d)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw ip.logWithError("unable to find a viable program address nonce","params",{programId:d,marketId:e}),new Error("unable to find a viable program address nonce")}function _r({programId:d}){let{publicKey:e}=se([Buffer.from("amm_config_account_seed","utf-8")],d);return e}function go({name:d,programId:e,marketId:t}){let{publicKey:n}=se([e.toBuffer(),t.toBuffer(),Buffer.from(d,"utf-8")],e);return n}function sp({programId:d,marketId:e}){let{publicKey:t}=se([d.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],d);return t}function Is({programId:d}){return se([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],d)}function Bs({version:d,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:r,programId:a,marketProgramId:u}){let s=go({name:"amm_associated_seed",programId:a,marketId:t}),c=go({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:l,nonce:m}=Is({programId:a}),p=go({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=go({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=go({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=sp({programId:a,marketId:t}),g=go({name:"target_associated_seed",programId:a,marketId:t}),A=go({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=rl({programId:u,marketId:t});return{id:s,baseMint:n,quoteMint:o,lpMint:c,baseDecimals:i,quoteDecimals:r,lpDecimals:i,version:d,programId:a,authority:l,nonce:m,baseVault:p,quoteVault:f,lpVault:y,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:k,lookupTableAccount:rp.default,configId:_r({programId:a})}}var hs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Vr=d=>{let e={},t=ap.toBase58();return Object.keys(d).map(n=>{let o=d[n],[i,r]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:dt({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:dt({address:r,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new vr(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new vr(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new vr(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:hs,week:hs,month:hs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:_r({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new vr(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:dt({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{ASSOCIATED_TOKEN_PROGRAM_ID as up,TOKEN_PROGRAM_ID as Po}from"@solana/spl-token";import{PublicKey as mt,SystemProgram as cp,SYSVAR_RENT_PUBKEY as oI,TransactionInstruction as Xn}from"@solana/web3.js";import Er from"bn.js";var Dr=ke("Raydium_liquidity_instruction");function al(d){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:r,otherAmountMin:a,modelDataPubKey:u=so}=d,s=Buffer.alloc(ks.span);ks.encode({instruction:3,baseAmountIn:ue(o),quoteAmountIn:ue(i),otherAmountMin:ue(a),fixedSide:r==="base"?J:ot},s);let c=[K({pubkey:Po,isWritable:!1}),K({pubkey:new mt(e.id)}),K({pubkey:new mt(t.authority),isWritable:!1}),K({pubkey:new mt(t.openOrders),isWritable:!1}),K({pubkey:new mt(t.targetOrders)}),K({pubkey:new mt(e.lpMint.address)}),K({pubkey:new mt(t.vault.A)}),K({pubkey:new mt(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(K({pubkey:u})),c.push(K({pubkey:new mt(e.marketId),isWritable:!1}),K({pubkey:n.baseTokenAccount}),K({pubkey:n.quoteTokenAccount}),K({pubkey:n.lpTokenAccount}),K({pubkey:n.owner,isWritable:!1,isSigner:!0}),K({pubkey:new mt(t.marketEventQueue),isWritable:!1})),new Xn({programId:new mt(e.programId),keys:c,data:s})}function xs(d){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:i,quoteAmountMin:r,modelDataPubKey:a=so}=d,u=Ft(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let c=Buffer.alloc(Ts.span);Ts.encode({instruction:4,lpAmount:ue(o),baseAmountMin:ue(i),quoteAmountMin:ue(r)},c);let l=[K({pubkey:Po,isWritable:!1}),K({pubkey:u.id}),K({pubkey:u.authority,isWritable:!1}),K({pubkey:u.openOrders}),K({pubkey:u.targetOrders}),K({pubkey:u.mintLp.address}),K({pubkey:u.vault.A}),K({pubkey:u.vault.B})];return s===5?l.push(K({pubkey:a})):(l.push(K({pubkey:u.id})),l.push(K({pubkey:u.id}))),l.push(K({pubkey:u.marketProgramId,isWritable:!1}),K({pubkey:u.marketId}),K({pubkey:u.marketBaseVault}),K({pubkey:u.marketQuoteVault}),K({pubkey:u.marketAuthority,isWritable:!1}),K({pubkey:n.lpTokenAccount}),K({pubkey:n.baseTokenAccount}),K({pubkey:n.quoteTokenAccount}),K({pubkey:n.owner,isWritable:!1,isSigner:!0}),K({pubkey:u.marketEventQueue}),K({pubkey:u.marketBids}),K({pubkey:u.marketAsks})),new Xn({programId:u.programId,keys:l,data:c})}return new Xn({programId:u.programId,keys:[]})}function Ss({programId:d,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:r,coinVault:a,pcVault:u,withdrawQueue:s,ammTargetOrders:c,poolTempLp:l,marketProgramId:m,marketId:p,userWallet:f,userCoinVault:y,userPcVault:b,userLpVault:g,nonce:A,openTime:k,coinAmount:h,pcAmount:P,ammConfigId:T,feeDestinationId:I}){let x=v([D("instruction"),D("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),S=[{pubkey:Po,isSigner:!1,isWritable:!1},{pubkey:up,isSigner:!1,isWritable:!1},{pubkey:cp.programId,isSigner:!1,isWritable:!1},{pubkey:Ct,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:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:I,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,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}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:A,openTime:k,coinAmount:h,pcAmount:P},B),{instruction:new Xn({keys:S,programId:d,data:B}),instructionType:X.AmmV4CreatePool}}function lp({poolKeys:d,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=so},i){let r=Ft(d),a=Buffer.alloc(As.span);As.encode({instruction:9,amountIn:ue(t),minAmountOut:ue(n)},a);let u=[K({pubkey:Po,isWritable:!1}),K({pubkey:r.id}),K({pubkey:r.authority,isWritable:!1}),K({pubkey:r.openOrders})];return i===4&&u.push(K({pubkey:r.targetOrders})),u.push(K({pubkey:r.vault.A}),K({pubkey:r.vault.B})),i===5&&u.push(K({pubkey:o})),u.push(K({pubkey:r.marketProgramId,isWritable:!1}),K({pubkey:r.marketId}),K({pubkey:r.marketBids}),K({pubkey:r.marketAsks}),K({pubkey:r.marketEventQueue}),K({pubkey:r.marketBaseVault}),K({pubkey:r.marketQuoteVault}),K({pubkey:r.marketAuthority,isWritable:!1}),K({pubkey:e.tokenAccountIn}),K({pubkey:e.tokenAccountOut}),K({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Xn({programId:r.programId,keys:u,data:a})}function mp({poolKeys:d,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=so},i){let r=Ft(d),a=Buffer.alloc(ws.span);ws.encode({instruction:11,maxAmountIn:ue(t),amountOut:ue(n)},a);let u=[K({pubkey:Po,isWritable:!1}),K({pubkey:r.id}),K({pubkey:r.authority,isWritable:!1}),K({pubkey:r.openOrders}),K({pubkey:r.targetOrders}),K({pubkey:r.vault.A}),K({pubkey:r.vault.B})];return i===5&&u.push(K({pubkey:o})),u.push(K({pubkey:r.marketProgramId,isWritable:!1}),K({pubkey:r.marketId}),K({pubkey:r.marketBids}),K({pubkey:r.marketAsks}),K({pubkey:r.marketEventQueue}),K({pubkey:r.marketBaseVault}),K({pubkey:r.marketQuoteVault}),K({pubkey:r.marketAuthority,isWritable:!1}),K({pubkey:e.tokenAccountIn}),K({pubkey:e.tokenAccountOut}),K({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Xn({programId:r.programId,keys:u,data:a})}function dp(d,e,t,n,o,i,r,a,u,s){let c=v([D("instructionId"),w("amountIn"),w("minAmountOut")]),l=Buffer.alloc(c.span);c.encode({instructionId:16,amountIn:u,minAmountOut:s},l);let m=[{pubkey:Po,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:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new Xn({programId:d,keys:m,data:l})}function pp(d,e,t,n,o,i,r,a,u,s){let c=v([D("instructionId"),w("maxAmountIn"),w("amountOut")]),l=Buffer.alloc(c.span);c.encode({instructionId:17,maxAmountIn:u,amountOut:s},l);let m=[{pubkey:Po,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:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new Xn({programId:d,keys:m,data:l})}function Wr(d){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=d;if(t===4){if(r==="in")return dp(new mt(e.programId),new mt(e.id),new mt(e.authority),new mt(e.vault.A),new mt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Er(o.toString()),new Er(i.toString()));if(r==="out")return pp(new mt(e.programId),new mt(e.id),new mt(e.authority),new mt(e.vault.A),new mt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Er(o.toString()),new Er(i.toString()));Dr.logWithError("invalid params","params",d)}throw Dr.logWithError("invalid version, only support pool v4","poolKeys.version",t),new Error("invalid version")}function qr(d){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=d;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(r==="in")return lp(V(N({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return mp(V(N({},a),{maxAmountIn:o,amountOut:i}),t);Dr.logWithError("invalid params","params",d)}throw Dr.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var wo=5e4,fp=v([w("x"),w("y"),w("price")]),yp=v([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),$(fp,wo,"DataElement")]);function bp(d,e){return[0,wo-2]}function gp(d){return[0,wo-2]}function Pp(d){return[0,wo-2]}function Ap(d,e,t){let[n,o]=bp(e,t),i=n,r=o,a=0,u=e*d.multiplier/t;for(;i<=r;){if(a=Math.floor((r+i)/2),a===0||a>=wo-2)return[a,a,!1];let s=d.DataElement[a].x*d.multiplier/d.DataElement[a].y,c=d.DataElement[a-1].x*d.multiplier/d.DataElement[a-1].y,l=d.DataElement[a+1].x*d.multiplier/d.DataElement[a+1].y;if(u===s)return[a,a,!0];if(u===c)return[a-1,a-1,!0];if(u===l)return[a+1,a+1,!0];if(u<c)r=a-1;else{if(u>c&&u<s)return[a-1,a,!0];if(u>s&&u<l)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Ks(d,e,t){let[n,o,i]=Ap(d,e,t);if(!i)return 0;if(n===o){let r=d.DataElement[n].x;return e*d.multiplier/r}else{let r=d.DataElement[n].x,a=d.DataElement[n].y,u=d.DataElement[o].x,s=d.DataElement[o].y,c=t*(u*a-r*s),l=r*c,m=(u-r)*(e*a-r*t)*s,p=l+m;return e*d.multiplier*c/p}}function Ao(d,e,t){return e*d.multiplier/t}function sl(d,e,t){return e*t/d.multiplier}function wp(d,e){let[t,n]=gp(e),o=t,i=n,r=0,a=e;for(;o<i;){if(r=Math.floor((i+o)/2),r<=0||r>wo-2)return[r,r,!1];let u=d.DataElement[r].x,s=d.DataElement[r-1].x,c=d.DataElement[r+1].x;if(a===u)return[r,r,!0];if(a===s)return[r-1,r-1,!0];if(a===c)return[r+1,r+1,!0];if(a<s)i=r-1;else{if(a>s&&a<u)return[r-1,r,!0];if(a>u&&a<c)return[r,r+1,!0];o=r+1}}return[r,r,!1]}function kp(d,e){let[t,n]=Pp(e),o=t,i=n,r=0,a=e;for(;o<=i;){if(r=Math.floor((i+o)/2),r<=0||r>=wo-2)return[r,r,!1];let u=d.DataElement[r].y,s=d.DataElement[r-1].y,c=d.DataElement[r+1].y;if(a===u)return[r,r,!0];if(a===s)return[r-1,r-1,!0];if(a===c)return[r+1,r+1,!0];if(a<c)o=r+1;else{if(a<s&&a>u)return[r-1,r,!0];if(a<u&&a>c)return[r,r+1,!0];i=r-1}}return[r,r,!1]}function ul(d,e,t,n){let o=n?e+t:e-t,[i,r,a]=wp(d,o);if(!a)return[0,0,!1,a];if(i===r)return[d.DataElement[r].price,d.DataElement[r].y,!1,a];{let u=d.DataElement[i].x,s=d.DataElement[r].x,c=d.DataElement[i].price,l=d.DataElement[r].price,m=d.DataElement[i].y,p=d.DataElement[r].y;if(e>=u&&e<=s)return n?[l,p,!0,a]:[c,m,!0,a];{let f,y;return n?(f=c+(l-c)*(e-u)/(s-u),y=m-(o-u)*d.multiplier/l):(f=c+(l-c)*(e-u)/(s-u),y=p+(s-o)*d.multiplier/c),[f,y,!1,a]}}}function Tp(d,e,t,n){let o=n?e-t:e+t,[i,r,a]=kp(d,o);if(!a)return[0,0,!1,a];if(i===r)return[d.DataElement[r].price,d.DataElement[r].x,!1,a];{let u=d.DataElement[i].x,s=d.DataElement[r].x,c=d.DataElement[i].price,l=d.DataElement[r].price,m=d.DataElement[i].y,p=d.DataElement[r].y;if(e>=p&&e<=m)return n?[l,s,!0,a]:[c,u,!0,a];{let f,y;return n?(f=c+(l-c)*(m-e)/(m-p),y=u+l*(m-o)/d.multiplier):(f=c+(l-c)*(m-e)/(m-p),y=s-c*(o-p)/d.multiplier),[f,y,!1,a]}}}function hp(d,e){let t=ul(d,e,0,!1);return t[3]?t[0]:0}function cl(d,e,t,n){let o=Ks(d,e,t),i=Ao(d,e,o),r=Ao(d,t,o),a=Ao(d,n,o),u=!0,[s,c,l,m]=ul(d,i,a,u);if(!m)return 0;if(l)return n*d.multiplier/s;{let p=r-c;return sl(d,p,o)}}function ll(d,e,t,n){let o=Ks(d,e,t),i=Ao(d,e,o),r=Ao(d,t,o),a=Ao(d,n,o),u=!1,[s,c,l,m]=Tp(d,r,a,u);if(!m)return 0;if(l)return n*s/d.multiplier;{let p=i-c;return sl(d,p,o)}}function Ip(d){let e=yp.decode(d);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 ml(d,e,t,n){let o=hp(d,Ao(d,e,Ks(d,e,t)))/d.multiplier;return n?o:1/o}var Ur=class{constructor({connection:e,modelDataPubKey:t=so}){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=Ip(e==null?void 0:e.data))}}};import{ASSOCIATED_TOKEN_PROGRAM_ID as Gr,TOKEN_2022_PROGRAM_ID as Fp,TOKEN_PROGRAM_ID as vp}from"@solana/spl-token";import{SystemProgram as Ut,TransactionInstruction as Rt}from"@solana/web3.js";import zo from"bn.js";var Yn=v([w(),w("epoch"),D("curveType"),je("index"),w("migrateFee"),w("tradeFeeRate"),w("maxShareFeeRate"),w("minSupplyA"),w("maxLockRate"),w("minSellRateA"),w("minMigrateRateA"),w("minFundRaisingB"),M("mintB"),M("protocolFeeOwner"),M("migrateFeeOwner"),M("migrateToAmmWallet"),M("migrateToCpmmWallet"),$(w(),16)]),Bp=v([w("totalLockedAmount"),w("cliffPeriod"),w("unlockPeriod"),w("startTime"),w("totalAllocatedShare")]),dn=v([w(),w("epoch"),D("bump"),D("status"),D("mintDecimalsA"),D("mintDecimalsB"),D("migrateType"),w("supply"),w("totalSellA"),w("virtualA"),w("virtualB"),w("realA"),w("realB"),w("totalFundRaisingB"),w("protocolFee"),w("platformFee"),w("migrateFee"),Bp.replicate("vestingSchedule"),M("configId"),M("platformId"),M("mintA"),M("mintB"),M("vaultA"),M("vaultB"),M("creator"),D("mintProgramFlag"),D("cpmmCreatorFeeOn"),w("platformVestingShare"),$(D(),54)]),BI=v([w(),w("epoch"),M("poolId"),M("beneficiary"),w("claimedAmount"),w("tokenShareAmount"),$(w(),8)]),dl=v([D("migrateType"),D("migrateCpmmFeeOn"),w("supply"),w("totalSellA"),w("totalFundRaisingB"),w("totalLockedAmount"),w("cliffPeriod"),w("unlockPeriod")]),xp=v([w("epoch"),D("index"),M("configId"),dl.replicate("bondingCurveParam"),$(w(),50)]),pn=v([w(),w("epoch"),M("platformClaimFeeWallet"),M("platformLockNftWallet"),w("platformScale"),w("creatorScale"),w("burnScale"),w("feeRate"),$(D(),64,"name"),$(D(),256,"web"),$(D(),256,"img"),M("cpConfigId"),w("creatorFeeRate"),M("transferFeeExtensionAuth"),M("platformVestingWallet"),w("platformVestingScale"),M("platformCpCreator"),D("restrictGlobalConfig"),$(D(),107),xu(xp,"platformCurve")]);var Sp=Buffer.from("vault_auth_seed","utf8"),Kp=Buffer.from("global_config","utf8"),Cp=Buffer.from("pool_vesting","utf8"),Rp=Buffer.from("platform_config","utf8"),Lp=Buffer.from("platform_fee_vault_auth_seed","utf8"),Op=Buffer.from("creator_fee_vault_auth_seed","utf8"),RI=Buffer.from("platform_global_access","utf8"),Np=Buffer.from("platform_allow_config","utf8");function _t(d){return se([Sp],d)}function Cs(d,e,t,n){return se([Kp,e.toBuffer(),Mp(t),Ir(n)],d)}function Uo(d,e,t){return se([Br,e.toBuffer(),t.toBuffer()],d)}function Rs(d,e,t){return se([is,e.toBuffer(),t.toBuffer()],d)}function ko(d){return se([Buffer.from("__event_authority","utf8")],d)}function Mp(d){let e=new ArrayBuffer(1);return new DataView(e).setUint8(0,d),new Uint8Array(e)}function Ls(d,e){return se([Rp,e.toBuffer()],d)}function Go(d,e,t){return se([Cp,e.toBuffer(),t.toBuffer()],d)}function fn(d,e,t){return se([e.toBuffer(),t.toBuffer()],d)}function Os(d){return se([Lp],d)}function yn(d,e,t){return se([e.toBuffer(),t.toBuffer()],d)}function Ns(d){return se([Op],d)}function vi(d,e,t){return se([Np,e.toBuffer(),t.toBuffer()],d)}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]),updatePlatformCurveParam:Buffer.from([138,144,138,250,220,128,4,57]),removePlatformCurveParam:Buffer.from([27,30,62,169,93,224,24,145]),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])};function pl(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h,P,T){let I=v([D("decimals"),Et("name"),Et("symbol"),Et("uri")]),x=v([w("totalLockedAmount"),w("cliffPeriod"),w("unlockPeriod"),D("cpmmCreatorFeeOn")]),S=v([D("index"),w("supply"),w("totalFundRaisingB"),D("migrateType")]),B=v([D("index"),w("supply"),w("totalSellA"),w("totalFundRaisingB"),D("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:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:vp,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:Ut.programId,isSigner:!1,isWritable:!1},{pubkey:Ct,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];T&&R.push({pubkey:T,isSigner:!1,isWritable:!1});let L=Buffer.alloc(Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+Buffer.from(b,"utf-8").length+4*3+1),O=Buffer.alloc(x.span),C=Buffer.alloc(g.type==="ConstantCurve"?B.span:S.span);return I.encode({decimals:p,name:f,symbol:y,uri:b},L),g.type==="ConstantCurve"?B.encode(V(N({index:0},g),{migrateType:g.migrateType==="amm"?0:1}),C):g.type==="FixedCurve"?S.encode(V(N({index:1},g),{migrateType:g.migrateType==="amm"?0:1}),C):g.type==="LinearCurve"&&S.encode(V(N({index:2},g),{migrateType:g.migrateType==="amm"?0:1}),C),x.encode({totalLockedAmount:A,cliffPeriod:k,unlockPeriod:h,cpmmCreatorFeeOn:P},O),new Rt({keys:R,programId:d,data:Buffer.from([...Lt.initializeV2,...L,...C,...O])})}function fl(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h,P,T){let I=v([D("decimals"),Et("name"),Et("symbol"),Et("uri")]),x=v([w("totalLockedAmount"),w("cliffPeriod"),w("unlockPeriod"),D("cpmmCreatorFeeOn"),D("transferFeeExtensionParamsOption"),v([je("transferFeeBasePoints"),w("maxinumFee")]).replicate("transferFeeExtensionParams")]),S=v([D("index"),w("supply"),w("totalFundRaisingB"),D("migrateType")]),B=v([D("index"),w("supply"),w("totalSellA"),w("totalFundRaisingB"),D("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:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Fp,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Ut.programId,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];T&&R.push({pubkey:T,isSigner:!1,isWritable:!1});let L=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),O=Buffer.alloc(x.span),C=Buffer.alloc(b.type==="ConstantCurve"?B.span:S.span);return I.encode({decimals:m,name:p,symbol:f,uri:y},L),b.type==="ConstantCurve"?B.encode(V(N({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),C):b.type==="FixedCurve"?S.encode(V(N({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),C):b.type==="LinearCurve"&&S.encode(V(N({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),C),x.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:k,cpmmCreatorFeeOn:h,transferFeeExtensionParamsOption:P?1:0,transferFeeExtensionParams:P!=null?P:{transferFeeBasePoints:0,maxinumFee:new zo(0)}},O),new Rt({keys:R,programId:d,data:Buffer.from([...Lt.initializeWithToken2022,...L,...C,...O])})}function _i(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([w("amountB"),w("minAmountA"),w("shareFeeRate")]),P=[{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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];k&&P.push({pubkey:k,isSigner:!1,isWritable:!0}),P.push({pubkey:Ut.programId,isSigner:!1,isWritable:!1}),P.push({pubkey:f,isSigner:!1,isWritable:!0}),P.push({pubkey:y,isSigner:!1,isWritable:!0});let T=Buffer.alloc(h.span);return h.encode({amountB:b,minAmountA:g,shareFeeRate:A!=null?A:new zo(0)},T),new Rt({keys:P,programId:d,data:Buffer.from([...Lt.buyExactIn,...T])})}function yl(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([w("amountA"),w("maxAmountB"),w("shareFeeRate")]),P=[{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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];k&&P.push({pubkey:k,isSigner:!1,isWritable:!0}),P.push({pubkey:Ut.programId,isSigner:!1,isWritable:!1}),P.push({pubkey:f,isSigner:!1,isWritable:!0}),P.push({pubkey:y,isSigner:!1,isWritable:!0});let T=Buffer.alloc(h.span);return h.encode({amountA:b,maxAmountB:g,shareFeeRate:A!=null?A:new zo(0)},T),new Rt({keys:P,programId:d,data:Buffer.from([...Lt.buyExactOut,...T])})}function zr(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([w("amountA"),w("minAmountB"),w("shareFeeRate")]),P=[{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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];k&&P.push({pubkey:k,isSigner:!1,isWritable:!0}),P.push({pubkey:Ut.programId,isSigner:!1,isWritable:!1}),P.push({pubkey:f,isSigner:!1,isWritable:!0}),P.push({pubkey:y,isSigner:!1,isWritable:!0});let T=Buffer.alloc(h.span);return h.encode({amountA:b,minAmountB:g,shareFeeRate:A!=null?A:new zo(0)},T),new Rt({keys:P,programId:d,data:Buffer.from([...Lt.sellExactIn,...T])})}function bl(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([w("amountB"),w("maxAmountA"),w("shareFeeRate")]),P=[{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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];k&&P.push({pubkey:k,isSigner:!1,isWritable:!0}),P.push({pubkey:Ut.programId,isSigner:!1,isWritable:!1}),P.push({pubkey:f,isSigner:!1,isWritable:!0}),P.push({pubkey:y,isSigner:!1,isWritable:!0});let T=Buffer.alloc(h.span);return h.encode({amountB:b,maxAmountA:g,shareFeeRate:A!=null?A:new zo(0)},T),new Rt({keys:P,programId:d,data:Buffer.from([...Lt.sellExactOut,...T])})}function Ms(d,e,t,n,o,i,r,a,u){let s=v([]),c=[{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:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:Ut.programId,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(s.span);return s.encode({},l),new Rt({keys:c,programId:d,data:Buffer.from([...Lt.claimVestedToken,...l])})}function Fs(d,e,t,n,o,i){let r=v([w("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:Ut.programId,isSigner:!1,isWritable:!1}],u=Buffer.alloc(r.span);return r.encode({shareAmount:i},u),new Rt({keys:a,programId:d,data:Buffer.from([...Lt.createVestingAccount,...u])})}function vs(d,e,t,n,o,i,r,a,u){let s=[{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:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Ut.programId,isSigner:!1,isWritable:!0},{pubkey:Gr,isSigner:!1,isWritable:!0}];return new Rt({keys:s,programId:d,data:Lt.claimPlatformFee})}function gl(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f){let y=v([w("platformScale"),w("creatorScale"),w("burnScale"),w("feeRate"),Et("name"),Et("web"),Et("img"),w("creatorFeeRate"),w("platformVestingScale")]),b=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Ut.programId,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1}],g=Buffer.alloc(8*6+Buffer.from(l,"utf-8").length+Buffer.from(m,"utf-8").length+Buffer.from(p,"utf-8").length+4*3);return y.encode({platformScale:u.platformScale,creatorScale:u.creatorScale,burnScale:u.burnScale,feeRate:s,name:l,web:m,img:p,creatorFeeRate:c,platformVestingScale:f},g),new Rt({keys:b,programId:d,data:Buffer.from([...Lt.createPlatformConfig,...g])})}function Pl(d,e,t,n){let o=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],i;if(n.type==="updateClaimFeeWallet"){let r=v([D("index"),M("value")]);i=Buffer.alloc(r.span),r.encode({index:0,value:n.value},i)}else if(n.type==="updateLockNftWallet"){let r=v([D("index"),M("value")]);i=Buffer.alloc(r.span),r.encode({index:1,value:n.value},i)}else if(n.type==="migrateCpLockNftScale"){let r=v([D("index"),w("platformScale"),w("creatorScale"),w("burnScale")]);i=Buffer.alloc(r.span),r.encode(N({index:2},n.value),i)}else if(n.type==="updateFeeRate"){let r=v([D("index"),w("value")]);i=Buffer.alloc(r.span),r.encode({index:3,value:n.value},i)}else if(n.type==="updateImg"||n.type==="updateName"||n.type==="updateWeb"){let r=v([D("index"),Et("value")]);i=Buffer.alloc(Buffer.from(n.value,"utf-8").length+4+1*1),n.type==="updateName"?r.encode({index:4,value:n.value},i):n.type==="updateWeb"?r.encode({index:5,value:n.value},i):n.type==="updateImg"&&r.encode({index:6,value:n.value},i)}else if(n.type==="updateCpConfigId"){o.push({pubkey:n.value,isSigner:!1,isWritable:!1});let r=v([D("index")]);i=Buffer.alloc(r.span),r.encode({index:7},i)}else if(n.type==="updateAll"){o.push({pubkey:n.value.cpConfigId,isSigner:!1,isWritable:!1});let r=v([D("index"),M("platformClaimFeeWallet"),M("platformLockNftWallet"),w("platformScale"),w("creatorScale"),w("burnScale"),w("feeRate"),Et("name"),Et("web"),Et("img"),M("transferFeeExtensionAuth"),w("creatorFeeRate"),w("platformVestingScale"),M("platformVestingWallet")]);i=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),r.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},i)}else if(n.type==="updateVestingWallet"){let r=v([D("index"),M("value")]);i=Buffer.alloc(r.span),r.encode({index:9,value:n.value},i)}else if(n.type==="updatePlatformVestingScale"){let r=v([D("index"),w("value")]);i=Buffer.alloc(r.span),r.encode({index:10,value:n.value},i)}else if(n.type==="updatePlatformCpCreator"){let r=v([D("index"),M("value")]);i=Buffer.alloc(r.span),r.encode({index:11,value:n.value},i)}else if(n.type==="updateRestrictGlobalConfig"){let r=v([D("index"),w("value")]);i=Buffer.alloc(r.span),r.encode({index:12,value:n.value},i)}else throw Error("updateInfo params type error");return new Rt({keys:o,programId:d,data:Buffer.from([...Lt.updatePlaformConfig,...i])})}function _s(d,e,t,n,o,i,r,a){let u=[{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:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Ut.programId,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1}];return new Rt({keys:u,programId:d,data:Lt.claimPlatformFeeFromVault})}function Vs(d,e,t,n,o,i,r){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:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:Ut.programId,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1}];return new Rt({keys:a,programId:d,data:Lt.claimCreatorFee})}var WI=new zo("18446744073709551615");function Al(d,e,t,n,o,i){let r=[{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:i,isSigner:!1,isWritable:!0},{pubkey:Ut.programId,isSigner:!1,isWritable:!1}];return new Rt({keys:r,programId:d,data:Lt.createPlatformVestingAccount})}function wl(d,e,t,n,o){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:Ut.programId,isSigner:!1,isWritable:!1}];return new Rt({keys:i,programId:d,data:Lt.createPlatformAllowConfig})}function kl(d,e,t,n,o){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}];return new Rt({keys:i,programId:d,data:Lt.closePlatformAllowConfig})}import{TOKEN_2022_PROGRAM_ID as Es,TOKEN_PROGRAM_ID as _p}from"@solana/spl-token";function Vp(d,e){return d>>e&1?Es:_p}function Xr(d){return Vp(d,0)}function Tl({mintAProgram:d,mintBProgram:e}){return(d.equals(Es)?1<<0:0)|(e.equals(Es)?1<<1:0)}import Yr from"bn.js";import Vi from"decimal.js";var Hn=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:i,decimalA:r,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:i}){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 Hr=class extends Hn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Vi(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Vi(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Vi(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:i,decimalA:r,decimalB:a}){return new Vi(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new Vi(e.virtualB.add(e.realB.add(i)).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:i}){if(e.lte(n))throw Error("supply need gt total sell");let r=e.sub(n).sub(o);if(r.lte(new Yr(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new Yr(0)))throw Error("tfMinusMf <= 0");let u=a.mul(n).mul(n).div(r),s=a.mul(n).div(r).sub(t),c=u.div(s),l=t.mul(t).div(s);if(c.lt(new Yr(0))||l.lt(new Yr(0)))throw Error("invalid input 0");return{a:c,b:l,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),i=t.add(e);return o.div(i)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let o=t.mul(e),i=n.sub(e);return To(o,i)}};import zt from"bn.js";import Il from"decimal.js";import Qr from"bn.js";import Ei from"decimal.js";var Zr=class extends Hn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Ei(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Ei(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Ei(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new Ei(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new Ei(e.virtualB.add(e.realB).add(i).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:i}){let r=e.sub(o);if(r.lte(new Qr(0)))throw Error("invalid input 1");let a=new Qr(2).mul(t).sub(i),s=t.mul(r).div(a);if(s.lt(new Qr(0))||t.lt(new Qr(0)))throw Error("invalid input 0");return{a:s,b:t,c:s}}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 To(o,n)}};import Gt from"bn.js";import ho from"decimal.js";import hl from"bn.js";import Ds from"decimal.js";var Di=class{static _multipler(e){return new Ds(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new Ds(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 hl(o.mul(this._Q64).toFixed(0))}};Di._Q64=new Ds(new hl(1).shln(64).toString());var jr=class extends Hn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new ho(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new ho(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new ho(e.virtualA.mul(e.realA).toString()).div(Di._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new ho(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new ho(e.virtualB.add(e.realB).add(i).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:i}){let r=e.sub(o);if(r.lte(new Gt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new Gt(3)).sub(i),s=t.mul(new Gt(2)).mul(r).div(a),c=s.mul(s),l=t.mul(new Gt(2)).mul(Oe).div(c);if(!l.gt(new Gt(0)))throw Error("a need gt 0");if(!wn.gt(l))throw Error("a need lt u64 max");if(l.lt(new Gt(0))||s.lt(new Gt(0)))throw Error("invalid input 0");return{a:l,b:new Gt(0),c:s}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new Gt(2).mul(n).mul(Oe).div(e.virtualA);return new Gt(new ho(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 To(e.virtualA.mul(o),new Gt(2).mul(Oe)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=To(e.virtualA.mul(o),new Gt(2).mul(Oe));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new Gt(2).mul(n).mul(Oe).div(e.virtualA),i=new Gt(new ho(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var xt=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:i,totalLockedAmount:r,migrateFee:a,decimalA:u,decimalB:s}){if(t<3)throw Error("point count < 3");let c=this.getCurve(e),l=c.getInitParam({supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a}),m=c.getPoolInitPriceByInit(V(N({},l),{decimalA:u,decimalB:s})),p=o.div(new zt(t-1)),f=new zt(0),y=[{price:m,totalSellSupply:0}],{a:b,b:g}=l,A=f,k=f;for(let h=1;h<t;h++){let P=h!==t-1?p:o.sub(k),T=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k,totalFundRaisingB:o,totalSellA:i},amountB:P,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,transferFeeConfigB:void 0,slot:0});A=A.add(T.amountA.amount),k=k.add(T.amountB);let I=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k},decimalA:u,decimalB:s,curveType:e});y.push({price:I,totalSellSupply:new Il(A.toString()).div(10**u).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:i}){return this.getCurve(i).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:i,config:r,migrateType:a}){if(Number(i)!==6)throw Error("decimals = 6");if(e.mul(r.maxLockRate).div(ze).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(r.minSupplyA.mul(new zt(10**i))))throw Error("supply lt min supply");let s=e.mul(r.minSellRateA).div(ze);if(n.lt(s))throw Error("invalid input");if(t.lt(r.minFundRaisingB))throw Error("total fund raising lt min fund raising");let c=e.sub(n).sub(o),l=e.mul(r.minMigrateRateA).div(ze);if(c.lt(l))throw Error("migrate lt min migrate amoount");let m=e.sub(n).sub(o),p=new zt(new Il(m.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new zt(10).pow(new zt(i));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new zt(100);if(p.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:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:u,transferFeeConfigB:s,slot:c}){var x;let l=Wi(t,s,c),m=t.sub((x=l.fee)!=null?x:new zt(0)),p=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),f=this.calculateFee({amount:m,feeRate:p}),y=m.sub(f),b=this.getCurve(i),g=b.buyExactIn({poolInfo:e,amount:y}),A=e.totalSellA.sub(e.realA),k,h,P,T;if(g.gt(A)){k=A;let S=b.buyExactOut({poolInfo:e,amount:k}),B=this.calculatePreFee({postFeeAmount:S,feeRate:p});P=B.sub(S);let R=Xo(B,s,c);h=R.amount,T=R.fee}else k=g,h=t,P=f,T=l.fee;let I=this.splitFee({totalFee:P,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Wi(k,u,c),amountB:h,splitFee:I,transferFeeB:T}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:u,transferFeeConfigB:s,slot:c}){let l=e.totalSellA.sub(e.realA),m=Xo(t,u,c),p=m.fee?m.amount.add(m.fee):m.amount;t.gt(l)&&(p=l);let y=this.getCurve(i).buyExactOut({poolInfo:e,amount:p}),b=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),g=this.calculatePreFee({postFeeAmount:y,feeRate:b}),A=g.sub(y),k=Xo(g,s,c),h=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:k.amount,splitFee:h,transferFeeB:k.fee}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:u,transferFeeConfigB:s,slot:c}){var k;let l=this.getCurve(i),m=Wi(t,u,c),p=m.fee?m.amount.sub(m.fee):m.amount,f=l.sellExactIn({poolInfo:e,amount:p}),y=this.calculateFee({amount:f,feeRate:this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a})}),b=this.splitFee({totalFee:y,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),g=f.sub(y),A=Wi(g,s,c);return{amountA:m,amountB:g.sub((k=A.fee)!=null?k:new zt(0)),splitFee:b,transferFeeB:A.fee}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:u,transferFeeConfigB:s,slot:c}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),m=Xo(t,s,c),p=m.amount,f=this.calculatePreFee({postFeeAmount:p,feeRate:l});if(e.realB.lt(f))throw Error("Insufficient liquidity");let y=f.sub(p),g=xt.getCurve(i).sellExactOut({poolInfo:e,amount:f});if(g.gt(e.realA))throw Error();let A=this.splitFee({totalFee:y,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Xo(g,u,c),amountB:t,splitFee:A,transferFeeB:m.fee}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}){let r=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}),a=r.isZero()?new zt(0):e.mul(n).div(r),u=r.isZero()?new zt(0):e.mul(o).div(r),s=r.isZero()?new zt(0):e.mul(i).div(r),c=e.sub(a).sub(u).sub(s);return{platformFee:a,shareFee:u,protocolFee:c,creatorFee:s}}static calculateFee({amount:e,feeRate:t}){return Mi(e,t,ze)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(ze),o=ze.sub(t);return n.add(o).sub(new zt(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new zt(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 Hr;case 1:return Zr;case 2:return jr}throw Error("find curve error")}};import{NATIVE_MINT as In,TOKEN_2022_PROGRAM_ID as Bn,TOKEN_PROGRAM_ID as ht,createAssociatedTokenAccountIdempotentInstruction as Xt,createSyncNativeInstruction as Ep,getTransferFeeConfig as qi,unpackMint as Ui}from"@solana/spl-token";import ae from"bn.js";import{PublicKey as Gi,SystemProgram as Dp}from"@solana/web3.js";import jt from"decimal.js";var $r={initPriceX64:new ae("515752397214619"),supply:new ae(1e15),totalSellA:new ae(7931e11),totalFundRaisingB:new ae(85e9),totalFundRaisingBUSD:new ae(125e8),totalLockedAmount:new ae("0"),cliffPeriod:new ae("0"),unlockPeriod:new ae("0"),decimals:6,virtualA:new ae("1073471847374405"),virtualB:new ae("30050573465"),realA:new ae(0),realB:new ae(0),protocolFee:new ae(0),platformId:new Gi("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ae(0),cliffPeriod:new ae(0),unlockPeriod:new ae(0),startTime:new ae(0),totalAllocatedShare:new ae(0)}},Qn=new ae(1e4);var zi=class extends Qe{constructor(e){super(e)}async getMintBTokenInfo({mintB:e,mintBProgram:t,transferFeeConfigB:n,skipCheckMintB:o}){if(e.equals(In))return{mintBProgram:ht,transferFeeConfigB:void 0};if(n)return{mintBProgram:t!=null?t:Bn,transferFeeConfigB:n};if(o||(t==null?void 0:t.equals(ht)))return{mintBProgram:t!=null?t:ht,transferFeeConfigB:void 0};let i=await this.scope.connection.getAccountInfo(e);return!i||!i.owner.equals(Bn)?{mintBProgram:t!=null?t:ht,transferFeeConfigB:void 0}:{mintBProgram:i.owner,transferFeeConfigB:qi(Ui(e,i,i.owner))||void 0}}async createLaunchpad(F){var E=F,{programId:e=nt,authProgramId:t,platformId:n=$r.platformId,mintA:o,decimals:i=6,mintBDecimals:r=9,name:a,symbol:u,uri:s,migrateType:c,configId:l,configInfo:m,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b,buyAmount:g,minMintAAmount:A,slippage:k,associatedOnly:h=!0,checkCreateATAOwner:P=!1,extraSigners:T,token2022:I,transferFeeExtensionParams:x,creatorFeeOn:S=0,platformAllowConfig:B,mintBProgram:R,transferFeeConfigB:L,skipCheckMintB:O}=E,C=We(E,["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 Zs,js,$s,Js,eu,tu,nu,ou,iu,ru,au;let _=this.createTxBuilder(b);t=t!=null?t:_t(e).publicKey,I=!!x,I&&(c="cpmm");let z=m;if(!z&&l){let Sn=await this.scope.connection.getAccountInfo(l);Sn&&(z=Yn.decode(Sn.data))}z||this.logAndCreateError("config not found");let Q=z.mintB,Y=z.curveType,{mintBProgram:ee,transferFeeConfigB:ne}=await this.getMintBTokenInfo({mintB:Q,mintBProgram:R,transferFeeConfigB:L,skipCheckMintB:O}),{publicKey:Z}=Uo(e,o,Q),{publicKey:pe}=Rs(e,Z,o),{publicKey:oe}=Rs(e,Z,Q),{publicKey:be}=Nn(o);this.logDebug(`create token: ${o.toBase58()}, mintB: ${Q.toBase58()}, decimals A:${i}/B:${r}, config:${l.toBase58()}`),u.length>10&&this.logAndCreateError("Symbol length should shorter than 11"),s||this.logAndCreateError("uri should not empty");let Ie=(await this.scope.api.fetchLaunchConfigs()).find(Sn=>Sn.key.pubKey===l.toBase58()),fe=(Zs=C==null?void 0:C.supply)!=null?Zs:new ae(Ie.defaultParams.supplyInit),ie=(js=C==null?void 0:C.totalSellA)!=null?js:new ae(Ie.defaultParams.totalSellA),Te=($s=C==null?void 0:C.totalFundRaisingB)!=null?$s:new ae(Ie.defaultParams.totalFundRaisingB),St=(Js=C==null?void 0:C.totalLockedAmount)!=null?Js:new ae(0),Xe=await this.scope.connection.getAccountInfo(n);Xe||this.logAndCreateError("platform id not found:",n.toString());let gn=pn.decode(Xe.data),Bo=gn.platformVestingScale,Jo=gn.feeRate,ei=xt.getCurve(z.curveType).getInitParam({supply:fe,totalFundRaising:Te,totalSell:ie,totalLockedAmount:St,migrateFee:z.migrateFee}),Nt;try{Nt=await this.scope.token.getTokenInfo(Q)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let an={epoch:new ae(896),bump:254,status:0,mintDecimalsA:i,mintDecimalsB:(eu=Nt==null?void 0:Nt.decimals)!=null?eu:r,supply:fe,totalSellA:ie,mintA:new Gi(o),mintB:Q,virtualA:ei.a,virtualB:ei.b,realA:$r.realA,realB:$r.realB,migrateFee:z.migrateFee,migrateType:c==="amm"?0:1,protocolFee:$r.protocolFee,platformFee:Jo,platformId:n,configId:l,vaultA:pe,vaultB:oe,creator:this.scope.ownerPubKey,totalFundRaisingB:Te,vestingSchedule:{totalLockedAmount:St,cliffPeriod:new ae(0),unlockPeriod:new ae(0),startTime:new ae(0),totalAllocatedShare:new ae(0)},mintProgramFlag:Tl({mintAProgram:I?Bn:ht,mintBProgram:ee}),cpmmCreatorFeeOn:S,platformVestingShare:Bo!=null?Bo:new ae(0)},Xl=xt.getCurve(z.curveType),{c:Yl}=Xl.getInitParam({supply:an.supply,totalFundRaising:an.totalFundRaisingB,totalLockedAmount:St,totalSell:z.curveType===0?an.totalSellA:new ae(0),migrateFee:z.migrateFee});try{xt.checkParam({supply:an.supply,totalFundRaising:an.totalFundRaisingB,totalSell:Yl,totalLockedAmount:St,decimals:an.mintDecimalsA,config:z,migrateType:c}),this.logDebug("check init params success")}catch(Sn){this.logAndCreateError(`check create mint params failed, ${Sn.message}`)}_.addInstruction({instructions:[I?fl(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,l,n,t,Z,o,Q,pe,oe,ee,i,a,u,s||"https://",{type:Y===0?"ConstantCurve":Y===1?"FixedCurve":Y===2?"LinearCurve":"ConstantCurve",totalSellA:ie,migrateType:c,supply:fe,totalFundRaisingB:Te},St,(tu=C==null?void 0:C.cliffPeriod)!=null?tu:new ae(0),(nu=C==null?void 0:C.unlockPeriod)!=null?nu:new ae(0),S,x,B?vi(e,n,l).publicKey:void 0):pl(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,l,n,t,Z,o,Q,pe,oe,be,ee,i,a,u,s||"https://",{type:Y===0?"ConstantCurve":Y===1?"FixedCurve":Y===2?"LinearCurve":"ConstantCurve",totalSellA:ie,migrateType:c,supply:fe,totalFundRaisingB:Te},St,(ou=C==null?void 0:C.cliffPeriod)!=null?ou:new ae(0),(iu=C==null?void 0:C.unlockPeriod)!=null?iu:new ae(0),S,B?vi(e,n,l).publicKey:void 0)]});let da=I?await this.scope.connection.getEpochInfo():void 0,er=x?{epoch:BigInt((da==null?void 0:da.epoch)||0),maximumFee:BigInt((ru=x==null?void 0:x.maxinumFee.toString())!=null?ru:0),transferFeeBasisPoints:(au=x==null?void 0:x.transferFeeBasePoints)!=null?au:0}:void 0,pa={amountA:{amount:new ae(0),fee:void 0,expirationTime:void 0},amountB:new ae(0),splitFee:{platformFee:new ae(0),shareFee:new ae(0),protocolFee:new ae(0),creatorFee:new ae(0)},transferFeeB:void 0},fa;if(T!=null&&T.length&&_.addInstruction({signers:T}),!C.createOnly){let{builder:Sn,extInfo:Hl}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:I?Bn:void 0,mintA:o,mintB:Q,mintBProgram:ee,transferFeeConfigB:ne,skipCheckMintB:!0,poolInfo:an,buyAmount:g,minMintAAmount:A,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:z,platformFeeRate:Jo,slippage:k,associatedOnly:h,checkCreateATAOwner:P,skipCheckMintA:!er,transferFeeConfigA:er?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:er,newerTransferFee:er}:void 0,fromCreate:!0});_.addInstruction(N({},Sn.AllTxData)),pa=N({},Hl),fa=(this.scope.cluster==="devnet"||p===1)&&C.shareFeeReceiver?[Sn.allInstructions[0]]:void 0}return _.addTipInstruction(y),p===0?_.sizeCheckBuildV0({computeBudgetConfig:f,swapInfo:pa,splitIns:fa,address:V(N({},an),{poolId:Z})}):_.sizeCheckBuild({computeBudgetConfig:f,swapInfo:pa,splitIns:fa,address:V(N({},an),{poolId:Z})})}async buyToken({programId:e=nt,authProgramId:t,mintA:n,mintAProgram:o=ht,mintB:i=In,poolInfo:r,configInfo:a,platformFeeRate:u,txVersion:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m,buyAmount:p,minMintAAmount:f,slippage:y,shareFeeRate:b=new ae(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,fromCreate:h=!1,transferFeeConfigA:P,skipCheckMintA:T=!1,mintBProgram:I,transferFeeConfigB:x,skipCheckMintB:S=!1}){var ie,Te,St;p.lte(new ae(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let B=this.createTxBuilder(m),{publicKey:R}=Uo(e,n,i);t=t!=null?t:_t(e).publicKey;let L=P;if(!T)if(L)o=Bn;else{let Xe=await this.scope.connection.getAccountInfo(n);if(Xe&&Xe.owner.equals(Bn)){o=Xe.owner;let gn=Ui(n,Xe,o);L=qi(gn)||void 0}}let{mintBProgram:O,transferFeeConfigB:C}=await this.getMintBTokenInfo({mintB:i,mintBProgram:I,transferFeeConfigB:x,skipCheckMintB:S}),F=this.scope.account.getAssociatedTokenAccount(n,o),E=i.equals(In),_=h&&E,z=_?this.scope.account.getAssociatedTokenAccount(i,O):null,Q=E;if(B.addInstruction({instructions:[Xt(this.scope.ownerPubKey,F,this.scope.ownerPubKey,n,o),..._?[Xt(this.scope.ownerPubKey,z,this.scope.ownerPubKey,i,O),Dp.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:z,lamports:BigInt(p.toString())}),Ep(z)]:[]]}),!_){let{account:Xe,instructionParams:gn}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O,mint:i,owner:this.scope.ownerPubKey,createInfo:Q?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!Q,notUseTokenAccount:Q,associatedOnly:Q?!1:A,checkCreateATAOwner:k});Xe&&(z=Xe),B.addInstruction(gn||{})}z||this.logAndCreateError(`cannot found mintB(${i.toBase58()}) buy token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let Y=r;if(!Y){let Xe=await this.scope.connection.getAccountInfo(R,{commitment:"processed"});Xe||this.logAndCreateError("cannot found pool:",R.toBase58()),Y=dn.decode(Xe.data)}let ee=a,ne=await Me(this.scope.connection,[ee?void 0:Y.configId,Y.platformId].filter(Boolean).map(Xe=>({pubkey:Xe})));if(!ee){let Xe=ne.find(gn=>gn.pubkey.equals(Y.configId));(!Xe||!Xe.accountInfo)&&this.logAndCreateError("config not found: ",Y.configId.toBase58()),ee=Yn.decode(Xe.accountInfo.data)}let Z=ne.find(Xe=>Xe.pubkey.equals(Y.platformId));(!Z||!Z.accountInfo)&&this.logAndCreateError("platform info not found: ",Y.configId.toBase58());let pe=pn.decode(Z.accountInfo.data);u=u||pe.feeRate;let oe=xt.buyExactIn({poolInfo:Y,amountB:p,protocolFeeRate:ee.tradeFeeRate,platformFeeRate:u,curveType:ee.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:L,transferFeeConfigB:C,slot:await this.scope.connection.getSlot()}),be=new jt(oe.amountA.amount.toString()).sub((Te=(ie=oe.amountA.fee)==null?void 0:ie.toString())!=null?Te:0),Ke=y?new jt(Qn.sub(y).toNumber()/Qn.toNumber()).clampedTo(0,1):new jt(1),Ie=f!=null?f:y?new ae(be.mul(Ke).toFixed(0)):oe.amountA.amount.sub((St=oe.amountA.fee)!=null?St:new ae(0));oe.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${oe.amountA.toString()}, input ${i.toBase58()} amount: ${oe.amountB.toString()}`);let fe=g?te(g,i,O).publicKey:void 0;return fe&&B.addInstruction({instructions:[Xt(this.scope.ownerPubKey,fe,g,i,O)]}),B.addInstruction({instructions:[_i(e,this.scope.ownerPubKey,t,Y.configId,Y.platformId,R,F,z,Y.vaultA,Y.vaultB,n,i,o,O,fn(e,Y.platformId,i).publicKey,yn(e,Y.creator,i).publicKey,oe.amountB.lt(p)?oe.amountB:p,Ie,b,fe)]}),B.addCustomComputeBudget(c),B.addTipInstruction(l),B.versionBuild({txVersion:s,extInfo:V(N({},oe),{decimalOutAmount:be,minDecimalOutAmount:new jt(Ie.toString())})})}async buyTokenExactOut({programId:e=nt,authProgramId:t,mintA:n,mintAProgram:o=ht,mintB:i=In,poolInfo:r,configInfo:a,transferFeeConfigA:u,platformFeeRate:s,txVersion:c,computeBudgetConfig:l,txTipConfig:m,feePayer:p,maxBuyAmount:f,outAmount:y,slippage:b,shareFeeRate:g=new ae(0),shareFeeReceiver:A,associatedOnly:k=!0,checkCreateATAOwner:h=!1,skipCheckMintA:P=!1,mintBProgram:T,transferFeeConfigB:I,skipCheckMintB:x=!1}){y.lte(new ae(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let S=this.createTxBuilder(p),{publicKey:B}=Uo(e,n,i);t=t!=null?t:_t(e).publicKey;let R=r;if(!R){let fe=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});fe||this.logAndCreateError("cannot found pool:",B.toBase58()),R=dn.decode(fe.data)}let L=a,O=await Me(this.scope.connection,[L?void 0:R.configId,R.platformId].filter(Boolean).map(fe=>({pubkey:fe})));if(!L){let fe=O.find(ie=>ie.pubkey.equals(R.configId));(!fe||!fe.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),L=Yn.decode(fe.accountInfo.data)}let C=O.find(fe=>fe.pubkey.equals(R.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let F=pn.decode(C.accountInfo.data);s=s||F.feeRate;let E=u;if(!P)if(E)o=Bn;else{let fe=await this.scope.connection.getAccountInfo(n);if(fe&&fe.owner.equals(Bn)){o=fe.owner;let ie=Ui(n,fe,o);E=qi(ie)||void 0}}let{mintBProgram:_,transferFeeConfigB:z}=await this.getMintBTokenInfo({mintB:i,mintBProgram:T,transferFeeConfigB:I,skipCheckMintB:x}),Q=xt.buyExactOut({poolInfo:R,amountA:y,protocolFeeRate:L.tradeFeeRate,platformFeeRate:s,curveType:L.curveType,shareFeeRate:g,creatorFeeRate:F.creatorFeeRate,transferFeeConfigA:E,transferFeeConfigB:z,slot:await this.scope.connection.getSlot()}),Y=new jt(Q.amountB.toString()),ee=b?new jt(Qn.add(b).toNumber()/Qn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new jt(1),ne=(f!=null?f:b)?new ae(Y.mul(ee).toFixed(0)):Q.amountB,Z=this.scope.account.getAssociatedTokenAccount(n,o),pe=null,oe=i.equals(In);S.addInstruction({instructions:[Xt(this.scope.ownerPubKey,Z,this.scope.ownerPubKey,n,o)]});let{account:be,instructionParams:Ke}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:_,mint:i,owner:this.scope.ownerPubKey,createInfo:oe?{payer:this.scope.ownerPubKey,amount:Q.amountB}:void 0,skipCloseAccount:!oe,notUseTokenAccount:oe,associatedOnly:oe?!1:k,checkCreateATAOwner:h});be&&(pe=be),S.addInstruction(Ke||{}),pe===void 0&&this.logAndCreateError(`cannot found mintB(${i.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let Ie=A?te(A,i,_).publicKey:void 0;return Ie&&S.addInstruction({instructions:[Xt(this.scope.ownerPubKey,Ie,A,i,_)]}),S.addInstruction({instructions:[yl(e,this.scope.ownerPubKey,t,R.configId,R.platformId,B,Z,pe,R.vaultA,R.vaultB,n,i,o,_,fn(e,R.platformId,i).publicKey,yn(e,R.creator,i).publicKey,y,ne,g,Ie)]}),S.addCustomComputeBudget(l),S.addTipInstruction(m),S.versionBuild({txVersion:c,extInfo:{maxSpentAmount:ne,outAmount:y}})}async sellToken({programId:e=nt,authProgramId:t,mintAProgram:n=ht,mintA:o,mintB:i=In,poolInfo:r,configInfo:a,platformFeeRate:u,txVersion:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m,sellAmount:p,minAmountB:f,slippage:y,shareFeeRate:b=new ae(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:h=!1,mintBProgram:P,transferFeeConfigB:T,skipCheckMintB:I=!1}){t=t!=null?t:_t(e).publicKey;let x=this.createTxBuilder(m);p.lte(new ae(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:S}=Uo(e,o,i),B;if(!h){let ie=await this.scope.connection.getAccountInfo(o);if(ie&&ie.owner.equals(Bn)){n=ie.owner;let Te=Ui(o,ie,n);B=qi(Te)||void 0}}let{mintBProgram:R,transferFeeConfigB:L}=await this.getMintBTokenInfo({mintB:i,mintBProgram:P,transferFeeConfigB:T,skipCheckMintB:I}),O=null,C=null,F=i.equals(In),{account:E,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});E&&(O=E),x.addInstruction(_||{}),O===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R,mint:i,owner:this.scope.ownerPubKey,createInfo:F?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!F,notUseTokenAccount:F,associatedOnly:F?!1:A,checkCreateATAOwner:k});z&&(C=z),x.addInstruction(Q||{}),C===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let Y=r;if(!Y){let ie=await this.scope.connection.getAccountInfo(S,{commitment:"processed"});ie||this.logAndCreateError("cannot found pool",S.toBase58()),Y=dn.decode(ie.data)}let ee=a,ne=await Me(this.scope.connection,[ee?void 0:Y.configId,Y.platformId].filter(Boolean).map(ie=>({pubkey:ie})));if(!ee){let ie=ne.find(Te=>Te.pubkey.equals(Y.configId));(!ie||!ie.accountInfo)&&this.logAndCreateError("config not found: ",Y.configId.toBase58()),ee=Yn.decode(ie.accountInfo.data)}let Z=ne.find(ie=>ie.pubkey.equals(Y.platformId));(!Z||!Z.accountInfo)&&this.logAndCreateError("platform info not found: ",Y.configId.toBase58());let pe=pn.decode(Z.accountInfo.data);u=u||pe.feeRate;let oe=xt.sellExactIn({poolInfo:Y,amountA:p,protocolFeeRate:ee.tradeFeeRate,platformFeeRate:u,curveType:ee.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:B,transferFeeConfigB:L,slot:await this.scope.connection.getSlot()}),be=new jt(oe.amountB.toString()),Ke=y?new jt(Qn.sub(y).toNumber()/Qn.toNumber()).clampedTo(0,1):new jt(1),Ie=f!=null?f:y?new ae(be.mul(Ke).toFixed(0)):oe.amountB;Ie.lte(new ae(0))&&this.logAndCreateError(`out ${i.toBase58()} amount should be gt 0`);let fe=g?te(g,i,R).publicKey:void 0;return fe&&x.addInstruction({instructions:[Xt(this.scope.ownerPubKey,fe,g,i,R)]}),x.addInstruction({instructions:[zr(e,this.scope.ownerPubKey,t,Y.configId,Y.platformId,S,O,C,Y.vaultA,Y.vaultB,o,i,n,R,fn(e,Y.platformId,i).publicKey,yn(e,Y.creator,i).publicKey,oe.amountA.amount.lt(p)?oe.amountA.amount:p,Ie,b,fe)]}),x.addCustomComputeBudget(c),x.addTipInstruction(l),x.versionBuild({txVersion:s,extInfo:{outAmount:Ie}})}async sellTokenExactOut({programId:e=nt,authProgramId:t,mintAProgram:n=ht,mintA:o,mintB:i=In,poolInfo:r,configInfo:a,platformFeeRate:u,txVersion:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m,inAmount:p,maxSellAmount:f,slippage:y,shareFeeRate:b=new ae(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:h=!1,mintBProgram:P,transferFeeConfigB:T,skipCheckMintB:I=!1}){t=t!=null?t:_t(e).publicKey;let x=this.createTxBuilder(m);f!=null&&f.lte(new ae(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:S}=Uo(e,o,i),B;if(!h){let ie=await this.scope.connection.getAccountInfo(o);if(ie&&ie.owner.equals(Bn)){n=ie.owner;let Te=Ui(o,ie,n);B=qi(Te)||void 0}}let{mintBProgram:R,transferFeeConfigB:L}=await this.getMintBTokenInfo({mintB:i,mintBProgram:P,transferFeeConfigB:T,skipCheckMintB:I}),O=null,C=null,F=i.equals(In),{account:E,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});E&&(O=E),x.addInstruction(_||{}),O===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R,mint:i,owner:this.scope.ownerPubKey,createInfo:F?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!F,notUseTokenAccount:F,associatedOnly:F?!1:A,checkCreateATAOwner:k});z&&(C=z),x.addInstruction(Q||{}),C===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let Y=r;if(!Y){let ie=await this.scope.connection.getAccountInfo(S,{commitment:"processed"});ie||this.logAndCreateError("cannot found pool",S.toBase58()),Y=dn.decode(ie.data)}let ee=a,ne=await Me(this.scope.connection,[ee?void 0:Y.configId,Y.platformId].filter(Boolean).map(ie=>({pubkey:ie})));if(!ee){let ie=ne.find(Te=>Te.pubkey.equals(Y.configId));(!ie||!ie.accountInfo)&&this.logAndCreateError("config not found: ",Y.configId.toBase58()),ee=Yn.decode(ie.accountInfo.data)}let Z=ne.find(ie=>ie.pubkey.equals(Y.platformId));(!Z||!Z.accountInfo)&&this.logAndCreateError("platform info not found: ",Y.configId.toBase58());let pe=pn.decode(Z.accountInfo.data);u=u||pe.feeRate;let oe=xt.sellExactOut({poolInfo:Y,amountB:p,protocolFeeRate:ee.tradeFeeRate,platformFeeRate:u,curveType:ee.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:B,transferFeeConfigB:L,slot:await this.scope.connection.getSlot()}),be=new jt(oe.amountA.amount.toString()),Ke=y?new jt(Qn.add(y).toNumber()/Qn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new jt(1),Ie=(f!=null?f:y)?new ae(be.mul(Ke).toFixed(0)):oe.amountA.amount,fe=g?te(g,i,R).publicKey:void 0;return fe&&x.addInstruction({instructions:[Xt(this.scope.ownerPubKey,fe,g,i,R)]}),x.addInstruction({instructions:[bl(e,this.scope.ownerPubKey,t,Y.configId,Y.platformId,S,O,C,Y.vaultA,Y.vaultB,o,i,n,R,fn(e,Y.platformId,i).publicKey,yn(e,Y.creator,i).publicKey,p,Ie,b,fe)]}),x.addCustomComputeBudget(c),x.addTipInstruction(l),x.versionBuild({txVersion:s,extInfo:{maxSellAmount:Ie}})}async createPlatformConfig({programId:e=nt,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,platformVestingWallet:i,cpConfigId:r,migrateCpLockNftScale:a,transferFeeExtensionAuth:u,creatorFeeRate:s,feeRate:c,name:l,web:m,img:p,platformVestingScale:f=new ae(0),txVersion:y,computeBudgetConfig:b,txTipConfig:g,feePayer:A}){let k=this.createTxBuilder(A),{publicKey:h}=Ls(e,t);return k.addInstruction({instructions:[gl(e,t,n,o,i,h,r,u,a,c,s,l,m,p,f)]}),k.addCustomComputeBudget(b),k.addTipInstruction(g),k.versionBuild({txVersion:y,extInfo:{platformId:h}})}async updatePlatformConfig({programId:e=nt,platformAdmin:t,platformId:n,updateInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),c=n!=null?n:Ls(e,t).publicKey;return s.addInstruction({instructions:[Pl(e,t,c,o)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i})}async createPlatformVestingAccount({programId:e=nt,platformVestingWallet:t,beneficiary:n,platformId:o,poolId:i,vestingRecord:r,txVersion:a,computeBudgetConfig:u,txTipConfig:s,feePayer:c}){let l=this.createTxBuilder(c),m=r!=null?r:Go(e,i,n).publicKey;return l.addInstruction({instructions:[Al(e,t,n,o,i,m)]}),l.addCustomComputeBudget(u),l.addTipInstruction(s),l.versionBuild({txVersion:a})}async claimPlatformFee({programId:e=nt,authProgramId:t,platformId:n,poolId:o,platformClaimFeeWallet:i,mintB:r,vaultB:a,mintBProgram:u,txVersion:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m}){var A;let p=this.createTxBuilder(m);t=t!=null?t:_t(e).publicKey;let f=r,y=a;if(!f){let k=await this.scope.connection.getAccountInfo(o,{commitment:"processed"});k||this.logAndCreateError("cannot found pool:",o.toBase58());let h=dn.decode(k.data),P=await this.scope.connection.getAccountInfo(h.configId,{commitment:"processed"});P||this.logAndCreateError("cannot found config:",h.configId.toBase58()),f=Yn.decode(P.data).mintB,y=y!=null?y:h.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(A=y==null?void 0:y.toBase58())!=null?A:"");let{mintBProgram:b}=await this.getMintBTokenInfo({mintB:f,mintBProgram:u}),g=te(this.scope.ownerPubKey,f,b).publicKey;return p.addInstruction({instructions:[Xt(this.scope.ownerPubKey,g,this.scope.ownerPubKey,f,b)]}),p.addInstruction({instructions:[vs(e,i,t,o,n,y,g,f,b)]}),p.addCustomComputeBudget(c),p.addTipInstruction(l),p.versionBuild({txVersion:s})}async claimAllPlatformFee({programId:e=nt,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u);t=t!=null?t:_t(e).publicKey;let l=(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:dn.span},{memcmp:{offset:dn.offsetOf("platformId"),bytes:n.toString()}}]})).map(f=>({poolId:f.pubkey,pool:dn.decode(f.account.data)})).filter(({pool:f})=>f.platformFee.gt(new ae(0))),m={},p=[...new Set(l.map(({pool:f})=>f.mintB.toBase58()))];return p.length&&(await Me(this.scope.connection,p.map(y=>({pubkey:new Gi(y)})))).forEach(y=>{var b,g;m[y.pubkey.toBase58()]=(g=(b=y.accountInfo)==null?void 0:b.owner)!=null?g:ht}),l.forEach(({poolId:f,pool:y})=>{var A;let b=(A=m[y.mintB.toBase58()])!=null?A:ht,g=te(this.scope.ownerPubKey,y.mintB,b).publicKey;s.addInstruction({instructions:[Xt(this.scope.ownerPubKey,g,this.scope.ownerPubKey,y.mintB,b)]}),s.addInstruction({instructions:[vs(e,o,t,f,n,y.vaultB,g,y.mintB,b)]})}),s.addTipInstruction(a),i===0?s.sizeCheckBuildV0({computeBudgetConfig:r}):s.sizeCheckBuild({computeBudgetConfig:r})}async createVesting({programId:e=nt,poolId:t,beneficiary:n,shareAmount:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),c=await this.getRpcPoolInfo({poolId:t});o.add(c.vestingSchedule.totalAllocatedShare).gt(c.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount");let l=Go(e,t,n).publicKey;return s.addInstruction({instructions:[Fs(e,this.scope.ownerPubKey,n,t,l,o)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i})}async createMultipleVesting({programId:e=nt,poolId:t,beneficiaryList:n,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=this.createTxBuilder(r);n.length===0&&this.logAndCreateError("beneficiaryList is null");let u=await this.getRpcPoolInfo({poolId:t});return n.reduce((c,l)=>c.add(l.shareAmount),u.vestingSchedule.totalAllocatedShare).gt(u.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount"),n.forEach(c=>{let l=Go(e,t,c.wallet).publicKey;a.addInstruction({instructions:[Fs(e,this.scope.ownerPubKey,c.wallet,t,l,c.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}async claimVesting({programId:e=nt,poolId:t,poolInfo:n,vestingRecord:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),c=_t(e).publicKey,l=o||Go(e,t,this.scope.ownerPubKey).publicKey,m=n;if(!m){let f=await this.scope.connection.getAccountInfo(t);f||this.logAndCreateError("pool not found"),m=dn.decode(f.data)}let p=te(this.scope.ownerPubKey,m.mintA,ht).publicKey;return s.addInstruction({instructions:[Xt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,m.mintA)]}),s.addInstruction({instructions:[Ms(e,this.scope.ownerPubKey,c,t,l,p,m.vaultA,m.mintA,ht)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i})}async claimMultiVesting({programId:e=nt,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:i,computeBudgetConfig:r,feePayer:a}){let u=this.createTxBuilder(a),s=N({},n),c=_t(e).publicKey,l=t.filter(m=>!s[m.toBase58()]);if(l.length){let m=await this.getRpcPoolsInfo({poolIdList:l});s=N(N({},s),m.poolInfoMap)}return t.forEach(m=>{let p=m.toBase58(),f=s[p];f||this.logAndCreateError(`pool info not found: ${p}`);let y=o[p]||Go(e,m,this.scope.ownerPubKey).publicKey,b=te(this.scope.ownerPubKey,f.mintA,ht).publicKey;u.addInstruction({instructions:[Xt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),u.addInstruction({instructions:[Ms(e,this.scope.ownerPubKey,c,m,y,b,f.vaultA,f.mintA,ht)]})}),i===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async claimVaultPlatformFee({programId:e=nt,platformId:t,mintB:n,mintBProgram:o,claimFeeWallet:i,txVersion:r,computeBudgetConfig:a,txTipConfig:u,feePayer:s}){let c=this.createTxBuilder(s),l=fn(e,t,n).publicKey,m=Os(e).publicKey,{mintBProgram:p}=await this.getMintBTokenInfo({mintB:n,mintBProgram:o}),f=this.scope.account.getAssociatedTokenAccount(n,p);return c.addInstruction({instructions:[Xt(this.scope.ownerPubKey,f,this.scope.ownerPubKey,n,p),_s(e,t,i!=null?i:this.scope.ownerPubKey,m,l,f,n,p)]}),c.addCustomComputeBudget(a),c.addTipInstruction(u),c.versionBuild({txVersion:r})}async claimMultipleVaultPlatformFee({programId:e=nt,platformList:t,unwrapSol:n=!0,txVersion:o,computeBudgetConfig:i,feePayer:r,associatedOnly:a=!0,checkCreateATAOwner:u=!1}){let s=this.createTxBuilder(r),c={};return t.forEach(async l=>{var b,g,A;let m=Os(e).publicKey,p=fn(e,l.id,l.mintB).publicKey,f=l.mintB.equals(In)&&n,y=c[l.mintB.toBase58()];if(!y){let{account:k,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:(b=l.mintBProgram)!=null?b:ht,mint:l.mintB,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:a,checkCreateATAOwner:u});k&&(y=k),s.addInstruction(h||{}),y===void 0&&this.logAndCreateError(`cannot found platform ${l.id.toBase58()} mintB(${l.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}s.addInstruction({instructions:[_s(e,l.id,(g=l.claimFeeWallet)!=null?g:this.scope.ownerPubKey,m,p,y,l.mintB,(A=l.mintBProgram)!=null?A:ht)]})}),o===0?s.sizeCheckBuildV0({computeBudgetConfig:i}):s.sizeCheckBuild({computeBudgetConfig:i})}async claimCreatorFee({programId:e=nt,mintB:t,mintBProgram:n,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let u=this.createTxBuilder(a),s=yn(e,this.scope.ownerPubKey,t).publicKey,c=Ns(e).publicKey,{mintBProgram:l}=await this.getMintBTokenInfo({mintB:t,mintBProgram:n}),m=this.scope.account.getAssociatedTokenAccount(t,l);return u.addInstruction({instructions:[Xt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,l),Vs(e,this.scope.ownerPubKey,c,s,m,t,l)]}),u.addCustomComputeBudget(i),u.addTipInstruction(r),u.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=nt,mintBList:t,txVersion:n,computeBudgetConfig:o,feePayer:i}){let r=this.createTxBuilder(i);return t.forEach(a=>{var p;let u=a.pubKey,s=(p=a.programId)!=null?p:ht,c=yn(e,this.scope.ownerPubKey,u).publicKey,l=Ns(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(u,s);r.addInstruction({instructions:[Xt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,u,s),Vs(e,this.scope.ownerPubKey,l,c,m,u,s)]})}),n==0?r.sizeCheckBuildV0({computeBudgetConfig:o}):r.sizeCheckBuild({computeBudgetConfig:o})}async createPlatformAllowConfig({programId:e=nt,platformAdmin:t,platformId:n,configInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),{publicKey:c}=Cs(e,new Gi(o.mintB),o.curveType,o.index),{publicKey:l}=vi(e,n,c);return s.addInstruction({instructions:[wl(e,t,n,c,l)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i,extInfo:{platformId:n}})}async closePlatformAllowConfig({programId:e=nt,platformAdmin:t,platformId:n,configInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),{publicKey:c}=Cs(e,new Gi(o.mintB),o.curveType,o.index),{publicKey:l}=vi(e,n,c);return s.addInstruction({instructions:[kl(e,t,n,c,l)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i,extInfo:{platformId:n}})}async getRpcPoolInfo({poolId:e}){return(await this.getRpcPoolsInfo({poolIdList:[e]})).poolInfoMap[e.toBase58()]}async getRpcPoolsInfo({poolIdList:e,config:t}){let n=await Me(this.scope.connection,e.map(u=>({pubkey:u})),t),o={},i=[];for(let u=0;u<e.length;u++){let s=n[u];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+e[u].toBase58());let c=dn.decode(s.accountInfo.data);o[e[u].toBase58()]=V(N({},c),{poolId:e[u],programId:s.accountInfo.owner}),i.push(c.configId)}let r=await Me(this.scope.connection,i.map(u=>({pubkey:u})),t),a={};for(let u=0;u<i.length;u++){let s=r[u];if(s===null||!s.accountInfo)throw Error("fetch config info error: "+i[u].toBase58());let c=Yn.decode(s.accountInfo.data);a[i[u].toBase58()]=V(N({},c),{configId:s.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((u,s)=>V(N({},u),{[s]:V(N({},o[s]),{configInfo:a[o[s].configId.toBase58()]})}),{})}}};var Bl={[va.toBase58()]:3},xl={3:va};var Ws=v([Ae(5),Ae(8),M("ownAddress"),w("vaultSignerNonce"),M("baseMint"),M("quoteMint"),M("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),M("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),M("requestQueue"),M("eventQueue"),M("bids"),M("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),Ae(7)]),Sl={3:Ws};import{PublicKey as Kl}from"@solana/web3.js";var Jr=ke("Serum"),ea=class{static getProgramId(e){let t=xl[e];return t||Jr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Bl[t];return n||Jr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Sl[e];return t||Jr.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,i;for(;o<100;){try{let r=n.concat(Buffer.from([o]),Buffer.alloc(7));i=Kl.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return Jr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Kl.default,nonce:o}}};import{ASSOCIATED_TOKEN_PROGRAM_ID as Wp,TOKEN_2022_PROGRAM_ID as qp,TOKEN_PROGRAM_ID as Up}from"@solana/spl-token";import{PublicKey as me,SystemProgram as Gp,TransactionInstruction as zp}from"@solana/web3.js";import Zn from"bn.js";function Xp(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f){var T;let y=[],b=[K({pubkey:Up,isWritable:!1}),K({pubkey:qp,isWritable:!1}),K({pubkey:Wp,isWritable:!1}),K({pubkey:Gp.programId,isWritable:!1}),K({pubkey:e,isSigner:!0})];b.push(K({pubkey:t})),b.push(K({pubkey:o}));let g=[u,s],A=[c,l],k=[i,r,a];for(let I=0;I<g.length;I++){let x=g[I],S=k[I]===x.mintA.address;if(b.push(K({pubkey:new me(x.programId),isWritable:!1})),I===g.length-1?b.push(K({pubkey:o})):b.push(K({pubkey:n})),b.push(K({pubkey:new me(k[I])})),b.push(K({pubkey:new me(k[I+1])})),x.version===6){let B=A[I];b.push(K({pubkey:new me(B.config.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(S?B.vault.A:B.vault.B)})),b.push(K({pubkey:new me(S?B.vault.B:B.vault.A)})),b.push(K({pubkey:new me(x.observationId)})),b.push(K({pubkey:sn})),b.push(K({pubkey:Ve(new me(x.programId),new me(x.id)).publicKey})),y.push(Yp(x.sqrtPriceX64.toString(),S));for(let R of(T=f[I])!=null?T:[])b.push(K({pubkey:new me(R)}))}else if(x.version===5){let B=A[I];b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.authority),isWritable:!1})),b.push(K({pubkey:new me(B.marketProgramId)})),b.push(K({pubkey:new me(B.marketAuthority)})),b.push(K({pubkey:Eu,isWritable:!1})),b.push(K({pubkey:new me(B.openOrders)})),b.push(K({pubkey:new me(B.vault.A)})),b.push(K({pubkey:new me(B.vault.B)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.marketId)})),b.push(K({pubkey:new me(B.marketBids)})),b.push(K({pubkey:new me(B.marketAsks)})),b.push(K({pubkey:new me(B.marketEventQueue)})),b.push(K({pubkey:new me(B.marketBaseVault)})),b.push(K({pubkey:new me(B.marketQuoteVault)}))}else if(x.version===4){let B=A[I],R=x.status!==1;b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.authority),isWritable:!1})),b.push(K({pubkey:new me(R?B.id:B.marketProgramId)})),b.push(K({pubkey:new me(R?B.id:B.marketAuthority)})),b.push(K({pubkey:new me(R?B.id:B.openOrders)})),b.push(K({pubkey:new me(B.vault.A)})),b.push(K({pubkey:new me(B.vault.B)})),b.push(K({pubkey:new me(R?B.id:B.marketId)})),b.push(K({pubkey:new me(R?B.id:B.marketBids)})),b.push(K({pubkey:new me(R?B.id:B.marketAsks)})),b.push(K({pubkey:new me(R?B.id:B.marketEventQueue)})),b.push(K({pubkey:new me(R?B.id:B.marketBaseVault)})),b.push(K({pubkey:new me(R?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=A[I];b.push(K({pubkey:new me(B.authority)})),b.push(K({pubkey:new me(B.config.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(S?B.vault.A:B.vault.B)})),b.push(K({pubkey:new me(S?B.vault.B:B.vault.A)})),b.push(K({pubkey:new me(x.observationId)}))}else throw Error("pool type error")}let h=v([D("insId"),w("amountIn"),w("amountOut"),$(ce(),y.length,"clmmPriceLimit")]),P=Buffer.alloc(h.span);return h.encode({insId:0,amountIn:m,amountOut:p,clmmPriceLimit:y},P),new zp({keys:b,programId:d,data:P})}function Yp(d,e){if(d)if(e){let t=new Zn(d).div(new Zn(25));return t.gt(Pt.add(ot))?t:Pt.add(ot)}else{let t=new Zn(d).mul(new Zn(25));return t.lt(At.sub(ot))?t:At.sub(ot)}else return e?Pt.add(ot):At.sub(ot)}function Cl({routeProgram:d,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,r,a,u,s,c,l,m;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let p=n.poolKey[0],f=Ft(p),y=t.equals(f.mintA.address)?Pt.add(ot):At.sub(ot);return ye.makeSwapBaseInInstructions({poolInfo:p,poolKeys:p,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((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new Zn(0)),sqrtPriceLimitX64:y,remainingAccounts:(r=n.remainingAccounts[0])!=null?r:[]})}else if(n.poolInfo[0].version===7){let p=n.poolInfo[0],f=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[qo(p.programId,e.wallet,p.authority,p.configId,p.id,e.sourceToken,e.destinationToken,f?p.vaultA:p.vaultB,f?p.vaultB:p.vaultA,f?p.mintProgramA:p.mintProgramB,f?p.mintProgramB:p.mintProgramA,new me(p[f?"mintA":"mintB"].address),new me(p[f?"mintB":"mintA"].address),p.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[f?X.CpmmSwapBaseIn:X.CpmmSwapBaseOut],address:{}}}else{let p=n.poolKey[0];return{signers:[],instructions:[n.poolInfo[0].pooltype.includes("StablePool")?qr({poolKeys:p,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((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new Zn(0)),fixedSide:"in"}):Wr({poolKeys:p,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((c=(s=n.minAmountOut.fee)==null?void 0:s.raw)!=null?c:new Zn(0)),fixedSide:"in"})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?X.AmmV5SwapBaseIn:X.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let p=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:[Xp(d,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),p,f,y,b,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((m=(l=n.minAmountOut.fee)==null?void 0:l.raw)!=null?m:new Zn(0)),n.remainingAccounts)],instructionTypes:[X.RouteSwap],lookupTableAddress:[y.lookupTableAccount,b.lookupTableAccount].filter(g=>g!==void 0),address:{}}}else throw Error("route type error")}var It=new Pe(0);function jn(d,e){var n,o,i,r,a;let t=(n=d.extensions)==null?void 0:n.feeConfig;if(!!t)return{transferFeeConfigAuthority:de.default,withdrawWithheldAuthority:de.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((i=(o=t.olderTransferFee.epoch)!=null?o:e)!=null?i:0),maximumFee:BigInt(t.olderTransferFee.maximumFee),transferFeeBasisPoints:t.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((a=(r=t.newerTransferFee.epoch)!=null?r:e)!=null?a:0),maximumFee:BigInt(t.newerTransferFee.maximumFee),transferFeeBasisPoints:t.newerTransferFee.transferFeeBasisPoints}}}function ta(d){return d.programId?new de(d.programId):ve}var Xi=class extends Qe{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:i}=e,r=await this.getWSolAccounts(),a=this.createTxBuilder(i);a.addCustomComputeBudget(e.computeBudgetConfig);let u=ue(t);for(let s=0;s<r.length;s++)u.gte(r[s].amount)?(a.addInstruction({instructions:[Cn({tokenAccount:r[s].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(r[s].amount)):a.addInstruction({instructions:[Cn({tokenAccount:r[s].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:o})}async wrapWSol(e,t,n,o){let i=this.createTxBuilder(o),r=await qn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:r,feePayer:a}){let u=this.createTxBuilder(a),s=e.amountIn,c=e.amountOut,l=s.amount.token.mint.equals(j),m=c.amount.token.mint.equals(j),p=s.amount.token.mint,f=c.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:s.amount.token.isToken2022?Yo:ve,mint:p,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:s.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&u.addInstruction(b),y===void 0)throw Error("input account check error");let g;if(e.routeType==="route"&&!m)g=this.scope.account.getAssociatedTokenAccount(f,c.amount.token.isToken2022?Yo:ve);else{let{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Yo:ve,mint:f,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});g=P,T&&u.addInstruction(T)}m&&u.addInstruction({endInstructions:[Cn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:ve})],endInstructionTypes:[X.CloseAccount]});let A;if(e.routeType==="route"){let P=e.middleToken;A=this.scope.account.getAssociatedTokenAccount(P.mint,P.isToken2022?Yo:ve)}let k=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),h=Cl({routeProgram:i,inputMint:p,swapInfo:V(N({},e),{poolInfo:[...e.poolInfoList],poolKey:k,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:A,destinationToken:g}});if(e.feeConfig!==void 0){let P=this.createTxBuilder(),T=s.amount.token.isToken2022?Hp(y,s.amount.token.mint,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber(),s.amount.token.decimals,[],Yo):Ll(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber());P.addInstruction({instructions:[T],instructionTypes:[X.TransferAmount]}),P.addInstruction(h);let{transactions:I}=r===0?await P.sizeCheckBuildV0():await P.sizeCheckBuild();I.length<2&&u.addInstruction({instructions:[Ll(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]})}return u.addInstruction(h),r===0?u.sizeCheckBuildV0({computeBudgetConfig:o,address:h.address}):u.sizeCheckBuild({computeBudgetConfig:o,address:h.address})}async swapClmmToLaunchMint({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,priceLimit:r,slippage:a=.01,shareFeeRate:u=new Pe(0),shareFeeReceiver:s,launchPlatformInfo:c,slot:l,mintInfo:m,epochInfo:p,ownerInfo:f={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:g,blockTimestamp:A}){let k=(f==null?void 0:f.feePayer)||this.scope.ownerPubKey,h=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:P,clmmComputeAmount:{maxClmmAmountIn:T,clmmAmountOut:I,remainingAccounts:x},launchPoolInfo:S,launchAuthProgramId:B,launchSwapInfo:R,launchMintProgramB:L,outAmount:O,minOutAmount:C}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:h,shareFeeRate:u,launchPlatformInfo:c,slot:l,mintInfo:m,blockTimestamp:A}),F=e.toString()===P.poolInfo.mintA.address,E=f.useSOLBalance&&P.poolInfo.mintA.address===j.toBase58(),_=f.useSOLBalance&&P.poolInfo.mintB.address===j.toBase58(),z={},Q;!r||r.equals(new xe(0))?Q=F?Pt.add(new Pe(1)):At.sub(new Pe(1)):Q=re.priceToSqrtPriceX64(r,P.poolInfo.mintA.decimals,P.poolInfo.mintB.decimals);let Y=this.createTxBuilder(k),[ee,ne]=[new de(P.poolInfo.mintA.address),new de(P.poolInfo.mintB.address)],[Z,pe]=[new de(P.poolInfo.mintA.programId),new de(P.poolInfo.mintB.programId)],oe=this.scope.account.getAssociatedTokenAccount(ee,Z),be=this.scope.account.getAssociatedTokenAccount(ne,pe);Y.addInstruction({instructions:[Ho(this.scope.ownerPubKey,oe,this.scope.ownerPubKey,ee,Z),Ho(this.scope.ownerPubKey,be,this.scope.ownerPubKey,ne,pe)]}),(F&&E||!F&&_)&&Y.addInstruction({instructions:[Rl.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:F?oe:be,lamports:BigInt(T.toString())}),Ol(F?oe:be)]}),z[P.poolInfo.mintA.address]=oe,z[P.poolInfo.mintB.address]=be,(!oe||!be)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:oe,ownerTokenAccountB:be}),Y.addInstruction(n?ye.makeSwapBaseOutInstructions({poolInfo:P.poolInfo,poolKeys:P.poolKeys,observationId:P.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:oe,tokenAccountB:be},outputMint:F?ne:ee,amountOut:I,amountInMax:T,sqrtPriceLimitX64:Q,remainingAccounts:x}):ye.makeSwapBaseInInstructions({poolInfo:P.poolInfo,poolKeys:P.poolKeys,observationId:P.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:oe,tokenAccountB:be},inputMint:new de(e),amountIn:t,amountOutMin:I,sqrtPriceLimitX64:Q,remainingAccounts:x}));let Ke=Xr(S.mintProgramFlag),Ie=this.scope.account.getAssociatedTokenAccount(S.mintA,Ke),fe=z[S.mintB.toBase58()];if(Y.addInstruction({instructions:[Ho(this.scope.ownerPubKey,Ie,this.scope.ownerPubKey,S.mintA,Ke)]}),!fe){let ie=S.mintB.equals(j),{account:Te,instructionParams:St}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L,mint:S.mintB,notUseTokenAccount:ie,owner:this.scope.ownerPubKey,skipCloseAccount:!ie,createInfo:ie?{payer:this.scope.ownerPubKey,amount:I}:void 0,associatedOnly:!1,checkCreateATAOwner:y});fe=Te,St&&Y.addInstruction(St)}return Y.addInstruction({instructions:[_i(S.programId,this.scope.ownerPubKey,B,S.configId,S.platformId,new de(i),Ie,fe,S.vaultA,S.vaultB,S.mintA,S.mintB,Ke,L,fn(S.programId,S.platformId,S.mintB).publicKey,yn(S.programId,S.creator,S.mintB).publicKey,R.amountB.lt(I)?R.amountB:I,C,u,s)]}),Y.addCustomComputeBudget(b),Y.versionBuild({txVersion:g,extInfo:{routes:[{mint:new de(e),amount:n?T:t,decimal:P.poolInfo[F?"mintA":"mintB"].decimals},{mint:F?ne:ee,amount:I,decimal:P.poolInfo[F?"mintB":"mintA"].decimals},{mint:S.mintA,amount:O,decimal:S.mintDecimalsA}],outAmount:O,minOutAmount:C}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:u=new Pe(0),clmmPoolData:s,launchPoolInfo:c,launchPlatformInfo:l,slot:m,mintInfo:p,blockTimestamp:f}){var _,z;let y=r>0?new xe(r).div(2).toDecimalPlaces(4,xe.ROUND_DOWN).toNumber():r,b=s!=null?s: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,A=b.poolInfo[g?"mintB":"mintA"],k=c;if(k||(k=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(i)})),A.address!==k.mintB.toBase58())throw new Error(`clmm swap mint(${A.address}) != launch pool mintB(${k.mintB.toBase58()})`);let h=n?await lt.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 lt.computeAmountOutFormat({poolInfo:b.computePoolInfo,tickarrayBitmapExtension:b.computePoolInfo.exBitmapInfo,tickArrayCache:b.tickData[o.toString()],amountIn:t,tokenOut:A,slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:f}),P=l;if(!P){let Q=await this.scope.connection.getAccountInfo(k.platformId);P=pn.decode(Q.data)}let T=p!=null?p:await this.scope.token.getTokenInfo(k.mintA),I=_t(k.programId).publicKey,x=jn(T,a==null?void 0:a.epoch),S=ta(A),B=jn(A,a==null?void 0:a.epoch),R=n?t:h.minAmountOut.amount.raw,L=xt.buyExactIn({poolInfo:k,amountB:R,protocolFeeRate:k.configInfo.tradeFeeRate,platformFeeRate:P.feeRate,curveType:k.configInfo.curveType,shareFeeRate:u,creatorFeeRate:P.creatorFeeRate,transferFeeConfigA:x,transferFeeConfigB:B,slot:m!=null?m:await this.scope.connection.getSlot()}),O=L.amountA.amount.sub((_=L.amountA.fee)!=null?_:new Pe(0)),C=new xe(O.toString()),F=new Pe(1e4),E=y?new xe(F.sub(new Pe(y*1e4)).toNumber()/F.toNumber()).clampedTo(0,1):new xe(1);return{clmmPoolData:b,clmmComputeAmount:{maxClmmAmountIn:n?h.maxAmountIn.amount:t,clmmAmountOut:R,remainingAccounts:h.remainingAccounts},clmmComputeInfo:h,launchPoolInfo:k,launchAuthProgramId:I,launchMintTransferFeeConfig:x,launchMintProgramB:S,launchMintTransferFeeConfigB:B,launchSwapInfo:L,outAmount:L.amountA.amount.sub((z=L.amountA.fee)!=null?z:new Pe(0)),minOutAmount:new Pe(C.mul(E).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new Pe(0),shareFeeReceiver:a,ownerInfo:u={useSOLBalance:!0},checkCreateATAOwner:s=!1,computeBudgetConfig:c,txVersion:l,blockTimestamp:m}){let p=(u==null?void 0:u.feePayer)||this.scope.ownerPubKey,f=await this.scope.fetchEpochInfo(),{clmmPoolData:y,clmmComputeAmount:{remainingAccounts:b},launchPoolInfo:g,launchAuthProgramId:A,launchSwapInfo:k,launchMintProgramB:h,minLaunchOutAmount:P,outAmount:T,minOutAmount:I}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:f,shareFeeRate:r,blockTimestamp:m}),x=this.createTxBuilder(p),S={},B=Xr(g.mintProgramFlag),{account:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B,mint:g.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:s});if(!R)throw new Error(`do not have launch mint(${g.mintA.toString()}) token account`);let L=g.mintB.equals(j),{account:O,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:h,mint:g.mintB,notUseTokenAccount:L,owner:this.scope.ownerPubKey,skipCloseAccount:!L,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:s});if(C&&x.addInstruction(C),!O)throw new Error(`do not have launch mint(${g.mintA.toString()}) token account`);S[g.mintB.toBase58()]=O,x.addInstruction({instructions:[zr(g.programId,this.scope.ownerPubKey,A,g.configId,g.platformId,new de(n),R,O,g.vaultA,g.vaultB,g.mintA,g.mintB,B,h,fn(g.programId,g.platformId,g.mintB).publicKey,yn(g.programId,g.creator,g.mintB).publicKey,k.amountA.amount.lt(e)?k.amountA.amount:e,P,r,a)]});let F=g.mintB.toString()===y.poolInfo.mintA.address,E=u.useSOLBalance&&y.poolInfo.mintA.address===j.toBase58(),_=u.useSOLBalance&&y.poolInfo.mintB.address===j.toBase58(),z;!o||o.equals(new xe(0))?z=F?Pt.add(new Pe(1)):At.sub(new Pe(1)):z=re.priceToSqrtPriceX64(o,y.poolInfo.mintA.decimals,y.poolInfo.mintB.decimals);let[Q,Y]=[new de(y.poolInfo.mintA.address),new de(y.poolInfo.mintB.address)],[ee,ne]=[new de(y.poolInfo.mintA.programId),new de(y.poolInfo.mintB.programId)],Z=E?void 0:this.scope.account.getAssociatedTokenAccount(Q,ee),pe=_?void 0:this.scope.account.getAssociatedTokenAccount(Y,ne);if(!Z){let{account:oe,instructionParams:be}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ee,mint:Q,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:u.feePayer||this.scope.ownerPubKey,amount:F?e:0},associatedOnly:!1,checkCreateATAOwner:s});Z=oe,be&&x.addInstruction(be)}if(!pe){let{account:oe,instructionParams:be}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ne,mint:Y,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:u.feePayer||this.scope.ownerPubKey,amount:F?0:e},associatedOnly:!1,checkCreateATAOwner:s});pe=oe,be&&x.addInstruction(be)}return S[y.poolInfo.mintA.address]=Z,S[y.poolInfo.mintB.address]=pe,(!Z||!pe)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:Z,ownerTokenAccountB:pe}),x.addInstruction(ye.makeSwapBaseInInstructions({poolInfo:y.poolInfo,poolKeys:y.poolKeys,observationId:y.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:Z,tokenAccountB:pe},inputMint:new de(y.poolKeys[F?"mintA":"mintB"].address),amountIn:P,amountOutMin:I,sqrtPriceLimitX64:z,remainingAccounts:b})),x.addCustomComputeBudget(c),x.versionBuild({txVersion:l,extInfo:{routes:[{mint:g.mintA,amount:e,decimal:g.mintDecimalsA},{mint:g.mintB,amount:P,decimal:g.mintDecimalsB},{mint:new de(y.poolKeys[F?"mintB":"mintA"].address),amount:T,decimal:y.poolKeys[F?"mintB":"mintA"].decimals}],outAmount:T,minOutAmount:I}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new Pe(0),clmmPoolData:a,launchPoolInfo:u,launchPlatformInfo:s,blockTimestamp:c}){let l=o>0?new xe(o).div(2).toDecimalPlaces(4,xe.ROUND_DOWN).toNumber():o,m=u;m||(m=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(n)}));let p=m.mintB,f=a!=null?a:await this.scope.clmm.getPoolInfoFromRpc(t.toString());if(p.toString()!==f.poolInfo.mintA.address&&p.toString()!==f.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=p.toString()===f.poolInfo.mintA.address,b=f.poolInfo[y?"mintB":"mintA"],g=f.poolInfo[y?"mintA":"mintB"],A=s;if(!A){let F=await this.scope.connection.getAccountInfo(m.platformId);A=pn.decode(F.data)}let k=await this.scope.token.getTokenInfo(m.mintA),h=_t(m.programId).publicKey,P=jn(k,i==null?void 0:i.epoch),T=ta(g),I=jn(g,i==null?void 0:i.epoch),x=xt.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:A.feeRate,curveType:m.configInfo.curveType,shareFeeRate:r,creatorFeeRate:A.creatorFeeRate,transferFeeConfigA:P,transferFeeConfigB:I,slot:await this.scope.connection.getSlot()}),S=x.amountB,B=new xe(S.toString()),R=new Pe(1e4),L=l?new xe(R.sub(new Pe(l*1e4)).toNumber()/R.toNumber()).clampedTo(0,1):new xe(1),O=new Pe(B.mul(L).toFixed(0)),C=await lt.computeAmountOutFormat({poolInfo:f.computePoolInfo,tickarrayBitmapExtension:f.computePoolInfo.exBitmapInfo,tickArrayCache:f.tickData[t.toString()],amountIn:O,tokenOut:b,slippage:l,epochInfo:i!=null?i:await this.scope.fetchEpochInfo(),blockTimestamp:c});return{clmmPoolData:f,clmmComputeAmount:C,launchPoolInfo:m,launchAuthProgramId:h,launchMintTransferFeeConfig:P,launchMintProgramB:T,launchMintTransferFeeConfigB:I,launchSwapInfo:x,minLaunchOutAmount:O,outAmount:C.amountOut.amount.raw,minOutAmount:C.minAmountOut.amount.raw}}async swapCpmmToLaunchMint({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,poolKeys:i,slippage:r=.01,shareFeeRate:a=new Pe(0),shareFeeReceiver:u,launchPlatformInfo:s,slot:c,mintInfo:l,epochInfo:m,ownerInfo:p={useSOLBalance:!0},checkCreateATAOwner:f=!1,computeBudgetConfig:y,txVersion:b}){let g=(p==null?void 0:p.feePayer)||this.scope.ownerPubKey,A=m!=null?m:await this.scope.fetchEpochInfo(),{computePoolInfo:k,poolKeys:h}=await this.scope.cpmm.getPoolInfoFromRpc(n.toString()),{cpmmComputInfo:P,cpmmPoolData:T,launchPoolInfo:I,launchAuthProgramId:x,launchSwapInfo:S,launchMintProgramB:B,outAmount:R,minOutAmount:L}=await this.computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,cpmmPoolData:k,launchPoolId:o,slippage:r,epochInfo:A,shareFeeRate:a,launchPlatformInfo:s,slot:c,mintInfo:l}),O=e.toString()===T.mintA.address,C=p.useSOLBalance&&T.mintA.address===j.toBase58(),F=p.useSOLBalance&&T.mintB.address===j.toBase58(),E={},_=this.createTxBuilder(g),[z,Q]=[new de(T.mintA.address),new de(T.mintB.address)],[Y,ee]=[new de(T.mintA.programId),new de(T.mintB.programId)],ne=this.scope.account.getAssociatedTokenAccount(z,Y),Z=this.scope.account.getAssociatedTokenAccount(Q,ee);_.addInstruction({instructions:[Ho(this.scope.ownerPubKey,ne,this.scope.ownerPubKey,z,Y),Ho(this.scope.ownerPubKey,Z,this.scope.ownerPubKey,Q,ee)]}),(O&&C||!O&&F)&&_.addInstruction({instructions:[Rl.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:O?ne:Z,lamports:BigInt(P.amountIn.toString())}),Ol(O?ne:Z)]}),E[T.mintA.address]=ne,E[T.mintB.address]=Z,(!ne||!Z)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ne,ownerTokenAccountB:Z});let pe=i!=null?i:h;_.addInstruction({instructions:[qo(T.programId,this.scope.ownerPubKey,new de(pe.authority),new de(pe.config.id),T.id,O?ne:Z,O?Z:ne,new de(pe.vault[O?"A":"B"]),new de(pe.vault[O?"B":"A"]),new de(O?Y:ee!=null?ee:ve),new de(O?ee:Y!=null?Y:ve),O?z:Q,O?Q:z,bo(T.programId,T.id).publicKey,t,P.swapResult.outputAmount)]});let oe=Xr(I.mintProgramFlag),be=this.scope.account.getAssociatedTokenAccount(I.mintA,oe),Ke=E[I.mintB.toBase58()];if(_.addInstruction({instructions:[Ho(this.scope.ownerPubKey,be,this.scope.ownerPubKey,I.mintA,oe)]}),!Ke){let Ie=I.mintB.equals(j),{account:fe,instructionParams:ie}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B,mint:I.mintB,notUseTokenAccount:Ie,owner:this.scope.ownerPubKey,skipCloseAccount:!Ie,createInfo:Ie?{payer:this.scope.ownerPubKey,amount:P.minAmountOut}:void 0,associatedOnly:!1,checkCreateATAOwner:f});Ke=fe,ie&&_.addInstruction(ie)}return _.addInstruction({instructions:[_i(I.programId,this.scope.ownerPubKey,x,I.configId,I.platformId,new de(o),be,Ke,I.vaultA,I.vaultB,I.mintA,I.mintB,oe,B,fn(I.programId,I.platformId,I.mintB).publicKey,yn(I.programId,I.creator,I.mintB).publicKey,S.amountB.lt(P.minAmountOut)?S.amountB:P.minAmountOut,L,a,u)]}),_.addCustomComputeBudget(y),_.versionBuild({txVersion:b,extInfo:{routes:[{mint:new de(e),amount:t,decimal:T[O?"mintDecimalA":"mintDecimalB"]},{mint:O?Q:z,amount:P.minAmountOut,decimal:T[O?"mintB":"mintA"].decimals},{mint:I.mintA,amount:R,decimal:I.mintDecimalsA}],outAmount:R,minOutAmount:L}})}async computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,slippage:i,epochInfo:r,shareFeeRate:a=new Pe(0),cpmmPoolData:u,launchPoolInfo:s,launchPlatformInfo:c,slot:l,mintInfo:m}){var F,E;let p=i>0?new xe(i).div(2).toDecimalPlaces(4,xe.ROUND_DOWN).toNumber():i,f=u!=null?u:(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=s;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 A=c;if(!A){let _=await this.scope.connection.getAccountInfo(g.platformId);A=pn.decode(_.data)}let k=m!=null?m:await this.scope.token.getTokenInfo(g.mintA),h=_t(g.programId).publicKey,P=jn(k,r==null?void 0:r.epoch),T=ta(b),I=jn(b,r==null?void 0:r.epoch),x=await this.scope.cpmm.computeSwapAmount({pool:f,amountIn:t,outputMint:new de(b.address),slippage:p}),S=x.minAmountOut,B=xt.buyExactIn({poolInfo:g,amountB:S,protocolFeeRate:g.configInfo.tradeFeeRate,platformFeeRate:A.feeRate,curveType:g.configInfo.curveType,shareFeeRate:a,creatorFeeRate:A.creatorFeeRate,transferFeeConfigA:P,transferFeeConfigB:I,slot:l!=null?l:await this.scope.connection.getSlot()}),R=B.amountA.amount.sub((F=B.amountA.fee)!=null?F:new Pe(0)),L=new xe(R.toString()),O=new Pe(1e4),C=p?new xe(O.sub(new Pe(p*1e4)).toNumber()/O.toNumber()).clampedTo(0,1):new xe(1);return{cpmmPoolData:f,cpmmComputInfo:x,launchPoolInfo:g,launchAuthProgramId:h,launchMintTransferFeeConfig:P,launchMintProgramB:T,launchMintTransferFeeConfigB:I,launchSwapInfo:B,outAmount:B.amountA.amount.sub((E=B.amountA.fee)!=null?E:new Pe(0)),minOutAmount:new Pe(L.mul(C).toFixed(0))}}async computeCpClToLaunchAmount({inputMint:e,inputAmount:t,clmmPoolId:n,cpmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:u=new Pe(0),cpmmPoolData:s,clmmPoolData:c,launchPoolInfo:l,launchPlatformInfo:m,slot:p,mintInfo:f,blockTimestamp:y}){var Z,pe;let b=r>0?new xe(r).div(2).toDecimalPlaces(4,xe.ROUND_DOWN).toNumber():r,g=c!=null?c: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 A=e.toString()===g.poolInfo.mintA.address,k=g.poolInfo[A?"mintB":"mintA"],h=l;if(h||(h=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(i)})),k.address!==h.mintB.toBase58())throw new Error(`clmm swap mint(${k.address}) != launch pool mintB(${h.mintB.toBase58()})`);let P=m;if(!P){let oe=await this.scope.connection.getAccountInfo(h.platformId);P=pn.decode(oe.data)}let T=f!=null?f:await this.scope.token.getTokenInfo(h.mintA),I=_t(h.programId).publicKey,x=jn(T,a==null?void 0:a.epoch),S=ta(k),B=jn(k,a==null?void 0:a.epoch),R=await lt.computeAmountOutFormat({poolInfo:g.computePoolInfo,tickArrayCache:g.tickData[n.toString()],amountIn:t,tokenOut:k,slippage:b,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:y,tickarrayBitmapExtension:g.computePoolInfo.exBitmapInfo}),L=s!=null?s:(await this.scope.cpmm.getPoolInfoFromRpc(o.toString())).computePoolInfo,O=await this.scope.cpmm.computeSwapAmount({pool:L,amountIn:t,outputMint:new de(k.address),slippage:b}),[C,F]=[R.minAmountOut.amount.raw,O.minAmountOut],E=C.gte(F)?"clmm":"cpmm",_=C.gte(F)?C:F,z=xt.buyExactIn({poolInfo:h,amountB:_,protocolFeeRate:h.configInfo.tradeFeeRate,platformFeeRate:P.feeRate,curveType:h.configInfo.curveType,shareFeeRate:u,creatorFeeRate:P.creatorFeeRate,transferFeeConfigA:x,transferFeeConfigB:B,slot:p!=null?p:await this.scope.connection.getSlot()}),Q=z.amountA.amount.sub((Z=z.amountA.fee)!=null?Z:new Pe(0)),Y=new xe(Q.toString()),ee=new Pe(1e4),ne=b?new xe(ee.sub(new Pe(b*1e4)).toNumber()/ee.toNumber()).clampedTo(0,1):new xe(1);return{clmmPoolData:g,clmmComputeAmount:{maxClmmAmountIn:t,clmmAmountOut:_,remainingAccounts:R.remainingAccounts},clmmComputeInfo:R,cpmmComputInfo:O,swapPoolType:E,launchPoolInfo:h,launchAuthProgramId:I,launchMintTransferFeeConfig:x,launchMintProgramB:S,launchMintTransferFeeConfigB:B,launchSwapInfo:z,outAmount:z.amountA.amount.sub((pe=z.amountA.fee)!=null?pe:new Pe(0)),minOutAmount:new Pe(Y.mul(ne).toFixed(0))}}async fetchRoutePoolBasicInfo(e){let{amm:t=mr,clmm:n=Rn,cpmm:o=Un}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Fr.offsetOf("baseMint"),length:64}}),r=v([M("baseMint"),M("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:r.decode(p.account.data).baseMint,mintB:r.decode(p.account.data).quoteMint})),u=v([M("mintA"),M("mintB")]),c=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:lo.span}],dataSlice:{offset:lo.offsetOf("mintA"),length:64}})).map(p=>{let f=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:f.mintA,mintB:f.mintB}}),m=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Rr.offsetOf("mintA"),length:64}})).map(p=>{let f=u.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:c,ammPools:a,cpmmPools:m}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===de.default.toString()?j:e,t=t.toString()===de.default.toString()?j:t;let r={},a={},u={},s=[],c={};for(let m of n!=null?n:[]){if((m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(s.push(m),a[m.id.toString()]=m),m.mintA.equals(e)){let p=m.mintB.toString();c[p]===void 0&&(c[p]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[p].in.push(m)}if(m.mintB.equals(e)){let p=m.mintA.toString();c[p]===void 0&&(c[p]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[p].in.push(m)}if(m.mintA.equals(t)){let p=m.mintB.toString();c[p]===void 0&&(c[p]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[p].out.push(m)}if(m.mintB.equals(t)){let p=m.mintA.toString();c[p]===void 0&&(c[p]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[p].out.push(m)}}let l=[];for(let m of o)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(s.push(m),r[m.id.toBase58()]=m,l.push(m)),m.mintA.equals(e)&&(c[m.mintB.toBase58()]===void 0&&(c[m.mintB.toBase58()]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(c[m.mintA.toBase58()]===void 0&&(c[m.mintA.toBase58()]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(c[m.mintB.toBase58()]===void 0&&(c[m.mintB.toBase58()]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(c[m.mintA.toBase58()]===void 0&&(c[m.mintA.toBase58()]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[m.mintA.toBase58()].out.push(m));for(let m of i)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(s.push(m),u[m.id.toBase58()]=m),m.mintA.equals(e)&&(c[m.mintB.toBase58()]===void 0&&(c[m.mintB.toBase58()]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(c[m.mintA.toBase58()]===void 0&&(c[m.mintA.toBase58()]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(c[m.mintB.toBase58()]===void 0&&(c[m.mintB.toBase58()]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(c[m.mintA.toBase58()]===void 0&&(c[m.mintA.toBase58()]={mintProgram:ve,in:[],out:[],mDecimals:0}),c[m.mintA.toBase58()].out.push(m));for(let m of Object.keys(c)){if(c[m].in.length===1&&c[m].out.length===1&&c[m].in[0].id.equals(c[m].out[0].id)){delete c[m];continue}if(c[m].in.length===0||c[m].out.length===0){delete c[m];continue}let p=c[m];for(let f of p.in)for(let y of p.out)f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&u[f.id.toString()]===void 0?u[f.id.toString()]=f:(f.version===4||f.version===5)&&r[f.id.toString()]===void 0&&(r[f.id.toString()]=f),y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&u[y.id.toString()]===void 0?u[y.id.toString()]=y:(y.version===4||y.version===5)&&r[y.id.toString()]===void 0&&(r[y.id.toString()]=y)}return{directPath:s,addLiquidityPools:l,routePathDict:c,needSimulate:Object.values(r),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}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 i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),r=Vr(i),a={};Object.values(r).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new de(y.mintA.address),programId:ve,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:ve,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 u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(y=>y.id.toBase58()),!0);Object.values(u).forEach(y=>{let[b,g]=[y.mintA.toBase58(),y.mintB.toBase58()];y.mintProgramA.equals(ve)?(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(ve)?(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 s=await io({connection:this.scope.connection,mints:Array.from(o).map(y=>new de(y))});a=N(N({},a),s);let c=this.scope.cpmm.toComputePoolInfos({pools:u,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let l=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:m,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:l,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((y,b)=>V(N({},y),{[b]:V(N({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>r[g.id.toBase58()]||m[g.id.toBase58()]||c[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>r[g.id.toBase58()]||m[g.id.toBase58()]||c[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:r,clmmPoolsRpcInfo:l,computeClmmPoolInfo:m,computePoolTickData:p,computeCpmmData:c,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:r,slippage:a,chainTime:u,epochInfo:s,feeConfig:c,blockTimestamp:l}){var A,k,h,P,T,I,x,S,B;let m=c===void 0?new Pe(0):e.raw.mul(new Pe(c.feeBps.toNumber())).div(new Pe(1e4)),p=e.raw.sub(m),f=new Re(e.token,p),y=c===void 0?void 0:{feeAmount:m,feeAccount:c.feeAccount},b=V(N({},t),{address:Bt(t.address).toString()}),g=[];for(let R of n)try{g.push(V(N({},this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:u,epochInfo:s,slippage:a,outputToken:b,amountIn:f,blockTimestamp:l})),{feeConfig:y}))}catch(L){this.logDebug("direct error",R.version,R.id.toString(),L.message)}this.logDebug("direct done");for(let[R,L]of Object.entries(o)){let O={chainId:101,address:R,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},C=L.in.map(E=>{try{return{pool:E,data:this.computeAmountOut({itemPool:E,tickCache:r,simulateCache:i,chainTime:u,epochInfo:s,slippage:a,outputToken:O,amountIn:f,blockTimestamp:l})}}catch(_){this.logDebug("route in error",E.version,E.id.toString(),_.message);return}}).sort((E,_)=>{var Y,ee,ne,Z;let z=E===void 0?It:E.data.amountOut.amount.raw.sub((ee=(Y=E.data.amountOut.fee)==null?void 0:Y.raw)!=null?ee:It),Q=_===void 0?It:_.data.amountOut.amount.raw.sub((Z=(ne=_.data.amountOut.fee)==null?void 0:ne.raw)!=null?Z:It);return z.lt(Q)?1:-1})[0];if(C===void 0)continue;let F=new Re(Ai(O),C.data.amountOut.amount.raw.sub((k=(A=C.data.amountOut.fee)==null?void 0:A.raw)!=null?k:It));for(let E of L.out)try{let _=this.computeAmountOut({itemPool:E,tickCache:r,simulateCache:i,chainTime:u,epochInfo:s,slippage:a,outputToken:b,amountIn:F,blockTimestamp:l});g.push(V(N({},_),{allTrade:!!(C.data.allTrade&&_.allTrade),amountIn:C.data.amountIn,amountOut:_.amountOut,minAmountOut:_.minAmountOut,currentPrice:void 0,executionPrice:new xe(new Mt({baseToken:C.data.amountIn.amount.token,denominator:C.data.amountIn.amount.raw,quoteToken:_.amountOut.amount.token,numerator:_.amountOut.amount.raw.sub((P=(h=_.amountOut.fee)==null?void 0:h.raw)!=null?P:It)}).toFixed()),priceImpact:new xe(C.data.priceImpact.add(_.priceImpact).toFixed()),fee:[C.data.fee[0],_.fee[0]],routeType:"route",poolInfoList:[C.pool,E],remainingAccounts:[C.data.remainingAccounts[0],_.remainingAccounts[0]],minMiddleAmountFee:(T=_.amountOut.fee)!=null&&T.raw?new Re(C.data.amountOut.amount.token,((x=(I=C.data.amountOut.fee)==null?void 0:I.raw)!=null?x:It).add((B=(S=_.amountOut.fee)==null?void 0:S.raw)!=null?B:It)):void 0,middleToken:C.data.amountOut.amount.token,poolReady:C.data.poolReady&&_.poolReady,poolType:[C.data.poolType,_.poolType],feeConfig:y,expirationTime:Fn(C.data.expirationTime,_.expirationTime)}))}catch(_){this.logDebug("route out error",E.version,E.id.toString(),_.message)}}return g.filter(R=>(R.allTrade||this.logDebug(`pool ${R.poolInfoList.map(L=>L.id.toString()).join(",")} filter out since not all trade`),R.allTrade)).sort((R,L)=>R.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(It)?-1:1)}getAllRouteComputeAmountIn({outputTokenAmount:e,directPath:t,routePathDict:n,simulateCache:o,tickCache:i,slippage:r,chainTime:a,epochInfo:u,blockTimestamp:s,feeConfig:c}){var p,f,y,b,g,A,k,h,P;let l=dt({address:Bt(e.token.mint).toBase58(),decimals:e.token.decimals,programId:e.token.isToken2022?Yo.toBase58():ve.toBase58(),extensions:{}}),m=[];for(let T of t)try{let I=this.computeAmountIn({itemPool:T,tickCache:i,simulateCache:o,chainTime:a,epochInfo:u,slippage:r,outputToken:l,amountOut:e.raw,blockTimestamp:s}),x=c===void 0?new Pe(0):I.amountIn.amount.raw.mul(new Pe(c.feeBps.toNumber())).div(new Pe(1e4));m.push(V(N({},I),{feeConfig:c===void 0?void 0:{feeAmount:x,feeAccount:c.feeAccount}}))}catch(I){this.logDebug("direct error",T.version,T.id.toString(),I.message)}this.logDebug("direct done");for(let[T,I]of Object.entries(n)){let x={chainId:101,address:T,programId:I.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:I.mDecimals,tags:[],extensions:{}},S=I.out.map(R=>{try{return{pool:R,data:this.computeAmountIn({itemPool:R,tickCache:i,simulateCache:o,chainTime:a,epochInfo:u,slippage:r,outputToken:l,amountOut:e.raw,blockTimestamp:s})}}catch(L){this.logDebug("route in error",R.version,R.id.toString(),L.message);return}}).sort((R,L)=>{var F,E,_,z;let O=R===void 0?It:R.data.amountIn.amount.raw.add((E=(F=R.data.amountIn.fee)==null?void 0:F.raw)!=null?E:It),C=L===void 0?It:L.data.amountIn.amount.raw.add((z=(_=L.data.amountIn.fee)==null?void 0:_.raw)!=null?z:It);return O.lt(C)?-1:1})[0];if(S===void 0)continue;let B=new Re(Ai(x),S.data.amountIn.amount.raw.add((f=(p=S.data.amountIn.fee)==null?void 0:p.raw)!=null?f:It));for(let R of I.in)try{let L=this.computeAmountIn({itemPool:R,tickCache:i,simulateCache:o,chainTime:a,epochInfo:u,slippage:r,outputToken:x,amountOut:B.raw,blockTimestamp:s}),O=c===void 0?new Pe(0):L.amountIn.amount.raw.mul(new Pe(c.feeBps.toNumber())).div(new Pe(1e4));m.push(V(N({},L),{allTrade:!!(L.allTrade&&S.data.allTrade),amountIn:L.amountIn,amountOut:S.data.amountOut,maxAmountIn:L.maxAmountIn,currentPrice:void 0,executionPrice:new xe(new Mt({baseToken:S.data.amountIn.amount.token,denominator:S.data.amountIn.amount.raw,quoteToken:L.amountOut.amount.token,numerator:L.amountOut.amount.raw.sub((b=(y=L.amountOut.fee)==null?void 0:y.raw)!=null?b:It)}).toFixed()),priceImpact:new xe(S.data.priceImpact.add(L.priceImpact).toFixed()),fee:[L.fee[0],S.data.fee[0]],routeType:"route",poolInfoList:[S.pool,R],remainingAccounts:[S.data.remainingAccounts[0],L.remainingAccounts[0]],minMiddleAmountFee:(g=L.amountOut.fee)!=null&&g.raw?new Re(S.data.amountOut.amount.token,((k=(A=S.data.amountOut.fee)==null?void 0:A.raw)!=null?k:It).add((P=(h=L.amountOut.fee)==null?void 0:h.raw)!=null?P:It)):void 0,middleToken:S.data.amountOut.amount.token,poolReady:S.data.poolReady&&L.poolReady,poolType:[S.data.poolType,L.poolType],feeConfig:c===void 0?void 0:{feeAmount:O,feeAccount:c.feeAccount},expirationTime:Fn(S.data.expirationTime,L.expirationTime)}))}catch(L){this.logDebug("route out error",R.version,R.id.toString(),L.message)}}return m.filter(T=>(T.allTrade||this.logDebug(`pool ${T.poolInfoList.map(I=>I.id.toString()).join(",")} filter out since not all trade`),T.allTrade)).sort((T,I)=>I.amountIn.amount.raw.sub(T.amountIn.amount.raw).gt(It)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,outputToken:a,amountIn:u,blockTimestamp:s}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:p,expirationTime:f,currentPrice:y,executionPrice:b,priceImpact:g,fee:A,remainingAccounts:k,executionPriceX64:h}=lt.computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:e.exBitmapInfo,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:r,epochInfo:i,catchLiquidityInsufficient:!0,blockTimestamp:s});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:p,currentPrice:new xe(y.toFixed()),executionPrice:new xe(b.toFixed()),priceImpact:new xe(g.toFixed()),fee:[A],remainingAccounts:[k],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[h],expirationTime:Fn(l.expirationTime,f)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:p,priceImpact:f,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:r});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:ut(V(N({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:ut(V(N({},a),{amount:p})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:f,fee:[new Re(u.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:c,minAmountOut:l,currentPrice:m,executionPrice:p,priceImpact:f,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:r});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:ut(V(N({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:ut(V(N({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:p,priceImpact:f,fee:[new Re(u.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:r,clmmExPriceX64:[void 0]}}}computeAmountIn({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,amountOut:a,outputToken:u,blockTimestamp:s}){let c=u.address===e.mintB.address?e.mintA:e.mintB;if(e.version===6){let{allTrade:l,realAmountOut:m,amountIn:p,maxAmountIn:f,expirationTime:y,currentPrice:b,executionPrice:g,priceImpact:A,fee:k,remainingAccounts:h}=lt.computeAmountIn({poolInfo:e,tickarrayBitmapExtension:e.exBitmapInfo,tickArrayCache:t[e.id.toString()],amountOut:a,baseMint:new de(c.address),slippage:r,epochInfo:i,blockTimestamp:s});return{allTrade:l,amountOut:{amount:ut(V(N({},u),{amount:m.amount})),fee:m.fee?ut(V(N({},u),{amount:m.fee})):void 0,expirationTime:void 0},amountIn:{amount:ut(V(N({},c),{amount:p.amount})),fee:p.fee?ut(V(N({},c),{amount:p.fee})):void 0,expirationTime:p.expirationTime},maxAmountIn:{amount:ut(V(N({},c),{amount:f.amount})),fee:f.fee?ut(V(N({},c),{amount:f.fee})):void 0,expirationTime:f.expirationTime},currentPrice:new xe(b.toFixed()),executionPrice:new xe(g.toFixed()),priceImpact:new xe(A.toFixed()),fee:[ut(V(N({},c),{amount:k}))],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[fo(g)],expirationTime:Fn(m.expirationTime,y)}}else if(e.version===7){let{allTrade:l,executionPrice:m,amountIn:p,amountOut:f,priceImpact:y,fee:b}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:u.address,amountIn:a,swapBaseIn:!1,slippage:r});return{allTrade:l,amountOut:{amount:ut(V(N({},u),{amount:f})),fee:void 0,expirationTime:void 0},amountIn:{amount:ut(V(N({},c),{amount:p})),fee:void 0,expirationTime:void 0},maxAmountIn:{amount:ut(V(N({},c),{amount:p.mul(new Pe((1+r)*1e4)).div(new Pe(1e4))})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:m,priceImpact:y,fee:[ut(V(N({},c),{amount:b}))],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountIn:l,maxAmountIn:m,currentPrice:p,executionPrice:f,priceImpact:y}=this.scope.liquidity.computeAmountIn({poolInfo:n[e.id.toString()],amountOut:a,mintIn:c.address,mintOut:u.address,slippage:r});return{amountOut:{amount:ut(V(N({},u),{amount:a})),fee:void 0,expirationTime:void 0},amountIn:{amount:ut(V(N({},c),{amount:l})),fee:void 0,expirationTime:void 0},maxAmountIn:{amount:ut(V(N({},c),{amount:m})),fee:void 0,expirationTime:void 0},currentPrice:p,executionPrice:f,priceImpact:y,fee:[ut(V(N({},c),{amount:J}))],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:r,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(s=>s.version===6&&!t[s.id.toString()]).map(s=>s.id.toString()));if(o.size>0){let s=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(s).forEach(c=>{t[c]=s[c]})}let i=new Set(e.filter(s=>s.version===4&&!n[s.id.toString()]).map(s=>s.id.toString()));if(i.size>0){let s=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(s).forEach(c=>{n[c]=s[c]})}let r=new Set(e.filter(s=>s.version===4).map(s=>s.marketId)),a={};r.size>0&&(await Me(this.scope.connection,Array.from(r).map(c=>({pubkey:new de(c)})))).forEach(c=>{if(!c.accountInfo)return;let l=Ws.decode(c.accountInfo.data);a[c.pubkey.toBase58()]={marketId:c.pubkey.toString(),marketProgramId:c.accountInfo.owner.toString(),marketAuthority:ea.getAssociatedAuthority({programId:c.accountInfo.owner,marketId:c.pubkey}).publicKey.toString(),marketBaseVault:l.baseVault.toString(),marketQuoteVault:l.quoteVault.toString(),marketBids:l.bids.toString(),marketAsks:l.asks.toString(),marketEventQueue:l.eventQueue.toString()}});let u=[];return e.forEach(s=>{if(s.version===6){let c=t[s.id.toString()],l={programId:s.programId.toBase58(),id:s.id.toBase58(),mintA:s.mintA,mintB:s.mintB,openTime:String(s.startTime),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},config:V(N({},s.ammConfig),{id:s.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:s.observationId.toBase58(),exBitmapAccount:s.exBitmapAccount.toBase58()};u.push(l)}else if(s.version===4){let c=n[s.id.toString()],l=N({programId:s.programId,id:s.id,mintA:s.mintA,mintB:s.mintB,openTime:String(s.openTime),vault:{A:c.baseVault.toBase58(),B:c.quoteVault.toBase58()},authority:Is({programId:new de(s.programId)}).publicKey.toString(),openOrders:c.openOrders.toBase58(),targetOrders:c.targetOrders.toBase58(),mintLp:s.lpMint},a[s.marketId]||{marketProgramId:c.marketProgramId.toBase58(),marketId:c.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()});u.push(l)}else s.version===7&&u.push({observationId:s.observationId.toBase58(),programId:s.programId.toBase58(),id:s.id.toBase58(),mintA:s.mintA,mintB:s.mintB,openTime:String(s.openTime),authority:yo(s.programId).publicKey.toBase58(),vault:{A:s.vaultA.toBase58(),B:s.vaultB.toBase58()},mintLp:dt({address:s.mintLp.toBase58(),programId:ve.toBase58(),decimals:s.lpDecimals}),config:V(N({id:s.configId.toBase58()},s.configInfo),{protocolFeeRate:s.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:s.configInfo.tradeFeeRate.toNumber(),fundFeeRate:s.configInfo.fundFeeRate.toNumber(),createPoolFee:s.configInfo.createPoolFee.toString()})})}),u}};import{PublicKey as Qp,Transaction as qs,TransactionInstruction as Zp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as jp}from"@solana/spl-token";import Nl from"bn.js";var Ot=class extends Qe{static getPdaPoolId(e,t){return se([Ot.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return se([Ot.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Nl(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let r=n.map(c=>Ot.getPdaPoolId(t,c).publicKey),a=[];for(let c=0;c<Ot.VERSION_PROJECT.length;c++)a.push(...r.map(l=>Ot.getPdaOwnerId(t,l,o,c).publicKey));let u=await yt(e,[...r,...a]),s=[];for(let c=0;c<u.length;c++){let l=Math.floor(c/n.length),m=c%n.length,p=r[m],f=a[c],y=u[m],b=u[n.length+c];if(!(y&&b)||y.data.length!==Ot.POOL_LAYOUT.span||b.data.length!==Ot.OWNER_LAYOUT.span)continue;let g=Ot.POOL_LAYOUT.decode(y.data),A=Ot.OWNER_LAYOUT.decode(b.data),k=g.openTime.toNumber(),h=g.endTime.toNumber(),P=A.tokenInfo.map(x=>x.debtAmount.gt(new Nl(0))).filter(x=>!x).length!==3,T=i>k&&i<h&&g.status===1,I=P&&T;s.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:A.lpAmount,project:Ot.VERSION_PROJECT[l],openTime:k,endTime:h,canClaim:I,canClaimErrorType:P?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,S)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:A.tokenInfo[S].debtAmount.add(A.tokenInfo[S].claimedAmount)}))})}return s}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r=[];for(let s of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:s.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:s.mintAddress.equals(qe.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!s.mintAddress.equals(qe.WSOL.mint),associatedOnly:s.mintAddress.equals(qe.WSOL.mint)?!1:t.associatedOnly});l&&o.addInstruction(l),r.push(c)}o.addInstruction({instructions:[Ot.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:a,signers:u}=o.build();return[{transaction:a,signer:u}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(qe.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(qe.WSOL.mint),associatedOnly:m.mintAddress.equals(qe.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),p&&(r[m.mintAddress.toString()]=p,l.push(p))}o.addInstruction({instructions:[Ot.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:i,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:a,signers:u}=o.build(),s=o.allInstructions;return Xa(s,[i,...u.map(c=>c.publicKey)])?[{transaction:a,signer:u}]:[{transaction:new qs().add(...s.slice(0,o.AllTxData.instructions.length-1)),signer:u},{transaction:new qs().add(...s.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new qs().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=v([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:jp,isSigner:!1,isWritable:!1}],r=Buffer.alloc(o.span);o.encode({},r);let a=Buffer.from([10,66,208,184,161,6,191,98,...r]);return new Zp({keys:i,programId:e,data:a})}},on=Ot;on.CLAIMED_NUM=3,on.POOL_LAYOUT=v([Ae(8),D("bump"),D("status"),w("openTime"),w("endTime"),M("ammId"),$(v([D("mintDecimals"),M("mintAddress"),M("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),Ot.CLAIMED_NUM,"tokenInfo"),$(w(),10,"padding")]),on.OWNER_LAYOUT=v([Ae(8),D("bump"),D("version"),M("poolId"),M("owner"),w("lpAmount"),$(v([M("mintAddress"),w("debtAmount"),w("claimedAmount")]),Ot.CLAIMED_NUM,"tokenInfo"),$(w(),4,"padding")]),on.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Qp(e)),on.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},on.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{TOKEN_PROGRAM_ID as _l}from"@solana/spl-token";import{PublicKey as Yi}from"@solana/web3.js";import Hi from"bn.js";import{SystemProgram as Io,SYSVAR_RENT_PUBKEY as Jp,Transaction as Ml,TransactionInstruction as ef}from"@solana/web3.js";import{createInitializeAccountInstruction as Fl,TOKEN_PROGRAM_ID as vl}from"@solana/spl-token";function $p(d="accountFlags"){let e=new sr(d);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Us=v([Ae(5),$p("accountFlags"),M("ownAddress"),w("vaultSignerNonce"),M("baseMint"),M("quoteMint"),M("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),M("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),M("requestQueue"),M("eventQueue"),M("bids"),M("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),Ae(7)]);function tf({programId:d,marketInfo:e}){let t=v([D("version"),Ue("instruction"),w("baseLotSize"),w("quoteLotSize"),je("feeRateBps"),w("vaultSignerNonce"),w("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:Jp,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 ef({keys:n,programId:d,data:o})}async function na({connection:d,wallet:e,marketInfo:t}){var r,a,u,s,c,l,m,p;let n=new Ml,o=await d.getMinimumBalanceForRentExemption(165);n.add(Io.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:vl}),Io.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:vl}),Fl(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Fl(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Io.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await d.getMinimumBalanceForRentExemption(Us.span),space:Us.span,programId:t.programId}));let i=new Ml;return i.add(Io.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await d.getMinimumBalanceForRentExemption((r=t.requestQueueSpace)!=null?r:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Io.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await d.getMinimumBalanceForRentExemption((u=t.eventQueueSpace)!=null?u:262144+12),space:t.lowestFeeMarket?11308:(s=t.eventQueueSpace)!=null?s:262144+12,programId:t.programId}),Io.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await d.getMinimumBalanceForRentExemption((c=t.orderbookQueueSpace)!=null?c:65536+12),space:t.lowestFeeMarket?14524:(l=t.orderbookQueueSpace)!=null?l:65536+12,programId:t.programId}),Io.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await d.getMinimumBalanceForRentExemption((m=t.orderbookQueueSpace)!=null?m:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),tf({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:[X.CreateAccount,X.CreateAccount,X.InitAccount,X.InitAccount]},{transaction:i,signer:[],instructionTypes:[X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.InitMarket]}]}var Qo=class extends Qe{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:u,lowestFeeMarket:s,assignSeed:c,txVersion:l,computeBudgetConfig:m,txTipConfig:p,feePayer:f}){let y=this.scope.ownerPubKey,b=c?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${c}`:void 0,g=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-market`}),A=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-request`}),k=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-event`}),h=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-bids`}),P=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-asks`}),T=$e({fromPublicKey:y,programId:_l,assignSeed:b&&`${b}-baseVault`}),I=$e({fromPublicKey:y,programId:_l,assignSeed:b&&`${b}-quoteVault`}),x=0,S=new Hi(100);function B(){let _=new Hi(0);for(;;)try{return{vaultOwner:Yi.createProgramAddressSync([g.publicKey.toBuffer(),_.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:_}}catch{if(_.iaddn(1),_.gt(new Hi(25555)))throw Error("find vault owner error")}}let{vaultOwner:R,vaultSignerNonce:L}=B(),O=new Hi(Math.round(10**e.decimals*n)),C=new Hi(Math.round(n*10**t.decimals*o));if(O.eq(J))throw Error("lot size is too small");if(C.eq(J))throw Error("tick size or lot size is too small");let F=await na({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:T,quoteVault:I,vaultOwner:R,requestQueue:A,eventQueue:k,bids:h,asks:P,feeRateBps:x,quoteDustThreshold:S,vaultSignerNonce:L,baseLotSize:O,quoteLotSize:C,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:u,lowestFeeMarket:s}}),E=this.createTxBuilder(f);E.addInstruction({instructions:F[0].transaction.instructions,signers:F[0].signer});for await(let _ of F.slice(1,F.length))E.addInstruction({instructions:_.transaction.instructions,signers:_.signer,instructionTypes:_.instructionTypes});return l===0?E.sizeCheckBuildV0({computeBudgetConfig:m,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:h.publicKey,asks:P.publicKey,baseVault:T.publicKey,quoteVault:I.publicKey,baseMint:new Yi(e.mint),quoteMint:new Yi(t.mint)}}):E.sizeCheckBuild({computeBudgetConfig:m,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:h.publicKey,asks:P.publicKey,baseVault:T.publicKey,quoteVault:I.publicKey,baseMint:new Yi(e.mint),quoteMint:new Yi(t.mint)}})}};var nC=new $n(2),oC=new $n(3),iC=new $n(5),Aa=new $n(10),rC=new $n(100),aC=new $n(1e3),sC=new $n(1e4);function xa(d){return Aa.pow(ue(d))}function oa(d,e){let t=d.divmod(e);return t.mod.isZero()?t.div:d.isNeg()===e.isNeg()?t.div.iaddn(1):t.div}function Mi(d,e,t){return d.mul(e).add(t).sub(new $n(1)).div(t)}function Nr(d,e,t){return d.mul(e).div(t)}function ga(d,e=1,t=[]){let n=[...d];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var bn=class{constructor(e){this._owner=e}get publicKey(){return bn.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return bn.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return bn.isKeyPair(this._owner)}get isPublicKey(){return bn.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!bn.isKeyPair(e)}};import Ee from"bn.js";var xn=1e4;function ft(d,e,t,n){if(e===void 0)return{amount:d,fee:void 0,expirationTime:void 0};let o=V(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}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,r=new Ee(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===xn){let u=new Ee(i.maximumFee.toString());return{amount:d.add(u),fee:u,expirationTime:a}}else{let u=Jn(d.mul(new Ee(xn)),new Ee(xn-i.transferFeeBasisPoints)),s=new Ee(i.maximumFee.toString()),c=u.sub(d).gt(s)?d.add(s):u,l=Jn(c.mul(new Ee(i.transferFeeBasisPoints)),new Ee(xn)),m=l.gt(r)?r:l;return{amount:c,fee:m,expirationTime:a}}else{let u=Jn(d.mul(new Ee(i.transferFeeBasisPoints)),new Ee(xn)),s=u.gt(r)?r:u;return{amount:d,fee:s,expirationTime:a}}}function Fn(d,e){return d===void 0?e:e===void 0?d:Math.min(d,e)}function Jn(d,e){let{div:t,mod:n}=d.divmod(e);return n.gt(new Ee(0))?t.add(new Ee(1)):t}function To(d,e){if(d.isZero())return new Ee(0);let t=d.div(e);return t.isZero()?new Ee(1):d.mod(e).gt(new Ee(0))?t.add(new Ee(1)):t}function Wi(d,e,t){if(e===void 0)return{amount:d,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new Ee(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Jn(d.mul(new Ee(o.transferFeeBasisPoints)),new Ee(xn)),u=a.gt(i)?i:a;return{amount:d,fee:u,expirationTime:r}}function Xo(d,e,t){if(e===void 0)return{amount:d,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new Ee(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===xn){let a=new Ee(o.maximumFee.toString());return{amount:d.add(a),fee:a,expirationTime:r}}else{let a=Jn(d.mul(new Ee(xn)),new Ee(xn-o.transferFeeBasisPoints)),u=new Ee(o.maximumFee.toString()),s=a.sub(d).gt(u)?d.add(u):a,c=Jn(s.mul(new Ee(o.transferFeeBasisPoints)),new Ee(xn)),l=c.gt(i)?i:c;return{amount:s,fee:l,expirationTime:r}}}var Ze={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"},Vl=V(N({},Ze),{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 El="ray_tab_hash",Gs="ray_req_hash",nf=()=>{if(typeof window===void 0)return"";let d=sessionStorage.getItem(El);return d||(d=`ray-${Date.now()}`,sessionStorage.setItem(El,d)),d},ia=async n=>{var o=n,{logCount:d=1e3,removeLastLog:e}=o,t=We(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(r=>r());let i=JSON.parse(localStorage.getItem(Gs)||"[]").slice(0,d-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(V(N({},t),{time:Date.now(),session:nf()}));try{localStorage.setItem(Gs,JSON.stringify(i))}catch{if(e){let r=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!r;){i.pop();let u=JSON.stringify(t.data).substring(0,100);i[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(Gs,JSON.stringify(i)),r=!0}catch{r=!1}}return new Promise(u=>u())}return ia(V(N({},t),{logCount:d,removeLastLog:!0}))}};var ra=ke("Raydium_Api"),zs=new Map,Xs=new Map;var aa=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=Dl.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?Vl.BASE_HOST:Ze.BASE_HOST),timeout:t}),this.api.interceptors.request.use(r=>{let{method:a,baseURL:u,url:s}=r;return ra.debug(`${a==null?void 0:a.toUpperCase()} ${u}${s}`),r},r=>(ra.error("Request failed"),Promise.reject(r))),this.api.interceptors.response.use(r=>{let{config:a,data:u,status:s}=r,{method:c,baseURL:l,url:m}=a;return n&&ia({status:s,url:`${l}${m}`,params:a.params,data:u,logCount:this.logCount}),ra.debug(`${c==null?void 0:c.toUpperCase()} ${l}${m} ${s}`),u},r=>{let{config:a,response:u={}}=r,{status:s}=u,{method:c,baseURL:l,url:m}=a;return n&&ia({status:s,url:`${l}${m}`,params:a.params,data:r.message,logCount:this.logCount}),ra.error(`${c.toUpperCase()} ${l}${m} ${s||r.message}`),Promise.reject(r)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ze.CLMM_CONFIG)).data}async getClmmDynamicConfigs(){return(await this.api.get(this.urlConfigs.CLMM_DYNAMIC_CONFIG||Ze.CLMM_DYNAMIC_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Ze.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_POSITION_LINE||Ze.POOL_POSITION_LINE}?id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Dl.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ze.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ze.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ze.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Ze.JUP_TOKEN_LIST})).map(t=>V(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||Ze.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:i=!1,nextPageId:r,pageSize:a=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ze.POOL_LIST)+`?size=${a}&hasReward=${i}${t&&t!=="all"?`&poolType=${t}`:""}${n?`&sortField=${n}`:""}${o?`&sortType=${o}`:""}${r?`&nextPageId=${r}`:""}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ze.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(r=>zs.has(r)?(n.push(zs.get(r)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ze.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{zs.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i,order:r="desc",nextPageId:a}=e,[u,s]=[t&&Bt(t).toBase58(),n&&n!=="undefined"?Bt(n).toBase58():""],[c,l]=s&&u>s?[s,u]:[u,s];if(!u&&!s)throw new Error("not search mints provided");return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ze.POOL_SEARCH_MINT)+`?size=100&mint1=${c}${l?`&mint2=${l}`:""}${o&&o!=="all"?`&poolType=${o}`:""}${i?`&sortField=${i}`:""}${r?`&sortType=${r}`:""}${a?`&nextPageId=${a}`:""}`)).data}async fetchPoolByLpMints(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_LP||Ze.POOL_SEARCH_LP)+`?lps=${t}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ze.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ze.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ze.CHECK_AVAILABILITY)).data}async fetchLaunchConfigs(){var t;if((t=Xs.get(this.cluster))!=null&&t.length)return Xs.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 Xs.set(this.cluster,e.data.data),e.data.data}async fetchFarmPositions(e=""){return(await this.api.get(`${this.urlConfigs.OWNER_BASE_HOST||Ze.OWNER_BASE_HOST}`+(this.urlConfigs.OWNER_STAKE_FARMS||Ze.OWNER_STAKE_FARMS).replace("{owner}",e))).data}async fetchCpmmLockInfo(e){return await this.api.get(`${this.urlConfigs.CPMM_LOCK||Ze.CPMM_LOCK}?id=${e.toString()}`)}};var sa="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Wl="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as ua,SystemProgram as of}from"@solana/web3.js";import{AccountLayout as Zo,createAssociatedTokenAccountIdempotentInstruction as Ys,TOKEN_PROGRAM_ID as eo,TOKEN_2022_PROGRAM_ID as rf}from"@solana/spl-token";var Qi=class extends Qe{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:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._notSubscribeAccountChange=i!=null?i:!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),[i,r,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:eo},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:rf},o.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:s}=Nu({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:r.context,value:[...r.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=s,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(c=>c({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:u,tokenAccountRawInfos:s}}clearAccountChangeCkb(){this._accountChangeListenerId!==void 0&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId)}async getCreatedTokenAccount({mint:t,programId:n=eo,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),r=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:u}=a;if(u&&(!o||o&&r.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,b,g,A;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:r,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:s=!1,assignSeed:c}=t,l=new ua(t.tokenProgram||eo),m=this.getAssociatedTokenAccount(n,new ua(l)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!i||k.pubkey.equals(m))).sort((k,h)=>k.accountInfo.amount.lt(h.accountInfo.amount)?1:-1);if(o===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let k=Ys(o.payer||r,m,r,n,l),h=this.tokenAccountRawInfos.find(P=>P.pubkey.equals(m));if(s){let P=await this.scope.connection.getAccountInfo(m);if(P===null)(y=f.instructions)==null||y.push(k),f.instructionTypes.push(X.CreateATA);else if(!(P.owner.equals(l)&&Zo.decode(P.data).mint.equals(n)&&Zo.decode(P.data).owner.equals(r)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else h===void 0&&(f.instructions.push(k),f.instructionTypes.push(X.CreateATA));if(n.equals(j)&&o.amount){let P=await qn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(b=o.amount)!=null?b:0,skipCloseAccount:u});f.instructions.push(...P.instructions||[]),f.endInstructions.push(...P.endInstructions||[]),f.instructionTypes.push(...P.instructionTypes||[]),f.endInstructionTypes.push(...P.endInstructionTypes||[]),o.amount&&(f.instructions.push(Mu({source:P.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:eo})),f.instructionTypes.push(X.TransferAmount))}return!u&&h===void 0&&(f.endInstructions.push(Cn({owner:r,payer:o.payer||r,tokenAccount:m,programId:l})),f.endInstructionTypes.push(X.CloseAccount)),{account:m,instructionParams:f}}else{let k=$e({fromPublicKey:r,programId:l,assignSeed:c}),h=await this.scope.connection.getMinimumBalanceForRentExemption(Zo.span),P=of.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:k.seed,newAccountPubkey:k.publicKey,lamports:h+Number((A=(g=o.amount)==null?void 0:g.toString())!=null?A:0),space:Zo.span,programId:l});return f.instructions.push(P,Fa({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:l})),f.instructionTypes.push(X.CreateAccount),f.instructionTypes.push(X.InitAccount),u||(f.endInstructions.push(Cn({owner:r,payer:o.payer||r,tokenAccount:k.publicKey,programId:l})),f.endInstructionTypes.push(X.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=eo,autoUnwrapWSOLToSOL:o}){var u;await this.fetchWalletTokenAccounts();let i=(u=this.scope.account.tokenAccounts.find(({mint:s})=>(s==null?void 0:s.toBase58())===t.toBase58()))==null?void 0:u.publicKey,r=this.scope.ownerPubKey,a={};if(!i){let s=this.getAssociatedTokenAccount(t,n),c=await Ys(r,s,r,t,n);a.instructions=[c],a.instructionTypes=[X.CreateATA],i=s}return o&&j.toBase58()===t.toBase58()&&(a.endInstructions=[Cn({owner:r,payer:r,tokenAccount:i,programId:n})],a.endInstructionTypes=[X.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:r=eo,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:s,skipCloseAccount:c,checkCreateATAOwner:l}=t,m=this.getAssociatedTokenAccount(i,r);if(new ua(j).equals(i)){let p=await qn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:o,skipCloseAccount:c});return N({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!m.equals(a)&&!s){let p=[],f=Ys(this.scope.ownerPubKey,m,this.scope.ownerPubKey,i,r);if(l){let y=await this.scope.connection.getAccountInfo(m);if(y===null)p.push(f);else if(!(y.owner.equals(eo)&&Zo.decode(y.data).mint.equals(i)&&Zo.decode(y.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${m.toString()}`)}else p.push(f);return{tokenAccount:m,instructions:p,instructionTypes:[X.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=eo,amount:i,useSOLBalance:r,handleTokenAccount:a,feePayer:u}=t,s,c=this.createTxBuilder(u);if(n.equals(new ua(j))&&r){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=l,f=We(l,["tokenAccount"]);s=p,c.addInstruction(f)}else if(s=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!s&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=m,f=We(m,["tokenAccount"]);s=p,c.addInstruction(f)}return N({tokenAccount:s},c.AllTxData)}};import{PublicKey as Se,SystemProgram as af}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as ql}from"@solana/spl-token";import to from"decimal.js";import no from"bn.js";var Zi=class extends Qe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(bt)){let n=await qn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Ya(V(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=ri,txVersion:i,feePayer:r,lockProgram:a}){var I,x;this.checkDisabled(),this.scope.checkOwner();let s={lpMint:new Se(e.lpMint.address),lockInfo:{lockMint:(I=a==null?void 0:a.mint)!=null?I:qu,lockVault:(x=a==null?void 0:a.vault)!=null?x:Uu},version:6,rewardInfos:t,programId:o},c=this.createTxBuilder(r),l=n!=null?n:this.scope.ownerPubKey,m=$e({fromPublicKey:l,programId:s.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(ci.span);c.addInstruction({instructions:[af.createAccountWithSeed({fromPubkey:l,basePubkey:l,seed:m.seed,newAccountPubkey:m.publicKey,lamports:p,space:ci.span,programId:s.programId})]});let{publicKey:f,nonce:y}=ec({programId:new Se(s.programId),poolId:m.publicKey}),b=di({programId:s.programId,poolId:m.publicKey,mint:s.lpMint,type:"lpVault"}),g=[],A=[];for(let S of s.rewardInfos){S.openTime>=S.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",S.openTime.toString()),isNaN(Gn[S.rewardType])&&this.logAndCreateError("rewardType error",S.rewardType),Number(S.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",S.perSecond),g.push(tc(S));let{rewardPubKey:B,newInstruction:R}=await this._getUserRewardInfo({rewardInfo:S,payer:l});R&&c.addInstruction(R),B||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let L=S.mint.equals(bt)?new Se(Kt.address):S.mint;A.push({rewardMint:L,rewardVault:di({programId:s.programId,poolId:m.publicKey,mint:L,type:"rewardVault"}),userRewardToken:B})}let{account:k,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new Se(s.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&c.addInstruction(h),k||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:T}=ic({farmId:m.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:s.lpMint,lockVault:s.lockInfo.lockVault,lockMint:s.lockInfo.lockMint,lockUserAccount:k,programId:s.programId,rewardInfo:A,rewardInfoConfig:g,nonce:y});return c.addInstruction({instructions:[P],instructionTypes:[T]}).versionBuild({txVersion:i,extInfo:{farmId:m.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:k,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o,feePayer:i}){var g;let r=Yt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=Ft((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),u={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let s=t||this.scope.ownerPubKey,c=n.mint.equals(bt)?new Se(Kt.address):n.mint,l=u.rewardInfos.findIndex(A=>new Se(A.mint.address).equals(c)),m=a.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let p=(g=m.vault)!=null?g:bt,f=this.createTxBuilder(i),{rewardPubKey:y,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:s});return b&&f.addInstruction(b),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),f.addInstruction({instructions:[Ha({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:u,rewardInfo:n})],instructionTypes:[X.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o,feePayer:i}){var l;let r=Yt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=Ft((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),u={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let s=t||this.scope.ownerPubKey,c=this.createTxBuilder(i);for(let m of n){let p=m.mint.equals(bt)?new Se(Kt.address):m.mint,f=u.rewardInfos.findIndex(h=>new Se(h.mint.address).equals(p)),y=a.rewardInfos[f];y||this.logAndCreateError("configuration does not exist","rewardMint",p);let b=(l=y.vault)!=null?l:bt,{rewardPubKey:g,newInstruction:A}=await this._getUserRewardInfo({rewardInfo:m,payer:s});A&&c.addInstruction(A),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let k=Ha({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:u,rewardInfo:m});c.addInstruction({instructions:[k],instructionTypes:[X.FarmV6Restart]})}return c.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i,feePayer:r}=e,a=Yt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let u=Ft((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),s=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder(r),l=o.mint.equals(bt)?new Se(Kt.address):o.mint,m=di({programId:new Se(n.programId),poolId:new Se(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:o,payer:s});return f&&c.addInstruction(f),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,c.addInstruction({instructions:[Qa({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:u,rewardVault:m,rewardInfo:o})],instructionTypes:[X.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i,feePayer:r}=e,a=Yt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let u=Ft((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),s=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder(r);for(let l of o){let m=l.mint.equals(bt)?new Se(Kt.address):l.mint,p=di({programId:new Se(n.programId),poolId:new Se(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:f,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:s});y&&c.addInstruction(y),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=Qa({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:u,rewardVault:p,rewardInfo:V(N({},l),{mint:m})});c.addInstruction({instructions:[b],instructionTypes:[X.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:r,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:s,computeBudgetConfig:c,txTipConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:p}=n,f=Yt[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),Va(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],A=$t({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),k=this.createTxBuilder(i);k.addCustomComputeBudget(c),k.addTipInstruction(l);let h={};for(let C of this.scope.account.tokenAccounts)if(a){let F=te(this.scope.ownerPubKey,C.mint,C.programId).publicKey;C.publicKey&&F.equals(C.publicKey)&&(h[C.mint.toString()]=C.publicKey)}else h[C.mint.toString()]=C.publicKey;let P=g.lpMint,T=h[P.address];T||this.logAndCreateError("you don't have any lp","lp zero",h);let I=[];for(let C of m){let F=r&&C.mint.address===j.toString(),E=h[C.mint.address];if(!E){let{account:_,instructionParams:z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new Se(C.mint.address),notUseTokenAccount:F,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!F,associatedOnly:F?!1:a,checkCreateATAOwner:u});E=_,z&&k.addInstruction(z)}h[C.mint.address]=E,I.push(E)}let x,S=await this.scope.connection.getAccountInfo(A);if(S&&(x=pi(f).decode(S.data)),n.programId!==ri.toString()&&n.programId!==cn.FARM_PROGRAM_ID_V6.toString()&&!x){let{instruction:C,instructionType:F}=yi({id:b,programId:y,version:f,ledger:A,owner:this.scope.ownerPubKey});k.addInstruction({instructions:[C],instructionTypes:[F]})}let B=Ea({version:f,rewardInfos:m,rewardTokenAccountsPublicKeys:I});B&&this.logAndCreateError(B);let R={amount:ue(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:T,rewardAccounts:I,userAuxiliaryLedgers:s==null?void 0:s.map(C=>new Se(C))},L=f===6?cc(R):f===5?uc(R):sc(R),O={3:X.FarmV3Deposit,5:X.FarmV5Deposit,6:X.FarmV6Deposit};return k.addInstruction({instructions:[L],instructionTypes:[O[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:r,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l,txTipConfig:m}=e,{rewardInfos:p}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let f=Yt[n.programId];Va(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(l),b.addTipInstruction(m);let g={};for(let B of this.scope.account.tokenAccounts)if(u){let R=te(this.scope.ownerPubKey,B.mint).publicKey;B.publicKey&&R.equals(B.publicKey)&&(g[B.mint.toString()]=B.publicKey)}else g[B.mint.toString()]=B.publicKey;if(f!==4){let B=$t({programId:new Se(n.programId),poolId:new Se(n.id),owner:this.scope.ownerPubKey,version:f}),R=await this.scope.connection.getAccountInfo(B);if(R)pi(f).decode(R.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:L,instructionType:O}=yi({id:new Se(y.id),programId:new Se(y.programId),version:f,ledger:B,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[L],instructionTypes:[O]})}}i&&i.isZero()&&!(c||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let A=y.lpMint.address,k=r&&A===j.toString(),h=g[A.toString()];if(!h){let{account:B,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Se(A),notUseTokenAccount:k,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:u,checkCreateATAOwner:s});h=B,R&&b.addInstruction(R)}g[A.toString()]=h;let P=[];for(let B of p){let R=r&&B.mint.address===j.toString(),L=g[B.mint.address];if(!L){let{account:O,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B.mint.programId,mint:new Se(B.mint.address),notUseTokenAccount:R,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:s});L=O,C&&b.addInstruction(C)}g[B.mint.address]=L,P.push(L)}let T=Ea({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:P});T&&this.logAndCreateError(T);let I={amount:ue(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:h,rewardAccounts:P,userAuxiliaryLedgers:c==null?void 0:c.map(B=>new Se(B))},x=f===6?bi(I):f===5?gi(I):f===4?ac(I):Pi(I),S={3:X.FarmV3Withdraw,4:X.FarmV4Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};return b.addInstruction({instructions:[x],instructionTypes:[S[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:o,txTipConfig:i,feePayer:r}){var y;this.scope.checkOwner();let a=Ft((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),u=Yt[e.programId];u!==6&&this.logAndCreateError("invalid farm version",u);let s=a.rewardInfos.find(b=>Bt(b.mint.address).equals(Bt(t)));s||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(y=s==null?void 0:s.vault)!=null?y:bt,l=this.createTxBuilder(r),m;if(t.equals(bt)||t.equals(Se.default)){let b=await qn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Ya(V(N({},s),{openTime:s.openTime,endTime:s.endTime,perSecond:new to(s.perSecond).mul(10**s.mint.decimals).toString()}))});m=b.addresses.newAccount,l.addInstruction(b)}else{let b=await this.scope.account.getCreatedTokenAccount({mint:t});b?m=b:(m=await this.scope.account.getAssociatedTokenAccount(t),l.addInstruction({instructions:[ql(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t)],instructionTypes:[X.CreateATA]}))}let{instruction:p,instructionType:f}=rc({programId:a.programId,id:a.id,authority:a.authority,lpVault:a.lpVault,rewardVault:c,userRewardToken:m,owner:this.scope.ownerPubKey});return l.addCustomComputeBudget(o),l.addTipInstruction(i),l.addInstruction({instructions:[p],instructionTypes:[f]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:s}=e,c=this.createTxBuilder(o),l={};for(let f of this.scope.account.tokenAccounts)if(i){let y=te(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&y.equals(f.publicKey)&&(l[f.mint.toString()]=f.publicKey)}else l[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,y)=>V(N({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:A}=f,k=Yt[y],h=b.address,P=n&&h===j.toString(),T=l[h];if(!T){let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Se(h),notUseTokenAccount:P,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:P?!1:i,checkCreateATAOwner:r});T=L,O&&c.addInstruction(O)}l[h.toString()]=T;let I=[];for(let L of g){let O=n&&L.mint.address===j.toString(),C=l[L.mint.address];if(!C)if(O){let{account:F,instructionParams:E}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new Se(L.mint.address),notUseTokenAccount:O,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!O,associatedOnly:O?!1:i,checkCreateATAOwner:r});C=F,E&&c.addInstruction(E)}else{let F=new Se(L.mint.address);C=this.scope.account.getAssociatedTokenAccount(F),c.addInstruction({instructions:[ql(this.scope.ownerPubKey,C,this.scope.ownerPubKey,F)]})}l[L.mint.address]=C,I.push(C)}let x=p[A],S={amount:J,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:x,lpAccount:T,rewardAccounts:I,userAuxiliaryLedgers:a==null?void 0:a.map(L=>new Se(L))},B=k===6?bi(S):k===5?gi(S):Pi(S),R={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};c.addInstruction({instructions:[B],instructionTypes:[R[k]]})}return u===1?c.sizeCheckBuild({computeBudgetConfig:s}):c.sizeCheckBuildV0({computeBudgetConfig:s})}async fetchFarmBalances(){let e=await this.scope.api.fetchFarmPositions(this.scope.ownerPubKey.toBase58()),t=new Map,n=new Map;Object.keys(e||{}).forEach(s=>{var c,l;Object.keys(e[s]).forEach(m=>{Object.keys(e[s][m]).forEach(p=>{var g,A,k,h,P,T;let f=V(N({},e[s][m][p]),{farmId:m,lpMint:s,userVault:p}),y=t.get(s);t.set(s,{lpMint:s,hasAmount:(y==null?void 0:y.hasAmount)||new to(f.lpAmount||0).gt(0),hasV1Data:(y==null?void 0:y.hasV1Data)||f.version==="V1",totalLpAmount:new to((g=y==null?void 0:y.totalLpAmount)!=null?g:0).add(f.lpAmount||0).toString(),totalV1LpAmount:f.version==="V1"?new to((A=y==null?void 0:y.totalV1LpAmount)!=null?A:0).add(f.lpAmount||0).toString():(k=y==null?void 0:y.totalV1LpAmount)!=null?k:"0",data:[...(y==null?void 0:y.data)||[],f]});let b=n.get(m);f.programId,n.set(m,{lpMint:s,hasAmount:(b==null?void 0:b.hasAmount)||new to(f.lpAmount||0).gt(0),hasV1Data:(b==null?void 0:b.hasV1Data)||f.version==="V1",totalLpAmount:new to((h=b==null?void 0:b.totalLpAmount)!=null?h:0).add(f.lpAmount||0).toString(),totalV1LpAmount:f.version==="V1"?new to((P=b==null?void 0:b.totalV1LpAmount)!=null?P:0).add(f.lpAmount||0).toString():(T=b==null?void 0:b.totalV1LpAmount)!=null?T:"0",data:[...(b==null?void 0:b.data)||[],f]})})}),t.set(s,V(N({},t.get(s)),{totalLpAmount:new to((l=(c=t.get(s))==null?void 0:c.totalLpAmount)!=null?l:0).toString()}))});let o=Array.from(n).map(s=>s[1].data).flat(),i=await this.scope.api.fetchFarmInfoById({ids:o.map(s=>s.farmId).join(",")}),r=await yt(this.scope.connection,o.map(s=>new Se(s.userVault)));return(await yt(this.scope.connection,o.map(s=>new Se(s.farmId)))).map((s,c)=>{var g;if(!s||!r[c])return;let l=Yt[o[c].programId];if(!fr[l]||!ui[l])return;let m=ui[l].decode(r[c].data),p=fr[l].decode(s.data),f;p.version===6?f=(g=p.rewardMultiplier)!=null?g:new no(10).pow(new no(9)):f=p.rewardInfos.length===1?new no(10).pow(new no(9)):new no(10).pow(new no(15));let y=i[c],b=p?p.rewardInfos.map((A,k)=>{var T;let h=m.rewardDebts[k],P=m.deposited.mul((p==null?void 0:p.version)===6?A.accRewardPerShare:A.perShareReward).div(f).sub(h);return P.lt(new no(0))&&(P=new no(0)),{mint:(T=y.rewardInfos[k])==null?void 0:T.mint,amount:P.toString()}}):[];return V(N(N({},m),p),{farmInfo:y,pendingRewards:b})}).filter(Boolean)}};import{PublicKey as tt}from"@solana/web3.js";import{AccountLayout as sf,MintLayout as Ul,NATIVE_MINT as ca,TOKEN_PROGRAM_ID as oo}from"@solana/spl-token";import _e from"bn.js";import Fe from"decimal.js";var ji=class extends Qe{constructor(t){super(t);this.stableLayout=new Ur({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:cn.MODEL_DATA_PUBKEY})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let r=new _e(new Fe(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Ai(t[i?"mintB":"mintA"]),[u,s]=[new _e(new Fe(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new _e(new Fe(t.mintAmountB).mul(10**t.mintB.decimals).toString())],c=new _e(new Fe(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,Fe.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",s.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",r.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",s.toString());let l=i?"base":"quote";this.logDebug("input side:",l);let m=J;r.isZero()||(m=l==="base"?oa(r.mul(s),u):oa(r.mul(u),s)),this.logDebug("amountRaw:",m.toString(),"lpAmount:",c.toString());let p=oa(r.mul(c),l==="base"?u:s);this.logDebug("liquidity:",p.toString());let f=new gt(new _e(1)).add(o),y=new gt(new _e(1)).sub(o),b=f.mul(m).quotient,g=y.mul(m).quotient,A=new Re(a,m),k=new Re(a,b),h=new Re(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:A,maxAnotherAmount:k,minAnotherAmount:h,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:r,otherAmountMin:a,fixedSide:u,config:s,txVersion:c,computeBudgetConfig:l,txTipConfig:m,feePayer:p}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",r),(i.isZero()||r.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:r.toFixed()});let{account:f}=this.scope,{bypassAssociatedCheck:y,checkCreateATAOwner:b}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),[g,A]=[i.token,r.token],k=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),h=await f.getCreatedTokenAccount({mint:A.mint,associatedOnly:!1});!k&&!h&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let P=await f.getCreatedTokenAccount({mint:new tt(n.lpMint.address)}),T=[g,A],I=[k,h],x=[i.raw,r.raw],S=i.token.mint.toBase58()===n.mintA.address?"base":"quote",B="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",u),S==="quote"?(T.reverse(),I.reverse(),x.reverse(),B=u==="a"?"quote":"base"):S==="base"&&(B=u==="a"?"base":"quote");let[R,L]=T,[O,C]=I,[F,E]=x,_=o!=null?o:await this.getAmmPoolKeys(n.id),z=this.createTxBuilder(p),oe=await f.handleTokenAccount({side:"in",amount:F,mint:R.mint,tokenAccount:O,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:Q}=oe,Y=We(oe,["tokenAccount"]);z.addInstruction(Y);let be=await f.handleTokenAccount({side:"in",amount:E,mint:L.mint,tokenAccount:C,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ee}=be,ne=We(be,["tokenAccount"]);z.addInstruction(ne);let Ke=await f.handleTokenAccount({side:"out",amount:0,mint:new tt(n.lpMint.address),tokenAccount:P,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:Z}=Ke,pe=We(Ke,["tokenAccount"]);return z.addInstruction(pe),z.addInstruction({instructions:[al({poolInfo:n,poolKeys:_,userKeys:{baseTokenAccount:Q,quoteTokenAccount:ee,lpTokenAccount:Z,owner:this.scope.ownerPubKey},baseAmountIn:F,quoteAmountIn:E,otherAmountMin:a.raw,fixedSide:B})],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5AddLiquidity:X.AmmV4AddLiquidity],lookupTableAddress:_.lookupTableAccount?[_.lookupTableAccount]:[]}),z.addCustomComputeBudget(l),z.addTipInstruction(m),c===0?await z.buildV0():z.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,lpAmount:i,baseAmountMin:r,quoteAmountMin:a,config:u,txVersion:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m}=t,p=o!=null?o:await this.getAmmPoolKeys(n.id),[f,y,b]=[new tt(n.mintA.address),new tt(n.mintB.address),new tt(n.lpMint.address)];this.logDebug("lpAmount:",i),this.logDebug("baseAmountMin:",r),this.logDebug("quoteAmountMin:",a),i.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",i.toString());let{account:g}=this.scope,A=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});A||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let k=await g.getCreatedTokenAccount({mint:f}),h=await g.getCreatedTokenAccount({mint:y}),P=this.createTxBuilder(m),{bypassAssociatedCheck:T,checkCreateATAOwner:I}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),L=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:k,bypassAssociatedCheck:T,checkCreateATAOwner:I}),{tokenAccount:x}=L,S=We(L,["tokenAccount"]);P.addInstruction(S);let O=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:h,bypassAssociatedCheck:T,checkCreateATAOwner:I}),{tokenAccount:B}=O,R=We(O,["tokenAccount"]);return P.addInstruction(R),P.addInstruction({instructions:[xs({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:A,baseTokenAccount:x,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:i,baseAmountMin:r,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity]}),P.addCustomComputeBudget(c),P.addTipInstruction(l),s===0?await P.buildV0():P.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:r,userFarmLpAmount:a,base:u,computeBudgetConfig:s,payer:c,userAuxiliaryLedgers:l,tokenProgram:m=oo,checkCreateATAOwner:p=!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),A={};for(let _ of this.scope.account.tokenAccountRawInfos)(A[_.accountInfo.mint.toString()]===void 0||te(this.scope.ownerPubKey,_.accountInfo.mint,oo).publicKey.equals(_.pubkey))&&(A[_.accountInfo.mint.toString()]=_.pubkey);let k=A[t.lpMint.address];if(k===void 0)throw Error("find lp account error in trade accounts");let h=o.add(a!=null?a:new _e(0)),P=t.mintA.address===qe.WSOL.mint.toString(),T=t.mintB.address===qe.WSOL.mint.toString(),{account:I,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:oo,mint:new tt(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(x||{}),I===void 0)throw new Error("base token account not found");let{account:S,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:oo,mint:new tt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(B||{}),S===void 0)throw new Error("quote token account not found");if(A[t.mintA.address]=I,A[t.mintB.address]=S,r!==void 0&&!(a!=null&&a.isZero())){let _=Yt[r.programId],z=$t({programId:new tt(r.programId),poolId:new tt(r.id),owner:this.scope.ownerPubKey,version:_}),Q,Y=await this.scope.connection.getAccountInfo(z);if(Y&&(Q=pi(_).decode(Y.data)),_!==6&&!Q){let{instruction:Ke,instructionType:Ie}=yi({id:new tt(r.id),programId:new tt(r.programId),version:_,ledger:z,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Ke],instructionTypes:[Ie]})}let ee=[];for(let Ke of r.rewardInfos){let Ie=Ke.mint.address===qe.WSOL.mint.toString();if(A[Ke.mint.address])ee.push(A[Ke.mint.address]);else{let{account:fe,instructionParams:ie}=await this.scope.account.getOrCreateTokenAccount({mint:new tt(Ke.mint.address),tokenProgram:m,owner:this.scope.ownerPubKey,skipCloseAccount:!Ie,createInfo:{payer:c||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});fe||this.logAndCreateError("farm reward account not found:",Ke.mint.address),ie&&g.addInstruction(ie),ee.push(fe)}}let ne=(await this.scope.api.fetchFarmKeysById({ids:r.id}))[0],Z={userAuxiliaryLedgers:l,amount:a,owner:this.scope.ownerPubKey,farmInfo:r,farmKeys:ne,lpAccount:k,rewardAccounts:ee},pe=Yt[r.programId],oe=pe===6?bi(Z):pe===5?gi(Z):Pi(Z),be={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};g.addInstruction({instructions:[oe],instructionTypes:[be[pe]]})}let R=await this.getAmmPoolKeys(t.id),L=xs({poolInfo:t,poolKeys:R,userKeys:{lpTokenAccount:k,baseTokenAccount:I,quoteTokenAccount:S,owner:this.scope.ownerPubKey},lpAmount:h,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]});let[O,C]=t.mintA.address===n.mintA.address?[I,S]:[S,I],F=await this.scope.clmm.getClmmPoolKeys(n.id),E=await ye.openPositionFromBaseInstructions(V(N({poolInfo:n,poolKeys:F,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:O,tokenAccountB:C},withMetadata:"create"},i),{liquidity:new _e(0),base:u,getEphemeralSigners:f}));return g.addInstruction({instructions:[...E.instructions],signers:E.signers,instructionTypes:[...E.instructionTypes],lookupTableAddress:F.lookupTableAccount?[F.lookupTableAccount]:[]}),y===0?g.sizeCheckBuildV0({computeBudgetConfig:s}):g.sizeCheckBuild({computeBudgetConfig:s})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:r,quoteAmount:a,startTime:u,ownerInfo:s,associatedOnly:c=!1,checkCreateATAOwner:l=!1,tokenProgram:m,txVersion:p,feeDestinationId:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g}){var C;let A=s.feePayer||((C=this.scope.owner)==null?void 0:C.publicKey),k=s.useSOLBalance&&o.mint.equals(ca),h=s.useSOLBalance&&i.mint.equals(ca),P=this.createTxBuilder(g),{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:k?{payer:A,amount:r}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:c,checkCreateATAOwner:l});P.addInstruction(I||{});let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:A,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:c,checkCreateATAOwner:l});if(P.addInstruction(S||{}),T===void 0||x===void 0)throw Error("you don't has some token account");let B=Bs({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:f},{instruction:L,instructionType:O}=Ss(V(N({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:T,userPcVault:x,userLpVault:te(this.scope.ownerPubKey,B.lpMint,m).publicKey,nonce:B.nonce,openTime:u,coinAmount:r,pcAmount:a}));return P.addInstruction({instructions:[L],instructionTypes:[O]}),P.addCustomComputeBudget(y),P.addTipInstruction(b),P.versionBuild({txVersion:p,extInfo:{address:R}})}async createMarketAndPoolV4({programId:t=mr,marketProgram:n=Vu,feeDestinationId:o=Du,tokenProgram:i,baseMintInfo:r,quoteMintInfo:a,baseAmount:u,quoteAmount:s,startTime:c,ownerInfo:l,lowestFeeMarket:m,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:y=!1,lotSize:b=1,tickSize:g=.01,txVersion:A,computeBudgetConfig:k,txTipConfig:h,feePayer:P}){var Jo,ma,ei;let T=this.scope.ownerPubKey,I=l.feePayer||((Jo=this.scope.owner)==null?void 0:Jo.publicKey),x=l.useSOLBalance&&r.mint.equals(ca),S=l.useSOLBalance&&a.mint.equals(ca),B=p?`${r.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,R=$e({fromPublicKey:T,programId:n,assignSeed:B&&`${B}-market`}),L=$e({fromPublicKey:T,programId:n,assignSeed:B&&`${B}-request`}),O=$e({fromPublicKey:T,programId:n,assignSeed:B&&`${B}-event`}),C=$e({fromPublicKey:T,programId:n,assignSeed:B&&`${B}-bids`}),F=$e({fromPublicKey:T,programId:n,assignSeed:B&&`${B}-asks`}),E=$e({fromPublicKey:T,programId:oo,assignSeed:B&&`${B}-baseVault`}),_=$e({fromPublicKey:T,programId:oo,assignSeed:B&&`${B}-quoteVault`}),z=0,Q=new _e(100);function Y(){let Nt=new _e(0);for(;;)try{return{vaultOwner:tt.createProgramAddressSync([R.publicKey.toBuffer(),Nt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Nt}}catch{if(Nt.iaddn(1),Nt.gt(new _e(25555)))throw Error("find vault owner error")}}let{vaultOwner:ee,vaultSignerNonce:ne}=Y(),Z=new _e(Math.round(10**r.decimals*b)),pe=new _e(Math.round(b*10**a.decimals*g));if(Z.eq(J))throw Error("lot size is too small");if(pe.eq(J))throw Error("tick size or lot size is too small");let oe=await na({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:ee,baseMint:r.mint,quoteMint:a.mint,id:R,baseVault:E,quoteVault:_,requestQueue:L,eventQueue:O,bids:C,asks:F,feeRateBps:z,quoteDustThreshold:Q,vaultSignerNonce:ne,baseLotSize:Z,quoteLotSize:pe,lowestFeeMarket:m}}),be=this.createTxBuilder(P);be.addInstruction({instructions:oe[0].transaction.instructions,signers:oe[0].signer});for await(let Nt of oe.slice(1,oe.length))be.addInstruction({instructions:Nt.transaction.instructions,signers:Nt.signer,instructionTypes:Nt.instructionTypes});let{account:Ke,instructionParams:Ie}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:x?{payer:I,amount:u}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:f,checkCreateATAOwner:y,assignSeed:x&&B?`${B}-wsol`:void 0});be.addInstruction(Ie||{});let{account:fe,instructionParams:ie}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:I,amount:s}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:f,checkCreateATAOwner:y,assignSeed:S&&B?`${B}-wsol`:void 0});if(be.addInstruction(ie||{}),Ke===void 0)throw Error("you don't has base token account");if(fe===void 0)throw Error("you don't has quote token account");let Te=Bs({version:4,marketVersion:3,marketId:R.publicKey,baseMint:r.mint,quoteMint:a.mint,baseDecimals:r.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),St={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:Xe,instructionType:gn}=Ss(V(N({},St),{userWallet:this.scope.ownerPubKey,userCoinVault:Ke,userPcVault:fe,userLpVault:te(this.scope.ownerPubKey,Te.lpMint,i).publicKey,nonce:Te.nonce,openTime:c,coinAmount:u,pcAmount:s}));be.addInstruction({instructions:[Xe],instructionTypes:[gn]});let Bo=x||S?[((ma=Ie==null?void 0:Ie.instructions)==null?void 0:ma[0])||((ei=ie==null?void 0:ie.instructions)==null?void 0:ei[0])].filter(Nt=>!!Nt):void 0;return A===0?be.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:Bo,address:N({requestQueue:L.publicKey,eventQueue:O.publicKey,bids:C.publicKey,asks:F.publicKey,baseVault:E.publicKey,quoteVault:_.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},St)}):be.sizeCheckBuild({computeBudgetConfig:k,splitIns:Bo,address:N({requestQueue:L.publicKey,eventQueue:O.publicKey,bids:C.publicKey,asks:F.publicKey,baseVault:E.publicKey,quoteVault:_.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},St)})}async getCreatePoolFee({programId:t}){let n=_r({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return il.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:r}){let[a,u]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:s,quoteReserve:c}=t,l=[s,c],m=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(l.reverse(),m.reverse());let[f,y]=l,[b,g]=m,A=t.version===4,k;if(A)k=new Fe(y.toString()).div(10**g).div(new Fe(f.toString()).div(10**b));else{let O=ml(this.stableLayout.stableModelData,s.toNumber(),c.toNumber(),!1);p==="quote"?k=new Fe(1e6).div(O*1e6):k=new Fe(O*1e6).div(1e6)}let h=n,P=new _e(0),T=new _e(0);if(!h.isZero())if(A){T=Jn(h.mul(Ps),Mr);let O=h.sub(T),C=f.add(O);P=y.mul(O).div(C)}else{T=h.mul(new _e(2)).div(new _e(1e4));let O=h.sub(T);p==="quote"?P=new _e(cl(this.stableLayout.stableModelData,c.toNumber(),s.toNumber(),O.toNumber())):P=new _e(ll(this.stableLayout.stableModelData,c.toNumber(),s.toNumber(),O.toNumber()))}let I=new _e(new Fe(P.toString()).mul(1-r).toFixed(0)),x=P,S=I,B=new Fe(P.toString()).div(new Fe(h.sub(T).toString()).toFixed(0));!h.isZero()&&!P.isZero()&&(B=new Fe(P.toString()).div(10**g).div(new Fe(h.sub(T).toString()).div(10**b)));let R=k.sub(B).div(k).mul(100);return{amountOut:x,minAmountOut:S,currentPrice:k,executionPrice:B,priceImpact:R,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:i,slippage:r}){let{baseReserve:a,quoteReserve:u}=t;o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",u.toString());let s=o.toString()===t.mintA.address,[c,l]=s?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",l.symbol||l.address),this.logDebug("amountOut:",new Fe(n.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString(),c.symbol||c.address),this.logDebug("slippage:",`${r*100}%`);let m=[a,u],p=s?"quote":"base";p==="base"&&m.reverse(),this.logDebug("output side:",p);let[f,y]=m,b=new Fe(y.toString()).div(10**t[s?"mintB":"mintA"].decimals).div(new Fe(f.toString()).div(10**t[s?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${c.symbol||c.address} \u2248 ${b.toString()} ${l.symbol||l.address}`),this.logDebug("currentPrice invert:",`1 ${l.symbol||l.address} \u2248 ${new Fe(1).div(b).toString()} ${c.symbol||c.address}`);let g=new _e(0),A=n,k=new _e(0);if(!A.isZero()){A.gt(y)&&(A=y.sub(new _e(1)));let B=y.sub(A),R=f.mul(A).div(B);g=R.mul(Mr).div(Mr.sub(Ps)),k=g.sub(R)}let h=new _e(new Fe(g.toString()).mul(1+r).toFixed(0)),P=g,T=h;this.logDebug("amountIn:",new Fe(P.toString()).div(10**c.decimals).toDecimalPlaces(c.decimals).toString()),this.logDebug("maxAmountIn:",new Fe(T.toString()).div(10**c.decimals).toDecimalPlaces(c.decimals).toString());let I=null;!g.isZero()&&!A.isZero()&&(I=new Fe(A.toString()).div(10**l.decimals).div(new Fe(g.toString()).div(10**c.decimals)),this.logDebug("executionPrice:",`1 ${l.symbol||l.address} \u2248 ${I.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${c.symbol||c.address}`),this.logDebug("executionPrice invert:",`1 ${l.symbol||l.address} \u2248 ${new Fe(1).div(I).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${c.symbol||c.address}`));let x=b.mul(P.toString()),S=x.sub(n.toString()).abs().div(x);return this.logDebug("priceImpact:",`${S.toString()}%`),{amountIn:P,maxAmountIn:T,currentPrice:b,executionPrice:I,priceImpact:S,fee:k}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:r,fixedSide:a,txVersion:u,config:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m}){let p=this.createTxBuilder(m),{associatedOnly:f=!0,inputUseSolBalance:y=!0,outputUseSolBalance:b=!0}=s||{},[g,A]=r===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],k=y&&g.address===j.toBase58(),h=b&&A.address===j.toBase58(),{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:oo,mint:new tt(g.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:f});p.addInstruction(T||{}),P||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:P,inputTokenUseSolBalance:k,associatedOnly:f});let{account:I,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:oo,mint:new tt(A.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:f});p.addInstruction(x||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:A.symbol||A.address,tokenAccountOut:I,outputTokenUseSolBalance:h,associatedOnly:f});let S=n||await this.getAmmPoolKeys(t.id),B=4;return t.pooltype.includes("StablePool")&&(B=5),p.addInstruction({instructions:[B===4?Wr({version:B,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a}):qr({version:B,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[B===4?X.AmmV4SwapBaseIn:X.AmmV5SwapBaseIn]}),p.addCustomComputeBudget(c),p.addTipInstruction(l),p.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await Me(this.scope.connection,t.map(c=>({pubkey:new tt(c)})),n),i={},r=[];for(let c=0;c<t.length;c++){let l=o[c];if(l===null||!l.accountInfo)throw Error("fetch pool info error: "+String(t[c]));let m=Fr.decode(l.accountInfo.data);i[String(t[c])]=V(N({},m),{programId:l.accountInfo.owner}),r.push(m.baseVault,m.quoteVault)}let a={},u=await Me(this.scope.connection,r.map(c=>({pubkey:new tt(c)})),n);for(let c=0;c<r.length;c++){let l=u[c].accountInfo;if(l===null)throw Error("fetch vault info error: "+r[c]);a[String(r[c])]=new _e(sf.decode(l.data).amount.toString())}let s={};for(let[c,l]of Object.entries(i)){let m=a[l.baseVault.toString()].sub(l.baseNeedTakePnl),p=a[l.quoteVault.toString()].sub(l.quoteNeedTakePnl);s[c]=V(N({},l),{baseReserve:m,mintAAmount:a[l.baseVault.toString()],mintBAmount:a[l.quoteVault.toString()],quoteReserve:p,poolPrice:new Fe(p.toString()).div(new Fe(10).pow(l.quoteDecimal.toString())).div(new Fe(m.toString()).div(new Fe(10).pow(l.baseDecimal.toString())))})}return s}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=Vr({[t]:n}),i=o[t],r=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:r[0]}}async fetchPoolBalances(){await this.scope.account.fetchWalletTokenAccounts({forceUpdate:!0});let t=this.scope.account.tokenAccounts.filter(a=>!a.mint.equals(tt.default)&&!a.amount.isZero()).map(a=>a.mint),i=(await yt(this.scope.connection,t)).map((a,u)=>a&&a.data.length===Ul.span?V(N({},Ul.decode(a.data)),{address:t[u]}):void 0).filter(Boolean).filter(a=>this.scope.cluster==="devnet"?a:ol.has(a.mintAuthority.toString())),r=await this.scope.api.fetchPoolByLpMints({ids:i.map(a=>a.address.toBase58()).join(",")});return i.map((a,u)=>{var s,c;return{mintData:a,address:a.address,poolInfo:r[u],balance:(c=(s=this.scope.account.tokenAccounts.find(l=>l.mint.equals(a.address)))==null?void 0:s.amount)!=null?c:new _e(0)}})}};import{PublicKey as W}from"@solana/web3.js";import{AccountLayout as uf,NATIVE_MINT as jo,TOKEN_2022_PROGRAM_ID as Gl,TOKEN_PROGRAM_ID as Vt,createAssociatedTokenAccountIdempotentInstruction as $o}from"@solana/spl-token";import De from"bn.js";import rn from"decimal.js";var $i=class extends Qe{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 Me(this.scope.connection,e.map(l=>({pubkey:new W(l)}))),o={},i=new Set,r=[];for(let l=0;l<e.length;l++){let m=n[l];if(m.accountInfo===null)throw Error("fetch pool info error: "+String(e[l]));let p=Rr.decode(m.accountInfo.data);o[String(e[l])]=V(N({},p),{programId:m.accountInfo.owner}),i.add(String(p.configId)),r.push(p.vaultA,p.vaultB)}let a={};if(t){let l=[...i],m=await Me(this.scope.connection,l.map(p=>({pubkey:new W(p)})));for(let p=0;p<l.length;p++){let f=m[p].accountInfo;if(f===null)throw Error("fetch pool config error: "+l[p]);a[l[p]]=zc.decode(f.data)}}let u={},s=await Me(this.scope.connection,r.map(l=>({pubkey:new W(l)})));for(let l=0;l<r.length;l++){let m=s[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+r[l]);u[String(r[l])]=new De(uf.decode(m.data).amount.toString())}let c={};for(let[l,m]of Object.entries(o)){let p=u[m.vaultA.toString()].sub(m.protocolFeesMintA).sub(m.fundFeesMintA).sub(m.creatorFeesMintA),f=u[m.vaultB.toString()].sub(m.protocolFeesMintB).sub(m.fundFeesMintB).sub(m.creatorFeesMintB);c[l]=V(N({},m),{baseReserve:p,quoteReserve:f,vaultAAmount:u[m.vaultA.toString()],vaultBAmount:u[m.vaultB.toString()],configInfo:a[m.configId.toString()],poolPrice:new rn(f.toString()).div(new rn(10).pow(m.mintDecimalB)).div(new rn(p.toString()).div(new rn(10).pow(m.mintDecimalA)))})}return c}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var u,s,c,l;let i=e[o],[r,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return V(N({},n),{[o]:V(N({},i),{id:new W(o),configInfo:i.configInfo,version:7,authority:yo(i.programId).publicKey,mintA:dt({address:r,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[r])!=null&&u.feeConfig?An((s=t[r])==null?void 0:s.feeConfig):void 0}}),mintB:dt({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(c=t[a])!=null&&c.feeConfig?An((l=t[a])==null?void 0:l.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await io({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=dt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?An(n[t.mintA.toBase58()].feeConfig):void 0}}),i=dt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?An(n[t.mintB.toBase58()].feeConfig):void 0}}),r=dt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Vt.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()},u={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:r,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new rn(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new rn(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,feeOn:"",hasDynamicFee:!1,launchMigratePool:!1,tips:[]},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:yo(t.programId).publicKey.toBase58(),mintLp:r,config:a,observationId:bo(t.programId,new W(e)).publicKey.toBase58()},rpcData:t,computePoolInfo:V(N({},t),{id:new W(e),configInfo:t.configInfo,version:7,authority:yo(t.programId).publicKey,mintA:o,mintB:i})}}async createPool(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:i,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:u,feeConfig:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m,addSupportMintExt:p}=b,f=We(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","addSupportMintExt"]);var Q,Y,ee;let g=i.feePayer||((Q=this.scope.owner)==null?void 0:Q.publicKey),A=new De(new W(f.mintA.address).toBuffer()).lte(new De(new W(f.mintB.address).toBuffer())),[k,h]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[P,T]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],I=i.useSOLBalance&&k.address===jo.toBase58(),x=i.useSOLBalance&&h.address===jo.toBase58(),[S,B]=[new W(k.address),new W(h.address)],R=this.createTxBuilder(m),{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:S,tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:I?{payer:g,amount:P}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:r,checkCreateATAOwner:a});R.addInstruction(O||{});let{account:C,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({mint:new W(h.address),tokenProgram:h.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:T}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});if(R.addInstruction(F||{}),L===void 0||C===void 0)throw Error(`you don't has some token account, userVaultA: ${L==null?void 0:L.toBase58()}, userVaultB: ${C==null?void 0:C.toBase58()}`);let E=ds({poolId:e,programId:t,configId:new W(s.id),mintA:S,mintB:B}),_=[],z=[];return p&&(k.programId===Gl.toBase58()&&z.push(ps(t,new W(k.address)).publicKey),h.programId===Gl.toBase58()&&z.push(ps(t,new W(h.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(z)).forEach((Z,pe)=>{Z&&_.push(z[pe])})),R.addInstruction({instructions:[Hc(t,this.scope.ownerPubKey,new W(s.id),E.authority,E.poolId,S,B,E.lpMint,L,C,te(this.scope.ownerPubKey,E.lpMint).publicKey,E.vaultA,E.vaultB,n,new W((Y=k.programId)!=null?Y:Vt),new W((ee=h.programId)!=null?ee:Vt),E.observationId,P,T,o,_)],instructionTypes:[X.CpmmCreatePool]}),R.addCustomComputeBudget(c),R.addTipInstruction(l),R.versionBuild({txVersion:u,extInfo:{address:V(N({},E),{mintA:k,mintB:h,programId:t,poolFeeAccount:n,feeConfig:s})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:r,computeResult:a,computeBudgetConfig:u,txTipConfig:s,config:c,txVersion:l,feePayer:m}=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:p}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:y}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:A,anotherAmount:k}=a||this.computePairAmount({poolInfo:V(N({},t),{lpAmount:new rn(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new gt(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new rn(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=k.amount,P=t.mintA.address===jo.toString(),T=t.mintB.address===jo.toString(),I=this.createTxBuilder(m),[x,S]=[new W(t.mintA.address),new W(t.mintB.address)],{account:B,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new W(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?o:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:y});I.addInstruction(R||{});let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new W(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T||(i?h:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:o}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!1,checkCreateATAOwner:y});I.addInstruction(O||{}),!B&&!L&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let C=await p.getCreatedTokenAccount({mint:new W(t.lpMint.address)}),Q=await p.handleTokenAccount({side:"out",amount:0,mint:new W(t.lpMint.address),tokenAccount:C,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:F}=Q,E=We(Q,["tokenAccount"]);I.addInstruction(E);let _=n!=null?n:await this.getCpmmPoolKeys(t.id),z=new gt(new De(1)).sub(r);return I.addInstruction({instructions:[Qc(new W(t.programId),this.scope.ownerPubKey,new W(_.authority),new W(t.id),F,B,L,new W(_.vault.A),new W(_.vault.B),x,S,new W(t.lpMint.address),a?a==null?void 0:a.liquidity:z.mul(g).quotient,i?A.amount:h,i?h:A.amount)],instructionTypes:[X.CpmmAddLiquidity],lookupTableAddress:_.lookupTableAccount?[_.lookupTableAccount]:[]}),I.addCustomComputeBudget(u),I.addTipInstruction(s),I.versionBuild({txVersion:l,lookupTableAddress:_.lookupTableAccount?[_.lookupTableAccount]:void 0})}async withdrawLiquidity(e){var E,_;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:r,txTipConfig:a,txVersion:u,feePayer:s,closeWsol:c=!0}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let l=new gt(new De(1)).sub(i),m=await this.getRpcPoolInfo(t.id),[p,f]=[l.mul(o.mul(m.baseReserve).div(m.lpAmount)).quotient,l.mul(o.mul(m.quoteReserve).div(m.lpAmount)).quotient],y=await this.scope.fetchEpochInfo(),[b,g]=[ft(p,t.mintA.extensions.feeConfig,y,!1),ft(f,t.mintB.extensions.feeConfig,y,!1)],{account:A}=this.scope,k=this.createTxBuilder(s),[h,P]=[new W(t.mintA.address),new W(t.mintB.address)],T=h.equals(j),I=P.equals(j),x,S,{account:B,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new W(t.mintA.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(T&&c),associatedOnly:!T,checkCreateATAOwner:!1});x=B,R&&k.addInstruction(R);let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new W(t.mintB.address),notUseTokenAccount:I,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(I&&c),associatedOnly:!I,checkCreateATAOwner:!1});S=L,O&&k.addInstruction(O),(!x||!S)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",A.tokenAccounts);let C=await A.getCreatedTokenAccount({mint:new W(t.lpMint.address)});C||this.logAndCreateError("cannot found lp token account","tokenAccounts",A.tokenAccounts);let F=n!=null?n:await this.getCpmmPoolKeys(t.id);return k.addInstruction({instructions:[Zc(new W(t.programId),this.scope.ownerPubKey,new W(F.authority),new W(t.id),C,x,S,new W(F.vault.A),new W(F.vault.B),h,P,new W(t.lpMint.address),o,p.sub((E=b.fee)!=null?E:new De(0)),f.sub((_=g.fee)!=null?_:new De(0)))],instructionTypes:[X.CpmmWithdrawLiquidity],lookupTableAddress:F.lookupTableAccount?[F.lookupTableAccount]:[]}),k.addCustomComputeBudget(r),k.addTipInstruction(a),k.versionBuild({txVersion:u,lookupTableAddress:F.lookupTableAccount?[F.lookupTableAccount]:void 0})}async swap(e){var R,L,O,C,F,E;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:i,inputAmount:r,swapResult:a,slippage:u=0,config:s,computeBudgetConfig:c,txTipConfig:l,txVersion:m,feePayer:p}=e,{bypassAssociatedCheck:f,checkCreateATAOwner:y,associatedOnly:b}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},s),g=this.createTxBuilder(p),[A,k]=[new W(t.mintA.address),new W(t.mintB.address)];i?a.inputAmount=a.inputAmount.mul(new De((1+u)*1e4)).div(new De(1e4)):a.outputAmount=a.outputAmount.mul(new De((1-u)*1e4)).div(new De(1e4));let h=t.mintA.address===j.toBase58(),P=t.mintB.address===j.toBase58(),{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:A,tokenProgram:new W((R=t.mintA.programId)!=null?R:Vt),owner:this.scope.ownerPubKey,createInfo:h||!o?{payer:p||this.scope.ownerPubKey,amount:o?a.inputAmount:0}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});I&&g.addInstruction(I);let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:new W((L=t.mintB.programId)!=null?L:Vt),owner:this.scope.ownerPubKey,createInfo:P||o?{payer:p||this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:b,checkCreateATAOwner:y});S&&g.addInstruction(S),(!T||!x)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:T,mintBTokenAcc:x,mintAUseSOLBalance:h,mintBUseSOLBalance:P,associatedOnly:b});let B=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[i?jc(new W(t.programId),this.scope.ownerPubKey,new W(B.authority),new W(B.config.id),new W(t.id),o?T:x,o?x:T,new W(B.vault[o?"A":"B"]),new W(B.vault[o?"B":"A"]),new W((F=t[o?"mintA":"mintB"].programId)!=null?F:Vt),new W((E=t[o?"mintB":"mintA"].programId)!=null?E:Vt),o?A:k,o?k:A,bo(new W(t.programId),new W(t.id)).publicKey,a.inputAmount,a.outputAmount):qo(new W(t.programId),this.scope.ownerPubKey,new W(B.authority),new W(B.config.id),new W(t.id),o?T:x,o?x:T,new W(B.vault[o?"A":"B"]),new W(B.vault[o?"B":"A"]),new W((O=t[o?"mintA":"mintB"].programId)!=null?O:Vt),new W((C=t[o?"mintB":"mintA"].programId)!=null?C:Vt),o?A:k,o?k:A,bo(new W(t.programId),new W(t.id)).publicKey,r,a.outputAmount)],instructionTypes:[i?X.CpmmSwapBaseOut:X.ClmmSwapBaseIn]}),g.addCustomComputeBudget(c),g.addTipInstruction(l),g.versionBuild({txVersion:m,lookupTableAddress:B.lookupTableAccount?[B.lookupTableAccount]:void 0})}async lockLp(e){var m,p,f,y,b;let{poolInfo:t,lpAmount:n,computeBudgetConfig:o,txTipConfig:i,txVersion:r,feePayer:a,feeNftOwner:u}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(a),c=(m=e.poolKeys)!=null?m:await this.getCpmmPoolKeys(t.id),l=await $c({poolInfo:t,poolKeys:c,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(p=e.feePayer)!=null?p:this.scope.ownerPubKey},feeNftOwner:u!=null?u:this.scope.ownerPubKey,lockProgram:(f=e.programId)!=null?f:si,lockAuthProgram:(y=e.authProgram)!=null?y:pr,lpAmount:n,withMetadata:(b=e.withMetadata)!=null?b:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(l),s.addCustomComputeBudget(o),s.addTipInstruction(i),s.versionBuild({txVersion:r,extInfo:l.address,lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:void 0})}async harvestLockLp(e){var L;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:i=si,authProgram:r=pr,cpmmProgram:a,computeBudgetConfig:u,txTipConfig:s,txVersion:c,closeWsol:l=!0}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let m=e.feePayer||this.scope.ownerPubKey,p=this.createTxBuilder(m),[f,y]=[new W(t.mintA.address),new W(t.mintB.address)],b=f.equals(j),g=y.equals(j),A,k,{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new W(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(b&&l),associatedOnly:!b,checkCreateATAOwner:!1});A=h,P&&p.addInstruction(P);let{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new W(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&l),associatedOnly:!g,checkCreateATAOwner:!1});k=T,I&&p.addInstruction(I),(!A||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:A,tokenAccountB:k});let x=(L=e.poolKeys)!=null?L:await this.getCpmmPoolKeys(t.id),{publicKey:S}=te(m,o,Vt),{publicKey:B}=Wo(i,o),{publicKey:R}=te(r,new W(t.lpMint.address),Vt);return p.addInstruction({instructions:[ys({programId:i,nftOwner:this.scope.ownerPubKey,auth:r,nftMint:o,nftAccount:S,lockPda:B,poolId:new W(t.id),mintLp:new W(x.mintLp.address),userVaultA:A,userVaultB:k,poolVaultA:new W(x.vault.A),poolVaultB:new W(x.vault.B),mintA:f,mintB:y,lockLpVault:R,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[X.CpmmCollectLockFee]}),p.addCustomComputeBudget(u),p.addTipInstruction(s),p.versionBuild({txVersion:c,lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:void 0})}async harvestMultiLockLp(e){var p;let{lockInfo:t,programId:n=si,authProgram:o=pr,cpmmProgram:i,computeBudgetConfig:r,txVersion:a,closeWsol:u=!0}=e,s=e.feePayer||this.scope.ownerPubKey,c=this.createTxBuilder(s),l={},m=[];for(let f of t){let{poolInfo:y,lpFeeAmount:b,nftMint:g}=f;if(b.isZero())continue;let[A,k]=[new W(y.mintA.address),new W(y.mintB.address)],h=A.equals(j),P=k.equals(j),T=l[y.mintA.address],I=l[y.mintB.address];if(!T)if(h){let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new W(y.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!u,associatedOnly:!1,checkCreateATAOwner:!1});T=L,O&&c.addInstruction(O),l[y.mintA.address]=L}else{let L=new W(y.mintA.address);T=this.scope.account.getAssociatedTokenAccount(L,new W(y.mintA.programId)),c.addInstruction({instructions:[$o(this.scope.ownerPubKey,T,this.scope.ownerPubKey,L,new W(y.mintA.programId))]}),l[y.mintA.address]=T}if(!I)if(P){let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new W(y.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!u,associatedOnly:!1,checkCreateATAOwner:!1});I=L,O&&c.addInstruction(O),l[y.mintB.address]=L}else{let L=new W(y.mintB.address);I=this.scope.account.getAssociatedTokenAccount(L,new W(y.mintB.programId)),c.addInstruction({instructions:[$o(this.scope.ownerPubKey,I,this.scope.ownerPubKey,L,new W(y.mintB.programId))]}),l[y.mintB.address]=I}(!T||!I)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:T,tokenAccountB:I});let x=(p=f.poolKeys)!=null?p:await this.getCpmmPoolKeys(y.id);x.lookupTableAccount&&m.push(x.lookupTableAccount);let{publicKey:S}=te(s,g,Vt),{publicKey:B}=Wo(n,g),{publicKey:R}=te(o,new W(y.lpMint.address),Vt);c.addInstruction({instructions:[ys({programId:n,nftOwner:this.scope.ownerPubKey,auth:o,nftMint:g,nftAccount:S,lockPda:B,poolId:new W(y.id),mintLp:new W(x.mintLp.address),userVaultA:T,userVaultB:I,poolVaultA:new W(x.vault.A),poolVaultB:new W(x.vault.B),mintA:A,mintB:k,lockLpVault:R,lpFeeAmount:b,cpmmProgram:i==null?void 0:i.programId,cpmmAuthProgram:i==null?void 0:i.authProgram})],instructionTypes:[X.CpmmCollectLockFee]})}return a===0?c.sizeCheckBuildV0({computeBudgetConfig:r,lookupTableAddress:m}):c.sizeCheckBuild({computeBudgetConfig:r})}async createPoolWithPermission(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:i,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:u,feeConfig:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m,feeOn:p}=b,f=We(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var _,z,Q;console.log("***this method only available for wallet with permissions***");let g=i.feePayer||((_=this.scope.owner)==null?void 0:_.publicKey),A=new De(new W(f.mintA.address).toBuffer()).lte(new De(new W(f.mintB.address).toBuffer())),[k,h]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[P,T]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],I=i.useSOLBalance&&k.address===jo.toBase58(),x=i.useSOLBalance&&h.address===jo.toBase58(),[S,B]=[new W(k.address),new W(h.address)],R=this.createTxBuilder(m),{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:S,tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:I?{payer:g,amount:P}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:r,checkCreateATAOwner:a});R.addInstruction(O||{});let{account:C,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({mint:new W(h.address),tokenProgram:h.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:T}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});if(R.addInstruction(F||{}),L===void 0||C===void 0)throw Error("you don't has some token account");let E=ds({poolId:e,programId:t,configId:new W(s.id),mintA:S,mintB:B});return R.addInstruction({instructions:[el(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new W(s.id),E.authority,E.poolId,S,B,E.lpMint,L,C,te(this.scope.ownerPubKey,E.lpMint).publicKey,E.vaultA,E.vaultB,n,new W((z=k.programId)!=null?z:Vt),new W((Q=h.programId)!=null?Q:Vt),E.observationId,Yc(t,this.scope.ownerPubKey).publicKey,P,T,o,p)],instructionTypes:[X.CpmmCreatePool]}),R.addCustomComputeBudget(c),R.addTipInstruction(l),R.versionBuild({txVersion:u,extInfo:{address:V(N({},E),{mintA:k,mintB:h,programId:t,poolFeeAccount:n,feeConfig:s})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=Un,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let u=a||this.scope.ownerPubKey,s=this.createTxBuilder(u),c=t!=null?t:await this.getCpmmPoolKeys(e.id),[l,m,p,f]=[new W(e.mintA.address),new W(e.mintB.address),new W(e.mintA.programId),new W(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(l,p),b=this.scope.account.getAssociatedTokenAccount(m,f);return s.addInstruction({instructions:[$o(this.scope.ownerPubKey,y,this.scope.ownerPubKey,l,new W(e.mintA.programId)),$o(this.scope.ownerPubKey,b,this.scope.ownerPubKey,m,new W(e.mintB.programId))]}),s.addInstruction({instructions:[bs(n,this.scope.ownerPubKey,new W(c.authority),new W(c.id),new W(c.config.id),new W(c.vault.A),new W(c.vault.B),l,m,y,b,p,f)],instructionTypes:[]}),s.addCustomComputeBudget(i),s.addTipInstruction(r),s.versionBuild({txVersion:o})}async collectMultiCreatorFees({poolInfoList:e,poolKeyList:t,programId:n=Un,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=r||this.scope.ownerPubKey,u=this.createTxBuilder(a),s={},c=t!=null?t:[];if(!c.length){let m=e.map(b=>b.id),p=95,f=[];for(let b=0;b<m.length;b+=p)f.push(m.slice(b,b+p));c=(await Promise.all(f.map(b=>this.scope.api.fetchPoolKeysById({idList:b})))).flat()}let l=c.reduce((m,p)=>V(N({},m),{[p.id]:p}),{});for(let m of e){let p=l[m.id]||await this.getCpmmPoolKeys(m.id),[f,y,b,g]=[new W(m.mintA.address),new W(m.mintB.address),new W(m.mintA.programId),new W(m.mintB.programId)],A=s[m.mintA.address]||this.scope.account.getAssociatedTokenAccount(f,b),k=s[m.mintB.address]||this.scope.account.getAssociatedTokenAccount(y,g);s[m.mintA.address]=A,s[m.mintB.address]=k,u.addInstruction({instructions:[bs(n,this.scope.ownerPubKey,new W(p.authority),new W(p.id),new W(p.config.id),new W(p.vault.A),new W(p.vault.B),f,y,A,k,b,g)],instructionTypes:[]})}return o===0?u.sizeCheckBuildV0({computeBudgetConfig:i,lookupTableAddress:c.map(m=>m.lookupTableAccount).filter(Boolean),insCountLimit:6}):u.sizeCheckBuild({computeBudgetConfig:i})}async collectCreatorFeesPermissionless({poolInfo:e,poolKeys:t,programId:n=Un,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let u=a||this.scope.ownerPubKey,s=this.createTxBuilder(u),c=t!=null?t:await this.getCpmmPoolKeys(e.id),[l,m,p,f]=[new W(e.mintA.address),new W(e.mintB.address),new W(e.mintA.programId),new W(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(l,p),b=this.scope.account.getAssociatedTokenAccount(m,f);return s.addInstruction({instructions:[$o(this.scope.ownerPubKey,y,this.scope.ownerPubKey,l,new W(e.mintA.programId)),$o(this.scope.ownerPubKey,b,this.scope.ownerPubKey,m,new W(e.mintB.programId))]}),s.addInstruction({instructions:[Jc(n,u,this.scope.ownerPubKey,new W(c.authority),new W(c.id),new W(c.vault.A),new W(c.vault.B),l,m,y,b,p,f)],instructionTypes:[]}),s.addCustomComputeBudget(i),s.addTipInstruction(r),s.versionBuild({txVersion:o})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o,swapBaseIn:i=!0}){let r=n.toString()===e.mintB.address,a=e.feeOn===0||e.feeOn===2,u=i?Fi.swapBaseInput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,a):Fi.swapBaseOutput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,a),s=new rn(u.outputAmount.toString()).div(u.inputAmount.toString()),c=u.outputAmount.mul(new De((1-o)*1e4)).div(new De(1e4));return{allTrade:i?u.inputAmount.eq(t):u.outputAmount.eq(t),amountIn:i?t:u.inputAmount,amountOut:u.outputAmount,minAmountOut:c,executionPrice:s,fee:u.tradeFee,priceImpact:e.poolPrice.sub(s).div(e.poolPrice),swapResult:u}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:r,baseIn:a}){var h,P,T,I,x,S,B,R,L;let u=1-Number(i.toSignificant())/100,s=new De(new rn(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),c=ft(s,e[a?"mintA":"mintB"].extensions.feeConfig,r,!1),l=s.sub((h=c.fee)!=null?h:new De(0)),m=new De(new rn(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,rn.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",s.toString(),"amountInFee:",(T=(P=c.fee)==null?void 0:P.toString())!=null?T:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=l.mul(m).div(p==="base"?t:n),y={amount:J,fee:void 0,expirationTime:void 0};if(!l.isZero()){let O=cf(f,t,n,m);this.logDebug("lpAmountData:",{amountA:O.amountA.toString(),amountB:O.amountB.toString()}),y=ft(O[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,r,!0)}let b=new gt(new De(1)).add(i),g=new gt(new De(1)).sub(i),A=ft(b.mul(y.amount.sub((I=y.fee)!=null?I:new De(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0),k=ft(g.mul(y.amount.sub((x=y.fee)!=null?x:new De(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0);return this.logDebug("anotherAmount:",y.amount.toString(),"anotherAmountFee:",(B=(S=y.fee)==null?void 0:S.toString())!=null?B:0,"maxAnotherAmount:",A.amount.toString(),"maxAnotherAmountFee:",(L=(R=A.fee)==null?void 0:R.toString())!=null?L:0),{inputAmountFee:c,anotherAmount:y,maxAnotherAmount:A,minAnotherAmount:k,liquidity:f}}async fetchCpmmLockBalances(){await this.scope.account.fetchWalletTokenAccounts({forceUpdate:!0});let e=this.scope.account.tokenAccountRawInfos.filter(a=>a.accountInfo.amount.eq(new De(1))),t=e.map(a=>Wo(this.scope.cluster==="mainnet"?si:cn.LOCK_CPMM_PROGRAM,a.accountInfo.mint).publicKey),n=await Me(this.scope.connection,t.map(a=>({pubkey:a}))),o=new Map,i=n.filter((a,u)=>(o.set(a.pubkey.toString(),e[u].accountInfo.mint.toString()),!!a.accountInfo)).map(a=>a.pubkey);return(await Promise.all(i.map(a=>this.scope.api.fetchCpmmLockInfo(a)))).map((a,u)=>V(N({},a),{nftMint:new W(o.get(i[u].toString()))}))}};function cf(d,e,t,n){let o=d.mul(e).div(n);!o.isZero()&&!d.mul(e).mod(n).isZero()&&(o=o.add(new De(1)));let i=d.mul(t).div(n);return!i.isZero()&&!d.mul(t).mod(n).isZero()&&(i=i.add(new De(1))),{amountA:o,amountB:i}}import{PublicKey as zl}from"@solana/web3.js";import{getTransferFeeConfig as lf,MintLayout as mf,TOKEN_2022_PROGRAM_ID as Hs,TOKEN_PROGRAM_ID as Qs,unpackMint as df}from"@solana/spl-token";var Ji=class extends Qe{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:i,blacklist:r,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Set(r),this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(En.address,En),this._mintGroup.official.add(En.address),i.forEach(s=>{var c;this._blackTokenMap.has(s.address)||(this._tokenMap.set(s.address,V(N({},s),{type:"raydium",priority:2,programId:(c=s.programId)!=null?c:s.tags.includes("token-2022")?Hs.toBase58():Qs.toBase58()})),this._mintGroup.official.add(s.address))}),u.forEach(s=>{var c;this._blackTokenMap.has(s.address)||this._tokenMap.has(s.address)||(this._tokenMap.set(s.address,V(N({},s),{type:"jupiter",priority:1,programId:(c=s.programId)!=null?c:s.tags.includes("token-2022")?Hs.toBase58():Qs.toBase58(),tags:s.freezeAuthority?[...s.tags||[],"hasFreeze"]:s.tags})),this._mintGroup.jup.add(s.address))}),this._extraTokenList.forEach(s=>{this._blackTokenMap.has(s.address)||this._tokenMap.has(s.address)||(this._tokenMap.set(s.address,V(N({},s),{type:"extra",priority:1,programId:s.programId||s.tags.includes("token-2022")?Hs.toBase58():Qs.toBase58()})),this._mintGroup.extra.add(s.address))}),this._tokenList=Array.from(this._tokenMap).map(s=>s[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 En;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,V(N({},i),{priority:2})),i;let r=await this.scope.connection.getAccountInfo(new zl(n));if(!r)throw new Error(`mint address not found: ${n}`);let a=mf.decode(r.data),u=n.toString().substring(0,6),s=lf(df(new zl(t),r,r.owner)),c={chainId:101,address:n,programId:r.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:s?{feeConfig:An(s)}:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var la=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:r,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:s="confirmed",loopMultiTxStatus:c}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new bn(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=s,this.loopMultiTxStatus=c,this.api=i,this._apiCacheTime=u||5*60*1e3,this.logger=ke("Raydium"),this.farm=new Zi({scope:this,moduleName:"Raydium_Farm"}),this.account=new Qi({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new ji({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Ji({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Xi({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Ci({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new $i({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new on({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Qo({scope:this,moduleName:"Raydium_marketV2"}),this.launchpad=new zi({scope:this,moduleName:"Raydium_lauchpad"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:r||Date.now()-a,offset:a}})}static async load(e){var c;let t=pf({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:r,urlConfigs:a}=t,u=new aa({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:r}),s=new la(V(N({},t),{api:u}));return await s.fetchAvailabilityStatus((c=e.disableFeatureCheck)!=null?c:!0),e.disableLoadToken||await s.token.load({type:e.jupTokenType}),s}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(sa);return this._owner.publicKey}setOwner(e){return this._owner=e?new bn(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Wl);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(sa),new Error(sa)}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=>V(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{}}}};export{la as Raydium};
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
//# sourceMappingURL=raydium.mjs.map