@raydium-io/raydium-sdk-v2 0.1.90-alpha → 0.1.91-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- var pl=Object.defineProperty,fl=Object.defineProperties;var yl=Object.getOwnPropertyDescriptors;var bo=Object.getOwnPropertySymbols;var Ia=Object.prototype.hasOwnProperty,Ba=Object.prototype.propertyIsEnumerable;var Ta=(i,e,t)=>e in i?pl(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,O=(i,e)=>{for(var t in e||(e={}))Ia.call(e,t)&&Ta(i,t,e[t]);if(bo)for(var t of bo(e))Ba.call(e,t)&&Ta(i,t,e[t]);return i},W=(i,e)=>fl(i,yl(e));var De=(i,e)=>{var t={};for(var n in i)Ia.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&bo)for(var n of bo(i))e.indexOf(n)<0&&Ba.call(i,n)&&(t[n]=i[n]);return t};import gu from"axios";import{PublicKey as Ka}from"@solana/web3.js";import{get as xr,set as xa}from"lodash";var bl=(o=>(o[o.Error=0]="Error",o[o.Warning=1]="Warning",o[o.Info=2]="Info",o[o.Debug=3]="Debug",o))(bl||{}),Sr=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}},Kr={},Sa={};function me(i){let e=xr(Kr,i);if(!e){let t=xr(Sa,i);e=new Sr({name:i,logLevel:t}),xa(Kr,i,e)}return e}function ay(i,e){xa(Sa,i,e);let t=xr(Kr,i);t&&(t.level=e)}import{MINT_SIZE as gl,TOKEN_PROGRAM_ID as Al,getTransferFeeConfig as wl,unpackMint as Pl}from"@solana/spl-token";var Cr=me("Raydium_accountInfo_util");async function _t(i,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:r=100}=O({batchRequest:!1},t),s=Rr(e,r),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=i._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=Rr(c,10);a=(await(await Promise.all(u.map(async m=>await i._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Cr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Cr.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Ka(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>i.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&Cr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Qe(i,e,t){let n=await _t(i,e.map(o=>o.pubkey),t);return e.map((o,r)=>W(O({},o),{accountInfo:n[r]}))}var kl=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(kl||{}),by=1;async function Yn({connection:i,mints:e,config:t}){var r,s,a;if(e.length===0)return{};let n=await Qe(i,e.map(c=>({pubkey:Bt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<gl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Pl(c.pubkey,c.accountInfo,(r=c.accountInfo)==null?void 0:r.owner);o[c.pubkey.toString()]=W(O({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Al,feeConfig:(a=wl(u))!=null?a:void 0})}return o[Ka.default.toBase58()]=o[H.toBase58()],o}import Ue from"bn.js";var jn=9e15,pn=1e9,Lr="0123456789abcdef",Ao="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",wo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Or={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-jn,maxE:jn,crypto:!1},Oa,Ht,se=!0,ko="[DecimalError] ",dn=ko+"Invalid argument: ",Ma=ko+"Precision limit exceeded",Na=ko+"crypto unavailable",_a="[object Decimal]",at=Math.floor,He=Math.pow,hl=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Tl=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Il=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,va=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Vt=1e7,ne=7,Bl=9007199254740991,xl=Ao.length-1,Mr=wo.length-1,E={toStringTag:_a};E.absoluteValue=E.abs=function(){var i=new this.constructor(this);return i.s<0&&(i.s=1),J(i)};E.ceil=function(){return J(new this.constructor(this),this.e+1,2)};E.clampedTo=E.clamp=function(i,e){var t,n=this,o=n.constructor;if(i=new o(i),e=new o(e),!i.s||!e.s)return new o(NaN);if(i.gt(e))throw Error(dn+e);return t=n.cmp(i),t<0?i:n.cmp(e)>0?e:new o(n)};E.comparedTo=E.cmp=function(i){var e,t,n,o,r=this,s=r.d,a=(i=new r.constructor(i)).d,c=r.s,u=i.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(r.e!==i.e)return r.e>i.e^c<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};E.cosine=E.cos=function(){var i,e,t=this,n=t.constructor;return t.d?t.d[0]?(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+ne,n.rounding=1,t=Sl(n,Wa(n,t)),n.precision=i,n.rounding=e,J(Ht==2||Ht==3?t.neg():t,i,e,!0)):new n(1):new n(NaN)};E.cubeRoot=E.cbrt=function(){var i,e,t,n,o,r,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(se=!1,r=l.s*He(l.s*l,1/3),!r||Math.abs(r)==1/0?(t=ot(l.d),i=l.e,(r=(i-t.length+1)%3)&&(t+=r==1||r==-2?"0":"00"),r=He(t,1/3),i=at((i+1)/3)-(i%3==(i<0?-1:2)),r==1/0?t="5e"+i:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+i),n=new m(t),n.s=l.s):n=new m(r.toString()),s=(i=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Be(u.plus(l).times(a),u.plus(c),s+2,1),ot(a.d).slice(0,s)===(t=ot(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(J(a,i+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(J(n,i+1,1),e=!n.times(n).times(n).eq(l));break}return se=!0,J(n,i,m.rounding,e)};E.decimalPlaces=E.dp=function(){var i,e=this.d,t=NaN;if(e){if(i=e.length-1,t=(i-at(this.e/ne))*ne,i=e[i],i)for(;i%10==0;i/=10)t--;t<0&&(t=0)}return t};E.dividedBy=E.div=function(i){return Be(this,new this.constructor(i))};E.dividedToIntegerBy=E.divToInt=function(i){var e=this,t=e.constructor;return J(Be(e,new t(i),0,1,1),t.precision,t.rounding)};E.equals=E.eq=function(i){return this.cmp(i)===0};E.floor=function(){return J(new this.constructor(this),this.e+1,3)};E.greaterThan=E.gt=function(i){return this.cmp(i)>0};E.greaterThanOrEqualTo=E.gte=function(i){var e=this.cmp(i);return e==1||e===0};E.hyperbolicCosine=E.cosh=function(){var i,e,t,n,o,r=this,s=r.constructor,a=new s(1);if(!r.isFinite())return new s(r.s?1/0:NaN);if(r.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(r.e,r.sd())+4,s.rounding=1,o=r.d.length,o<32?(i=Math.ceil(o/3),e=(1/To(4,i)).toString()):(i=16,e="2.3283064365386962890625e-10"),r=Hn(s,1,r.times(e),new s(1),!0);for(var c,u=i,l=new s(8);u--;)c=r.times(r),r=a.minus(c.times(l.minus(c.times(l))));return J(r,s.precision=t,s.rounding=n,!0)};E.hyperbolicSine=E.sinh=function(){var i,e,t,n,o=this,r=o.constructor;if(!o.isFinite()||o.isZero())return new r(o);if(e=r.precision,t=r.rounding,r.precision=e+Math.max(o.e,o.sd())+4,r.rounding=1,n=o.d.length,n<3)o=Hn(r,2,o,o,!0);else{i=1.4*Math.sqrt(n),i=i>16?16:i|0,o=o.times(1/To(5,i)),o=Hn(r,2,o,o,!0);for(var s,a=new r(5),c=new r(16),u=new r(20);i--;)s=o.times(o),o=o.times(a.plus(s.times(c.times(s).plus(u))))}return r.precision=e,r.rounding=t,J(o,e,t,!0)};E.hyperbolicTangent=E.tanh=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+7,n.rounding=1,Be(t.sinh(),t.cosh(),n.precision=i,n.rounding=e)):new n(t.s)};E.inverseCosine=E.acos=function(){var i,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,r=t.rounding;return n!==-1?n===0?e.isNeg()?vt(t,o,r):new t(0):new t(NaN):e.isZero()?vt(t,o+4,r).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),i=vt(t,o+4,r).times(.5),t.precision=o,t.rounding=r,i.minus(e))};E.inverseHyperbolicCosine=E.acosh=function(){var i,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(i=n.precision,e=n.rounding,n.precision=i+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,se=!1,t=t.times(t).minus(1).sqrt().plus(t),se=!0,n.precision=i,n.rounding=e,t.ln()):new n(t)};E.inverseHyperbolicSine=E.asinh=function(){var i,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,se=!1,t=t.times(t).plus(1).sqrt().plus(t),se=!0,n.precision=i,n.rounding=e,t.ln())};E.inverseHyperbolicTangent=E.atanh=function(){var i,e,t,n,o=this,r=o.constructor;return o.isFinite()?o.e>=0?new r(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(i=r.precision,e=r.rounding,n=o.sd(),Math.max(n,i)<2*-o.e-1?J(new r(o),i,e,!0):(r.precision=t=n-o.e,o=Be(o.plus(1),new r(1).minus(o),t+i,1),r.precision=i+4,r.rounding=1,o=o.ln(),r.precision=i,r.rounding=e,o.times(.5))):new r(NaN)};E.inverseSine=E.asin=function(){var i,e,t,n,o=this,r=o.constructor;return o.isZero()?new r(o):(e=o.abs().cmp(1),t=r.precision,n=r.rounding,e!==-1?e===0?(i=vt(r,t+4,n).times(.5),i.s=o.s,i):new r(NaN):(r.precision=t+6,r.rounding=1,o=o.div(new r(1).minus(o.times(o)).sqrt().plus(1)).atan(),r.precision=t,r.rounding=n,o.times(2)))};E.inverseTangent=E.atan=function(){var i,e,t,n,o,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=Mr)return s=vt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Mr)return s=vt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ne+2|0),i=t;i;--i)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(se=!1,e=Math.ceil(a/ne),n=1,c=u.times(u),s=new l(u),o=u;i!==-1;)if(o=o.times(c),r=s.minus(o.div(n+=2)),o=o.times(c),s=r.plus(o.div(n+=2)),s.d[e]!==void 0)for(i=e;s.d[i]===r.d[i]&&i--;);return t&&(s=s.times(2<<t-1)),se=!0,J(s,l.precision=m,l.rounding=d,!0)};E.isFinite=function(){return!!this.d};E.isInteger=E.isInt=function(){return!!this.d&&at(this.e/ne)>this.d.length-2};E.isNaN=function(){return!this.s};E.isNegative=E.isNeg=function(){return this.s<0};E.isPositive=E.isPos=function(){return this.s>0};E.isZero=function(){return!!this.d&&this.d[0]===0};E.lessThan=E.lt=function(i){return this.cmp(i)<0};E.lessThanOrEqualTo=E.lte=function(i){return this.cmp(i)<1};E.logarithm=E.log=function(i){var e,t,n,o,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(i==null)i=new l(10),e=!0;else{if(i=new l(i),t=i.d,i.s<0||!t||!t[0]||i.eq(1))return new l(NaN);e=i.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)r=!0;else{for(o=t[0];o%10===0;)o/=10;r=o!==1}if(se=!1,a=m+p,s=mn(u,a),n=e?Po(l,a+10):mn(i,a),c=Be(s,n,a,1),fi(c.d,o=m,d))do if(a+=10,s=mn(u,a),n=e?Po(l,a+10):mn(i,a),c=Be(s,n,a,1),!r){+ot(c.d).slice(o+1,o+15)+1==1e14&&(c=J(c,m+1,0));break}while(fi(c.d,o+=10,d));return se=!0,J(c,m,d)};E.minus=E.sub=function(i){var e,t,n,o,r,s,a,c,u,l,m,d,p=this,y=p.constructor;if(i=new y(i),!p.d||!i.d)return!p.s||!i.s?i=new y(NaN):p.d?i.s=-i.s:i=new y(i.d||p.s!==i.s?p:NaN),i;if(p.s!=i.s)return i.s=-i.s,p.plus(i);if(u=p.d,d=i.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])i.s=-i.s;else if(u[0])i=new y(p);else return new y(c===3?-0:0);return se?J(i,a,c):i}if(t=at(i.e/ne),l=at(p.e/ne),u=u.slice(),r=l-t,r){for(m=r<0,m?(e=u,r=-r,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ne),s)+2,r>n&&(r=n,e.length=1),e.reverse(),n=r;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}r=0}for(m&&(e=u,u=d,d=e,i.s=-i.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>r;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=Vt-1;--u[o],u[n]+=Vt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(i.d=u,i.e=ho(u,t),se?J(i,a,c):i):new y(c===3?-0:0)};E.modulo=E.mod=function(i){var e,t=this,n=t.constructor;return i=new n(i),!t.d||!i.s||i.d&&!i.d[0]?new n(NaN):!i.d||t.d&&!t.d[0]?J(new n(t),n.precision,n.rounding):(se=!1,n.modulo==9?(e=Be(t,i.abs(),0,3,1),e.s*=i.s):e=Be(t,i,0,n.modulo,1),e=e.times(i),se=!0,t.minus(e))};E.naturalExponential=E.exp=function(){return Nr(this)};E.naturalLogarithm=E.ln=function(){return mn(this)};E.negated=E.neg=function(){var i=new this.constructor(this);return i.s=-i.s,J(i)};E.plus=E.add=function(i){var e,t,n,o,r,s,a,c,u,l,m=this,d=m.constructor;if(i=new d(i),!m.d||!i.d)return!m.s||!i.s?i=new d(NaN):m.d||(i=new d(i.d||m.s===i.s?m:NaN)),i;if(m.s!=i.s)return i.s=-i.s,m.minus(i);if(u=m.d,l=i.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(i=new d(m)),se?J(i,a,c):i;if(r=at(m.e/ne),n=at(i.e/ne),u=u.slice(),o=r-n,o){for(o<0?(t=u,o=-o,s=l.length):(t=l,n=r,s=u.length),r=Math.ceil(a/ne),s=r>s?r+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/Vt|0,u[o]%=Vt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return i.d=u,i.e=ho(u,n),se?J(i,a,c):i};E.precision=E.sd=function(i){var e,t=this;if(i!==void 0&&i!==!!i&&i!==1&&i!==0)throw Error(dn+i);return t.d?(e=Va(t.d),i&&t.e+1>e&&(e=t.e+1)):e=NaN,e};E.round=function(){var i=this,e=i.constructor;return J(new e(i),i.e+1,e.rounding)};E.sine=E.sin=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+ne,n.rounding=1,t=Cl(n,Wa(n,t)),n.precision=i,n.rounding=e,J(Ht>2?t.neg():t,i,e,!0)):new n(NaN)};E.squareRoot=E.sqrt=function(){var i,e,t,n,o,r,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(se=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=ot(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=at((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(r=n,n=r.plus(Be(s,r,t+2,1)).times(.5),ot(r.d).slice(0,t)===(e=ot(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(J(r,c+1,0),r.times(r).eq(s))){n=r;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(J(n,c+1,1),i=!n.times(n).eq(s));break}return se=!0,J(n,c,l.rounding,i)};E.tangent=E.tan=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+10,n.rounding=1,t=t.sin(),t.s=1,t=Be(t,new n(1).minus(t.times(t)).sqrt(),i+10,0),n.precision=i,n.rounding=e,J(Ht==2||Ht==4?t.neg():t,i,e,!0)):new n(NaN)};E.times=E.mul=function(i){var e,t,n,o,r,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(i=new m(i)).d;if(i.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!i.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?i.s/0:i.s*0);for(t=at(l.e/ne)+at(i.e/ne),c=d.length,u=p.length,c<u&&(r=d,d=p,p=r,s=c,c=u,u=s),r=[],s=c+u,n=s;n--;)r.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=r[o]+p[n]*d[o-n-1]+e,r[o--]=a%Vt|0,e=a/Vt|0;r[o]=(r[o]+e)%Vt|0}for(;!r[--s];)r.pop();return e?++t:r.shift(),i.d=r,i.e=ho(r,t),se?J(i,m.precision,m.rounding):i};E.toBinary=function(i,e){return vr(this,2,i,e)};E.toDecimalPlaces=E.toDP=function(i,e){var t=this,n=t.constructor;return t=new n(t),i===void 0?t:(wt(i,0,pn),e===void 0?e=n.rounding:wt(e,0,8),J(t,i+t.e+1,e))};E.toExponential=function(i,e){var t,n=this,o=n.constructor;return i===void 0?t=zt(n,!0):(wt(i,0,pn),e===void 0?e=o.rounding:wt(e,0,8),n=J(new o(n),i+1,e),t=zt(n,!0,i+1)),n.isNeg()&&!n.isZero()?"-"+t:t};E.toFixed=function(i,e){var t,n,o=this,r=o.constructor;return i===void 0?t=zt(o):(wt(i,0,pn),e===void 0?e=r.rounding:wt(e,0,8),n=J(new r(o),i+o.e+1,e),t=zt(n,!1,i+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};E.toFraction=function(i){var e,t,n,o,r,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),r=e.e=Va(y)-p.e-1,s=r%ne,e.d[0]=He(10,s<0?ne+s:s),i==null)i=r>0?e:u;else{if(a=new f(i),!a.isInt()||a.lt(u))throw Error(dn+a);i=a.gt(e)?r>0?e:u:a}for(se=!1,a=new f(ot(y)),l=f.precision,f.precision=r=y.length*ne*2;m=Be(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(i)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=Be(i.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=Be(u,n,r,1).minus(p).abs().cmp(Be(c,t,r,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,se=!0,d};E.toHexadecimal=E.toHex=function(i,e){return vr(this,16,i,e)};E.toNearest=function(i,e){var t=this,n=t.constructor;if(t=new n(t),i==null){if(!t.d)return t;i=new n(1),e=n.rounding}else{if(i=new n(i),e===void 0?e=n.rounding:wt(e,0,8),!t.d)return i.s?t:i;if(!i.d)return i.s&&(i.s=t.s),i}return i.d[0]?(se=!1,t=Be(t,i,0,e,1).times(i),se=!0,J(t)):(i.s=t.s,t=i),t};E.toNumber=function(){return+this};E.toOctal=function(i,e){return vr(this,8,i,e)};E.toPower=E.pow=function(i){var e,t,n,o,r,s,a=this,c=a.constructor,u=+(i=new c(i));if(!a.d||!i.d||!a.d[0]||!i.d[0])return new c(He(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,r=c.rounding,i.eq(1))return J(a,n,r);if(e=at(i.e/ne),e>=i.d.length-1&&(t=u<0?-u:u)<=Bl)return o=Ea(c,a,t,n),i.s<0?new c(1).div(o):J(o,n,r);if(s=a.s,s<0){if(e<i.d.length-1)return new c(NaN);if((i.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=He(+a,u),e=t==0||!isFinite(t)?at(u*(Math.log("0."+ot(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(se=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=Nr(i.times(mn(a,n+t)),n),o.d&&(o=J(o,n+5,1),fi(o.d,n,r)&&(e=n+10,o=J(Nr(i.times(mn(a,e+t)),e),e+5,1),+ot(o.d).slice(n+1,n+15)+1==1e14&&(o=J(o,n+1,0)))),o.s=s,se=!0,c.rounding=r,J(o,n,r))};E.toPrecision=function(i,e){var t,n=this,o=n.constructor;return i===void 0?t=zt(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(wt(i,1,pn),e===void 0?e=o.rounding:wt(e,0,8),n=J(new o(n),i,e),t=zt(n,i<=n.e||n.e<=o.toExpNeg,i)),n.isNeg()&&!n.isZero()?"-"+t:t};E.toSignificantDigits=E.toSD=function(i,e){var t=this,n=t.constructor;return i===void 0?(i=n.precision,e=n.rounding):(wt(i,1,pn),e===void 0?e=n.rounding:wt(e,0,8)),J(new n(t),i,e)};E.toString=function(){var i=this,e=i.constructor,t=zt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()&&!i.isZero()?"-"+t:t};E.truncated=E.trunc=function(){return J(new this.constructor(this),this.e+1,1)};E.valueOf=E.toJSON=function(){var i=this,e=i.constructor,t=zt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()?"-"+t:t};function ot(i){var e,t,n,o=i.length-1,r="",s=i[0];if(o>0){for(r+=s,e=1;e<o;e++)n=i[e]+"",t=ne-n.length,t&&(r+=ln(t)),r+=n;s=i[e],n=s+"",t=ne-n.length,t&&(r+=ln(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return r+s}function wt(i,e,t){if(i!==~~i||i<e||i>t)throw Error(dn+i)}function fi(i,e,t,n){var o,r,s,a;for(r=i[0];r>=10;r/=10)--e;return--e<0?(e+=ne,o=0):(o=Math.ceil((e+1)/ne),e%=ne),r=He(10,ne-e),a=i[o]%r|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==r||t>3&&a+1==r/2)&&(i[o+1]/r/100|0)==He(10,e-2)-1||(a==r/2||a==0)&&(i[o+1]/r/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==r||!n&&t>3&&a+1==r/2)&&(i[o+1]/r/1e3|0)==He(10,e-3)-1,s}function go(i,e,t){for(var n,o=[0],r,s=0,a=i.length;s<a;){for(r=o.length;r--;)o[r]*=e;for(o[0]+=Lr.indexOf(i.charAt(s++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function Sl(i,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/To(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),i.precision+=t,e=Hn(i,1,e.times(o),new i(1));for(var r=t;r--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return i.precision-=t,e}var Be=function(){function i(n,o,r){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*o+a,n[c]=s%r|0,a=s/r|0;return a&&n.unshift(a),n}function e(n,o,r,s){var a,c;if(r!=s)c=r>s?1:-1;else for(a=c=0;a<r;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,r,s){for(var a=0;r--;)n[r]-=a,a=n[r]<o[r]?1:0,n[r]=a*s+n[r]-o[r];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,r,s,a,c){var u,l,m,d,p,y,f,b,g,A,P,h,B,T,S,I,C,x,K,V,R=n.constructor,X=n.s==o.s?1:-1,G=n.d,D=o.d;if(!G||!G[0]||!D||!D[0])return new R(!n.s||!o.s||(G?D&&G[0]==D[0]:!D)?NaN:G&&G[0]==0||!D?X*0:X/0);for(c?(p=1,l=n.e-o.e):(c=Vt,p=ne,l=at(n.e/p)-at(o.e/p)),K=D.length,C=G.length,g=new R(X),A=g.d=[],m=0;D[m]==(G[m]||0);m++);if(D[m]>(G[m]||0)&&l--,r==null?(T=r=R.precision,s=R.rounding):a?T=r+(n.e-o.e)+1:T=r,T<0)A.push(1),y=!0;else{if(T=T/p+2|0,m=0,K==1){for(d=0,D=D[0],T++;(m<C||d)&&T--;m++)S=d*c+(G[m]||0),A[m]=S/D|0,d=S%D|0;y=d||m<C}else{for(d=c/(D[0]+1)|0,d>1&&(D=i(D,d,c),G=i(G,d,c),K=D.length,C=G.length),I=K,P=G.slice(0,K),h=P.length;h<K;)P[h++]=0;V=D.slice(),V.unshift(0),x=D[0],D[1]>=c/2&&++x;do d=0,u=e(D,P,K,h),u<0?(B=P[0],K!=h&&(B=B*c+(P[1]||0)),d=B/x|0,d>1?(d>=c&&(d=c-1),f=i(D,d,c),b=f.length,h=P.length,u=e(f,P,b,h),u==1&&(d--,t(f,K<b?V:D,b,c))):(d==0&&(u=d=1),f=D.slice()),b=f.length,b<h&&f.unshift(0),t(P,f,h,c),u==-1&&(h=P.length,u=e(D,P,K,h),u<1&&(d++,t(P,K<h?V:D,h,c))),h=P.length):u===0&&(d++,P=[0]),A[m++]=d,u&&P[0]?P[h++]=G[I]||0:(P=[G[I]],h=1);while((I++<C||P[0]!==void 0)&&T--);y=P[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,Oa=y;else{for(m=1,d=A[0];d>=10;d/=10)m++;g.e=m+l*p-1,J(g,a?r+g.e+1:r,s,y)}return g}}();function J(i,e,t,n){var o,r,s,a,c,u,l,m,d,p=i.constructor;e:if(e!=null){if(m=i.d,!m)return i;for(o=1,a=m[0];a>=10;a/=10)o++;if(r=e-o,r<0)r+=ne,s=e,l=m[d=0],c=l/He(10,o-s-1)%10|0;else if(d=Math.ceil((r+1)/ne),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,r%=ne,s=r-ne+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;r%=ne,s=r-ne+o,c=s<0?0:l/He(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%He(10,o-s-1)),u=t<4?(c||n)&&(t==0||t==(i.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(r>0?s>0?l/He(10,o-s):0:m[d-1])%10&1||t==(i.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=i.e+1,m[0]=He(10,(ne-e%ne)%ne),i.e=-e||0):m[0]=i.e=0,i;if(r==0?(m.length=d,a=1,d--):(m.length=d+1,a=He(10,ne-r),m[d]=s>0?(l/He(10,o-s)%He(10,s)|0)*a:0),u)for(;;)if(d==0){for(r=1,s=m[0];s>=10;s/=10)r++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;r!=a&&(i.e++,m[0]==Vt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Vt)break;m[d--]=0,a=1}for(r=m.length;m[--r]===0;)m.pop()}return se&&(i.e>p.maxE?(i.d=null,i.e=NaN):i.e<p.minE&&(i.e=0,i.d=[0])),i}function zt(i,e,t){if(!i.isFinite())return Da(i);var n,o=i.e,r=ot(i.d),s=r.length;return e?(t&&(n=t-s)>0?r=r.charAt(0)+"."+r.slice(1)+ln(n):s>1&&(r=r.charAt(0)+"."+r.slice(1)),r=r+(i.e<0?"e":"e+")+i.e):o<0?(r="0."+ln(-o-1)+r,t&&(n=t-s)>0&&(r+=ln(n))):o>=s?(r+=ln(o+1-s),t&&(n=t-o-1)>0&&(r=r+"."+ln(n))):((n=o+1)<s&&(r=r.slice(0,n)+"."+r.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(r+="."),r+=ln(n))),r}function ho(i,e){var t=i[0];for(e*=ne;t>=10;t/=10)e++;return e}function Po(i,e,t){if(e>xl)throw se=!0,t&&(i.precision=t),Error(Ma);return J(new i(Ao),e,1,!0)}function vt(i,e,t){if(e>Mr)throw Error(Ma);return J(new i(wo),e,t,!0)}function Va(i){var e=i.length-1,t=e*ne+1;if(e=i[e],e){for(;e%10==0;e/=10)t--;for(e=i[0];e>=10;e/=10)t++}return t}function ln(i){for(var e="";i--;)e+="0";return e}function Ea(i,e,t,n){var o,r=new i(1),s=Math.ceil(n/ne+4);for(se=!1;;){if(t%2&&(r=r.times(e),Ra(r.d,s)&&(o=!0)),t=at(t/2),t===0){t=r.d.length-1,o&&r.d[t]===0&&++r.d[t];break}e=e.times(e),Ra(e.d,s)}return se=!0,r}function Ca(i){return i.d[i.d.length-1]&1}function Fa(i,e,t){for(var n,o=new i(e[0]),r=0;++r<e.length;)if(n=new i(e[r]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function Nr(i,e){var t,n,o,r,s,a,c,u=0,l=0,m=0,d=i.constructor,p=d.rounding,y=d.precision;if(!i.d||!i.d[0]||i.e>17)return new d(i.d?i.d[0]?i.s<0?0:1/0:1:i.s?i.s<0?0:i:0/0);for(e==null?(se=!1,c=y):c=e,a=new d(.03125);i.e>-2;)i=i.times(a),m+=5;for(n=Math.log(He(2,m))/Math.LN10*2+5|0,c+=n,t=r=s=new d(1),d.precision=c;;){if(r=J(r.times(i),c,1),t=t.times(++l),a=s.plus(Be(r,t,c,1)),ot(a.d).slice(0,c)===ot(s.d).slice(0,c)){for(o=m;o--;)s=J(s.times(s),c,1);if(e==null)if(u<3&&fi(s.d,c-n,p,u))d.precision=c+=10,t=r=a=new d(1),l=0,u++;else return J(s,d.precision=y,p,se=!0);else return d.precision=y,s}s=a}}function mn(i,e){var t,n,o,r,s,a,c,u,l,m,d,p=1,y=10,f=i,b=f.d,g=f.constructor,A=g.rounding,P=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(se=!1,l=P):l=e,g.precision=l+=y,t=ot(b),n=t.charAt(0),Math.abs(r=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(i),t=ot(f.d),n=t.charAt(0),p++;r=f.e,n>1?(f=new g("0."+t),r++):f=new g(n+"."+t.slice(1))}else return u=Po(g,l+2,P).times(r+""),f=mn(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=P,e==null?J(f,P,A,se=!0):f;for(m=f,c=s=f=Be(f.minus(1),f.plus(1),l,1),d=J(f.times(f),l,1),o=3;;){if(s=J(s.times(d),l,1),u=c.plus(Be(s,new g(o),l,1)),ot(u.d).slice(0,l)===ot(c.d).slice(0,l))if(c=c.times(2),r!==0&&(c=c.plus(Po(g,l+2,P).times(r+""))),c=Be(c,new g(p),l,1),e==null)if(fi(c.d,l-y,A,a))g.precision=l+=y,u=s=f=Be(m.minus(1),m.plus(1),l,1),d=J(f.times(f),l,1),o=a=1;else return J(c,g.precision=P,A,se=!0);else return g.precision=P,c;c=u,o+=2}}function Da(i){return String(i.s*i.s/0)}function _r(i,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,i.e=t=t-n-1,i.d=[],n=(t+1)%ne,t<0&&(n+=ne),n<o){for(n&&i.d.push(+e.slice(0,n)),o-=ne;n<o;)i.d.push(+e.slice(n,n+=ne));e=e.slice(n),n=ne-e.length}else n-=o;for(;n--;)e+="0";i.d.push(+e),se&&(i.e>i.constructor.maxE?(i.d=null,i.e=NaN):i.e<i.constructor.minE&&(i.e=0,i.d=[0]))}else i.e=0,i.d=[0];return i}function Kl(i,e){var t,n,o,r,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),va.test(e))return _r(i,e)}else if(e==="Infinity"||e==="NaN")return+e||(i.s=NaN),i.e=NaN,i.d=null,i;if(Tl.test(e))t=16,e=e.toLowerCase();else if(hl.test(e))t=2;else if(Il.test(e))t=8;else throw Error(dn+e);for(r=e.search(/p/i),r>0?(c=+e.slice(r+1),e=e.substring(2,r)):e=e.slice(2),r=e.indexOf("."),s=r>=0,n=i.constructor,s&&(e=e.replace(".",""),a=e.length,r=a-r,o=Ea(n,new n(t),r,r*2)),u=go(e,t,Vt),l=u.length-1,r=l;u[r]===0;--r)u.pop();return r<0?new n(i.s*0):(i.e=ho(u,l),i.d=u,se=!1,s&&(i=Be(i,o,a*4)),c&&(i=i.times(Math.abs(c)<54?He(2,c):yi.pow(2,c))),se=!0,i)}function Cl(i,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Hn(i,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/To(5,t)),e=Hn(i,2,e,e);for(var o,r=new i(5),s=new i(16),a=new i(20);t--;)o=e.times(e),e=e.times(r.plus(o.times(s.times(o).minus(a))));return e}function Hn(i,e,t,n,o){var r,s,a,c,u=1,l=i.precision,m=Math.ceil(l/ne);for(se=!1,c=t.times(t),a=new i(n);;){if(s=Be(a.times(c),new i(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=Be(s.times(c),new i(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(r=m;s.d[r]===a.d[r]&&r--;);if(r==-1)break}r=a,a=n,n=s,s=r,u++}return se=!0,s.d.length=m+1,s}function To(i,e){for(var t=i;--e;)t*=i;return t}function Wa(i,e){var t,n=e.s<0,o=vt(i,i.precision,1),r=o.times(.5);if(e=e.abs(),e.lte(r))return Ht=n?4:1,e;if(t=e.divToInt(o),t.isZero())Ht=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(r))return Ht=Ca(t)?n?2:3:n?4:1,e;Ht=Ca(t)?n?1:4:n?3:2}return e.minus(o).abs()}function vr(i,e,t,n){var o,r,s,a,c,u,l,m,d,p=i.constructor,y=t!==void 0;if(y?(wt(t,1,pn),n===void 0?n=p.rounding:wt(n,0,8)):(t=p.precision,n=p.rounding),!i.isFinite())l=Da(i);else{for(l=zt(i),s=l.indexOf("."),y?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=go(zt(d),10,o),d.e=d.d.length),m=go(l,10,o),r=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?r--:(i=new p(i),i.d=m,i.e=r,i=Be(i,d,t,n,0,o),m=i.d,r=i.e,u=Oa),s=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(i.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(i.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++r,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=Lr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=go(l,o,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=Lr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(r<0?"p":"p+")+r}else if(r<0){for(;++r;)l="0"+l;l="0."+l}else if(++r>c)for(r-=c;r--;)l+="0";else r<c&&(l=l.slice(0,r)+"."+l.slice(r))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return i.s<0?"-"+l:l}function Ra(i,e){if(i.length>e)return i.length=e,!0}function Rl(i){return new this(i).abs()}function Ll(i){return new this(i).acos()}function Ol(i){return new this(i).acosh()}function Ml(i,e){return new this(i).plus(e)}function Nl(i){return new this(i).asin()}function _l(i){return new this(i).asinh()}function vl(i){return new this(i).atan()}function Vl(i){return new this(i).atanh()}function El(i,e){i=new this(i),e=new this(e);var t,n=this.precision,o=this.rounding,r=n+4;return!i.s||!e.s?t=new this(NaN):!i.d&&!e.d?(t=vt(this,r,1).times(e.s>0?.25:.75),t.s=i.s):!e.d||i.isZero()?(t=e.s<0?vt(this,n,o):new this(0),t.s=i.s):!i.d||e.isZero()?(t=vt(this,r,1).times(.5),t.s=i.s):e.s<0?(this.precision=r,this.rounding=1,t=this.atan(Be(i,e,r,1)),e=vt(this,r,1),this.precision=n,this.rounding=o,t=i.s<0?t.minus(e):t.plus(e)):t=this.atan(Be(i,e,r,1)),t}function Fl(i){return new this(i).cbrt()}function Dl(i){return J(i=new this(i),i.e+1,2)}function Wl(i,e,t){return new this(i).clamp(e,t)}function ql(i){if(!i||typeof i!="object")throw Error(ko+"Object expected");var e,t,n,o=i.defaults===!0,r=["precision",1,pn,"rounding",0,8,"toExpNeg",-jn,0,"toExpPos",0,jn,"maxE",0,jn,"minE",-jn,0,"modulo",0,9];for(e=0;e<r.length;e+=3)if(t=r[e],o&&(this[t]=Or[t]),(n=i[t])!==void 0)if(at(n)===n&&n>=r[e+1]&&n<=r[e+2])this[t]=n;else throw Error(dn+t+": "+n);if(t="crypto",o&&(this[t]=Or[t]),(n=i[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(Na);else this[t]=!1;else throw Error(dn+t+": "+n);return this}function Ul(i){return new this(i).cos()}function Gl(i){return new this(i).cosh()}function qa(i){var e,t,n;function o(r){var s,a,c,u=this;if(!(u instanceof o))return new o(r);if(u.constructor=o,La(r)){u.s=r.s,se?!r.d||r.e>o.maxE?(u.e=NaN,u.d=null):r.e<o.minE?(u.e=0,u.d=[0]):(u.e=r.e,u.d=r.d.slice()):(u.e=r.e,u.d=r.d?r.d.slice():r.d);return}if(c=typeof r,c==="number"){if(r===0){u.s=1/r<0?-1:1,u.e=0,u.d=[0];return}if(r<0?(r=-r,u.s=-1):u.s=1,r===~~r&&r<1e7){for(s=0,a=r;a>=10;a/=10)s++;se?s>o.maxE?(u.e=NaN,u.d=null):s<o.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[r]):(u.e=s,u.d=[r]);return}else if(r*0!==0){r||(u.s=NaN),u.e=NaN,u.d=null;return}return _r(u,r.toString())}else if(c!=="string")throw Error(dn+r);return(a=r.charCodeAt(0))===45?(r=r.slice(1),u.s=-1):(a===43&&(r=r.slice(1)),u.s=1),va.test(r)?_r(u,r):Kl(u,r)}if(o.prototype=E,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=ql,o.clone=qa,o.isDecimal=La,o.abs=Rl,o.acos=Ll,o.acosh=Ol,o.add=Ml,o.asin=Nl,o.asinh=_l,o.atan=vl,o.atanh=Vl,o.atan2=El,o.cbrt=Fl,o.ceil=Dl,o.clamp=Wl,o.cos=Ul,o.cosh=Gl,o.div=Xl,o.exp=zl,o.floor=Ql,o.hypot=Yl,o.ln=jl,o.log=Hl,o.log10=$l,o.log2=Zl,o.max=Jl,o.min=em,o.mod=tm,o.mul=nm,o.pow=im,o.random=om,o.round=rm,o.sign=sm,o.sin=am,o.sinh=um,o.sqrt=cm,o.sub=lm,o.sum=mm,o.tan=dm,o.tanh=pm,o.trunc=fm,i===void 0&&(i={}),i&&i.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)i.hasOwnProperty(t=n[e++])||(i[t]=this[t]);return o.config(i),o}function Xl(i,e){return new this(i).div(e)}function zl(i){return new this(i).exp()}function Ql(i){return J(i=new this(i),i.e+1,3)}function Yl(){var i,e,t=new this(0);for(se=!1,i=0;i<arguments.length;)if(e=new this(arguments[i++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return se=!0,new this(1/0);t=e}return se=!0,t.sqrt()}function La(i){return i instanceof yi||i&&i.toStringTag===_a||!1}function jl(i){return new this(i).ln()}function Hl(i,e){return new this(i).log(e)}function Zl(i){return new this(i).log(2)}function $l(i){return new this(i).log(10)}function Jl(){return Fa(this,arguments,"lt")}function em(){return Fa(this,arguments,"gt")}function tm(i,e){return new this(i).mod(e)}function nm(i,e){return new this(i).mul(e)}function im(i,e){return new this(i).pow(e)}function om(i){var e,t,n,o,r=0,s=new this(1),a=[];if(i===void 0?i=this.precision:wt(i,1,pn),n=Math.ceil(i/ne),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));r<n;)o=e[r],o>=429e7?e[r]=crypto.getRandomValues(new Uint32Array(1))[0]:a[r++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);r<n;)o=e[r]+(e[r+1]<<8)+(e[r+2]<<16)+((e[r+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,r):(a.push(o%1e7),r+=4);r=n/4}else throw Error(Na);else for(;r<n;)a[r++]=Math.random()*1e7|0;for(n=a[--r],i%=ne,n&&i&&(o=He(10,ne-i),a[r]=(n/o|0)*o);a[r]===0;r--)a.pop();if(r<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ne)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<ne&&(t-=ne-n)}return s.e=t,s.d=a,s}function rm(i){return J(i=new this(i),i.e+1,this.rounding)}function sm(i){return i=new this(i),i.d?i.d[0]?i.s:0*i.s:i.s||NaN}function am(i){return new this(i).sin()}function um(i){return new this(i).sinh()}function cm(i){return new this(i).sqrt()}function lm(i,e){return new this(i).sub(e)}function mm(){var i=0,e=arguments,t=new this(e[i]);for(se=!1;t.s&&++i<e.length;)t=t.plus(e[i]);return se=!0,J(t,this.precision,this.rounding)}function dm(i){return new this(i).tan()}function pm(i){return new this(i).tanh()}function fm(i){return J(i=new this(i),i.e+1,1)}E[Symbol.for("nodejs.util.inspect.custom")]=E.toString;E[Symbol.toStringTag]="Decimal";var yi=E.constructor=qa(Or);Ao=new yi(Ao);wo=new yi(wo);var M=yi;import km from"big.js";import fn from"bn.js";import ym from"toformat";var bm=ym,bi=bm;import Bo from"big.js";import gm from"bn.js";import Am from"decimal.js-light";import gi from"bn.js";var Vr=(n=>(n[n.ROUND_DOWN=0]="ROUND_DOWN",n[n.ROUND_HALF_UP=1]="ROUND_HALF_UP",n[n.ROUND_UP=2]="ROUND_UP",n))(Vr||{}),Ua=9007199254740991;function Z(i){let e=me("Raydium_parseBigNumberish");if(i instanceof gi)return i;if(typeof i=="string"){if(i.match(/^-?[0-9]+$/))return new gi(i);e.logWithError(`invalid BigNumberish string: ${i}`)}return typeof i=="number"?(i%1&&e.logWithError(`BigNumberish number underflow: ${i}`),(i>=Ua||i<=-Ua)&&e.logWithError(`BigNumberish number overflow: ${i}`),new gi(String(i))):typeof i=="bigint"?new gi(i.toString()):(e.error(`invalid BigNumberish value: ${i}`),new gi(0))}var Io=me("module/fraction"),Er=bi(Bo),Ai=bi(Am),wm={[0]:Ai.ROUND_DOWN,[1]:Ai.ROUND_HALF_UP,[2]:Ai.ROUND_UP},Pm={[0]:Bo.roundDown,[1]:Bo.roundHalfUp,[2]:Bo.roundUp},ae=class{constructor(e,t=new gm(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new ae(this.denominator,this.numerator)}add(e){let t=e instanceof ae?e:new ae(Z(e));return this.denominator.eq(t.denominator)?new ae(this.numerator.add(t.numerator),this.denominator):new ae(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof ae?e:new ae(Z(e));return this.denominator.eq(t.denominator)?new ae(this.numerator.sub(t.numerator),this.denominator):new ae(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof ae?e:new ae(Z(e));return new ae(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof ae?e:new ae(Z(e));return new ae(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Io.logWithError(`${e} is not an integer.`),e<=0&&Io.logWithError(`${e} is not positive.`),Ai.set({precision:e+1,rounding:wm[n]});let o=new Ai(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)||Io.logWithError(`${e} is not an integer.`),e<0&&Io.logWithError(`${e} is negative.`),Er.DP=e,Er.RM=Pm[n]||1,new Er(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var hm=me("Raydium_amount"),xo=bi(km);function Ga(i,e){let t="0",n="0";if(i.includes(".")){let o=i.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):hm.logWithError(`invalid number string, num: ${i}`)}else t=i;return[t,n.slice(0,e)||n]}var be=class extends ae{constructor(t,n,o=!0,r){let s=new fn(0),a=Kn.pow(new fn(t.decimals));if(o)s=Z(n);else{let c=new fn(0),u=new fn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Ga(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=me(r||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(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 xo.DP=this.token.decimals,new xo(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},Sn=class extends ae{constructor(t,n,o=!0,r){let s=new fn(0),a=Kn.pow(new fn(t.decimals));if(o)s=Z(n);else{let c=new fn(0),u=new fn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Ga(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=me(r||"TokenAmount"),this.currency=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.currency.equals(t.currency)||this.logger.logWithError("gt currency not equals"),this.raw.gt(t.raw)}lt(t){return this.currency.equals(t.currency)||this.logger.logWithError("lt currency not equals"),this.raw.lt(t.raw)}add(t){return this.currency.equals(t.currency)||this.logger.logWithError("add currency not equals"),new Sn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new Sn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.currency.decimals,n,o=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return xo.DP=this.currency.decimals,new xo(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as Tm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Xa}from"@solana/spl-token";var Qt={chainId:101,address:Tm.default.toBase58(),programId:Xa.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ze={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Xa.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 Ur}from"@solana/web3.js";import{PublicKey as Le,SystemProgram as za,SYSVAR_RENT_PUBKEY as Im}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bm}from"@solana/spl-token";function k({pubkey:i,isSigner:e=!1,isWritable:t=!0}){return{pubkey:i,isWritable:t,isSigner:e}}var Fr=[k({pubkey:Bm,isWritable:!1}),k({pubkey:za.programId,isWritable:!1}),k({pubkey:Im,isWritable:!1})];function Dr({publicKey:i,transformSol:e}){let t=Wr(i.toString());if(t instanceof Le)return e&&t.equals($e)?H:t;if(e&&t.toString()===$e.toBase58())return H;if(typeof t=="string"){if(t===Le.default.toBase58())return Le.default;try{return new Le(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Wr(i){try{return new Le(i)}catch{return i}}var So=new Le("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),yn=new Le("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),tt=new Le("SysvarRent111111111111111111111111111111111"),qr=new Le("SysvarC1ock11111111111111111111111111111111"),Zt=new Le("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Ko=new Le("Sysvar1nstructions1111111111111111111111111"),Co=za.programId,jy=new Le("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Hy=new Le("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Zy=new Le("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),$y=new Le("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Jy=new Le("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),eb=new Le("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),tb=new Le("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),nb=new Le("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),ib=new Le("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),ob=new Le("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),rb=new Le("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Le("So11111111111111111111111111111111111111112"),$e=Le.default;function Bt(i){return Dr({publicKey:i,transformSol:!0})}var Gr=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:r=!1,isToken2022:s=!1}){if(e===$e.toBase58()||e instanceof Ur&&$e.equals(e)){this.decimals=Ze.decimals,this.symbol=Ze.symbol,this.name=Ze.name,this.mint=new Ur(Ze.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=r?Ur.default:Dr({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},we=Gr;we.WSOL=new Gr(W(O({},Ze),{mint:Ze.address}));var Xr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},wi=Xr;wi.SOL=new Xr(Qt);function fb(i,e){return i instanceof we&&e instanceof we?i.equals(e):i instanceof we||e instanceof we?!1:i===e}import xm from"bn.js";var Qa=new ae(new xm(100)),ve=class extends ae{toSignificant(e=5,t,n){return this.mul(Qa).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Qa).toFixed(e,t,n)}};var Sm=me("Raydium_price"),nt=class extends ae{constructor(t){let{baseToken:n,quoteToken:o,numerator:r,denominator:s}=t;super(r,s);this.baseToken=n,this.quoteToken=o,this.scalar=new ae(zr(n.decimals),zr(o.decimals))}get raw(){return new ae(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new nt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Sm.logWithError("mul token not equals");let n=super.mul(t);return new nt({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)}};function We(i){if(i instanceof ve)return new ae(i.numerator,i.denominator);if(i instanceof nt)return i.adjusted;if(i instanceof be)try{return We(i.toExact())}catch{return new ae(qe)}if(i instanceof ae)return i;let e=String(i),t=Cn(e);return new ae(t.numerator,t.denominator)}function _b(i){var n;if(i instanceof ve)return{fr:new ae(i.numerator,i.denominator)};if(i instanceof nt)return{fr:i.adjusted};if(i instanceof be)return{fr:We(i.toExact()),decimals:i.token.decimals};if(i instanceof ae)return{fr:i};let e=String(i),t=Cn(e);return{fr:new ae(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function vb(i,e){if(i==null||e==null)return!1;let t=We(i),n=We(e);return t.sub(n).numerator,t.sub(n).numerator.lt(qe)}function Km(i,e){if(i==null||e==null)return!1;let t=We(i),n=We(e);return t.sub(n).numerator.gt(qe)}function Vb(i,e){if(i==null||e==null)return!1;let t=We(i),n=We(e);return t.sub(n).numerator.lte(qe)}function Eb(i,e){if(i==null||e==null)return!1;let t=We(i),n=We(e);return t.sub(n).numerator.gte(qe)}function Cm(i,e){if(i==null||e==null)return!1;let t=We(i),n=We(e);return t.sub(n).numerator.eq(qe)}function Fb(i,e){if(i==null||e==null)return;let t=We(i),n=We(e);try{return t.div(n)}catch{return t}}function Db(i,e){if(i==null||e==null)return;let t=We(i),n=We(e);return t.sub(n)}function Wb(i){return i==null?!1:!Cm(i,0)}function qb(i,e){return Km(e,i)?e:i}function Qr(i,e){if(i==null||e==null)return;let t=We(i),n=We(e);return t.mul(n)}function Ub(i,e){if(i==null||e==null)return;let t=We(i),n=We(e);return t.add(n)}import{PublicKey as Rm}from"@solana/web3.js";import Lm from"bn.js";async function Ya(i){new Promise(e=>setTimeout(e,i))}function jb(){return new Date().getTime()}function Yr(i){return typeof i=="object"&&i!==null&&![we,be,Rm,ae,Lm,nt,ve].some(e=>typeof e=="object"&&i instanceof e)}function Ke(i){return typeof i=="string"?Wr(i):Array.isArray(i)?i.map(e=>Ke(e)):Yr(i)?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ke(t)])):i}var qe=new Ue(0),Za=new Ue(1),ug=new Ue(2),cg=new Ue(3),lg=new Ue(5),Kn=new Ue(10),mg=new Ue(100),dg=new Ue(1e3),pg=new Ue(1e4);function zr(i){return Kn.pow(Z(i))}function Cn(i){var a;if(i===void 0)return{denominator:"1",numerator:"0"};if(i instanceof Ue)return{numerator:i.toString(),denominator:"1"};if(i instanceof ae)return{denominator:i.denominator.toString(),numerator:i.numerator.toString()};let e=String(i),[,t="",n="",o=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],r="1"+"0".repeat(o.length),s=t+(n==="0"?"":n)+o||"0";return{denominator:r,numerator:s,sign:t,int:n,dec:o}}function Ro(i,e){let t=i.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Om(i){var n;let[,e="",t=""]=(n=i.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function Mm(i,e=0){return i instanceof Ue?i:new Ue(Om($a(i).mul(Kn.pow(new Ue(String(e))))))}function $a(i){if(i instanceof ve)return new ae(i.numerator,i.denominator);if(i instanceof nt)return i.adjusted;if(i instanceof be)try{return $a(i.toExact())}catch{return new ae(qe)}if(i instanceof ae)return i;let e=String(i),t=Cn(e);return new ae(t.numerator,t.denominator)}function fg(i,e){let{numerator:t,denominator:n}=Cn(i);return new ve(new Ue(t),new Ue(n).mul(e!=null&&e.alreadyDecimaled?new Ue(100):new Ue(1)))}function yg(i){let{token:e,numberPrice:t,decimalDone:n}=i,o=new we({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:r,denominator:s}=Cn(t),a=n?new Ue(r).mul(Kn.pow(new Ue(e.decimals))):r,c=new Ue(s).mul(Kn.pow(new Ue(o.decimals)));return new nt({baseToken:o,denominator:c.toString(),quoteToken:new we(W(O({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function ja(i){let e=new wi({decimals:6,symbol:"usd",name:"usd"}),t=Mm(Qr(i,10**e.decimals));return new Sn(e,t)}function bg(i,e){return ja(!e||!i?0:Qr(i,e))}function Nm(i){if(i==null)return;let{numerator:e,denominator:t}=Cn(i.toString());return new ae(e,t)}function _m(i){return i instanceof M}function Ha(i){return _m(i)?Nm(i):Array.isArray(i)?i.map(e=>Ha(e)):Yr(i)?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ha(t)])):i}var Ja=i=>typeof i=="number",eu=i=>i?new Date(i):new Date,vm=i=>eu(i).getTime();function tu(i,e,t){let n=Ja(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(i).getTime()<=n}function nu(i,e,t){let n=Ja(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(i).getTime()>n}function Ag(i,e){let n=vm(i)+(e.days?e.days*24*60*60*1e3:0)+(e.hours?e.hours*60*60*1e3:0)+(e.minutes?e.minutes*60*1e3:0)+(e.seconds?e.seconds*1e3:0)+(e.milliseconds?e.milliseconds:0);return eu(n)}function Rr(i,e=1,t=[]){let n=[...i];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function Pg(i,...e){return i.filter(t=>e.every(n=>n.includes(t)))}function kg(i,...e){return i.filter(t=>e.every(n=>!n.includes(t)))}function hg(i){return[...new Set(i)]}var Et=class{constructor(e){this._owner=e}get publicKey(){return Et.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Et.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Et.isKeyPair(this._owner)}get isPublicKey(){return Et.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Et.isKeyPair(e)}};import{PublicKey as Wm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as qm}from"@solana/spl-token";import{ComputeBudgetProgram as iu,Keypair as ou,PublicKey as ru,Transaction as Oo,TransactionMessage as Vm,VersionedTransaction as jr}from"@solana/web3.js";var Rn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(Rn||{}),F={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"};import{TOKEN_PROGRAM_ID as Em}from"@solana/spl-token";var $t=me("Raydium_txUtil"),su=1644;function Mo(i){let e=[],t=[];return i.microLamports&&(e.push(iu.setComputeUnitPrice({microLamports:i.microLamports})),t.push(F.SetComputeUnitPrice)),i.units&&(e.push(iu.setComputeUnitLimit({units:i.units})),t.push(F.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Zn(i,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=i.getLatestBlockhash)==null?void 0:n.call(i,{commitment:t})))==null?void 0:o.blockhash}async function No(i,e){return i.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);i.onSignature(e,r=>{if(clearTimeout(o),!r.err){t("");return}n(r.err.toString())},"confirmed")})}function _o(i,e){i.length<1&&$t.logWithError(`no instructions provided: ${i.toString()}`),e.length<1&&$t.logWithError(`no signers provided:, ${e.toString()}`);let t=new Oo;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...i);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<su}catch{return!1}}async function au(i,e,t,n=!0){let o=new ru("RaydiumSimuLateTransaction11111111111111111"),r=[],s=new Oo;s.feePayer=o;for(let u of e)_o([...s.instructions,u],[o])||(r.push(s),s=new Oo,s.feePayer=o),s.add(u);s.instructions.length>0&&r.push(s);let a=[];try{if(a=await Fm(i,r,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&$t.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if($t.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));$t.debug("filteredLog:",c),l.length||$t.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function uu(i,e){let t=i.match(/{["\w:,]+}/g);return!t||t.length!==1?$t.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Jt(i,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(i);return!n||n.length!==2?$t.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ue(i,e){let[t,n]=ru.findProgramAddressSync(i,e);return{publicKey:t,nonce:n}}async function Fm(i,e,t){let n=[];if(t){let o=await i.getLatestBlockhash(),r=[];for(let u of e){u.recentBlockhash=o.blockhash,u.lastValidBlockHeight=o.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");r.push(p)}let s=r.map(u=>{let l=i._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await i._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async o=>await(await i.simulateTransaction(o)).value))}catch(o){o instanceof Error&&$t.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:o.message})}return n}function Pi({instructions:i,payer:e,signers:t}){return _o(i,[e,...t])}function ki({instructions:i,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=ou.generate().publicKey.toString()}){let r=new Vm({payerKey:e,recentBlockhash:n,instructions:i}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new jr(r).serialize()).toString("base64").length<su}catch{return!1}}var Lo={time:0,data:void 0};async function _g(i){if(!Lo.data||(Date.now()-Lo.time)/1e3>30){let e=await i.getEpochInfo();return Lo={time:Date.now(),data:e},e}else return Lo.data}var cu=i=>Buffer.isBuffer(i)?i:i instanceof Uint8Array?Buffer.from(i.buffer,i.byteOffset,i.byteLength):Buffer.from(i),Dm=i=>{let e=i.serialize({requireAllSignatures:!1,verifySignatures:!1});i instanceof jr&&(e=cu(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Ln(i){let e=[];return i.forEach(t=>{t instanceof Oo&&(t.recentBlockhash||(t.recentBlockhash=Em.toBase58()),t.feePayer||(t.feePayer=ou.generate().publicKey)),e.push(Dm(t))}),console.log("simulate tx string:",e),e}function vg(i){let e=i.serialize({requireAllSignatures:!1,verifySignatures:!1});return i instanceof jr&&(e=cu(e)),e.toString("base64")}function ie(i,e,t){return ue([i.toBuffer(),(t!=null?t:qm).toBuffer(),e.toBuffer()],new Wm("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ce}from"@solana/web3.js";var Hr=new ce("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),lu=new ce("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Zr=new ce("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),$n=new ce("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Um=new ce("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),$r=new ce("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),vo=new ce("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),hi=new ce("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Gm=new ce("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),mu=new ce("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),bn=new ce("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Jn=new ce("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Ti=new ce("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),Xm=new ce("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),du=new ce("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),zm=new ce("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Qm=new ce("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ym=new ce("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),jm=new ce("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Ii=new ce("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Jr=new ce("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Hm=new ce("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Zm=new ce("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),$m=new ce("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Jm=new ce("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Bi=new ce("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ed=new ce("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),xi=new ce("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),td=new ce("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),Si={IDO_PROGRAM_ID_V1:zm,IDO_PROGRAM_ID_V2:Qm,IDO_PROGRAM_ID_V3:Ym,IDO_PROGRAM_ID_V4:jm},Ug={AMM_V4:hi,AMM_STABLE:Gm,CLMM_PROGRAM_ID:bn,CLMM_LOCK_PROGRAM_ID:Jn,CLMM_LOCK_AUTH_ID:Ti,FARM_PROGRAM_ID_V3:Hr,FARM_PROGRAM_ID_V5:Zr,FARM_PROGRAM_ID_V6:$n,OPEN_BOOK_PROGRAM:$r,SERUM_PROGRAM_ID_V3:vo,UTIL1216:Um,Router:Xm,CREATE_CPMM_POOL_PROGRAM:Ii,CREATE_CPMM_POOL_AUTH:Jr,CREATE_CPMM_POOL_FEE_ACC:Hm,LOCK_CPMM_PROGRAM:Bi,LOCK_CPMM_AUTH:xi},Gg={SERUM_MARKET:ce.default,OPENBOOK_MARKET:new ce("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ce.default,FarmV3:new ce("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ce("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ce("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ce("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ce("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ce("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),CLMM_LOCK_PROGRAM_ID:new ce("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),CLMM_LOCK_AUTH_ID:new ce("8qmHNvu2Kr2C7U8mJL4Vz1vTDxMhVuXKREwU7TNoaVEo"),Router:new ce("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Zm,CREATE_CPMM_POOL_AUTH:$m,CREATE_CPMM_POOL_FEE_ACC:Jm,FEE_DESTINATION_ID:new ce("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:ed,LCOK_CPMM_AUTH:td};import Ye from"bn.js";var Yt=1e4;function Qg(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let o=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new Ye(o.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===Yt){let a=new Ye(o.maximumFee.toString());return{amount:i.add(a),fee:a,expirationTime:s}}else{let a=Ft(i.mul(new Ye(Yt)),new Ye(Yt-o.transferFeeBasisPoints)),c=new Ye(o.maximumFee.toString()),u=a.sub(i).gt(c)?i.add(c):a,l=Ft(u.mul(new Ye(o.transferFeeBasisPoints)),new Ye(Yt)),m=l.gt(r)?r:l;return{amount:u,fee:m,expirationTime:s}}else{let a=Ft(i.mul(new Ye(o.transferFeeBasisPoints)),new Ye(Yt)),c=a.gt(r)?r:a;return{amount:i,fee:c,expirationTime:s}}}function ge(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let o=W(O({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),r=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,s=new Ye(r.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===Yt){let c=new Ye(r.maximumFee.toString());return{amount:i.add(c),fee:c,expirationTime:a}}else{let c=Ft(i.mul(new Ye(Yt)),new Ye(Yt-r.transferFeeBasisPoints)),u=new Ye(r.maximumFee.toString()),l=c.sub(i).gt(u)?i.add(u):c,m=Ft(l.mul(new Ye(r.transferFeeBasisPoints)),new Ye(Yt)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Ft(i.mul(new Ye(r.transferFeeBasisPoints)),new Ye(Yt)),u=c.gt(s)?s:c;return{amount:i,fee:u,expirationTime:a}}}function Dt(i,e){return i===void 0?e:e===void 0?i:Math.min(i,e)}function Ft(i,e){let{div:t,mod:n}=i.divmod(e);return n.gt(new Ye(0))?t.add(new Ye(1)):t}import{PublicKey as pu,AddressLookupTableAccount as Vo}from"@solana/web3.js";async function es({connection:i,address:e}){let t=await _t(i,[...new Set(e.map(o=>o.toString()))].map(o=>new pu(o))),n={};for(let o=0;o<e.length;o++){let r=t[o],s=e[o];if(!r)continue;let a=new Vo({key:s,state:Vo.deserialize(r.data)});n[s.toString()]=a,Eo[s.toString()]=a}return n}var Eo={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new Vo({key:new pu("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:Vo.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};import{PublicKey as Ki,sendAndConfirmTransaction as ts,Transaction as Ci,TransactionMessage as Ri,VersionedTransaction as Li}from"@solana/web3.js";import nd from"axios";var Fo=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.api=e.api}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 nd.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}=Mo(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:r=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...s.filter(a=>a!==Ki.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(O({},t||{})):this.build(t)}build(e){var n;let t=new Ci;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var u;let{recentBlockHash:r,skipPreflight:s=!0,sendAndConfirm:a}=o||{},c=r!=null?r:await Zn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),Ln([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await ts(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),s=[o,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:y,skipPreflight:f=!0}=l||{},b=y!=null?y:await Zn(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let A=[],P=0;for(let h of s){if(++P,P<=p)continue;let B=await ts(this.connection,h,this.signers.find(T=>T.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});A.push(B)}return{txIds:A,signedTxs:s}}return{txIds:await await Promise.all(s.map(async A=>(A.recentBlockhash=b,await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:f})))),signedTxs:s}}if(this.signAllTransactions){let A=s.map((h,B)=>(h.recentBlockhash=b,a[B].length&&h.sign(...a[B]),h));Ln(A);let P=await this.signAllTransactions(A);if(m){let h=0,B=[],T=async()=>{if(!P[h])return;let S=await this.connection.sendRawTransaction(P[h].serialize(),{skipPreflight:f});B.push({txId:S,status:"sent",signedTx:P[h]}),d==null||d([...B]),h++,this.connection.onSignature(S,I=>{let C=B.findIndex(x=>x.txId===S);C>-1&&(B[C].status=I.err?"error":"success"),d==null||d([...B]),I.err||T()},"processed"),this.connection.getSignatureStatus(S)};return await T(),{txIds:B.map(S=>S.txId),signedTxs:P}}else{let h=[];for(let B=0;B<P.length;B+=1){let T=await this.connection.sendRawTransaction(P[B].serialize(),{skipPreflight:f});h.push(T)}return{txIds:h,signedTxs:P}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:r}=y,s=De(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=O(O({},this.cluster==="devnet"?{}:Eo),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Ki(b));let l=await es({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?Ki.default.toBase58():r!=null?r:await Zn(this.connection,this.blockhashCommitment),d=new Ri({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Li(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var P;let{skipPreflight:g=!0,sendAndConfirm:A}=b||{};if(Ln([p]),(P=this.owner)!=null&&P.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await No(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),s=[o,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),Ln(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let A=await this.connection.sendTransaction(g,{skipPreflight:y});await No(this.connection,A),b.push(A)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,A=[],P=async()=>{if(!b[g])return;let h=await this.connection.sendTransaction(b[g],{skipPreflight:y});A.push({txId:h,status:"sent",signedTx:b[g]}),d==null||d([...A]),g++,this.connection.onSignature(h,B=>{let T=A.findIndex(S=>S.txId===h);T>-1&&(A[T].status=B.err?"error":"success"),d==null||d([...A]),B.err||P()},"processed"),this.connection.getSignatureStatus(h)};return P(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let P=await this.connection.sendTransaction(b[A],{skipPreflight:y});g.push(P)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,o=De(m,["splitIns","computeBudgetConfig"]),r=n?Mo(n):{instructions:[],instructionTypes:[]},s=this.signers.reduce((p,y)=>W(O({},p),{[y.publicKey.toBase58()]:y}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let y=[...u,p],f=n?[...r.instructions,...y]:y,g=[...new Set(y.map(A=>A.keys.filter(P=>P.isSigner).map(P=>P.pubkey.toString())).flat()).values()].map(A=>new Ki(A));if(p!==t[l]&&u.length<12&&(Pi({instructions:f,payer:this.feePayer,signers:g})||Pi({instructions:y,payer:this.feePayer,signers:g})))u.push(p);else{if(u.length===0)throw Error("item ins too big");l+=p===t[l]?1:0,Pi({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new Ci().add(...r.instructions,...u)):a.push(new Ci().add(...u)),c.push(Array.from(new Set(u.map(A=>A.keys.filter(P=>P.isSigner).map(P=>P.pubkey.toString())).flat())).map(A=>s[A]).filter(A=>A!==void 0)),u=[p]}}),u.length>0){let y=[...new Set(u.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>s[f]).filter(f=>f!==void 0);Pi({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:y.map(f=>f.publicKey)})?a.push(new Ci().add(...r.instructions,...u)):a.push(new Ci().add(...u)),c.push(y)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(y=>y.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var h;let{sequentially:y,onTxUpdate:f,skipTxCount:b=0,recentBlockHash:g,skipPreflight:A=!0}=p||{},P=g!=null?g:await Zn(this.connection,this.blockhashCommitment);if(a.forEach(async(B,T)=>{B.recentBlockhash=P,c[T].length&&B.sign(...c[T])}),Ln(a),(h=this.owner)!=null&&h.isKeyPair){if(y){let B=0,T=[];for(let S of a){if(++B,B<=b){T.push("tx skipped");continue}let I=await ts(this.connection,S,this.signers.find(C=>C.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});T.push(I)}return{txIds:T,signedTxs:a}}return{txIds:await Promise.all(a.map(async B=>await this.connection.sendRawTransaction(B.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let B=await this.signAllTransactions(a.slice(b,a.length)),T=[...a.slice(0,b),...B];if(y){let S=0,I=[],C=async()=>{if(!T[S])return;S<b&&(I.push({txId:"",status:"success",signedTx:T[S]}),f==null||f([...I]),S++,C());let x=await this.connection.sendRawTransaction(T[S].serialize(),{skipPreflight:A});I.push({txId:x,status:"sent",signedTx:T[S]}),f==null||f([...I]),S++,this.connection.onSignature(x,K=>{let V=I.findIndex(R=>R.txId===x);V>-1&&(I[V].status=K.err?"error":"success"),f==null||f([...I]),K.err||C()},"processed"),this.connection.getSignatureStatus(x)};return await C(),{txIds:I.map(x=>x.txId),signedTxs:T}}else{let S=[];for(let I=0;I<T.length;I+=1){let C=await this.connection.sendRawTransaction(T[I].serialize(),{skipPreflight:A});S.push(C)}return{txIds:S,signedTxs:T}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var P;let A=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:r=[]}=A,s=De(A,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=O(O({},this.cluster==="devnet"?{}:Eo),o),c=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let h of c)a[h]===void 0&&u.push(new Ki(h));let l=await es({connection:this.connection,address:u});for(let[h,B]of Object.entries(l))a[h]=B;let m=t?Mo(t):{instructions:[],instructionTypes:[]},d=await Zn(this.connection,this.blockhashCommitment),p=this.signers.reduce((h,B)=>W(O({},h),{[B.publicKey.toBase58()]:B}),{}),y=[],f=[],b=[],g=0;if(this.allInstructions.forEach(h=>{let B=[...b,h],T=t?[...m.instructions,...B]:B;if(h!==n[g]&&b.length<12&&(ki({instructions:T,payer:this.feePayer,lookupTableAddressAccount:a})||ki({instructions:B,payer:this.feePayer,lookupTableAddressAccount:a})))b.push(h);else{if(b.length===0)throw Error("item ins too big");g+=h===n[g]?1:0;let S={};for(let I of[...new Set(c)])a[I]!==void 0&&(S[I]=a[I]);if(t&&ki({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let I=new Ri({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));y.push(new Li(I))}else{let I=new Ri({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));y.push(new Li(I))}f.push(Array.from(new Set(b.map(I=>I.keys.filter(C=>C.isSigner).map(C=>C.pubkey.toString())).flat())).map(I=>p[I]).filter(I=>I!==void 0)),b=[h]}}),b.length>0){let B=[...new Set(b.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat()).values()].map(T=>p[T]).filter(T=>T!==void 0);if(t&&ki({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let T=new Ri({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));y.push(new Li(T))}else{let T=new Ri({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));y.push(new Li(T))}f.push(B)}return(P=this.owner)!=null&&P.signer&&f.forEach(h=>{h.some(B=>B.publicKey.equals(this.owner.publicKey))||h.push(this.owner.signer)}),{builder:this,transactions:y,buildProps:e,signers:f,instructionTypes:this.instructionTypes,execute:async h=>{var x;let{sequentially:B,onTxUpdate:T,skipTxCount:S=0,recentBlockHash:I,skipPreflight:C=!0}=h||{};if(y.map(async(K,V)=>{f[V].length&&K.sign(f[V]),I&&(K.message.recentBlockhash=I)}),Ln(y),(x=this.owner)!=null&&x.isKeyPair){if(B){let K=0,V=[];for(let R of y){if(++K,K<=S){console.log("skip tx: ",K),V.push("tx skipped");continue}let X=await this.connection.sendTransaction(R,{skipPreflight:C});await No(this.connection,X),V.push(X)}return{txIds:V,signedTxs:y}}return{txIds:await Promise.all(y.map(async K=>await this.connection.sendTransaction(K,{skipPreflight:C}))),signedTxs:y}}if(this.signAllTransactions){let K=await this.signAllTransactions(y.slice(S,y.length)),V=[...y.slice(0,S),...K];if(B){let R=0,X=[],G=async()=>{if(!V[R])return;if(R<S){X.push({txId:"",status:"success",signedTx:V[R]}),T==null||T([...X]),R++,G();return}let D=await this.connection.sendTransaction(V[R],{skipPreflight:C});X.push({txId:D,status:"sent",signedTx:V[R]}),T==null||T([...X]),R++,this.connection.onSignature(D,Te=>{let dt=X.findIndex(Se=>Se.txId===D);dt>-1&&(X[dt].status=Te.err?"error":"success"),T==null||T([...X]),Te.err||G()},"processed"),this.connection.getSignatureStatus(D)};return G(),{txIds:[],signedTxs:V}}else{let R=[];for(let X=0;X<V.length;X+=1){let G=await this.connection.sendTransaction(V[X],{skipPreflight:C});R.push(G)}return{txIds:R,signedTxs:V}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};var fu=(t=>(t.ALL="all",t.Strict="strict",t))(fu||{}),yu=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(yu||{});var Ge={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",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",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://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",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_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",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",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position"},CA=O({},Ge);var bu="ray_tab_hash",ns="ray_req_hash",id=()=>{if(typeof window===void 0)return"";let i=sessionStorage.getItem(bu);return i||(i=`ray-${Date.now()}`,sessionStorage.setItem(bu,i)),i},Do=async n=>{var o=n,{logCount:i=1e3,removeLastLog:e}=o,t=De(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let r=JSON.parse(localStorage.getItem(ns)||"[]").slice(0,i-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(W(O({},t),{time:Date.now(),session:id()}));try{localStorage.setItem(ns,JSON.stringify(r))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(r[0].data=a+(a.length>100?"...":"");!s;){r.pop();let c=JSON.stringify(t.data).substring(0,100);r[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(ns,JSON.stringify(r)),s=!0}catch{s=!1}}return new Promise(c=>c())}return Do(W(O({},t),{logCount:i,removeLastLog:!0}))}};var ei=me("Raydium_Api"),is=new Map;async function HA(i,e,t=1e3){let n;for(;n==null;)try{ei.debug(`Request ${i} through endlessRetry`),n=await e()}catch(o){ei.error(`Request ${i} failed, retry after ${t} ms`,o),await Ya(t)}return n}var Wo=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=o||1e3,this.api=gu.create({baseURL:this.urlConfigs.BASE_HOST||Ge.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return ei.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(ei.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&Do({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),ei.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&Do({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),ei.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ge.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Ge.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ge.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await gu.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,r)=>o+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ge.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ge.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ge.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Ge.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ge.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:r=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ge.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${r}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ge.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>is.has(s)?(n.push(is.get(s)),!1):!0),r=[];return o.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ge.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),r.forEach(a=>{is.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:r="default",order:s="desc",page:a=1}=e,[c,u]=[t&&Bt(t).toBase58(),n&&n!=="undefined"?Bt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ge.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${r}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ge.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ge.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ge.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ge.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ge.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ge.JITO})).data}};import{merge as oy}from"lodash";var qo="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Au="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Yo,SystemProgram as pp}from"@solana/web3.js";import{AccountLayout as ii,createAssociatedTokenAccountInstruction as gs,TOKEN_PROGRAM_ID as Pn,TOKEN_2022_PROGRAM_ID as fp}from"@solana/spl-token";var os=(...i)=>i.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Me=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=me(t)}createTxBuilder(e){return this.scope.checkOwner(),new Fo({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(os(e))}logInfo(...e){this.logger.info(os(e))}logAndCreateError(...e){let t=os(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as ap,SystemProgram as up}from"@solana/web3.js";import cp from"bn.js";import{createCloseAccountInstruction as lp,createInitializeAccountInstruction as mp,createTransferInstruction as dp,TOKEN_PROGRAM_ID as ni}from"@solana/spl-token";import{Keypair as ip,PublicKey as Nu}from"@solana/web3.js";import op from"bn.js";import{TOKEN_PROGRAM_ID as rp}from"@solana/spl-token";function od(i){return i instanceof Uint8Array||i!=null&&typeof i=="object"&&i.constructor.name==="Uint8Array"}function rs(i,...e){if(!od(i))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(i.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${i.length}`)}function ss(i,e=!0){if(i.destroyed)throw new Error("Hash instance has been destroyed");if(e&&i.finished)throw new Error("Hash#digest() has already been called")}function wu(i,e){rs(i);let t=e.outputLen;if(i.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Go=i=>new DataView(i.buffer,i.byteOffset,i.byteLength),Wt=(i,e)=>i<<32-e|i>>>e;var lw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function rd(i){if(typeof i!="string")throw new Error(`utf8ToBytes expected string, got ${typeof i}`);return new Uint8Array(new TextEncoder().encode(i))}function as(i){return typeof i=="string"&&(i=rd(i)),rs(i),i}var Uo=class{clone(){return this._cloneInto()}},mw={}.toString;function Pu(i){let e=n=>i().update(as(n)).digest(),t=i();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>i(),e}function sd(i,e,t,n){if(typeof i.setBigUint64=="function")return i.setBigUint64(e,t,n);let o=BigInt(32),r=BigInt(4294967295),s=Number(t>>o&r),a=Number(t&r),c=n?4:0,u=n?0:4;i.setUint32(e+c,s,n),i.setUint32(e+u,a,n)}var ku=(i,e,t)=>i&e^~i&t,hu=(i,e,t)=>i&e^i&t^e&t,Xo=class extends Uo{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=Go(this.buffer)}update(e){ss(this);let{view:t,buffer:n,blockLen:o}=this;e=as(e);let r=e.length;for(let s=0;s<r;){let a=Math.min(o-this.pos,r-s);if(a===o){let c=Go(e);for(;o<=r-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ss(this),wu(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:r}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;sd(n,o-8,BigInt(this.length*8),r),this.process(n,0);let a=Go(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],r)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:r,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=r,e.destroyed=s,o%t&&e.buffer.set(n),e}};var ad=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]),gn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),An=new Uint32Array(64),us=class extends Xo{constructor(){super(64,32,8,!1),this.A=gn[0]|0,this.B=gn[1]|0,this.C=gn[2]|0,this.D=gn[3]|0,this.E=gn[4]|0,this.F=gn[5]|0,this.G=gn[6]|0,this.H=gn[7]|0}get(){let{A:e,B:t,C:n,D:o,E:r,F:s,G:a,H:c}=this;return[e,t,n,o,r,s,a,c]}set(e,t,n,o,r,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=r|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)An[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=An[m-15],p=An[m-2],y=Wt(d,7)^Wt(d,18)^d>>>3,f=Wt(p,17)^Wt(p,19)^p>>>10;An[m]=f+An[m-7]+y+An[m-16]|0}let{A:n,B:o,C:r,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=Wt(a,6)^Wt(a,11)^Wt(a,25),p=l+d+ku(a,c,u)+ad[m]+An[m]|0,f=(Wt(n,2)^Wt(n,13)^Wt(n,22))+hu(n,o,r)|0;l=u,u=c,c=a,a=s+p|0,s=r,r=o,o=n,n=p+f|0}n=n+this.A|0,o=o+this.B|0,r=r+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,r,s,a,c,u,l)}roundClean(){An.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Tu=Pu(()=>new us);import{PublicKey as Jd}from"@solana/web3.js";import Ru,{isBN as Lu}from"bn.js";import{bits as ud,BitStructure as cd,blob as ld,Blob as md,cstr as dd,f32 as pd,f32be as fd,f64 as yd,f64be as bd,greedy as gd,Layout as Ad,ns64 as wd,ns64be as Pd,nu64 as kd,nu64be as hd,offset as Td,s16 as Id,s16be as Bd,s24 as xd,s24be as Sd,s32 as Kd,s32be as Cd,s40 as Rd,s40be as Ld,s48 as Od,s48be as Md,s8 as Nd,seq as _d,struct as Pw,Structure as vd,u16 as Vd,u16be as Ed,u24 as Fd,u24be as Dd,u32 as Wd,u32be as qd,u40 as Ud,u40be as Gd,u48 as Xd,u48be as zd,u8 as Qd,UInt as Yd,union as jd,Union as Hd,unionLayoutDiscriminator as Zd,utf8 as $d}from"@solana/buffer-layout";var Oi=Ad,Iu=vd,Bu=Hd,kw=cd,cs=Yd,xu=md,hw=gd,zo=Qd,en=Vd,Tw=Fd,Mi=Wd,Iw=Ud,Bw=Xd,Su=kd,xw=Ed,Sw=Dd,Kw=qd,Cw=Gd,Rw=zd,Lw=hd,Ow=Nd,Mw=Id,Nw=xd,Ce=Kd,_w=Rd,vw=Od,Vw=wd,Ew=Bd,Fw=Sd,Dw=Cd,Ww=Ld,qw=Md,Uw=Pd,Gw=pd,Xw=fd,zw=yd,Qw=bd;var Ku=_d,Cu=jd,Yw=Zd,Ae=ld,jw=dd,Hw=$d,ls=ud,ms=Td;var On=class extends Oi{constructor(t,n,o){super(t,o);this.blob=Ae(t),this.signed=n}decode(t,n=0){let o=new Ru(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 Ru(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Qo=class extends Oi{constructor(t){super(8,t);this._lower=ls(Mi(),!1),this._upper=ls(Mi(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),r=this._upper.decode(t,n+this._lower.span);return O(O({},o),r)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function q(i){return new cs(1,i)}function rt(i){return new cs(4,i)}function w(i){return new On(8,!1,i)}function ee(i){return new On(16,!1,i)}function Ou(i){return new On(1,!0,i)}function ti(i){return new On(8,!0,i)}function Mu(i){return new On(16,!0,i)}var tn=class extends Oi{constructor(t,n,o,r){super(t.span,r);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function L(i){return new tn(Ae(32),e=>new Jd(e),e=>e.toBuffer(),i)}var ds=class extends Oi{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=zo()}encode(t,n,o=0){return t==null?this.discriminator.encode(0,n,o):(this.discriminator.encode(1,n,o),this.layout.encode(t,n,o+1)+1)}decode(t,n=0){let o=this.discriminator.decode(t,n);if(o===0)return null;if(o===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let o=this.discriminator.decode(t,n);if(o===0)return 1;if(o===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function tP(i,e){return new ds(i,e)}function Oe(i){return new tn(zo(),ep,tp,i)}function ep(i){if(i===0)return!1;if(i===1)return!0;throw new Error("Invalid bool: "+i)}function tp(i){return i?1:0}function nP(i,e){let t=Mi("length"),n=N([t,Y(i,ms(t,-t.span),"values")]);return new tn(n,({values:o})=>o,o=>({values:o}),e)}function iP(i,e,t){let n=N([w("tag"),e.replicate("data")]);function o({tag:r,data:s}){if(!r.eq(i))throw new Error("Invalid tag, expected: "+i.toString("hex")+", got: "+r.toString("hex"));return s}return new tn(n,o,r=>({tag:i,data:r}),t)}function np(i){let e=Mi("length"),t=N([e,Ae(ms(e,-e.span),"data")]);return new tn(t,({data:n})=>n,n=>({data:n}),i)}function oP(i){return new tn(np(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),i)}function rP(i,e){let t=Cu(zo(),e);return i.forEach((n,o)=>t.addVariant(o,n,n.property)),t}function sP(i,e,t){let n=N([Y(i,e,"values")]);return new tn(n,({values:o})=>o,o=>({values:o}),t)}var ps=class extends Iu{decode(e,t){return super.decode(e,t)}};function N(i,e,t){return new ps(i,e,t)}var fs=class extends Bu{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(o=>o.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function aP(i,e,t){return new fs(i,e,t)}var ys=class extends xu{decode(e,t){let n=super.decode(e,t);if(!n.every(o=>o===0))throw new Error("nonzero padding bytes");return n}};function uP(i){return new ys(i)}function Y(i,e,t){let n,o=typeof e=="number"?e:Lu(e)?e.toNumber():new Proxy(e,{get(r,s){if(!n){let a=Reflect.get(r,"count");n=Lu(a)?a.toNumber():a,Reflect.set(r,"count",n)}return Reflect.get(r,s)},set(r,s,a){return s==="count"&&(n=a),Reflect.set(r,s,a)}});return Ku(i,o,t)}var wn=N([L("mint"),L("owner"),w("amount"),rt("delegateOption"),L("delegate"),q("state"),rt("isNativeOption"),w("isNative"),w("delegatedAmount"),rt("closeAuthorityOption"),L("closeAuthority")]);var hP=me("Raydium_Util");function _u({owner:i,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:r,account:s}of t.value){let a=wn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:r,mint:c,amount:u,isAssociated:ie(i,c,s.owner).publicKey.equals(r),isNative:!1,programId:s.owner}),o.push({pubkey:r,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Nu.default,amount:new op(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function Ve({fromPublicKey:i,programId:e=rp,assignSeed:t}){let n=t?btoa(t).slice(0,32):ip.generate().publicKey.toBase58().slice(0,32);return{publicKey:sp(i,n,e),seed:n}}function sp(i,e,t){let n=Buffer.concat([i.toBuffer(),Buffer.from(e),t.toBuffer()]),o=Tu(n);return new Nu(o)}function bs(i){let{mint:e,tokenAccount:t,owner:n,programId:o=ni}=i;return mp(t,e,n,o)}function nn(i){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:r=ni}=i;return lp(e,t,o,n,r)}async function on(i){let{connection:e,amount:t,commitment:n,payer:o,owner:r,skipCloseAccount:s}=i,a=await e.getMinimumBalanceForRentExemption(wn.span,n),c=Z(t).add(new cp(a)),u=Ve({fromPublicKey:o,programId:ni});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[up.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:wn.span,programId:ni}),bs({mint:new ap(Ze.address),tokenAccount:u.publicKey,owner:r,programId:ni})],instructionTypes:[F.CreateAccount,F.InitAccount],endInstructionTypes:s?[]:[F.CloseAccount],endInstructions:s?[]:[nn({tokenAccount:u.publicKey,payer:o,owner:r})]}}function vu({source:i,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:r=ni}){return dp(i,e,t,BigInt(String(n)),o,r)}var Ni=class extends Me{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o,notSubscribeAccountChange:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._notSubscribeAccountChange=r!=null?r:!1,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 ie(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<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=O(O({},{}),t),[r,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Pn},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:fp},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=_u({owner:this.scope.ownerPubKey,solAccountResp:r,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=Pn,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let r=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of r){let{publicKey:c}=a;if(c&&(!o||o&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var f,b,g,A;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:r,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new Yo(t.tokenProgram||Pn),d=this.getAssociatedTokenAccount(n,new Yo(m)),p=(a?[]:this.tokenAccountRawInfos).filter(P=>P.accountInfo.mint.equals(n)&&(!r||P.pubkey.equals(d))).sort((P,h)=>P.accountInfo.amount.lt(h.accountInfo.amount)?1:-1);if(o===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let y={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let P=gs(s,d,s,n,m);if(u){let h=await this.scope.connection.getAccountInfo(d);if(h===null)(f=y.instructions)==null||f.push(P),y.instructionTypes.push(F.CreateATA);else if(!(h.owner.equals(m)&&ii.decode(h.data).mint.equals(n)&&ii.decode(h.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else y.instructions.push(P),y.instructionTypes.push(F.CreateATA);if(n.equals(H)&&o.amount){let h=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(b=o.amount)!=null?b:0,skipCloseAccount:c});y.instructions.push(...h.instructions||[]),y.endInstructions.push(...h.endInstructions||[]),y.instructionTypes.push(...h.instructionTypes||[]),y.endInstructionTypes.push(...h.endInstructionTypes||[]),o.amount&&(y.instructions.push(vu({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:Pn})),y.instructionTypes.push(F.TransferAmount))}return c||(y.endInstructions.push(nn({owner:s,payer:o.payer||s,tokenAccount:d,programId:m})),y.endInstructionTypes.push(F.CloseAccount)),{account:d,instructionParams:y}}else{let P=Ve({fromPublicKey:s,programId:m,assignSeed:l}),h=await this.scope.connection.getMinimumBalanceForRentExemption(ii.span),B=pp.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:P.seed,newAccountPubkey:P.publicKey,lamports:h+Number((A=(g=o.amount)==null?void 0:g.toString())!=null?A:0),space:ii.span,programId:m});return y.instructions.push(B,bs({mint:n,tokenAccount:P.publicKey,owner:this.scope.ownerPubKey,programId:m})),y.instructionTypes.push(F.CreateAccount),y.instructionTypes.push(F.InitAccount),c||(y.endInstructions.push(nn({owner:s,payer:o.payer||s,tokenAccount:P.publicKey,programId:m})),y.endInstructionTypes.push(F.CloseAccount)),{account:P.publicKey,instructionParams:y}}}async checkOrCreateAta({mint:t,programId:n=Pn,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let r=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!r){let u=this.getAssociatedTokenAccount(t,n),l=await gs(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[F.CreateATA],r=u}return o&&H.toBase58()===t.toBase58()&&(a.endInstructions=[nn({owner:s,payer:s,tokenAccount:r,programId:n})],a.endInstructionTypes=[F.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:r,programId:s=Pn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(r,s);if(new Yo(H).equals(r)){let p=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return O({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=gs(this.scope.ownerPubKey,d,this.scope.ownerPubKey,r,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(Pn)&&ii.decode(f.data).mint.equals(r)&&ii.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[F.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=Pn,amount:r,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Yo(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=l,p=De(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=m,p=De(m,["tokenAccount"]);c=d,u.addInstruction(p)}return O({tokenAccount:c},u.AllTxData)}};import{PublicKey as Pe,SystemProgram as _p}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as vp}from"@solana/spl-token";import{PublicKey as Uu}from"@solana/web3.js";var As=N([q("instruction")]),ws=N([q("instruction")]),yp=N([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),ee("accRewardPerShare"),L("rewardVault"),L("rewardMint"),L("rewardSender"),w("rewardType"),Y(w(),15,"padding")]),bp=N([w("state"),w("nonce"),L("lpVault"),L("rewardVault"),L(),L(),w(),w(),w("totalReward"),ee("perShareReward"),w("lastSlot"),w("perSlotReward")]),gp=N([w("state"),w("nonce"),L("lpVault"),L("rewardVaultA"),w("totalRewardA"),ee("perShareRewardA"),w("perSlotRewardA"),q("option"),L("rewardVaultB"),Ae(7),w("totalRewardB"),ee("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),L()]),Ap=N([w(),w("state"),w("nonce"),w("validRewardTokenNum"),ee("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),L("lpMint"),L("lpVault"),Y(yp,5,"rewardInfos"),L("creator"),L(),Y(w(),32,"padding")]),Vu=new Proxy(bp,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return W(O({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(i,e,t)}}),Eu=new Proxy(gp,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return W(O({},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(i,e,t)}}),_i=new Proxy(Ap,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return W(O({},o),{version:6,rewardInfos:o.rewardInfos.map(r=>{var s;return W(O({},r),{rewardType:((s=Object.entries(kn).find(a=>String(a[1])===r.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(i,e,t)}}),wp=N([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Ps=N([q("instruction"),w("nonce"),Y(wp,5,"rewardTimeInfo")]),ks=N([q("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),hs=N([q("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),ek=N([w("state"),L("id"),L("owner"),w("deposited"),Y(w(),1,"rewardDebts")]),vi=N([w("state"),L("id"),L("owner"),w("deposited"),Y(ee(),1,"rewardDebts"),w(""),w("voteLockedBalance"),Y(w(),15)]),tk=N([w("state"),L("id"),L("owner"),w("deposited"),Y(w(),2,"rewardDebts")]),Fu=N([w("state"),L("id"),L("owner"),w("deposited"),Y(ee(),2,"rewardDebts"),Y(w(),17)]),Du=N([w(),w("state"),L("id"),L("owner"),w("deposited"),Y(ee(),5,"rewardDebts"),Y(w(),16)]),pt=N([q("instruction"),w("amount")]),Pp=N([L("mint"),L("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Ou("digitShift"),Y(q(),7,"reserved1"),Y(w(),7,"reserved2")]),Wu=N([Ae(8),L("governanceProgramId"),L("realm"),L("realmGoverningTokenMint"),L("realmAuthority"),Y(q(),32,"reserved1"),Y(Pp,4,"votingMints"),ti("timeOffset"),q("bump"),Y(q(),7,"reserved2"),Y(w(),11,"reserved3")]),kp=N([ti("startTime"),ti("endTime"),q("kind"),Y(q(),15,"reserved")]),hp=N([Y(kp,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),Oe("isUsed"),Oe("allowClawback"),q("votingMintConfigIdx"),Y(q(),29,"reserved")]),qu=N([Ae(8),L("voterAuthority"),L("registrar"),Y(hp,32,"deposits"),q("voterBump"),q("voterWweightRecordBump"),Y(q(),94,"reserved")]);var ck=me("Raydium_farm_config"),Gu=new Uu("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Xu=new Uu("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),zu={3:Vu,5:Eu,6:_i},Qu={3:vi,5:Fu,6:Du},Ts=i=>[3,4,5,6].indexOf(i)!==-1,Is=i=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=i,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,r={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(s=r[e])==null?void 0:s.call(r)},kn={"Standard SPL":0,"Option tokens":1},Rt={[Hr.toString()]:3,[lu.toString()]:4,[Zr.toString()]:5,[$n.toString()]:6};import{PublicKey as oe,SystemProgram as Mn,SYSVAR_CLOCK_PUBKEY as ri,SYSVAR_RENT_PUBKEY as Bp,TransactionInstruction as Je}from"@solana/web3.js";import jo from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as xp,createAssociatedTokenAccountInstruction as Sp,TOKEN_PROGRAM_ID as kt}from"@solana/spl-token";function Bs(i,e,t){return ue([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],i)}function xs(i,e){return ue([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],i)}function Ss(i,e){return ue([e.toBuffer()],i)}function Ks(i,e,t){return ue([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],i)}function Cs(i,e,t){return ue([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],i)}function Rs(i,e,t,n){return ue([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}import Pt from"bn.js";var Vi=me("Raydium.farm.util");function Ei({programId:i,poolId:e,mint:t,type:n}){let{publicKey:o}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],i);return o}function ut({programId:i,poolId:e,owner:t,version:n}){let{publicKey:o}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],i);return o}var Yu=({programId:i,poolId:e})=>ue([e.toBuffer()],i);function ju(i){return{isSet:new Pt(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(kn[i.rewardType])}}function Ls(i){return Z(i.endTime).sub(Z(i.openTime)).mul(Z(i.perSecond))}function oi(i){let e=Qu[i];return e||Vi.logWithError("invalid version",i),e}function Tp(i){let e=zu[i];return e||Vi.logWithError("invalid version",i),e}function Ip(i,e,t,n){if(i.version===3||i.version===5){if(i.lastSlot.gte(new Pt(t)))return i;let o=new Pt(t).sub(i.lastSlot);i.lastSlot=new Pt(t);for(let r of i.rewardInfos){if(e.amount.eq(new Pt(0)))continue;let s=r.perSlotReward.mul(o);r.perShareReward=r.perShareReward.add(s.mul(new Pt(10).pow(new Pt(i.version===3?9:15))).div(e.amount)),r.totalReward=r.totalReward.add(s)}}else if(i.version===6)for(let o of i.rewardInfos){if(o.rewardState.eq(new Pt(0)))continue;let r=Pt.min(new Pt(n),o.rewardEndTime);if(o.rewardOpenTime.gte(r))continue;let a=r.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),c=o.totalReward.sub(o.totalRewardEmissioned);c.lt(a)?(a=c,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(c.div(o.rewardPerSecond))):o.rewardLastUpdateTime=r,!e.amount.eq(new Pt(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(i.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return i}async function xk({connection:i,farmPools:e,owner:t,config:n,chainTime:o}){let r=!1,s=!1,a=new Pt(10),c=[];for(let d of e){let p=Ke(d);p.version===6?s=!0:r=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:ut({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await Qe(i,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=O({},u[g]),y==="state"){let A=Tp(p);(!b||!b.data||b.data.length!==A.span)&&Vi.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=A.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==wn.span)&&Vi.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=wn.decode(b.data);else if(y==="ledger"){let A=oi(p);b&&b.data&&(b.data.length!==A.span&&Vi.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=A.decode(b.data))}}let m=s||r?await i.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Ip(u[d].state,u[d].lpVault,m,o));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new Pt(9)):a.pow(new Pt(15)),b=p.rewardInfos.map((g,A)=>{let P=y.rewardDebts[A];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(P)});u[d].wrapped=W(O({},u[d].wrapped),{pendingRewards:b})}return u}function Sk(i,e=Date.now()){if(i.version===6){let t=i.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>tu(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>nu(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=i.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Os(i,e,t,n){let o=await i.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let s=Wu.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await i.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=qu.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Kp=me("Raydium_farm_instruction"),Fi={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 Di(i){let{version:e,id:t,ledger:n,programId:o,owner:r}=i,s={3:9,5:10}[e];s||Kp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(As.span);As.encode({instruction:s},a);let c=[k({pubkey:t}),k({pubkey:n}),k({pubkey:r,isWritable:!1}),k({pubkey:Mn.programId,isWritable:!1}),k({pubkey:Bp,isWritable:!1})];return{instruction:new Je({programId:o,keys:c,data:a}),instructionType:F.FarmV3CreateLedger}}function Hu(i){var n;let e=Buffer.alloc(Ps.span);Ps.encode({instruction:0,nonce:new jo(i.nonce),rewardTimeInfo:i.rewardInfoConfig},e);let t=[...Fr,k({pubkey:i.farmId}),k({pubkey:i.farmAuthority,isWritable:!1}),k({pubkey:i.lpVault}),k({pubkey:i.lpMint,isWritable:!1}),k({pubkey:i.lockVault}),k({pubkey:i.lockMint,isWritable:!1}),k({pubkey:(n=i.lockUserAccount)!=null?n:$e}),k({pubkey:i.owner,isWritable:!1,isSigner:!0})];for(let o of i.rewardInfo)t.push(k({pubkey:o.rewardMint,isWritable:!1}),k({pubkey:o.rewardVault}),k({pubkey:o.userRewardToken}));return{instruction:new Je({programId:i.programId,keys:t,data:e}),instructionType:F.FarmV6Create}}function Zu(i){let e=Buffer.alloc(ws.span);ws.encode({instruction:5},e);let t=[k({pubkey:kt,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.authority,isWritable:!1}),k({pubkey:i.lpVault,isWritable:!1}),k({pubkey:i.rewardVault}),k({pubkey:i.userRewardToken}),k({pubkey:i.owner,isWritable:!1,isSigner:!0})];return{instruction:new Je({programId:i.programId,keys:t,data:e}),instructionType:F.FarmV6CreatorWithdraw}}function Cp(i,e,t,n,o,r,s,a,c,u,l,m,d){let p=N([q("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:kt,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Ko,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...Fi.voterStakeRegistryDeposit,...f]);return new Je({keys:y,programId:i,data:b})}function Rp(i,e,t,n){let o=N([]),r=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:Mn.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([...Fi.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Je({keys:r,programId:i,data:a})}function Lp(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y){let f=N([q("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:kt,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Ko,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let A=Buffer.from([...Fi.voterStakeRegistryWithdraw,...g]);return new Je({keys:b,programId:i,data:A})}function Op(i,e,t,n,o,r){let s=N([q("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:Mn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Je({keys:a,programId:i,data:c})}function Mp(i,e,t,n,o,r,s,a){let c=N([q("voterBump"),q("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Ko,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...Fi.voterStakeRegistryCreateVoter,...l]);return new Je({keys:u,programId:i,data:m})}function Np(i,e,t,n,o,r,s,a,c,u,l,m){let d=N([q("depositEntryIndex"),q("kind"),q("option"),w("startTs"),rt("periods"),Oe("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:kt,isSigner:!1,isWritable:!1},{pubkey:xp,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...Fi.voterStakeRegistryCreateDepositEntry,...y]);return new Je({keys:p,programId:i,data:f})}async function Uk({connection:i,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=Bs(n,o,r).publicKey,l=ut({programId:e,poolId:a,owner:s,version:3}),m=await i.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=vi.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new jo(0)))throw Error("user do not has new stake amount");let y=xs(e,a).publicKey,f=Ss(e,a).publicKey,{publicKey:b,nonce:g}=Ks(n,u,s),A=ie(b,y,c).publicKey,{publicKey:P,nonce:h}=Cs(n,u,s),B=Rs(t,o,r,s).publicKey,T=[],S=ie(s,y,c).publicKey;if(await i.getAccountInfo(S)===null&&T.push(Sp(s,S,s,y)),await i.getAccountInfo(b)===null){let V=Op(t,o,s,r,s,B);T.push(V,Mp(n,u,b,P,s,s,g,h))}let{index:x,isInit:K}=await Os(i,u,b,y);return K||T.push(Np(n,u,b,A,s,s,y,x,0,void 0,0,!1)),T.push(Cp(n,u,b,A,S,s,l,a,y,f,e,x,p),Rp(n,u,b,P)),T}async function Gk({connection:i,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=Bs(n,o,r).publicKey,l=ut({programId:e,poolId:a,owner:s,version:3}),m=await i.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=vi.decode(m.data);if(d.voteLockedBalance.eq(new jo(0)))throw Error("user has vote locked balance = 0");let p=xs(e,a).publicKey,y=Ss(e,a).publicKey,{publicKey:f}=Ks(n,u,s),b=ie(f,p,c).publicKey,{publicKey:g}=Cs(n,u,s),A=Rs(t,o,r,s).publicKey,P=[],{index:h,isInit:B}=await Os(i,u,f,p);if(!B)throw Error("deposit entry index check error");return P.push(Lp(n,u,f,s,A,g,b,ie(s,p,c).publicKey,l,a,p,y,e,h,d.voteLockedBalance)),P}function Ms({payer:i,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let r=Buffer.alloc(ks.span);ks.encode({instruction:3,rewardReopenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardPerSecond:Z(o.perSecond)},r);let s=[k({pubkey:kt,isWritable:!1}),k({pubkey:n.id}),k({pubkey:n.lpVault,isWritable:!1}),k({pubkey:e}),k({pubkey:t}),k({pubkey:i,isWritable:!1,isSigner:!0})];return new Je({programId:n.programId,keys:s,data:r})}function Ns({payer:i,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let r=Buffer.alloc(hs.span);hs.encode({instruction:4,isSet:new jo(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(kn[o.rewardType])},r);let s=[...Fr,k({pubkey:t.id}),k({pubkey:t.authority,isWritable:!1}),k({pubkey:o.mint,isWritable:!1}),k({pubkey:n}),k({pubkey:e}),k({pubkey:i,isWritable:!1,isSigner:!0})];return new Je({programId:t.programId,keys:s,data:r})}function Xk(i){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:r,owner:s,instruction:a,amount:c,deposit:u}=i,[l,m]=[new oe(e.programId),new oe(e.id)],d=ut({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(pt.span);pt.encode({instruction:a,amount:c},p);let y=n===6?[k({pubkey:kt,isWritable:!1}),...u?[k({pubkey:Mn.programId,isWritable:!1})]:[],k({pubkey:m}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:new oe(t.lpVault)}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:o})]:[k({pubkey:m}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:o}),k({pubkey:new oe(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(k({pubkey:r[f]})),y.push(k({pubkey:new oe(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(k({pubkey:new oe(t.rewardInfos[f].vault)})),y.push(k({pubkey:r[f]}));return new Je({programId:l,keys:y,data:p})}function Wi(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s}=i,[a,c]=[new oe(e.programId),new oe(e.id)],u=ut({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(pt.span);pt.encode({instruction:2,amount:Z(s)},l);let m=[k({pubkey:kt,isWritable:!1}),k({pubkey:c}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:new oe(t.lpVault)}),k({pubkey:u}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new oe(t.rewardInfos[d].vault)})),m.push(k({pubkey:o[d]}));return new Je({programId:a,keys:m,data:l})}function qi(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new oe(e.programId),new oe(e.id)],l=ut({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(pt.span);pt.encode({instruction:12,amount:Z(s)},m);let d=[k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:o[p]})),d.push(k({pubkey:new oe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Je({programId:c,keys:d,data:m})}function $u(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new oe(e.programId),new oe(e.id)],l=N([q("instruction"),w("amount")]),m=[k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:a[0]}),k({pubkey:r,isSigner:!0,isWritable:!1}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1}),k({pubkey:o[1]}),k({pubkey:new oe(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new Je({keys:m,programId:c,data:d})}function Ui(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new oe(e.programId),new oe(e.id)],l=ut({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(pt.span);pt.encode({instruction:11,amount:Z(s)},m);let d=[k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Je({programId:c,keys:d,data:m})}function Ju(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new oe(e.programId),new oe(e.id)],l=ut({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(pt.span);pt.encode({instruction:10,amount:Z(s)},m);let d=[k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Je({programId:c,keys:d,data:m})}function ec(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new oe(e.programId),new oe(e.id)],l=ut({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(pt.span);pt.encode({instruction:11,amount:Z(s)},m);let d=[k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:o[p]})),d.push(k({pubkey:new oe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Je({programId:c,keys:d,data:m})}function tc(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s}=i,[a,c]=[new oe(e.programId),new oe(e.id)],u=ut({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(pt.span);pt.encode({instruction:1,amount:Z(s)},l);let m=[k({pubkey:kt,isWritable:!1}),k({pubkey:Mn.programId,isWritable:!1}),k({pubkey:c}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:new oe(t.lpVault)}),k({pubkey:u}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new oe(t.rewardInfos[d].vault)})),m.push(k({pubkey:o[d]}));return new Je({programId:a,keys:m,data:l})}var Gi=class extends Me{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals($e)){let n=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Ls(W(O({},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=$n,txVersion:r}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new Pe(e.lpMint.address),lockInfo:{lockMint:Gu,lockVault:Xu},version:6,rewardInfos:t,programId:o},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Ve({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(_i.span);c.addInstruction({instructions:[_p.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:_i.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Yu({programId:new Pe(a.programId),poolId:l.publicKey}),y=Ei({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(kn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(ju(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let I=B.mint.equals($e)?new Pe(Ze.address):B.mint;b.push({rewardMint:I,rewardVault:Ei({programId:a.programId,poolId:l.publicKey,mint:I,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({mint:new Pe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});A&&c.addInstruction(A),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:h}=Hu({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[P],instructionTypes:[h]}).versionBuild({txVersion:r,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o}){var b;let r=Rt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals($e)?new Pe(Ze.address):n.mint,l=a.rewardInfos.findIndex(g=>new Pe(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:$e,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Ms({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[F.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o}){var l;let r=Rt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals($e)?new Pe(Ze.address):m.mint,p=a.rewardInfos.findIndex(P=>new Pe(P.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:$e,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let A=Ms({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[A],instructionTypes:[F.FarmV6Restart]})}return u.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:r}=e,s=Rt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder(),l=o.mint.equals($e)?new Pe(Ze.address):o.mint,m=Ei({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:o,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,u.addInstruction({instructions:[Ns({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:o})],instructionTypes:[F.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:r}=e,s=Rt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of o){let m=l.mint.equals($e)?new Pe(Ze.address):l.mint,d=Ei({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Ns({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:W(O({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[F.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:r,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=Rt[d];p===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),Ts(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new Pe(n.programId),new Pe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=ut({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),A=this.createTxBuilder();A.addCustomComputeBudget(l);let P={};for(let R of this.scope.account.tokenAccounts)if(a){let X=ie(this.scope.ownerPubKey,R.mint,R.programId).publicKey;R.publicKey&&X.equals(R.publicKey)&&(P[R.mint.toString()]=R.publicKey)}else P[R.mint.toString()]=R.publicKey;let h=b.lpMint,B=P[h.address];B||this.logAndCreateError("you don't have any lp","lp zero",P);let T=[];for(let R of m){let X=s&&R.mint.address===H.toString(),G=P[R.mint.address];if(!G){let{account:D,instructionParams:Te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new Pe(R.mint.address),notUseTokenAccount:X,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!X,associatedOnly:X?!1:a,checkCreateATAOwner:c});G=D,Te&&A.addInstruction(Te)}P[R.mint.address]=G,T.push(G)}let S,I=await this.scope.connection.getAccountInfo(g);if(I&&(S=oi(p).decode(I.data)),n.programId!==$n.toString()&&!S){let{instruction:R,instructionType:X}=Di({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});A.addInstruction({instructions:[R],instructionTypes:[X]})}let C=Is({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});C&&this.logAndCreateError(C);let x={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(R=>new Pe(R))},K=p===6?tc(x):p===5?ec(x):Ju(x),V={3:F.FarmV3Deposit,5:F.FarmV5Deposit,6:F.FarmV6Deposit};return A.addInstruction({instructions:[K],instructionTypes:[V[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:r,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=Rt[n.programId];Ts(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let C of this.scope.account.tokenAccounts)if(c){let x=ie(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(!r&&p!==4){let C=ut({programId:new Pe(n.programId),poolId:new Pe(n.id),owner:this.scope.ownerPubKey,version:p}),x=await this.scope.connection.getAccountInfo(C);if(x)oi(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:K,instructionType:V}=Di({id:new Pe(y.id),programId:new Pe(y.programId),version:p,ledger:C,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[K],instructionTypes:[V]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x})}else r&&r.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});let g=y.lpMint.address,A=s&&g===H.toString(),P=b[g.toString()];if(!P){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Pe(g),notUseTokenAccount:A,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:A?!1:c,checkCreateATAOwner:u});P=C,x&&f.addInstruction(x)}b[g.toString()]=P;let h=[];for(let C of d){let x=s&&C.mint.address===H.toString(),K=b[C.mint.address];if(!K){let{account:V,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new Pe(C.mint.address),notUseTokenAccount:x,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!x,associatedOnly:x?!1:c,checkCreateATAOwner:u});K=V,R&&f.addInstruction(R)}b[C.mint.address]=K,h.push(K)}let B=Is({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:h});B&&this.logAndCreateError(B);let T={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:P,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new Pe(C))},S=p===6?Wi(T):p===5?qi(T):p===4?$u(T):Ui(T),I={3:F.FarmV3Withdraw,4:F.FarmV4Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[I[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let o=Ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),r=Rt[e.programId];r!==6&&this.logAndCreateError("invalid farm version",r);let s=e.rewardInfos.findIndex(y=>y.mint.address===$e.toString()?new Pe(Ze.address):t),a=o.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:$e,u=this.createTxBuilder(),l;if(t.equals($e)){let y=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Ls(W(O({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new M(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[vp(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[F.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Zu({programId:o.programId,id:o.id,authority:o.authority,lpVault:o.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(r){let f=ie(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>W(O({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:A}=y,P=Rt[f],h=b.address,B=n&&h===H.toString(),T=m[h];if(!T){let{account:V,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Pe(h),notUseTokenAccount:B,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:r,checkCreateATAOwner:s});T=V,R&&l.addInstruction(R)}m[h.toString()]=T;let S=[];for(let V of g){let R=n&&V.mint.address===H.toString(),X=m[V.mint.address];if(!X){let{account:G,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:V.mint.programId,mint:new Pe(V.mint.address),notUseTokenAccount:R,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:r,checkCreateATAOwner:s});X=G,D&&l.addInstruction(D)}m[V.mint.address]=X,S.push(X)}let I=p[A],C={amount:qe,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:I,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(V=>new Pe(V))},x=P===6?Wi(C):P===5?qi(C):Ui(C),K={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[K[P]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as ze}from"@solana/web3.js";import{AccountLayout as Cf,NATIVE_MINT as ur,TOKEN_PROGRAM_ID as Tn}from"@solana/spl-token";import{Keypair as tr,PublicKey as U,SystemProgram as an,TransactionInstruction as st}from"@solana/web3.js";import Us from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ji,TOKEN_2022_PROGRAM_ID as Ne,TOKEN_PROGRAM_ID as ke}from"@solana/spl-token";import Yp from"bn.js";import Lt from"bn.js";var ye=new Lt(0),xt=new Lt(1),rn=new Lt(-1),St=new Lt(1).shln(64),Ho=new Lt(1).shln(128),_s=St.sub(xt),Xi=64,nc=Ho.subn(1),ct=-443636,ft=-ct,Ot=new Lt("4295048016"),Mt=new Lt("79226673521066979257578248091"),Zo=new Lt("4295048017"),$o=new Lt("79226673521066979257578248090"),ic=16,oc="59543866431248",rc="184467440737095516",sc="15793534762490258745",Jo=new Lt(10).pow(new Lt(6)),Vp=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(Vp||{}),hh={[500]:10,[3e3]:60,[1e4]:200},Th={version:6,liquidity:ye,tickCurrent:0,feeGrowthGlobalX64A:ye,feeGrowthGlobalX64B:ye,protocolFeesTokenA:ye,protocolFeesTokenB:ye,swapInAmountTokenA:ye,swapOutAmountTokenB:ye,swapInAmountTokenB:ye,swapOutAmountTokenA:ye,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},ac={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:[]},Ih=new Lt("18446744073700000000");import le from"bn.js";function uc(i){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,i,!1),new Uint8Array(e)}function xh(i){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,i,!1),new Uint8Array(e)}function Sh(i){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,i,!1),new Uint8Array(e)}function er(i){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,i,!1),new Uint8Array(e)}function vs(i,e){let t=0;for(let n=i-1;n>=0&&!e.testn(n);n--)t++;return t}function Vs(i,e){let t=0;for(let n=0;n<i&&!e.testn(n);n++)t++;return t}function zi(i,e){for(let t=0;t<i;t++)if(e.testn(t))return!1;return!0}function cc(i,e){return zi(i,e)?null:vs(i,e)}function lc(i,e){return zi(i,e)?null:Vs(i,e)}var Ep=Buffer.from("amm_config","utf8"),Fp=Buffer.from("pool","utf8"),Dp=Buffer.from("pool_vault","utf8"),Wp=Buffer.from("pool_reward_vault","utf8"),mc=Buffer.from("position","utf8"),qp=Buffer.from("tick_array","utf8"),Up=Buffer.from("operation","utf8"),Gp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Xp=Buffer.from("observation","utf8");function Lh(i,e){return ue([Ep,uc(e)],i)}function dc(i,e,t,n){return ue([Fp,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function Es(i,e,t){return ue([Dp,e.toBuffer(),t.toBuffer()],i)}function pc(i,e,t){return ue([Wp,e.toBuffer(),t.toBuffer()],i)}function de(i,e,t){return ue([qp,e.toBuffer(),er(t)],i)}function qt(i,e,t,n){return ue([mc,e.toBuffer(),er(t),er(n)],i)}function yt(i,e){return ue([mc,e.toBuffer()],i)}function Nn(i){return ue([Buffer.from("metadata","utf8"),Zt.toBuffer(),i.toBuffer()],Zt)}function Qi(i){return ue([Up],i)}function Xe(i,e){return ue([Gp,e.toBuffer()],i)}function fc(i,e){return ue([Xp,e.toBuffer()],i)}var yc=Buffer.from("locked_position","utf8");function Fs(i,e){return ue([yc,e.toBuffer()],i)}function Yi(i,e){return ue([yc,e.toBuffer()],i)}import{PublicKey as Ut}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as bc}from"@solana/spl-token";import Re from"bn.js";import jt from"bn.js";var ji=class{static getfeeGrowthInside(e,t,n){let o=new jt(0),r=new jt(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),r=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new jt(0),a=new jt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=re.wrappingSubU128(re.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),u=re.wrappingSubU128(re.wrappingSubU128(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=re.mulDivFloor(re.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,St),c=t.tokenFeesOwedA.add(a),u=re.mulDivFloor(re.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,St),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=re.mulDivFloor(re.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,St),c=t.tokenFeesOwedA.add(a),u=re.mulDivFloor(re.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,St),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let r=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=re.wrappingSubU128(c,u.growthInsideLastX64),m=re.mulDivFloor(l,t.liquidity,St),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static GetPositionRewards(e,t,n,o){let r=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=re.wrappingSubU128(c,u.growthInsideLastX64),m=re.mulDivFloor(l,t.liquidity,St),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static getRewardGrowthInside(e,t,n,o){let r=[];for(let s=0;s<o.length;s++){let a=new jt(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new jt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(re.wrappingSubU128(re.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return r}static getRewardGrowthInsideV2(e,t,n,o){let r=[];for(let s=0;s<o.length;s++){let a=new jt(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new jt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(re.wrappingSubU128(re.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return r}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:r,epochInfo:s}){var b,g,A,P;let a=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=te.getSqrtPriceX64FromTick(t.tickLower),u=te.getSqrtPriceX64FromTick(t.tickUpper),l=r?1+o:1-o,m=pe.getAmountsFromLiquidity(a,c,u,n,r),[d,p]=[ge(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),ge(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[ge(new jt(new M(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,s,!0),ge(new jt(new M(m.amountB.toString()).mul(l).toFixed(0)),(P=e.mintB.extensions)==null?void 0:P.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Dt(d.expirationTime,p.expirationTime)}}};var zp=15,fe=class{static async getTickArrays(e,t,n,o,r,s,a){let c=[],u=j.getTickArrayStartIndexByTick(o,r),l=j.getInitializedTickArrayInRange(s,a,r,u,Math.floor(zp/2));for(let p=0;p<l.length;p++){let{publicKey:y}=de(t,n,l[p]);c.push(y)}let m=(await _t(e,c)).map(p=>p!==null?Hi.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=W(O({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,r,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,r,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,r,s),this.checkIsValidStartIndex(u,r))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,r){let s=Math.floor(e/fe.tickCount(t)),a=n?j.searchLowBitFromStart(o,r,s-1,1,t):j.searchHightBitFromStart(o,r,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let r;if(o){let a=et-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a-1}}else{let a=0;for(;a<et;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a+1}}let{publicKey:s}=de(e,t,n.startTickIndex);return{nextTick:r,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,r,s){let a=j.getTickArrayStartIndexByTick(o,r),c=Math.floor((o-a)/r),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<et;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=de(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(j.checkIsOutOfBoundary(e)){if(e>ft)return!1;let n=j.getTickArrayStartIndexByTick(ct,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return et*e}};var Ds=14,sn=class{static maxTickInTickarrayBitmap(e){return e*et*_n}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let r=n*o;return e<0?{minValue:-r,maxValue:-r+n}:{minValue:r,maxValue:r+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!fe.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let r=this.maxTickInTickarrayBitmap(n),s=o?t-fe.tickCount(n):t+fe.tickCount(n);if(s<-r||s>=r)return{isInit:!1,tickIndex:t};let a=n*et,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=cc(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-r}}else{let l=e.shrn(u),m=lc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:r-fe.tickCount(n)}}}},Zi=class{static getBitmapOffset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=sn.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=sn.maxTickInTickarrayBitmap(e),n=-t;if(ft<=t)throw Error(`extensionTickBoundary check error: ${ft}, ${t}`);if(n<=ct)throw Error(`extensionTickBoundary check error: ${n}, ${ct}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),r=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(o).testn(r),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let r=fe.tickCount(t),s=n?e-r:e+r,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:r,maxValue:s}=sn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=j.mergeTickArrayBitmap(e).shln(_n-1-a),u=zi(512,c)?null:vs(512,c);if(u!==null){let l=t-u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=zi(512,c)?null:Vs(512,c);if(u!==null){let l=t+u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-fe.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%sn.maxTickInTickarrayBitmap(t),o=Math.floor(n/fe.tickCount(t));return e<0&&n!=0&&(o=_n-o),o}};var xe=class{static getOutputAmountAndRemainAccounts(e,t,n,o,r,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=vn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,r,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(rn),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,r){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=de(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=vn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(rn),u,r);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=xe.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Zi.checkTickArrayIsInit(fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=de(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:r,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(r){let{publicKey:a}=de(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/fe.tickCount(e.tickSpacing)),o=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:r}=sn.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:r};t=r;let{isInit:s,tickIndex:a}=Zi.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<ct||t>ft)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:r}){var a,c,u;let s=[];for(let l=0;l<r.length;l++){let m=r[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=W(O({},m),{perSecond:re.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Ut(d)});if(p.tokenMint.equals(Ut.default))continue;if(n<=p.openTime.toNumber()||o.eq(ye)){s.push(p);continue}let y=new Re(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=re.mulDivFloor(f,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),A=re.mulDivFloor(f,p.emissionsPerSecondX64,St),P=p.rewardTotalEmissioned.add(A);s.push(W(O({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:P,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let r of t){let s=j.getTickArrayStartIndexByTick(r,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=sn.maxTickInTickarrayBitmap(e),n=-t;return t>ft&&(t=fe.getArrayStartIndex(ft,e)+fe.tickCount(e)),n<ct&&(n=fe.getArrayStartIndex(ct,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/fe.tickCount(t)*_n}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await Qe(e,t.map(s=>({pubkey:s})),{batchRequest:n}),r={};for(let s of o)s.accountInfo!==null&&(r[s.pubkey.toString()]=Ac.decode(s.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},r=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=de(c.programId,c.id,m);r.push({pubkey:d}),o[d.toString()]=c.id}}let s=await Qe(e,r,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Hi.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=W(O({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:r=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(yt(p,d).publicKey);let l=await _t(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=$i.decode(d.data),y=p.poolId.toString(),f=e.find(I=>I.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),A=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:P,amountB:h}=pe.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,A.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(A.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:A.price,amountA:P,amountB:h,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(I=>W(O({},I),{pendingReward:new Re(0)})),leverage:B,tokenFeeAmountA:new Re(0),tokenFeeAmountB:new Re(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(r){let d=Object.values(m),p=await _t(t,d,{batchRequest:o}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=Hi.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let A=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,P=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,h=y[m[A].toString()],B=y[m[P].toString()],T=h.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:I,tokenFeeAmountB:C}=await ji.GetPositionFees(f,g,T,S),x=await ji.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=I.gte(new Re(0))?I:new Re(0),g.tokenFeeAmountB=C.gte(new Re(0))?C:new Re(0);for(let K=0;K<x.length;K++)g.rewardInfos[K].pendingReward=x[K].gte(new Re(0))?x[K]:new Re(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:r,slippage:s,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var V;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new M(0))?u=l?Ot.add(new Re(1)):Mt.sub(new Re(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ge(r,m,o,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:A}=xe.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((V=p.fee)!=null?V:ye),u,c),P=ge(f,d,o,!1),h=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?h:new M(1).div(h),T=f.mul(new Re(Math.floor((1-s)*1e10))).div(new Re(1e10)),S=ge(T,d,o,!1),I=l?e.currentPrice:new M(1).div(e.currentPrice),C=new M(B).sub(I).abs(),x=I,K=new ve(new M(C).mul(10**15).toFixed(0),new M(x).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:P,minAmountOut:S,expirationTime:Dt(p.expirationTime,P.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:K,fee:A,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:r,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new we(W(O({},u),{mint:u.address,isToken2022:u.programId===bc.toBase58()})),new we(W(O({},l),{mint:l.address,isToken2022:l.programId===bc.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:P,priceImpact:h,fee:B,remainingAccounts:T,executionPriceX64:S}=xe.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Ut(u.address),amountIn:n,slippage:r,epochInfo:s,catchLiquidityInsufficient:a}),I=W(O({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),C=W(O({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),x=W(O({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),K=new nt({baseToken:m,denominator:new Re(10).pow(new Re(20+m.decimals)),quoteToken:d,numerator:A.mul(new M(10**(20+d.decimals))).toFixed(0)}),V=new nt({baseToken:m,denominator:new Re(10).pow(new Re(20+m.decimals)),quoteToken:d,numerator:P.mul(new M(10**(20+d.decimals))).toFixed(0)}),R=new be(m,B);return{allTrade:p,realAmountIn:I,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:K,executionPrice:V,priceImpact:h,fee:R,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:r,slippage:s,priceLimit:a=new M(0)}){var x;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new M(0))?l=c?Mt.sub(new Re(1)):Ot.add(new Re(1)):l=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=ge(r,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=xe.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((x=m.fee)!=null?x:ye),l),b=c?e.mintB.address:e.mintA.address,g=ge(d,u[b],o,!1),A=te.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),P=c?A:new M(1).div(A),h=d.mul(new Re(Math.floor((1+s)*1e10))).div(new Re(1e10)),B=ge(h,u[b],o,!0),T=c?e.currentPrice:new M(1).div(e.currentPrice),S=new M(P).sub(T).abs(),I=T,C=new ve(new M(S).mul(10**15).toFixed(0),new M(I).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:B,realAmountOut:m,expirationTime:Dt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:P,priceImpact:C,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var y,f,b;let r=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(s,r.priceMin),l=Math.min(a,r.priceMax)-c,m=a-s,d=r.priceMax-r.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:r.feeApr*p,rewardsApr:[((y=r.rewardApr[0])!=null?y:0)*p,((f=r.rewardApr[1])!=null?f:0)*p,((b=r.rewardApr[2])!=null?b:0)*p],apr:r.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:r,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[Bt(e.mintA.address).toString()],d=o[Bt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:A,amountSlippageB:P}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:h,amountSlippageB:B}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,r,!1,!1,0),T=new M(A.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(P.toString()).div(new M(10).pow(y)).mul(d.value)),S=new M(h.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(B.toString()).div(new M(10).pow(y)).mul(d.value)),I=new M(1).div(T.add(S)),x=new M(l.volumeFee).mul(365).div(u).mul(I).mul(100).toNumber(),K=3600*24*365,V=e.rewardDefaultInfos.map(R=>{var D,Te;let X=R.mint.decimals,G=o[R.mint.address];return c<((D=R.startTime)!=null?D:0)||c>((Te=R.endTime)!=null?Te:0)||!R.perSecond||!G||X===void 0?0:new M(G.value).mul(new M(R.perSecond).mul(K)).div(new M(10).pow(X)).mul(I).mul(100).toNumber()});return{feeApr:x,rewardsApr:V,apr:x+V.reduce((R,X)=>R+X,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:r,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,A;let l=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(o),p=a?1-s:1+s,y=ge(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Re(new M(y.amount.sub((A=y.fee)!=null?A:ye).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?pe.getLiquidityFromTokenAmountA(m,d,f,!a):new Re(0);else if(l.lte(d)){let P=pe.getLiquidityFromTokenAmountA(l,d,f,!a),h=pe.getLiquidityFromTokenAmountB(m,l,f);b=t?P:h}else b=t?new Re(0):pe.getLiquidityFromTokenAmountB(m,d,f);return xe.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:r,slippage:s,add:a}){var b,g,A,P;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=pe.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,r,a),[d,p]=[ge(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ge(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[ge(m.amountA.muln(l),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),ge(m.amountB.muln(l),(P=t.mintB.extensions)==null?void 0:P.feeConfig,e,!0)];return{liquidity:r,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Dt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Ut(c.id));(await _t(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=Vn.decode(c.data))});let s=t.map(c=>Xe(new Ut(c.programId),new Ut(c.id)).publicKey),a=await xe.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>W(O({},c),{[u.id]:W(O({},n[u.id]),{id:new Ut(u.id),version:6,programId:new Ut(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:W(O({},u.config),{id:new Ut(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapInfo:a[Xe(new Ut(u.programId),new Ut(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function bT({poolInfo:i,tickLower:e,tickUpper:t,amountA:n,amountB:o,slippage:r,add:s,epochInfo:a,amountHasFee:c}){var P,h,B,T;let[u,l,m,d]=e<t?[e,t,n,o]:[t,e,o,n],p=te.priceToSqrtPriceX64(new M(i.price),i.mintA.decimals,i.mintB.decimals),y=te.getSqrtPriceX64FromTick(u),f=te.getSqrtPriceX64FromTick(l),[b,g]=[ge(m,(P=i.mintA.extensions)==null?void 0:P.feeConfig,a,!c),ge(d,(h=i.mintB.extensions)==null?void 0:h.feeConfig,a,!c)],A=pe.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((B=b.fee)!=null?B:ye),g.amount.sub((T=g.fee)!=null?T:ye));return pe.getAmountsOutFromLiquidity({poolInfo:i,tickLower:e,tickUpper:t,liquidity:A,slippage:r,add:s,epochInfo:a,amountAddFee:!c})}var Ws={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function gc(i){return W(O({},i),{type:"Concentrated",programId:i.programId.toString(),id:i.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:i.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:i.ammConfig.tradeFeeRate,openTime:i.startTime.toString(),tvl:0,day:Ws,week:Ws,month:Ws,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:W(O({},i.ammConfig),{id:i.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var re=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),r=o.div(n);return o.mod(n).eq(ye)||(r=r.add(xt)),r}static mulDivFloor(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).add(n.sub(xt)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new le(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ho).sub(t).mod(Ho)}};function it(i,e){return qs(i.mul(e),64,256)}function Qp(i,e,t){let n=i.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function qs(i,e,t){let n=i.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var te=class{static sqrtPriceX64ToPrice(e,t,n){return re.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return re.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(ye))return e;let r=t.shln(Xi);if(o){let s=r,a=r.add(n.mul(e));return a.gte(s)?re.mulDivCeil(s,e,a):re.mulDivRoundingUp(s,xt,s.div(e).add(n))}else{let s=n.mul(e);if(!r.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=r.sub(s);return re.mulDivCeil(r,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let r=n.shln(Xi);if(o)return e.add(r.div(t));{let s=re.mulDivRoundingUp(r,xt,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<ct||e>ft)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new le("18445821805675395072"):new le("18446744073709551616");return(t&2)!=0&&(n=it(n,new le("18444899583751176192"))),(t&4)!=0&&(n=it(n,new le("18443055278223355904"))),(t&8)!=0&&(n=it(n,new le("18439367220385607680"))),(t&16)!=0&&(n=it(n,new le("18431993317065453568"))),(t&32)!=0&&(n=it(n,new le("18417254355718170624"))),(t&64)!=0&&(n=it(n,new le("18387811781193609216"))),(t&128)!=0&&(n=it(n,new le("18329067761203558400"))),(t&256)!=0&&(n=it(n,new le("18212142134806163456"))),(t&512)!=0&&(n=it(n,new le("17980523815641700352"))),(t&1024)!=0&&(n=it(n,new le("17526086738831433728"))),(t&2048)!=0&&(n=it(n,new le("16651378430235570176"))),(t&4096)!=0&&(n=it(n,new le("15030750278694412288"))),(t&8192)!=0&&(n=it(n,new le("12247334978884435968"))),(t&16384)!=0&&(n=it(n,new le("8131365268886854656"))),(t&32768)!=0&&(n=it(n,new le("3584323654725218816"))),(t&65536)!=0&&(n=it(n,new le("696457651848324352"))),(t&131072)!=0&&(n=it(n,new le("26294789957507116"))),(t&262144)!=0&&(n=it(n,new le("37481735321082"))),e>0&&(n=nc.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Mt)||e.lt(Ot))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new le(t-64),o=Qp(n,32,128),r=new le("8000000000000000","hex"),s=0,a=new le(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;r.gt(new le(0))&&s<ic;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(r.mul(y)),r=r.shrn(1),s+=1}let u=a.shrn(32),m=o.add(u).mul(new le(oc)),d=qs(m.sub(new le(rc)),64,128).toNumber(),p=qs(m.add(new le(sc)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},En=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let r=En.getTickWithPriceAndTickspacing(e,t,n,o),s=te.getSqrtPriceX64FromTick(r);return te.sqrtPriceX64ToPrice(s,n,o)}},pe=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");let r=n.ushln(Xi),s=t.sub(e);return o?re.mulDivRoundingUp(re.mulDivCeil(r,s,t),xt,e):re.mulDivFloor(r,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");return o?re.mulDivCeil(n,t.sub(e),St):re.mulDivFloor(n,t.sub(e),St)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let r=n.mul(e).mul(t),s=t.sub(e),a=r.div(s);return o?re.mulDivRoundingUp(a,xt,_s):a.shrn(Xi)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),re.mulDivFloor(n,_s,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return pe.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=pe.getLiquidityFromTokenAmountA(e,n,o,!1),a=pe.getLiquidityFromTokenAmountB(t,e,r);return s.lt(a)?s:a}else return pe.getLiquidityFromTokenAmountB(t,n,r)}static getAmountsFromLiquidity(e,t,n,o,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:pe.getTokenAmountAFromLiquidity(t,n,o,r),amountB:new le(0)};if(e.lt(n)){let s=pe.getTokenAmountAFromLiquidity(e,n,o,r),a=pe.getTokenAmountBFromLiquidity(t,e,o,r);return{amountA:s,amountB:a}}else return{amountA:new le(0),amountB:pe.getTokenAmountBFromLiquidity(t,n,o,r)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,r,s,a){let{amountA:c,amountB:u}=pe.getAmountsFromLiquidity(e,t,n,o,s),l=r?1+a:1-a,m=new le(new M(c.toString()).mul(l).toFixed(0)),d=new le(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:r,add:s,epochInfo:a,amountAddFee:c}){var A,P,h,B;let u=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+r:1-r,p=pe.getAmountsFromLiquidity(u,l,m,o,s),[y,f]=[ge(p.amountA,(A=e.mintA.extensions)==null?void 0:A.feeConfig,a,c),ge(p.amountB,(P=e.mintB.extensions)==null?void 0:P.feeConfig,a,c)],[b,g]=[ge(new le(new M(p.amountA.toString()).mul(d).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),ge(new le(new M(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:o,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Dt(y.expirationTime,f.expirationTime)}}},vn=class{static swapCompute(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(ye))throw new Error("amountSpecified must not be 0");if(y||(y=s?Ot.add(xt):Mt.sub(xt)),s){if(y.lt(Ot))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(Mt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(ye),g={amountSpecifiedRemaining:d,amountCalculated:ye,sqrtPriceX64:m,tick:u>p?Math.min(p+fe.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new le(0)},A=p,P=n[p],h=0,B=!s&&P.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(ye)&&!g.sqrtPriceX64.eq(y);){h>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(P,g.tick,l,s,B),I=S||null,C=null;if(!(I!=null&&I.liquidityGross.gtn(0))){let K=xe.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:r},A,s);if(!K.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}A=K.nextStartIndex;let{publicKey:V}=de(e,t,A);C=V,P=n[A];try{I=j.firstInitializedTick(P,s)}catch{throw Error("not found next tick info")}}T.tickNext=I.tick,T.initialized=I.liquidityGross.gtn(0),p!==A&&C&&(g.accounts.push(C),p=A),T.tickNext<ct?T.tickNext=ct:T.tickNext>ft&&(T.tickNext=ft),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let x;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?x=y:x=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=vn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let K=I.liquidityNet;s&&(K=K.mul(rn)),g.liquidity=pe.addDelta(g.liquidity,K)}B=T.tickNext!=g.tick&&!s&&P.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let K=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=K!=g.tick&&!s&&P.startTickIndex===K,g.tick=K}++h}try{let{nextStartIndex:T,isExist:S}=fe.nextInitializedTickArray(g.tick,l,s,o,r);S&&p!==T&&(g.accounts.push(de(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:ye,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,r){let s={sqrtPriceX64Next:new le(0),amountIn:new le(0),amountOut:new le(0),feeAmount:new le(0)},a=e.gte(t),c=o.gte(ye);if(c){let l=re.mulDivFloor(o,Jo.sub(new le(r.toString())),Jo);s.amountIn=a?pe.getTokenAmountAFromLiquidity(t,e,n,!0):pe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?pe.getTokenAmountBFromLiquidity(t,e,n,!1):pe.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(rn).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,o.mul(rn),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=pe.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=pe.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:pe.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:pe.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(o.mul(rn))&&(s.amountOut=o.mul(rn)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=o.sub(s.amountIn):s.feeAmount=re.mulDivCeil(s.amountIn,new le(r),Jo.sub(new le(r))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var et=60,_n=512,j=class{static getTickArrayAddressByTick(e,t,n,o){let r=j.getTickArrayStartIndexByTick(n,o),{publicKey:s}=de(e,t,r);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=et)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=fe.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*fe.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*et,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*et,r=Math.floor(t/o)+512,s=Math.abs(r);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*et:e+t*et}static mergeTickArrayBitmap(e){let t=new Yp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,r){let s=Math.floor(o/(n*et));return[...j.searchLowBitFromStart(e,t,s-1,r,n),...j.searchHightBitFromStart(e,t,s,r,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,_n,n)}static getAllInitializedTickArrayInfo(e,t,n,o,r){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,o,r);for(let c of a){let{publicKey:u}=de(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=fe.tickCount(r);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=fe.tickCount(r);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<ct||e>ft}static nextInitTick(e,t,n,o,r){if(fe.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(r||(a=a+1);a<et;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=et-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<et;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=te.getSqrtPriceX64FromTick(t),r=te.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(r),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),r=En.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(r),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=te.getSqrtPriceX64FromTick(t),r=te.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(r),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),r=En.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(r),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new M(1).div(a)}}};var wc=N([Ae(8),q("bump"),en("index"),L(""),rt("protocolFeeRate"),rt("tradeFeeRate"),en("tickSpacing"),Y(w(),8,"")]),jp=N([rt("blockTimestamp"),ti("tickCumulative"),Y(w(),4)]),Pc=N([Ae(8),Oe("initialized"),w("recentEpoch"),en("observationIndex"),L("poolId"),Y(jp,100,"observations"),Y(w(),4)]),Hp=N([q("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),ee("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),L("tokenMint"),L("tokenVault"),L("creator"),ee("rewardGrowthGlobalX64")]),Vn=N([Ae(8),q("bump"),L("ammConfig"),L("creator"),L("mintA"),L("mintB"),L("vaultA"),L("vaultB"),L("observationId"),q("mintDecimalsA"),q("mintDecimalsB"),en("tickSpacing"),ee("liquidity"),ee("sqrtPriceX64"),Ce("tickCurrent"),rt(),ee("feeGrowthGlobalX64A"),ee("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),ee("swapInAmountTokenA"),ee("swapOutAmountTokenB"),ee("swapInAmountTokenB"),ee("swapOutAmountTokenA"),q("status"),Y(q(),7,""),Y(Hp,3,"rewardInfos"),Y(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),Y(w(),15*4-3,"padding")]),Zp=N([ee("growthInsideLastX64"),w("rewardAmountOwed")]),$i=N([Ae(8),q("bump"),L("nftMint"),L("poolId"),Ce("tickLower"),Ce("tickUpper"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),Y(Zp,3,"rewardInfos"),Y(w(),8,"")]),DT=N([Ae(8),q("bump"),L("poolId"),Ce("tickLowerIndex"),Ce("tickUpperIndex"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),Y(ee(),3,"rewardGrowthInside"),Y(w(),8,"")]),$p=N([Ce("tick"),Mu("liquidityNet"),ee("liquidityGross"),ee("feeGrowthOutsideX64A"),ee("feeGrowthOutsideX64B"),Y(ee(),3,"rewardGrowthsOutsideX64"),Y(rt(),13,"")]),Hi=N([Ae(8),L("poolId"),Ce("startTickIndex"),Y($p,et,"ticks"),q("initializedTickCount"),Y(q(),115,"")]),kc=N([Ae(329),Y(L(),100,"whitelistMints")]),Ac=N([Ae(8),L("poolId"),Y(Y(w(),8),Ds,"positiveTickArrayBitmap"),Y(Y(w(),8),Ds,"negativeTickArrayBitmap")]),WT=N([w(),q("bump"),L("owner"),L("poolId"),L("positionId"),L("nftAccount"),Y(w(),8)]),qT=N([Ae(8),q("bump"),L("lockOwner"),L("poolId"),L("positionId"),L("nftAccount"),L("lockNftMint"),w("recentEpoch"),Y(w(),8)]);Pc.span;var hc=me("Raydium_Clmm"),Kt={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],openPositionWithTokenEx:[77,255,174,82,125,29,201,46],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},Tc=[188,37,179,131,82,150,84,73],Ic=[16,72,250,198,14,162,212,19],he=class{static createPoolInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y){let f=N([ee("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let A=Buffer.from([...Kt.createPool,...g]);return new st({keys:b,programId:e,data:A})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:r,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new U(o.address),new U(r.address)],{publicKey:m}=dc(t,s,u,l),{publicKey:d}=fc(t,m),{publicKey:p}=Es(t,m,u),{publicKey:y}=Es(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,u,p,new U(o.programId||ke),l,y,new U(r.programId||ke),Xe(t,m).publicKey,a,c)];return{signers:[],instructions:f,instructionTypes:[F.CreateAccount,F.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P,h,B,T,S,I,C,x){let K=N([Ce("tickLowerIndex"),Ce("tickUpperIndex"),Ce("tickArrayLowerStartIndex"),Ce("tickArrayUpperStartIndex"),ee("liquidity"),w("amountMaxA"),w("amountMaxB"),Oe("withMetadata"),q("optionBaseFlag"),Oe("baseFlag")]),V=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ji,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...V],X=Buffer.alloc(K.span);K.encode({tickLowerIndex:A,tickUpperIndex:P,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:I,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},X);let G=Buffer.from([...Kt.openPosition,...X]);return new st({keys:R,programId:e,data:G})}static openPositionFromLiquidityInstruction22(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P,h,B,T,S,I,C){let x=N([Ce("tickLowerIndex"),Ce("tickUpperIndex"),Ce("tickArrayLowerStartIndex"),Ce("tickArrayUpperStartIndex"),ee("liquidity"),w("amountMaxA"),w("amountMaxB"),Oe("withMetadata"),q("optionBaseFlag"),Oe("baseFlag")]),K=[...C?[{pubkey:C,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ji,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...K],R=Buffer.alloc(x.span);x.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:h,liquidity:B,amountMaxA:T,amountMaxB:S,withMetadata:I==="create",baseFlag:!1,optionBaseFlag:0},R);let X=Buffer.from([...Kt.openPositionWithTokenEx,...R]);return new st({keys:V,programId:e,data:X})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,y]=[new U(e.programId),new U(e.id)],f;if(l)f=new U((await l(1))[0]);else{let C=tr.generate();d.push(C),f=C.publicKey}let b=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:A}=de(p,y,b),{publicKey:P}=de(p,y,g),{publicKey:h}=m?ie(n.wallet,f,Ne):ie(n.wallet,f,ke),{publicKey:B}=Nn(f),{publicKey:T}=yt(p,f),{publicKey:S}=qt(p,y,o,r),I=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,y,n.wallet,f,h,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,r,b,g,s,a,c,u,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(p,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,y,n.wallet,f,h,B,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,r,b,g,s,a,c,u,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(p,y).publicKey:void 0);return{signers:d,instructions:[I],instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:f,tickArrayLower:A,tickArrayUpper:P,positionNftAccount:h,metadataAccount:B,personalPosition:T,protocolPosition:S}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,y]=[new U(e.programId),new U(e.id)],f;if(l)f=new U((await l(1))[0]);else{let C=tr.generate();d.push(C),f=C.publicKey}let b=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:A}=de(p,y,b),{publicKey:P}=de(p,y,g),{publicKey:h}=m?ie(n.wallet,f,Ne):ie(n.wallet,f,ke),{publicKey:B}=Nn(f),{publicKey:T}=yt(p,f),{publicKey:S}=qt(p,y,o,r),I=m?this.openPositionFromBaseInstruction22(p,n.feePayer,y,n.wallet,f,h,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,r,b,g,u,s,a,c,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(p,y).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,y,n.wallet,f,h,B,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,r,b,g,u,s,a,c,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(p,y).publicKey:void 0);return{address:{nftMint:f,tickArrayLower:A,tickArrayUpper:P,positionNftAccount:h,metadataAccount:B,personalPosition:T,protocolPosition:S},instructions:[I],signers:d,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P,h,B,T,S,I,C,x){let K=N([Ce("tickLowerIndex"),Ce("tickUpperIndex"),Ce("tickArrayLowerStartIndex"),Ce("tickArrayUpperStartIndex"),ee("liquidity"),w("amountMaxA"),w("amountMaxB"),Oe("withMetadata"),q("optionBaseFlag"),Oe("baseFlag")]),V=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ji,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...V],X=Buffer.alloc(K.span);K.encode({tickLowerIndex:A,tickUpperIndex:P,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:B,liquidity:new Us(0),amountMaxA:S==="MintA"?I:C,amountMaxB:S==="MintA"?C:I,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},X);let G=Buffer.from([...Kt.openPosition,...X]);return new st({keys:R,programId:e,data:G})}static openPositionFromBaseInstruction22(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P,h,B,T,S,I,C){let x=N([Ce("tickLowerIndex"),Ce("tickUpperIndex"),Ce("tickArrayLowerStartIndex"),Ce("tickArrayUpperStartIndex"),ee("liquidity"),w("amountMaxA"),w("amountMaxB"),Oe("withMetadata"),q("optionBaseFlag"),Oe("baseFlag")]),K=[...C?[{pubkey:C,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ji,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...K],R=Buffer.alloc(x.span);x.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:h,liquidity:new Us(0),amountMaxA:T==="MintA"?S:I,amountMaxB:T==="MintA"?I:S,withMetadata:B==="create",baseFlag:T==="MintA",optionBaseFlag:1},R);let X=Buffer.from([...Kt.openPositionWithTokenEx,...R]);return new st({keys:V,programId:e,data:X})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new U((await l(1))[0]);else{let C=tr.generate();p.push(C),d=C.publicKey}let[y,f]=[new U(e.programId),new U(e.id)],b=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:A}=de(y,f,b),{publicKey:P}=de(y,f,g),{publicKey:h}=m?ie(n.wallet,d,Ne):ie(n.wallet,d,ke),{publicKey:B}=Nn(d),{publicKey:T}=yt(y,d),{publicKey:S}=qt(y,f,o,r),I=m?this.openPositionFromLiquidityInstruction22(y,n.wallet,f,n.wallet,d,h,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,r,b,g,s,a,c,u,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(y,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(y,n.wallet,f,n.wallet,d,h,B,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,r,b,g,s,a,c,u,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(y,f).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:A,tickArrayUpper:P,positionNftAccount:h,metadataAccount:B,personalPosition:T,protocolPosition:S},instructions:[I],signers:p,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,r,s){let a=N([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:s?Ne:ke,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Kt.closePosition,...u]);return new st({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:r}){let s=new U(e.programId),a=r?ie(n.wallet,o.nftMint,Ne).publicKey:ie(n.wallet,o.nftMint,ke).publicKey,{publicKey:c}=yt(s,o.nftMint),u=[];return u.push(this.closePositionInstruction(s,n.wallet,o.nftMint,a,c,r)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[F.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A){let P=N([ee("liquidity"),w("amountMaxA"),w("amountMaxB"),q("optionBaseFlag"),Oe("baseFlag")]),h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(P.span);P.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...Kt.increaseLiquidity,...T]);return new st({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:r,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=de(u,l,m),{publicKey:y}=de(u,l,d),{publicKey:f}=c?ie(o.wallet,n.nftMint,Ne):ie(o.wallet,n.nftMint,ke),{publicKey:b}=yt(u,n.nftMint),{publicKey:g}=qt(u,l,n.tickLower,n.tickUpper),A=this.increasePositionFromLiquidityInstruction(u,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Xe(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:[A],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:r,baseAmount:s,otherAmountMax:a,nft2022:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=de(u,l,m),{publicKey:y}=de(u,l,d),{publicKey:f}=c?ie(o.wallet,n.nftMint,Ne):ie(o.wallet,n.nftMint,ke),{publicKey:b}=yt(u,n.nftMint),{publicKey:g}=qt(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Xe(u,l).publicKey:void 0)],signers:[],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A){let P=N([ee("liquidity"),w("amountMaxA"),w("amountMaxB"),q("optionBaseFlag"),Oe("baseFlag")]),h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(P.span);P.encode({liquidity:new Us(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...Kt.increaseLiquidity,...T]);return new st({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P){let h=N([ee("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...f.map(C=>[{pubkey:C.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:So,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(h.span);h.encode({liquidity:b,amountMinA:g,amountMinB:A},S);let I=Buffer.from([...Kt.decreaseLiquidity,...S]);return new st({keys:T,programId:e,data:I})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:r,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new U(e.programId),new U(e.id)],d=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:y}=de(l,m,d),{publicKey:f}=de(l,m,p),{publicKey:b}=u?ie(o.wallet,n.nftMint,Ne):ie(o.wallet,n.nftMint,c),{publicKey:g}=yt(l,n.nftMint),{publicKey:A}=qt(l,m,n.tickLower,n.tickUpper),P=[];for(let T=0;T<e.rewardDefaultInfos.length;T++)P.push({poolRewardVault:new U(t.rewardInfos[T].vault),ownerRewardVault:o.rewardAccounts[T],rewardMint:new U(e.rewardDefaultInfos[T].mint.address)});let h=[],B=this.decreaseLiquidityInstruction(l,o.wallet,b,g,m,A,y,f,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),P,r,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?Xe(l,m).publicKey:void 0);return h.push(B),{address:{tickArrayLower:y,tickArrayUpper:f,positionNftAccount:b,personalPosition:g,protocolPosition:A},signers:[],instructions:h,instructionTypes:[F.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g){let A=N([w("amount"),w("otherAmountThreshold"),ee("sqrtPriceLimitX64"),Oe("isBaseInput")]),P=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:So,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...P],B=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...Kt.swap,...B]);return new st({keys:h,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:r,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===r.toString(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,Xe(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:r,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===r.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountB:o.tokenAccountA,b?o.tokenAccountA:o.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,u,n,s,a,c,!1,Xe(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,r,s,a,c,u,l,m,d){let p=N([w("openTime"),w("endTime"),ee("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Kt.initReward,...f]);return new st({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[r,s]=[new U(e.programId),new U(e.id)],a=pc(r,s,o.mint).publicKey,c=Qi(r).publicKey,u=[this.initRewardInstruction(r,n.wallet,s,c,new U(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[F.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,r,s,a,c,u,l,m,d){let p=N([q("rewardIndex"),ee("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...Kt.setRewardEmissions,...f]);return new st({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[r,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&hc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Qi(r).publicKey,m=[this.setRewardInstruction(r,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[F.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,r,s,a){let c=N([q("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:So,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Kt.collectReward,...l]);return new st({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[r,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&hc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(r,n.wallet,s,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[F.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:r,nftMint:s,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new U((await c(1))[0]);else{let g=tr.generate();u.push(g),l=g.publicKey}let m=a?ie(r,s,Ne).publicKey:ie(r,s,ke).publicKey,{publicKey:d}=yt(n,s),p=Yi(e,l).publicKey,y=ie(r,l,ke).publicKey,f=Nn(l).publicKey,b=he.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:r,lockOwner:r,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:y,metadataAccount:f,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:ie(t,s,a?Ne:ke).publicKey,positionNftProgram:a?Ne:ke});return{address:{positionId:d,lockPositionId:p,lockNftAccount:y,lockNftMint:l,positionNftAccount:m,metadataAccount:f},instructions:[b],signers:u,instructionTypes:[F.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:r,positionNftAccount:s,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:m,lockNftMint:d,lockNftAccount:p,metadataAccount:y,withMetadata:f}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Ji,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1}],g=N([Oe("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:f},A);let P=Buffer.from([...Tc,...A]);return new st({keys:b,programId:e,data:P})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:r}){let{publicKey:s}=ie(o,r,ke),{publicKey:a}=yt(n,r),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Fs(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1}];return new st({keys:c,programId:e,data:Buffer.from(Tc)})}static harvestLockPositionInstruction(e){let[t,n]=[new U(e.poolKeys.programId),new U(e.poolKeys.id)],o=j.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=j.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=de(t,n,o),{publicKey:a}=de(t,n,r),{publicKey:c}=ie(e.owner,e.ownerPosition.nftMint,ke),{publicKey:u}=yt(t,e.ownerPosition.nftMint),{publicKey:l}=qt(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let y=0;y<e.poolKeys.rewardInfos.length;y++)m.push({poolRewardVault:new U(e.poolKeys.rewardInfos[y].vault),ownerRewardVault:e.ownerRewardAccounts[y],rewardMint:new U(e.poolKeys.rewardInfos[y].mint.address)});let d=[...m.map(y=>[{pubkey:y.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:Fs(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new U(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new U(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,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:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:yn,isSigner:!1,isWritable:!1},{pubkey:new U(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new U(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new st({keys:p,programId:e.programId,data:Buffer.from(Ic)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:r,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:y,tickArrayUpper:f,userVaultA:b,userVaultB:g,mintA:A,mintB:P,rewardAccounts:h,exTickArrayBitmap:B}){let T=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[],...h.map(I=>[{pubkey:I.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:I.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:I.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:yn,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},...T];return new st({keys:S,programId:e,data:Buffer.from(Ic)})}};var oI=N([rt("mintAuthorityOption"),L("mintAuthority"),w("supply"),q("decimals"),q("isInitialized"),rt("freezeAuthorityOption"),L("freezeAuthority")]);import{PublicKey as Jp}from"@solana/web3.js";import{MintLayout as Bc,TOKEN_PROGRAM_ID as ef}from"@solana/spl-token";var fI=async({connection:i,mint:e})=>{let t=await i.getAccountInfo(new Jp(e));return!t||t.data.length!==Bc.span?void 0:Bc.decode(t.data)},yI=({mint:i,decimals:e,programId:t=ef,logoURI:n="",priority:o=3})=>{let r=i.toBase58().substring(0,6);return{address:i.toBase58(),decimals:e,symbol:r,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:r,tags:[],priority:o}},nr=i=>new we({mint:i.address,decimals:i.decimals,symbol:i.symbol,name:i.name}),eo=o=>{var r=o,{amount:i,isRaw:e,name:t}=r,n=De(r,["amount","isRaw","name"]);return new be(new we({mint:Bt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),i,e,t)};function bI(i){return i.address===Qt.address?Ze:i}function gI(i){return i.address===Ze.address?Qt:i}var lt=o=>{var r=o,{address:i,programId:e,decimals:t}=r,n=De(r,["address","programId","decimals"]);return O({chainId:101,address:Bt(i).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},hn=i=>i?W(O({},i),{transferFeeConfigAuthority:i.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:i.withdrawWithheldAuthority.toBase58(),withheldAmount:i.withheldAmount.toString(),olderTransferFee:W(O({},i.olderTransferFee),{epoch:i.olderTransferFee.epoch.toString(),maximumFee:i.olderTransferFee.maximumFee.toString()}),newerTransferFee:W(O({},i.newerTransferFee),{epoch:i.newerTransferFee.epoch.toString(),maximumFee:i.newerTransferFee.maximumFee.toString()})}):void 0;import xc from"bn.js";var Gs=new xc(25),ir=new xc(1e4),tf={4:3,5:3};import{PublicKey as Ie,SystemProgram as Nc,SYSVAR_RENT_PUBKEY as bf,TransactionInstruction as un}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as gf,TOKEN_PROGRAM_ID as ui}from"@solana/spl-token";var Xs=N([q("instruction"),w("amountIn"),w("minAmountOut")]),zs=N([q("instruction"),w("maxAmountIn"),w("amountOut")]),KI=N([q("instruction"),q("nonce")]),Qs=N([q("instruction"),q("nonce"),w("startTime")]),to=N([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"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),w("swapBase2QuoteFee"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),w("swapQuote2BaseFee"),L("baseVault"),L("quoteVault"),L("baseMint"),L("quoteMint"),L("lpMint"),L("openOrders"),L("marketId"),L("marketProgramId"),L("targetOrders"),L("withdrawQueue"),L("lpVault"),L("owner"),w("lpReserve"),Y(w(),3,"padding")]),nf=N([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"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),L("baseVault"),L("quoteVault"),L("baseMint"),L("quoteMint"),L("lpMint"),L("modelDataAccount"),L("openOrders"),L("marketId"),L("marketProgramId"),L("targetOrders"),L("owner"),Y(w(),64,"padding")]),Ys=N([q("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide"),w("otherAmountMin")]),js=N([q("instruction"),w("lpAmount"),w("baseAmountMin"),w("quoteAmountMin")]),CI={4:to,5:nf},Sc=N([w("fee")]);import{PublicKey as of}from"@solana/web3.js";var ai=new of("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Dn=5e4,rf=N([w("x"),w("y"),w("price")]),sf=N([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),Y(rf,Dn,"DataElement")]);function af(i,e){return[0,Dn-2]}function uf(i){return[0,Dn-2]}function cf(i){return[0,Dn-2]}function lf(i,e,t){let[n,o]=af(e,t),r=n,s=o,a=0,c=e*i.multiplier/t;for(;r<=s;){if(a=Math.floor((s+r)/2),a===0||a>=Dn-2)return[a,a,!1];let u=i.DataElement[a].x*i.multiplier/i.DataElement[a].y,l=i.DataElement[a-1].x*i.multiplier/i.DataElement[a-1].y,m=i.DataElement[a+1].x*i.multiplier/i.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];r=a+1}}return[a,a,!1]}function Hs(i,e,t){let[n,o,r]=lf(i,e,t);if(!r)return 0;if(n===o){let s=i.DataElement[n].x;return e*i.multiplier/s}else{let s=i.DataElement[n].x,a=i.DataElement[n].y,c=i.DataElement[o].x,u=i.DataElement[o].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*i.multiplier*l/p}}function Fn(i,e,t){return e*i.multiplier/t}function Kc(i,e,t){return e*t/i.multiplier}function mf(i,e){let[t,n]=uf(e),o=t,r=n,s=0,a=e;for(;o<r;){if(s=Math.floor((r+o)/2),s<=0||s>Dn-2)return[s,s,!1];let c=i.DataElement[s].x,u=i.DataElement[s-1].x,l=i.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)r=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];o=s+1}}return[s,s,!1]}function df(i,e){let[t,n]=cf(e),o=t,r=n,s=0,a=e;for(;o<=r;){if(s=Math.floor((r+o)/2),s<=0||s>=Dn-2)return[s,s,!1];let c=i.DataElement[s].y,u=i.DataElement[s-1].y,l=i.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)o=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];r=s-1}}return[s,s,!1]}function Cc(i,e,t,n){let o=n?e+t:e-t,[r,s,a]=mf(i,o);if(!a)return[0,0,!1,a];if(r===s)return[i.DataElement[s].price,i.DataElement[s].y,!1,a];{let c=i.DataElement[r].x,u=i.DataElement[s].x,l=i.DataElement[r].price,m=i.DataElement[s].price,d=i.DataElement[r].y,p=i.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(o-c)*i.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-o)*i.multiplier/l),[y,f,!1,a]}}}function pf(i,e,t,n){let o=n?e-t:e+t,[r,s,a]=df(i,o);if(!a)return[0,0,!1,a];if(r===s)return[i.DataElement[s].price,i.DataElement[s].x,!1,a];{let c=i.DataElement[r].x,u=i.DataElement[s].x,l=i.DataElement[r].price,m=i.DataElement[s].price,d=i.DataElement[r].y,p=i.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-o)/i.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(o-p)/i.multiplier),[y,f,!1,a]}}}function ff(i,e){let t=Cc(i,e,0,!1);return t[3]?t[0]:0}function Rc(i,e,t,n){let o=Hs(i,e,t),r=Fn(i,e,o),s=Fn(i,t,o),a=Fn(i,n,o),c=!0,[u,l,m,d]=Cc(i,r,a,c);if(!d)return 0;if(m)return n*i.multiplier/u;{let p=s-l;return Kc(i,p,o)}}function Lc(i,e,t,n){let o=Hs(i,e,t),r=Fn(i,e,o),s=Fn(i,t,o),a=Fn(i,n,o),c=!1,[u,l,m,d]=pf(i,s,a,c);if(!d)return 0;if(m)return n*u/i.multiplier;{let p=r-l;return Kc(i,p,o)}}function yf(i){let e=sf.decode(i);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 Oc(i,e,t,n){let o=ff(i,Fn(i,e,Hs(i,e,t)))/i.multiplier;return n?o:1/o}var si=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(ai);e&&(this._layoutData=yf(e==null?void 0:e.data))}}};var Mc=me("Raydium_liquidity_instruction");function _c(i){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:r,fixedSide:s,otherAmountMin:a}=i,c=Buffer.alloc(Ys.span);Ys.encode({instruction:3,baseAmountIn:Z(o),quoteAmountIn:Z(r),otherAmountMin:Z(a),fixedSide:s==="base"?qe:Za},c);let u=[k({pubkey:ui,isWritable:!1}),k({pubkey:new Ie(e.id)}),k({pubkey:new Ie(t.authority),isWritable:!1}),k({pubkey:new Ie(t.openOrders),isWritable:!1}),k({pubkey:new Ie(t.targetOrders)}),k({pubkey:new Ie(e.lpMint.address)}),k({pubkey:new Ie(t.vault.A)}),k({pubkey:new Ie(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(k({pubkey:ai})),u.push(k({pubkey:new Ie(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 Ie(t.marketEventQueue),isWritable:!1})),new un({programId:new Ie(e.programId),keys:u,data:c})}function Zs(i){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:r,quoteAmountMin:s}=i,a=Ke(t),c=4;if(e.pooltype.includes("StablePool")&&(c=5),c===4||c===5){let u=Buffer.alloc(js.span);js.encode({instruction:4,lpAmount:Z(o),baseAmountMin:Z(r),quoteAmountMin:Z(s)},u);let l=[k({pubkey:ui,isWritable:!1}),k({pubkey:a.id}),k({pubkey:a.authority,isWritable:!1}),k({pubkey:a.openOrders}),k({pubkey:a.targetOrders}),k({pubkey:a.mintLp.address}),k({pubkey:a.vault.A}),k({pubkey:a.vault.B})];return c===5?l.push(k({pubkey:ai})):(l.push(k({pubkey:a.id})),l.push(k({pubkey:a.id}))),l.push(k({pubkey:a.marketProgramId,isWritable:!1}),k({pubkey:a.marketId}),k({pubkey:a.marketBaseVault}),k({pubkey:a.marketQuoteVault}),k({pubkey:a.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:a.marketEventQueue}),k({pubkey:a.marketBids}),k({pubkey:a.marketAsks})),new un({programId:a.programId,keys:l,data:u})}return new un({programId:a.programId,keys:[]})}function $s({programId:i,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:r,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:A,openTime:P,coinAmount:h,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let I=N([q("instruction"),q("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),C=[{pubkey:ui,isSigner:!1,isWritable:!1},{pubkey:gf,isSigner:!1,isWritable:!1},{pubkey:Nc.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(I.span);return I.encode({instruction:1,nonce:A,openTime:P,coinAmount:h,pcAmount:B},x),{instruction:new un({keys:C,programId:i,data:x}),instructionType:F.AmmV4CreatePool}}function XI(i){let e=N([q("instruction"),q("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new Ie(i.id),isWritable:!1}),k({pubkey:new Ie(i.authority),isWritable:!1}),k({pubkey:new Ie(i.openOrders),isWritable:!1}),k({pubkey:new Ie(i.vault.A),isWritable:!1}),k({pubkey:new Ie(i.vault.B),isWritable:!1}),k({pubkey:new Ie(i.mintLp.address),isWritable:!1}),k({pubkey:new Ie(i.marketId),isWritable:!1}),k({pubkey:new Ie(i.marketEventQueue),isWritable:!1})];return new un({programId:new Ie(i.programId),keys:n,data:t})}function Af({poolKeys:i,userKeys:e,amountIn:t,minAmountOut:n},o){let r=Ke(i),s=Buffer.alloc(Xs.span);Xs.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[k({pubkey:ui,isWritable:!1}),k({pubkey:r.id}),k({pubkey:r.authority,isWritable:!1}),k({pubkey:r.openOrders})];return o===4&&a.push(k({pubkey:r.targetOrders})),a.push(k({pubkey:r.vault.A}),k({pubkey:r.vault.B})),o===5&&a.push(k({pubkey:ai})),a.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})),new un({programId:r.programId,keys:a,data:s})}function wf({poolKeys:i,userKeys:e,maxAmountIn:t,amountOut:n},o){let r=Ke(i),s=Buffer.alloc(zs.span);zs.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[k({pubkey:ui,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 o===5&&a.push(k({pubkey:ai})),a.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 un({programId:r.programId,keys:a,data:s})}function or(i){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:r,fixedSide:s}=i;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return Af(W(O({},a),{amountIn:o,minAmountOut:r}),t);if(s==="out")return wf(W(O({},a),{maxAmountIn:o,amountOut:r}),t);Mc.logWithError("invalid params","params",i)}throw Mc.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function zI({poolKeys:i,userKeys:e,startTime:t}){let n=Buffer.alloc(Qs.span);Qs.encode({instruction:0,nonce:5,startTime:Z(t)},n);let o=Ke(i),r=[k({pubkey:ui,isWritable:!1}),k({pubkey:Nc.programId,isWritable:!1}),k({pubkey:bf,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.mintLp.address}),k({pubkey:o.mintA.address,isWritable:!1}),k({pubkey:o.mintB.address,isWritable:!1}),k({pubkey:o.vault.A,isWritable:!1}),k({pubkey:o.vault.B,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.targetOrders}),k({pubkey:e.lpTokenAccount}),k({pubkey:o.id,isWritable:!1}),k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId,isWritable:!1}),k({pubkey:e.payer,isSigner:!0})];return new un({programId:o.programId,keys:r,data:n})}function vc({poolKeys:i}){let e=N([q("instruction"),q("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new Ie(i.id),isWritable:!1}),k({pubkey:new Ie(i.authority),isWritable:!1}),k({pubkey:new Ie(i.openOrders),isWritable:!1}),k({pubkey:new Ie(i.vault.A),isWritable:!1}),k({pubkey:new Ie(i.vault.B),isWritable:!1}),k({pubkey:new Ie(i.mintLp.address),isWritable:!1}),k({pubkey:new Ie(i.marketId),isWritable:!1}),k({pubkey:new Ie(i.marketEventQueue),isWritable:!1})];return{instruction:new un({programId:new Ie(i.programId),keys:n,data:t})}}import{PublicKey as hf}from"@solana/web3.js";import no from"bn.js";import{TOKEN_PROGRAM_ID as Tf}from"@solana/spl-token";import{PublicKey as Pf}from"@solana/web3.js";var kf=me("Raydium_liquidity_serum");function Vc({programId:i,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));o=Pf.createProgramAddressSync(r,i)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:o,nonce:n}}throw kf.logWithError("unable to find a viable program address nonce","params",{programId:i,marketId:e}),new Error("unable to find a viable program address nonce")}function rr({programId:i}){let{publicKey:e}=ue([Buffer.from("amm_config_account_seed","utf-8")],i);return e}function Wn({name:i,programId:e,marketId:t}){let{publicKey:n}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(i,"utf-8")],e);return n}function If({programId:i,marketId:e}){let{publicKey:t}=ue([i.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],i);return t}function ta({programId:i}){return ue([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],i)}function na({version:i,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:r,quoteDecimals:s,programId:a,marketProgramId:c}){let u=Wn({name:"amm_associated_seed",programId:a,marketId:t}),l=Wn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=ta({programId:a}),p=Wn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=Wn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=Wn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=If({programId:a,marketId:t}),g=Wn({name:"target_associated_seed",programId:a,marketId:t}),A=Wn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:P}=Vc({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:r,quoteDecimals:s,lpDecimals:r,version:i,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:P,lookupTableAccount:hf.default,configId:rr({programId:a})}}var Js;async function uB({connection:i,poolKeysList:e,config:t}){Js||(Js=new si({connection:i}),await Js.initStableModelLayout());let n=e.map(s=>vc({poolKeys:s}));return(await au(i,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=uu(s,"GetPoolData"),c=new no(Jt(a,"status")),u=Number(Jt(a,"coin_decimals")),l=Number(Jt(a,"pc_decimals")),m=Number(Jt(a,"lp_decimals")),d=new no(Jt(a,"pool_coin_amount")),p=new no(Jt(a,"pool_pc_amount")),y=new no(Jt(a,"pool_lp_supply")),f="0";try{f=Jt(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new no(f)}})}var ea={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},sr=i=>{let e={},t=Tf.toBase58();return Object.keys(i).map(n=>{let o=i[n],[r,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:lt({address:r,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:lt({address:s,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new M(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new M(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:ea,week:ea,month:ea,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:rr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:lt({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0}}),e};import _e from"bn.js";import{PublicKey as io}from"@solana/web3.js";import oo from"bn.js";import{TOKEN_PROGRAM_ID as Wc}from"@solana/spl-token";import{SystemProgram as qn,SYSVAR_RENT_PUBKEY as xf,Transaction as Ec,TransactionInstruction as Sf}from"@solana/web3.js";import{createInitializeAccountInstruction as Fc,TOKEN_PROGRAM_ID as Dc}from"@solana/spl-token";function Bf(i="accountFlags"){let e=new Qo(i);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ia=N([Ae(5),Bf("accountFlags"),L("ownAddress"),w("vaultSignerNonce"),L("baseMint"),L("quoteMint"),L("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),L("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),L("requestQueue"),L("eventQueue"),L("bids"),L("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),Ae(7)]);function Kf({programId:i,marketInfo:e}){let t=N([q("version"),rt("instruction"),w("baseLotSize"),w("quoteLotSize"),en("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:xf,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 Sf({keys:n,programId:i,data:o})}async function ar({connection:i,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Ec,o=await i.getMinimumBalanceForRentExemption(165);n.add(qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:Dc}),qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:Dc}),Fc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Fc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await i.getMinimumBalanceForRentExemption(ia.span),space:ia.span,programId:t.programId}));let r=new Ec;return r.add(qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await i.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await i.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await i.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await i.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Kf({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:[F.CreateAccount,F.CreateAccount,F.InitAccount,F.InitAccount]},{transaction:r,signer:[],instructionTypes:[F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.InitMarket]}]}var ci=class extends Me{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:r,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d}){let p=this.scope.ownerPubKey,y=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,f=Ve({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-market`}),b=Ve({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-request`}),g=Ve({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-event`}),A=Ve({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-bids`}),P=Ve({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-asks`}),h=Ve({fromPublicKey:p,programId:Wc,assignSeed:y&&`${y}-baseVault`}),B=Ve({fromPublicKey:p,programId:Wc,assignSeed:y&&`${y}-quoteVault`}),T=0,S=new oo(100);function I(){let G=new oo(0);for(;;)try{return{vaultOwner:io.createProgramAddressSync([f.publicKey.toBuffer(),G.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:G}}catch{if(G.iaddn(1),G.gt(new oo(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:x}=I(),K=new oo(Math.round(10**e.decimals*n)),V=new oo(Math.round(n*10**t.decimals*o));if(K.eq(qe))throw Error("lot size is too small");if(V.eq(qe))throw Error("tick size or lot size is too small");let R=await ar({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:f,baseMint:e.mint,quoteMint:t.mint,baseVault:h,quoteVault:B,vaultOwner:C,requestQueue:b,eventQueue:g,bids:A,asks:P,feeRateBps:T,quoteDustThreshold:S,vaultSignerNonce:x,baseLotSize:K,quoteLotSize:V,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),X=this.createTxBuilder();X.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let G of R.slice(1,R.length))X.addInstruction({instructions:G.transaction.instructions,signers:G.signer,instructionTypes:G.instructionTypes});return m===0?X.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:f.publicKey,requestQueue:b.publicKey,eventQueue:g.publicKey,bids:A.publicKey,asks:P.publicKey,baseVault:h.publicKey,quoteVault:B.publicKey,baseMint:new io(e.mint),quoteMin:new io(t.mint)}}):X.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:f.publicKey,requestQueue:b.publicKey,eventQueue:g.publicKey,bids:A.publicKey,asks:P.publicKey,baseVault:h.publicKey,quoteVault:B.publicKey,baseMint:new io(e.mint),quoteMin:new io(t.mint)}})}};var ro=class extends Me{constructor(t){super(t);this.stableLayout=new si({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:r}){let s=new _e(new M(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=nr(t[r?"mintB":"mintA"]),[c,u]=[new _e(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new _e(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new _e(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",r?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",r?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=r?"base":"quote";this.logDebug("input side:",m);let d=qe;s.isZero()||(d=m==="base"?Ro(s.mul(u),c):Ro(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Ro(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let y=new ve(new _e(1)).add(o),f=new ve(new _e(1)).sub(o),b=y.mul(d).quotient,g=f.mul(d).quotient,A=new be(a,d),P=new be(a,b),h=new be(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",P.toFixed()),{anotherAmount:A,maxAnotherAmount:P,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:r,amountInB:s,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",s),(r.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:s.toFixed()});let{account:d}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:y}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[f,b]=[r.token,s.token],g=await d.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1}),A=await d.getCreatedTokenAccount({mint:b.mint,associatedOnly:!1});!g&&!A&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",d.tokenAccounts);let P=await d.getCreatedTokenAccount({mint:new ze(n.lpMint.address)}),h=[f,b],B=[g,A],T=[r.raw,s.raw],S=r.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",c),S==="quote"?(h.reverse(),B.reverse(),T.reverse(),I=c==="a"?"quote":"base"):S==="base"&&(I=c==="a"?"base":"quote");let[C,x]=h,[K,V]=B,[R,X]=T,G=o!=null?o:await this.getAmmPoolKeys(n.id),D=this.createTxBuilder(),At=await d.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:K,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Te}=At,dt=De(At,["tokenAccount"]);D.addInstruction(dt);let Ct=await d.handleTokenAccount({side:"in",amount:X,mint:x.mint,tokenAccount:V,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Se}=Ct,bt=De(Ct,["tokenAccount"]);D.addInstruction(bt);let Bn=await d.handleTokenAccount({side:"out",amount:0,mint:new ze(n.lpMint.address),tokenAccount:P,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:gt}=Bn,Tt=De(Bn,["tokenAccount"]);return D.addInstruction(Tt),D.addInstruction({instructions:[_c({poolInfo:n,poolKeys:G,userKeys:{baseTokenAccount:Te,quoteTokenAccount:Se,lpTokenAccount:gt,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:X,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5AddLiquidity:F.AmmV4AddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),D.addCustomComputeBudget(m),l===0&&await D.buildV0(),D.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,lpAmount:r,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l}=t,m=o!=null?o:await this.getAmmPoolKeys(n.id),[d,p,y]=[new ze(n.mintA.address),new ze(n.mintB.address),new ze(n.lpMint.address)];this.logDebug("lpAmount:",r),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),r.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",r.toString());let{account:f}=this.scope,b=await f.getCreatedTokenAccount({mint:y,associatedOnly:!1});b||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",f.tokenAccounts);let g=await f.getCreatedTokenAccount({mint:d}),A=await f.getCreatedTokenAccount({mint:p}),P=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:B}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),x=await f.handleTokenAccount({side:"out",amount:0,mint:d,tokenAccount:g,bypassAssociatedCheck:h,checkCreateATAOwner:B}),{tokenAccount:T}=x,S=De(x,["tokenAccount"]);P.addInstruction(S);let K=await f.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:A,bypassAssociatedCheck:h,checkCreateATAOwner:B}),{tokenAccount:I}=K,C=De(K,["tokenAccount"]);return P.addInstruction(C),P.addInstruction({instructions:[Zs({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:b,baseTokenAccount:T,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity]}),P.addCustomComputeBudget(l),u===0?await P.buildV0():P.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:r,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Tn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){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 b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let D of this.scope.account.tokenAccountRawInfos)(g[D.accountInfo.mint.toString()]===void 0||ie(this.scope.ownerPubKey,D.accountInfo.mint,Tn).publicKey.equals(D.pubkey))&&(g[D.accountInfo.mint.toString()]=D.pubkey);let A=g[t.lpMint.address];if(A===void 0)throw Error("find lp account error in trade accounts");let P=o.add(a!=null?a:new _e(0)),h=t.mintA.address===we.WSOL.mint.toString(),B=t.mintB.address===we.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Tn,mint:new ze(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Tn,mint:new ze(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(C||{}),I===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=I,s!==void 0&&!(a!=null&&a.isZero())){let D=Rt[s.programId],Te=ut({programId:new ze(s.programId),poolId:new ze(s.id),owner:this.scope.ownerPubKey,version:D}),dt,Se=await this.scope.connection.getAccountInfo(Te);if(Se&&(dt=oi(D).decode(Se.data)),D!==6&&!dt){let{instruction:It,instructionType:Qn}=Di({id:new ze(s.id),programId:new ze(s.programId),version:D,ledger:Te,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[It],instructionTypes:[Qn]})}let bt=[];for(let It of s.rewardInfos){let Qn=It.mint.address===we.WSOL.mint.toString();if(g[It.mint.address])bt.push(g[It.mint.address]);else{let{account:xn,instructionParams:je}=await this.scope.account.getOrCreateTokenAccount({mint:new ze(It.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Qn,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});xn||this.logAndCreateError("farm reward account not found:",It.mint.address),je&&b.addInstruction(je),bt.push(xn)}}let gt=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Tt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:gt,lpAccount:A,rewardAccounts:bt},At=Rt[s.programId],Ct=At===6?Wi(Tt):At===5?qi(Tt):Ui(Tt),Bn={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};b.addInstruction({instructions:[Ct],instructionTypes:[Bn[At]]})}let x=await this.getAmmPoolKeys(t.id),K=Zs({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:A,baseTokenAccount:T,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:P,baseAmountMin:0,quoteAmountMin:0});b.addInstruction({instructions:[K],instructionTypes:[t.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[V,R]=t.mintA.address===n.mintA.address?[T,I]:[I,T],X=await this.scope.clmm.getClmmPoolKeys(n.id),G=await he.openPositionFromBaseInstructions(W(O({poolInfo:n,poolKeys:X,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:V,tokenAccountB:R},withMetadata:"create"},r),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:r,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var V;let b=u.feePayer||((V=this.scope.owner)==null?void 0:V.publicKey),g=u.useSOLBalance&&o.mint.equals(ur),A=u.useSOLBalance&&r.mint.equals(ur),P=this.createTxBuilder(),{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});P.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:A?{payer:b,amount:a}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:l,checkCreateATAOwner:m});if(P.addInstruction(S||{}),h===void 0||T===void 0)throw Error("you don't has some token account");let I=na({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:r.mint,baseDecimals:o.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:I.id,ammAuthority:I.authority,ammOpenOrders:I.openOrders,lpMint:I.lpMint,coinMint:I.baseMint,pcMint:I.quoteMint,coinVault:I.baseVault,pcVault:I.quoteVault,withdrawQueue:I.withdrawQueue,ammTargetOrders:I.targetOrders,poolTempLp:I.lpVault,marketProgramId:I.marketProgramId,marketId:I.marketId,ammConfigId:I.configId,feeDestinationId:y},{instruction:x,instructionType:K}=$s(W(O({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:h,userPcVault:T,userLpVault:ie(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:s,pcAmount:a}));return P.addInstruction({instructions:[x],instructionTypes:[K]}),P.addCustomComputeBudget(f),P.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=hi,marketProgram:n=$r,feeDestinationId:o=du,tokenProgram:r,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:y=!1,checkCreateATAOwner:f=!1,lotSize:b=1,tickSize:g=.01,txVersion:A,computeBudgetConfig:P}){var Pa,ka,ha;let h=this.scope.ownerPubKey,B=m.feePayer||((Pa=this.scope.owner)==null?void 0:Pa.publicKey),T=m.useSOLBalance&&s.mint.equals(ur),S=m.useSOLBalance&&a.mint.equals(ur),I=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=Ve({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-market`}),x=Ve({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-request`}),K=Ve({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-event`}),V=Ve({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-bids`}),R=Ve({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-asks`}),X=Ve({fromPublicKey:h,programId:Tn,assignSeed:I&&`${I}-baseVault`}),G=Ve({fromPublicKey:h,programId:Tn,assignSeed:I&&`${I}-quoteVault`}),D=0,Te=new _e(100);function dt(){let Xt=new _e(0);for(;;)try{return{vaultOwner:ze.createProgramAddressSync([C.publicKey.toBuffer(),Xt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Xt}}catch{if(Xt.iaddn(1),Xt.gt(new _e(25555)))throw Error("find vault owner error")}}let{vaultOwner:Se,vaultSignerNonce:bt}=dt(),gt=new _e(Math.round(10**s.decimals*b)),Tt=new _e(Math.round(b*10**a.decimals*g));if(gt.eq(qe))throw Error("lot size is too small");if(Tt.eq(qe))throw Error("tick size or lot size is too small");let At=await ar({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:Se,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:X,quoteVault:G,requestQueue:x,eventQueue:K,bids:V,asks:R,feeRateBps:D,quoteDustThreshold:Te,vaultSignerNonce:bt,baseLotSize:gt,quoteLotSize:Tt,lowestFeeMarket:d}}),Ct=this.createTxBuilder();Ct.addInstruction({instructions:At[0].transaction.instructions,signers:At[0].signer});for await(let Xt of At.slice(1,At.length))Ct.addInstruction({instructions:Xt.transaction.instructions,signers:Xt.signer,instructionTypes:Xt.instructionTypes});let{account:Bn,instructionParams:It}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:B,amount:c}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:y,checkCreateATAOwner:f,assignSeed:T&&I?`${I}-wsol`:void 0});Ct.addInstruction(It||{});let{account:Qn,instructionParams:xn}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:B,amount:u}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:y,checkCreateATAOwner:f,assignSeed:S&&I?`${I}-wsol`:void 0});if(Ct.addInstruction(xn||{}),Bn===void 0)throw Error("you don't has base token account");if(Qn===void 0)throw Error("you don't has quote token account");let je=na({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Br={programId:t,ammId:je.id,ammAuthority:je.authority,ammOpenOrders:je.openOrders,lpMint:je.lpMint,coinMint:je.baseMint,pcMint:je.quoteMint,coinVault:je.baseVault,pcVault:je.quoteVault,withdrawQueue:je.withdrawQueue,ammTargetOrders:je.targetOrders,poolTempLp:je.lpVault,marketProgramId:je.marketProgramId,marketId:je.marketId,ammConfigId:je.configId,feeDestinationId:o},{instruction:ll,instructionType:ml}=$s(W(O({},Br),{userWallet:this.scope.ownerPubKey,userCoinVault:Bn,userPcVault:Qn,userLpVault:ie(this.scope.ownerPubKey,je.lpMint,r).publicKey,nonce:je.nonce,openTime:l,coinAmount:c,pcAmount:u}));Ct.addInstruction({instructions:[ll],instructionTypes:[ml]});let wa=T||S?[((ka=It==null?void 0:It.instructions)==null?void 0:ka[0])||((ha=xn==null?void 0:xn.instructions)==null?void 0:ha[0])].filter(Xt=>!!Xt):void 0;return A===0?Ct.sizeCheckBuildV0({computeBudgetConfig:P,splitIns:wa,address:O({requestQueue:x.publicKey,eventQueue:K.publicKey,bids:V.publicKey,asks:R.publicKey,baseVault:X.publicKey,quoteVault:G.publicKey,baseMint:new ze(s.mint),quoteMin:new ze(a.mint)},Br)}):Ct.sizeCheckBuild({computeBudgetConfig:P,splitIns:wa,address:O({requestQueue:x.publicKey,eventQueue:K.publicKey,bids:V.publicKey,asks:R.publicKey,baseVault:X.publicKey,quoteVault:G.publicKey,baseMint:new ze(s.mint),quoteMin:new ze(a.mint)},Br)})}async getCreatePoolFee({programId:t}){let n=rr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return Sc.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:r,slippage:s}){let[a,c]=[o.toString(),r.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,A=t.version===4,P;if(A)P=new M(f.toString()).div(10**g).div(new M(y.toString()).div(10**b));else{let R=Oc(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?P=new M(1e6).div(R*1e6):P=new M(R*1e6).div(1e6)}let h=n,B=new _e(0),T=new _e(0);if(!h.isZero())if(A){T=Ft(h.mul(Gs),ir);let R=h.sub(T),X=y.add(R);B=f.mul(R).div(X)}else{T=h.mul(new _e(2)).div(new _e(1e4));let R=h.sub(T);p==="quote"?B=new _e(Rc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),R.toNumber())):B=new _e(Lc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),R.toNumber()))}let S=new _e(new M(B.toString()).mul(1-s).toFixed(0)),I=B,C=S,x=new M(B.toString()).div(new M(h.sub(T).toString()).toFixed(0));!h.isZero()&&!B.isZero()&&(x=new M(B.toString()).div(10**g).div(new M(h.sub(T).toString()).div(10**b)));let K=P.sub(x).div(P).mul(100);return{amountOut:I,minAmountOut:C,currentPrice:P,executionPrice:x,priceImpact:K,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:r,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=o.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new M(f.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(y.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(b).toString()} ${l.symbol||l.address}`);let g=new _e(0),A=n;if(!A.isZero()){A.gt(f)&&(A=f.sub(new _e(1)));let C=f.sub(A);g=y.mul(A).div(C).mul(ir).div(ir.sub(Gs))}let P=new _e(new M(g.toString()).mul(1+s).toFixed(0)),h=g,B=P;this.logDebug("amountIn:",new M(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(B.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!A.isZero()&&(T=new M(A.toString()).div(10**m.decimals).div(new M(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(h.toString()),I=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${I.toString()}%`),{amountIn:h,maxAmountIn:B,currentPrice:b,executionPrice:T,priceImpact:I}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:r,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===H.toBase58(),A=y&&b.address===H.toBase58(),{account:P,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Tn,mint:new ze(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(h||{}),P||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:P,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Tn,mint:new ze(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:d});m.addInstruction(T||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:A,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),m.addInstruction({instructions:[or({version:I,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:r,fixedSide:a})],instructionTypes:[I===4?F.AmmV4SwapBaseIn:F.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await Qe(this.scope.connection,t.map(l=>({pubkey:new ze(l)})),n),r={},s=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=to.decode(m.accountInfo.data);r[String(t[l])]=W(O({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await Qe(this.scope.connection,s.map(l=>({pubkey:new ze(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new _e(Cf.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(r)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=W(O({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=sr({[t]:n}),r=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:s[0]}}};import{PublicKey as Q}from"@solana/web3.js";import ht from"bn.js";import{AccountLayout as qc,TOKEN_2022_PROGRAM_ID as li,TOKEN_PROGRAM_ID as so}from"@solana/spl-token";var ao=class extends Me{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)||Q.default,mint1:o,mint2:r,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new ht(new Q(o.address).toBuffer()).gt(new ht(new Q(r.address).toBuffer()))?[r,o,new M(1).div(a)]:[o,r,a],g=te.priceToSqrtPriceX64(b,y.decimals,f.decimals),A=await he.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(A),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:W(O({},A.address),{programId:t.toString(),id:A.address.poolId.toString(),mintA:y,mintB:f,openTime:c.toString(),vault:{A:A.address.mintAVault.toString(),B:A.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:O({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:A.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},ac),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:y,txVersion:f}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let b=this.createTxBuilder(),g=null,A=null,P=n.useSOLBalance&&e.mintA.address===H.toString(),h=n.useSOLBalance&&e.mintB.address===H.toString(),[B,T]=s==="MintA"?[a,c]:[c,a],{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:l,checkCreateATAOwner:m});S&&(g=S),b.addInstruction(I||{});let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||T.isZero()?{payer:this.scope.ownerPubKey,amount:T}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});C&&(A=C),b.addInstruction(x||{}),(!g||!A)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:g==null?void 0:g.toBase58(),ownerTokenAccountB:A==null?void 0:A.toBase58()});let K=t||await this.getClmmPoolKeys(e.id),V=await he.openPositionFromBaseInstructions({poolInfo:e,poolKeys:K,ownerInfo:W(O({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:A}),tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return b.addInstruction(V),b.addCustomComputeBudget(y),b.versionBuild({txVersion:f,extInfo:O({},V.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:r,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y,nft2022:f}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let b=this.createTxBuilder(),g=null,A=null,P=n.useSOLBalance&&e.mintA.address===H.toBase58(),h=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});B&&(g=B),b.addInstruction(T||{});let{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});S&&(A=S),b.addInstruction(I||{}),(g===void 0||A===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),x=await he.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:A},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:r,withMetadata:m,getEphemeralSigners:y,nft2022:f});return b.addInstruction(x),b.addCustomComputeBudget(p),b.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){var I;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:r,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===H.toString(),g=c.useSOLBalance&&t.mintB.address===H.toString(),{account:A,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A&&(y=A),p.addInstruction(P||{});let{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});h&&(f=h),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=he.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:r,amountMaxB:s,nft2022:(I=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:I.owner.equals(li)});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){var S;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:r,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===H.toString(),b=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(o==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(A||{});let{account:P,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(o==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:r}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});P&&(y=P),d.addInstruction(h||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=he.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:o,baseAmount:r,otherAmountMax:s,nft2022:(S=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:S.owner.equals(li)});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){var V;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:r,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d,nftAccount:p}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let y=this.createTxBuilder(),f=r.useSOLBalance&&t.mintA.address===H.toString(),b=r.useSOLBalance&&t.mintB.address===H.toString(),g,A,{account:P,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=P,h&&y.addInstruction(h);let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A=B,T&&y.addInstruction(T);let S=[];for(let R of t.rewardDefaultInfos){let X=r.useSOLBalance&&R.mint.address===H.toString(),G;if(R.mint.address===t.mintA.address)G=g;else if(R.mint.address===t.mintB.address)G=A;else{let{account:D,instructionParams:Te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(R.mint.programId),mint:new Q(R.mint.address),notUseTokenAccount:X,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!X,associatedOnly:X?!1:u,checkCreateATAOwner:l});G=D,Te&&y.addInstruction(Te)}S.push(G)}!g&&!A&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=n!=null?n:await this.getClmmPoolKeys(t.id),C=(V=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:V.owner.equals(li),x=await he.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:A,rewardAccounts:S},liquidity:c,amountMinA:s,amountMinB:a,nft2022:C});y.addInstruction({instructions:x.instructions,instructionTypes:[F.ClmmDecreasePosition]});let K=O({},x.address);if(r.closePosition){let R=await he.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:C});y.addInstruction({endInstructions:R.instructions,endInstructionTypes:R.instructionTypes}),K=O(O({},K),R.address)}return y.addCustomComputeBudget(m),y.versionBuild({txVersion:d,extInfo:{address:K}})}async lockPosition(e){var d;let{programId:t=Jn,authProgramId:n=Ti,poolProgramId:o=bn,ownerPosition:r,payer:s,computeBudgetConfig:a,txVersion:c,getEphemeralSigners:u}=e,l=this.createTxBuilder(),m=await he.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:r.nftMint,getEphemeralSigners:u,nft2022:(d=await this.scope.connection.getAccountInfo(r.nftMint))==null?void 0:d.owner.equals(li)});return l.addInstruction(m),l.addCustomComputeBudget(a),l.versionBuild({txVersion:c,extInfo:m.address})}async harvestLockPosition(e){let{programId:t=Jn,authProgramId:n=Ti,clmmProgram:o=bn,poolKeys:r,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=r||await this.getClmmPoolKeys(s.poolId.toString()),p=this.createTxBuilder(),y=await this.scope.connection.getAccountInfo(s.positionId);y||this.logger.logWithError("position not found",s.positionId);let f=$i.decode(y.data),b=a.useSOLBalance&&d.mintA.address===H.toString(),g=a.useSOLBalance&&d.mintB.address===H.toString(),A,P,{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new Q(d.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A=h,B&&p.addInstruction(B);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new Q(d.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});P=T,S&&p.addInstruction(S);let I={},C=[];for(let Se of d.rewardInfos){let bt=a.useSOLBalance&&Se.mint.address===H.toString(),gt=I[Se.mint.address];if(!gt){let{account:Tt,instructionParams:At}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(Se.mint.programId),mint:new Q(Se.mint.address),notUseTokenAccount:bt,owner:this.scope.ownerPubKey,skipCloseAccount:!bt,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:bt?!1:c});gt=Tt,At&&p.addInstruction(At)}I[Se.mint.address]=gt,C.push(gt)}let x=Yi(t,s.lockNftMint).publicKey,K=ie(this.scope.ownerPubKey,s.lockNftMint,so).publicKey,V=j.getTickArrayStartIndexByTick(f.tickLower,d.config.tickSpacing),R=j.getTickArrayStartIndexByTick(f.tickUpper,d.config.tickSpacing),{publicKey:X}=de(new Q(d.programId),s.poolId,V),{publicKey:G}=de(new Q(d.programId),s.poolId,R),{publicKey:D}=qt(new Q(d.programId),s.poolId,f.tickLower,f.tickUpper),Te=[];for(let Se=0;Se<d.rewardInfos.length;Se++)Te.push({poolRewardVault:new Q(d.rewardInfos[Se].vault),ownerRewardVault:C[Se],rewardMint:new Q(d.rewardInfos[Se].mint.address)});let dt=await he.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:x,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:K,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:D,vaultA:new Q(d.vault.A),vaultB:new Q(d.vault.B),tickArrayLower:X,tickArrayUpper:G,userVaultA:A,userVaultB:P,mintA:new Q(d.mintA.address),mintB:new Q(d.mintB.address),rewardAccounts:Te,exTickArrayBitmap:Xe(o,s.poolId).publicKey});return p.addInstruction({instructions:[dt],instructionTypes:[F.ClmmHarvestLockPosition]}),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o}){var c;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=he.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(c=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:c.owner.equals(li)});return r.addInstruction(a).versionBuild({txVersion:o,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(n.mint.address),mint:new Q(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ht(new M(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:r});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=he.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new Q(n.mint.programId),mint:new Q(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:re.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of o){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ht(new M(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=he.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new Q(m.mint.programId),mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:re.decimalToX64(m.perSecond)}});l=O(O({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(H),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ht(new M(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:r});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=he.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:re.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===H.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ht(new M(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=he.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:re.decimalToX64(m.perSecond)}});u.addInstruction(b),l=O(O({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(H),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:o,checkCreateATAOwner:r});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=he.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:o,checkCreateATAOwner:r});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=he.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=O(O({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),A;!s||s.equals(new M(0))?A=f?Ot.add(new ht(1)):Mt.sub(new ht(1)):A=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?o:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});P=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:o}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!P||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(he.makeSwapBaseInInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:h},inputMint:new Q(n),amountIn:o,amountOutMin:r,sqrtPriceLimitX64:A,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),A;!s||s.equals(new M(0))?A=n.toString()===e.mintB.address?Ot.add(new ht(1)):Mt.sub(new ht(1)):A=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});P=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!P||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(he.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:h},outputMint:new Q(n),amountOut:o,amountInMax:r,sqrtPriceLimitX64:A,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u}){var f,b;let l={};for(let g of this.scope.account.tokenAccountRawInfos)r?ie(this.scope.ownerPubKey,g.accountInfo.mint,a).publicKey.equals(g.pubkey)&&(l[g.accountInfo.mint.toString()]=g.pubkey):l[g.accountInfo.mint.toString()]=g.pubkey;let m=Object.values(t).flat().map(g=>g.nftMint),d=await Qe(this.scope.connection,m.map(g=>({pubkey:g}))),p={};d.forEach(g=>{var A,P;p[g.pubkey.toBase58()]=(P=(A=g==null?void 0:g.accountInfo)==null?void 0:A.owner)!=null?P:null});let y=this.createTxBuilder();for(let g of Object.values(e)){if(t[g.id]===void 0||!t[g.id].find(x=>!x.liquidity.isZero()||x.rewardInfos.find(K=>!K.rewardAmountOwed.isZero())))continue;let A=g,P=o.useSOLBalance&&A.mintA.address===H.toString(),h=o.useSOLBalance&&A.mintB.address===H.toString(),B=l[A.mintA.address];if(!B){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:A.mintA.programId,mint:new Q(A.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:P?!1:r,checkCreateATAOwner:s});B=x,K&&y.addInstruction(K)}let T=l[A.mintB.address];if(!T){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:A.mintB.programId,mint:new Q(A.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,skipCloseAccount:!h,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:h?!1:r,checkCreateATAOwner:s});T=x,K&&y.addInstruction(K)}l[A.mintA.address]=B,l[A.mintB.address]=T;let S=[];for(let x of A.rewardDefaultInfos){let K=o.useSOLBalance&&x.mint.address===H.toString(),V=l[x.mint.address];if(!V){let{account:R,instructionParams:X}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(x.mint.programId),mint:new Q(x.mint.address),notUseTokenAccount:K,owner:this.scope.ownerPubKey,skipCloseAccount:!K,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:K?!1:r});V=R,X&&y.addInstruction(X)}l[x.mint.address]=V,S.push(V)}let I=await this.getClmmPoolKeys(A.id),C=[];for(let x=0;x<I.rewardInfos.length;x++)C.push({poolRewardVault:new Q(I.rewardInfos[x].vault),ownerRewardVault:S[x],rewardMint:new Q(I.rewardInfos[x].mint.address)});for(let x of t[g.id]){let K=(f=n==null?void 0:n[g.id])==null?void 0:f[x.nftMint.toBase58()];if(K){let V=ie(this.scope.ownerPubKey,K.lockNftMint,so).publicKey,R=j.getTickArrayStartIndexByTick(x.tickLower,I.config.tickSpacing),X=j.getTickArrayStartIndexByTick(x.tickUpper,I.config.tickSpacing),{publicKey:G}=de(new Q(I.programId),K.poolId,R),{publicKey:D}=de(new Q(I.programId),K.poolId,X),{publicKey:Te}=qt(new Q(I.programId),K.poolId,x.tickLower,x.tickUpper),dt=Yi(Jn,K.lockNftMint).publicKey,Se=he.harvestLockPositionInstructionV2({programId:Jn,auth:Ti,lockPositionId:dt,clmmProgram:bn,lockOwner:this.scope.ownerPubKey,lockNftMint:K.lockNftMint,lockNftAccount:V,positionNftAccount:K.nftAccount,positionId:K.positionId,poolId:K.poolId,protocolPosition:Te,vaultA:new Q(I.vault.A),vaultB:new Q(I.vault.B),tickArrayLower:G,tickArrayUpper:D,userVaultA:B,userVaultB:T,mintA:new Q(I.mintA.address),mintB:new Q(I.mintB.address),rewardAccounts:C,exTickArrayBitmap:Xe(bn,K.poolId).publicKey});y.addInstruction({instructions:[Se],instructionTypes:[F.ClmmHarvestLockPosition],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]})}else{let V=he.decreaseLiquidityInstructions({poolInfo:A,poolKeys:I,ownerPosition:x,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:B,tokenAccountB:T,rewardAccounts:S},liquidity:new ht(0),amountMinA:new ht(0),amountMinB:new ht(0),nft2022:(b=p[x.nftMint.toBase58()])==null?void 0:b.equals(li)});y.addInstruction(V)}}}return c===0?y.sizeCheckBuildV0({computeBudgetConfig:u}):y.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Qi(e).publicKey);return t?kc.decode(t.data).whitelistMints.filter(o=>!o.equals(Q.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new ht(1))).map(s=>yt(new Q(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return o.forEach(s=>{if(!s)return;let a=$i.decode(s.data);r.push(a)}),r}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Qe(this.scope.connection,e.map(r=>({pubkey:new Q(r)})),t),o={};for(let r=0;r<e.length;r++){let s=n[r];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[r]));let a=Vn.decode(s.accountInfo.data),c=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[r])]=W(O({},a),{currentPrice:c,programId:s.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await Qe(this.scope.connection,Array.from(n).map(c=>({pubkey:new Q(c)}))),r={};o.forEach(c=>{!c.accountInfo||(r[c.pubkey.toBase58()]=wc.decode(c.accountInfo.data))});let s=await xe.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:lt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||so.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?hn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:lt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||so.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?hn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:W(O({},r[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await xe.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await Yn({connection:this.scope.connection,mints:Array.from(n).map(m=>new Q(m))}),{computeClmmPoolInfo:r,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await Qe(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=gc(r[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(qc.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(qc.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=W(O({},r[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:r[e].rewardInfos.filter(m=>!m.tokenVault.equals(Q.default)).map(m=>({mint:lt({address:m.tokenMint.toBase58(),programId:so.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:r[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{AccountLayout as Xf,NATIVE_MINT as Ar,TOKEN_PROGRAM_ID as Gt}from"@solana/spl-token";import ra from"bn.js";import dr from"decimal.js-light";import uo from"bn.js";function cr(i,e){if(e.isZero())throw Error("divisor is zero");return i.mod(e)}function Rf(i,e){if(e.isZero())throw Error("rhs is zero");let t=i.div(e);if(t.isZero())throw Error("quotient is zero");let n=cr(i,e);return n.gt(mi)&&(t=t.add(new uo(1)),e=i.div(t),n=cr(i,t),n.gt(mi)&&(e=e.add(new uo(1)))),[t,e]}var mi=new uo(0),lr=class{static swapWithoutFees(e,t,n){let o=t.mul(n),r=t.add(e),[s,a]=Rf(o,r),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,o,r){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(r===0)return{tokenAmount0:s,tokenAmount1:a};if(r===1)return cr(e.mul(n),t).gt(mi)&&s.gt(mi)&&(s=s.add(new uo(1))),cr(e.mul(o),t).gt(mi)&&a.gt(mi)&&(a=a.add(new uo(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Xc from"bn.js";var oa=new Xc(1e6);function Lf(i,e,t){return i.mul(e).add(t).sub(new Xc(1)).div(t)}function Gc(i,e,t){return i.mul(e).div(t)}var mr=class{static tradingFee(e,t){return Lf(e,t,oa)}static protocolFee(e,t){return Gc(e,t,oa)}static fundFee(e,t){return Gc(e,t,oa)}};var Uc=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Uc||{}),pr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,o){let r=mr.tradingFee(e,o),s=e.sub(r),{sourceAmountSwapped:a,destinationAmountSwapped:c}=lr.swapWithoutFees(s,t,n),u=a.add(r);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:r}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:o,quoteReserve:r,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[o,r,e.decimals,t.decimals,e.address]:[r,o,t.decimals,e.decimals,t.address],p=new dr(u.toString()).div(10**m).div(new dr(c.toString()).div(10**l)),y=a.gte(u)?u.sub(new ra(1)):a,f=u.sub(y),b=Ft(c.mul(y),f),g=Ft(b.mul(new ra(1e6)),new ra(1e6).sub(n)),A=g.sub(b),P=new dr(y.toString()).div(10**m).div(new dr(g.toString()).div(10**l)),h=p.isZero()?0:P.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:A,priceImpact:h}}};import Ee from"bn.js";import{PublicKey as co,TransactionInstruction as Un,Keypair as Wf,SystemProgram as qf}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Yc,TOKEN_2022_PROGRAM_ID as aa,TOKEN_PROGRAM_ID as In}from"@solana/spl-token";var Of=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Mf=Buffer.from("amm_config","utf8"),Nf=Buffer.from("pool","utf8"),_f=Buffer.from("pool_lp_mint","utf8"),vf=Buffer.from("pool_vault","utf8"),Vf=Buffer.from("observation","utf8");function di(i){return ue([Of],i)}function lS(i,e){return ue([Mf,Ff(e)],i)}function sa(i,e,t,n){return ue([Nf,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function Ef(i,e){return ue([_f,e.toBuffer()],i)}function zc(i,e,t){return ue([vf,e.toBuffer(),t.toBuffer()],i)}function fr(i,e){return ue([Vf,e.toBuffer()],i)}function Ff(i){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,i,!1),new Uint8Array(e)}function Qc({poolId:i,programId:e,configId:t,mintA:n,mintB:o}){let r=di(e).publicKey,s=i||sa(e,t,n,o).publicKey,a=Ef(e,s).publicKey,c=zc(e,s,n).publicKey,u=zc(e,s,o).publicKey,l=fr(e,s).publicKey;return{poolId:s,configId:t,authority:r,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Df=Buffer.from("locked_liquidity","utf8");function yr(i,e){return ue([Df,e.toBuffer()],i)}var Uf=me("Raydium_cpmm"),Gn={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]};function jc(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P){let h=N([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=sa(i,t,r,s).publicKey,T=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!o.equals(B),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:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Yc,isSigner:!1,isWritable:!1},{pubkey:Co,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],S=Buffer.alloc(h.span);return h.encode({amountMaxA:g,amountMaxB:A,openTime:P},S),new Un({keys:T,programId:i,data:Buffer.from([...Gn.initialize,...S])})}function Hc(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y){let f=N([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:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:aa,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Uf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Un({keys:b,programId:i,data:Buffer.from([...Gn.deposit,...g])})}function Zc(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y){let f=N([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:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:aa,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:yn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Un({keys:b,programId:i,data:Buffer.from([...Gn.withdraw,...g])})}function br(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y,f){let b=N([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:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},A),new Un({keys:g,programId:i,data:Buffer.from([...Gn.swapBaseInput,...A])})}function $c(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y,f){let b=N([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:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},A),new Un({keys:g,programId:i,data:Buffer.from([...Gn.swapBaseOutput,...A])})}async function Jc(i){var f;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:o}=i,r=[],[s,a]=[new co(t.id),new co(t.lpMint.address)],c;if(o)c=new co((await o(1))[0]);else{let b=Wf.generate();r.push(b),c=b.publicKey}let{publicKey:u}=ie(e.feePayer,c,In),{publicKey:l}=Nn(c),{publicKey:m}=yr(i.lockProgram,c),{publicKey:d}=ie(e.feePayer,a,In),{publicKey:p}=ie(i.lockAuthProgram,a,In),y=Gf({programId:i.lockProgram,auth:i.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:c,nftAccount:u,poolId:s,lockPda:m,mintLp:a,userLpVault:d,lockLpVault:p,poolVaultA:new co(n.vault.A),poolVaultB:new co(n.vault.B),metadataAccount:l,lpAmount:i.lpAmount,withMetadata:(f=i.withMetadata)!=null?f:!0});return{address:{nftMint:c,nftAccount:u,metadataAccount:l,lockPda:m,userLpVault:d,lockLpVault:p},instructions:[y],signers:r,instructionTypes:[F.CpmmLockLp],lookupTableAddress:[]}}function Gf({programId:i,auth:e,payer:t,liquidityOwner:n,nftOwner:o,nftMint:r,nftAccount:s,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:y,lpAmount:f,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:qf.programId,isSigner:!1,isWritable:!1},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:Yc,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1}],A=N([w("lpAmount"),Oe("withMetadata")]),P=Buffer.alloc(A.span);A.encode({lpAmount:f,withMetadata:b},P);let h=Buffer.from([...Gn.lockCpLiquidity,...P]);return new Un({keys:g,programId:i,data:h})}function el({programId:i,nftOwner:e,auth:t,nftAccount:n,lockPda:o,poolId:r,mintLp:s,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:y,cpmmProgram:f,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:f!=null?f:Ii,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Jr,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:aa,isSigner:!1,isWritable:!1},{pubkey:yn,isSigner:!1,isWritable:!1}],A=N([w("lpFeeAmount")]),P=Buffer.alloc(A.span);A.encode({lpFeeAmount:y},P);let h=Buffer.from([...Gn.collectCpFee,...P]);return new Un({keys:g,programId:i,data:h})}var tl=N([Ae(8),q("bump"),Oe("disableCreatePool"),en("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),L("protocolOwner"),L("fundOwner"),Y(w(),16)]),gr=N([Ae(8),L("configId"),L("poolCreator"),L("vaultA"),L("vaultB"),L("mintLp"),L("mintA"),L("mintB"),L("mintProgramA"),L("mintProgramB"),L("observationId"),q("bump"),q("status"),q("lpDecimals"),q("mintDecimalA"),q("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),Y(w(),32)]);var lo=class extends Me{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 Qe(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),o={},r=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=gr.decode(d.accountInfo.data);o[String(e[m])]=W(O({},p),{programId:d.accountInfo.owner}),r.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...r],d=await Qe(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=tl.decode(y.data)}}let c={},u=await Qe(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Ee(Xf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=W(O({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(y.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let r=e[o],[s,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return W(O({},n),{[o]:W(O({},r),{id:new z(o),configInfo:r.configInfo,version:7,authority:di(r.programId).publicKey,mintA:lt({address:s,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?hn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:lt({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?hn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Yn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=lt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?hn(n[t.mintA.toBase58()].feeConfig):void 0}}),r=lt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?hn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=lt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Gt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={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:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**r.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:di(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(d){var p=d,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l}=p,m=De(p,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var X,G,D;let y=r.feePayer||((X=this.scope.owner)==null?void 0:X.publicKey),f=new Ee(new z(m.mintA.address).toBuffer()).lte(new Ee(new z(m.mintB.address).toBuffer())),[b,g]=f?[m.mintA,m.mintB]:[m.mintB,m.mintA],[A,P]=f?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],h=r.useSOLBalance&&b.address===Ar.toBase58(),B=r.useSOLBalance&&g.address===Ar.toBase58(),[T,S]=[new z(b.address),new z(g.address)],I=this.createTxBuilder(),{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:T,tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:y,amount:A}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:s,checkCreateATAOwner:a});I.addInstruction(x||{});let{account:K,instructionParams:V}=await this.scope.account.getOrCreateTokenAccount({mint:new z(g.address),tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:y,amount:P}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:s,checkCreateATAOwner:a});if(I.addInstruction(V||{}),C===void 0||K===void 0)throw Error("you don't has some token account");let R=Qc({poolId:e,programId:t,configId:new z(u.id),mintA:T,mintB:S});return I.addInstruction({instructions:[jc(t,this.scope.ownerPubKey,new z(u.id),R.authority,R.poolId,T,S,R.lpMint,C,K,ie(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new z((G=b.programId)!=null?G:Gt),new z((D=g.programId)!=null?D:Gt),R.observationId,A,P,o)],instructionTypes:[F.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.versionBuild({txVersion:c,extInfo:{address:W(O({},R),{mintA:b,mintB:g,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:r,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:W(O({},t),{lpAmount:new M(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new ve(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(o.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),A=g.amount,P=t.mintA.address===Ar.toString(),h=t.mintB.address===Ar.toString(),B=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(r?o:A).isZero()?{payer:this.scope.ownerPubKey,amount:r?o:A}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(C||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||(r?A:o).isZero()?{payer:this.scope.ownerPubKey,amount:r?A:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(K||{}),!I&&!x&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let V=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Te=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:V,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:R}=Te,X=De(Te,["tokenAccount"]);B.addInstruction(X);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),D=new ve(new Ee(1)).sub(s);return B.addInstruction({instructions:[Hc(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),R,I,x,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:D.mul(f).quotient,r?b.amount:A,r?A:b.amount)],instructionTypes:[F.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var R,X;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:r,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new ve(new Ee(1)).sub(r),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(o.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(o.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[ge(l,t.mintA.extensions.feeConfig,d,!1),ge(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,A]=[new z(t.mintA.address),new z(t.mintB.address)],P=g.equals(H),h=A.equals(H),B,T,{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});B=S,I&&b.addInstruction(I);let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,associatedOnly:!h,checkCreateATAOwner:!1});T=C,x&&b.addInstruction(x),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let K=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});K||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let V=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Zc(new z(t.programId),this.scope.ownerPubKey,new z(V.authority),new z(t.id),K,B,T,new z(V.vault.A),new z(V.vault.B),g,A,new z(t.lpMint.address),o,l.sub((R=p.fee)!=null?R:new Ee(0)),m.sub((X=y.fee)!=null?X:new Ee(0)))],instructionTypes:[F.CpmmWithdrawLiquidity],lookupTableAddress:V.lookupTableAccount?[V.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var C,x,K,V,R,X;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:r,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)];r?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Ee((1+c)*1e4)).div(new Ee(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Ee((1-c)*1e4)).div(new Ee(1e4));let A=t.mintA.address===H.toBase58(),P=t.mintB.address===H.toBase58(),{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new z((C=t.mintA.programId)!=null?C:Gt),owner:this.scope.ownerPubKey,createInfo:A||!o?{payer:this.scope.ownerPubKey,amount:o?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});B&&f.addInstruction(B);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((x=t.mintB.programId)!=null?x:Gt),owner:this.scope.ownerPubKey,createInfo:P||o?{payer:this.scope.ownerPubKey,amount:o?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!h||!T)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:T,mintAUseSOLBalance:A,mintBUseSOLBalance:P,associatedOnly:y});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[r?$c(new z(t.programId),this.scope.ownerPubKey,new z(I.authority),new z(I.config.id),new z(t.id),o?h:T,o?T:h,new z(I.vault[o?"A":"B"]),new z(I.vault[o?"B":"A"]),new z((R=t[o?"mintA":"mintB"].programId)!=null?R:Gt),new z((X=t[o?"mintB":"mintA"].programId)!=null?X:Gt),o?b:g,o?g:b,fr(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):br(new z(t.programId),this.scope.ownerPubKey,new z(I.authority),new z(I.config.id),new z(t.id),o?h:T,o?T:h,new z(I.vault[o?"A":"B"]),new z(I.vault[o?"B":"A"]),new z((K=t[o?"mintA":"mintB"].programId)!=null?K:Gt),new z((V=t[o?"mintB":"mintA"].programId)!=null?V:Gt),o?b:g,o?g:b,fr(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[r?F.CpmmSwapBaseOut:F.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}async lockLp(e){var u,l,m,d,p;let{poolInfo:t,lpAmount:n,computeBudgetConfig:o,txVersion:r}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(),a=(u=e.poolKeys)!=null?u:await this.getCpmmPoolKeys(t.id),c=await Jc({poolInfo:t,poolKeys:a,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(l=e.feePayer)!=null?l:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:Bi,lockAuthProgram:(d=e.authProgram)!=null?d:xi,lpAmount:n,withMetadata:(p=e.withMetadata)!=null?p:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(c),s.addCustomComputeBudget(o),s.versionBuild({txVersion:r,extInfo:c.address})}async harvestLockLp(e){var x;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:r=Bi,authProgram:s=xi,cpmmProgram:a,computeBudgetConfig:c,txVersion:u}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let l=e.feePayer||this.scope.ownerPubKey,m=this.createTxBuilder(),[d,p]=[new z(t.mintA.address),new z(t.mintB.address)],y=d.equals(H),f=p.equals(H),b,g,{account:A,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:!y,checkCreateATAOwner:!1});b=A,P&&m.addInstruction(P);let{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});g=h,B&&m.addInstruction(B),(!b||!g)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:b,tokenAccountB:g});let T=(x=e.poolKeys)!=null?x:await this.getCpmmPoolKeys(t.id),{publicKey:S}=ie(l,o,Gt),{publicKey:I}=yr(r,o),{publicKey:C}=ie(s,new z(t.lpMint.address),Gt);return m.addInstruction({instructions:[el({programId:r!=null?r:Bi,nftOwner:this.scope.ownerPubKey,auth:s!=null?s:xi,nftMint:o,nftAccount:S,lockPda:I,poolId:new z(t.id),mintLp:new z(T.mintLp.address),userVaultA:b,userVaultB:g,poolVaultA:new z(T.vault.A),poolVaultB:new z(T.vault.B),mintA:d,mintB:p,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[F.CpmmCollectLockFee]}),m.addCustomComputeBudget(c),m.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let r=n.toString()===e.mintB.address,s=pr.swap(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new M(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ee((1-o)*1e4)).div(new Ee(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:r,epochInfo:s,baseIn:a}){var h,B,T,S,I,C,x,K,V;let c=1-Number(r.toSignificant())/100,u=new Ee(new M(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=ge(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Ee(0)),d=new Ee(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(T=(B=l.fee)==null?void 0:B.toString())!=null?T:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:qe,fee:void 0,expirationTime:void 0};if(!m.isZero()){let R=zf(y,t,n,d);this.logDebug("lpAmountData:",{amountA:R.amountA.toString(),amountB:R.amountB.toString()}),f=ge(R[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new ve(new Ee(1)).add(r),g=new ve(new Ee(1)).sub(r),A=ge(b.mul(f.amount.sub((S=f.fee)!=null?S:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),P=ge(g.mul(f.amount.sub((I=f.fee)!=null?I:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(x=(C=f.fee)==null?void 0:C.toString())!=null?x:0,"maxAnotherAmount:",A.amount.toString(),"maxAnotherAmountFee:",(V=(K=A.fee)==null?void 0:K.toString())!=null?V:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:A,minAnotherAmount:P,liquidity:y}}};function zf(i,e,t,n){let o=i.mul(e).div(n);!o.isZero()&&!i.mul(e).mod(n).isZero()&&(o=o.add(new Ee(1)));let r=i.mul(t).div(n);return!r.isZero()&&!i.mul(t).mod(n).isZero()&&(r=r.add(new Ee(1))),{amountA:o,amountB:r}}import{PublicKey as zn}from"@solana/web3.js";import{createTransferInstruction as al,TOKEN_PROGRAM_ID as Fe,TOKEN_2022_PROGRAM_ID as kr}from"@solana/spl-token";import hr from"bn.js";var nl={[vo.toBase58()]:3},il={3:vo};var ua=N([Ae(5),Ae(8),L("ownAddress"),w("vaultSignerNonce"),L("baseMint"),L("quoteMint"),L("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),L("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),L("requestQueue"),L("eventQueue"),L("bids"),L("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),Ae(7)]),ol={3:ua};import{PublicKey as rl}from"@solana/web3.js";var wr=me("Serum"),Pr=class{static getProgramId(e){let t=il[e];return t||wr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=nl[t];return n||wr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=ol[e];return t||wr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,r;for(;o<100;){try{let s=n.concat(Buffer.from([o]),Buffer.alloc(7));r=rl.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:r,nonce:o}}return wr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:rl.default,nonce:o}}};import{PublicKey as $,SystemProgram as ca,TransactionInstruction as la}from"@solana/web3.js";import Xn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Qf,TOKEN_2022_PROGRAM_ID as Yf,TOKEN_PROGRAM_ID as ma}from"@solana/spl-token";function LK(i,e,t,n,o,r,s,a,c,u,l,m){let d=N([q("instruction"),w("amountIn"),w("amountOut")]),p=[{pubkey:ca.programId,isSigner:!1,isWritable:!1},{pubkey:ma,isSigner:!1,isWritable:!1},{pubkey:new $(t.programId),isSigner:!1,isWritable:!1},{pubkey:new $(t.id),isSigner:!1,isWritable:!0},{pubkey:new $(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=Ke(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=Ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=Ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new la({keys:p,programId:i,data:y})}function OK(i,e,t,n,o,r,s,a,c,u){let l=N([q("instruction")]),m=[{pubkey:ca.programId,isSigner:!1,isWritable:!1},{pubkey:ma,isSigner:!1,isWritable:!1},{pubkey:new $(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new $(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new $(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=Ke(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=Ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=Ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new la({keys:m,programId:i,data:d})}function jf(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[k({pubkey:ma,isWritable:!1}),k({pubkey:Yf,isWritable:!1}),k({pubkey:Qf,isWritable:!1}),k({pubkey:ca.programId,isWritable:!1}),k({pubkey:e,isSigner:!0})];b.push(k({pubkey:t})),b.push(k({pubkey:o}));let g=[c,u],A=[l,m],P=[r,s,a];for(let S=0;S<g.length;S++){let I=g[S],C=P[S]===I.mintA.address;if(b.push(k({pubkey:new $(I.programId),isWritable:!1})),S===g.length-1?b.push(k({pubkey:o})):b.push(k({pubkey:n})),b.push(k({pubkey:new $(P[S])})),b.push(k({pubkey:new $(P[S+1])})),I.version===6){let x=A[S];b.push(k({pubkey:new $(x.config.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(k({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(k({pubkey:new $(I.observationId)})),b.push(k({pubkey:yn})),b.push(k({pubkey:Xe(new $(I.programId),new $(I.id)).publicKey})),f.push(Hf(I.sqrtPriceX64.toString(),C));for(let K of(T=y[S])!=null?T:[])b.push(k({pubkey:new $(K)}))}else if(I.version===5){let x=A[S];b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.authority),isWritable:!1})),b.push(k({pubkey:new $(x.marketProgramId)})),b.push(k({pubkey:new $(x.marketAuthority)})),b.push(k({pubkey:mu,isWritable:!1})),b.push(k({pubkey:new $(x.openOrders)})),b.push(k({pubkey:new $(x.vault.A)})),b.push(k({pubkey:new $(x.vault.B)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.marketId)})),b.push(k({pubkey:new $(x.marketBids)})),b.push(k({pubkey:new $(x.marketAsks)})),b.push(k({pubkey:new $(x.marketEventQueue)})),b.push(k({pubkey:new $(x.marketBaseVault)})),b.push(k({pubkey:new $(x.marketQuoteVault)}))}else if(I.version===4){let x=A[S],K=I.status!==1;b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.authority),isWritable:!1})),b.push(k({pubkey:new $(K?x.id:x.marketProgramId)})),b.push(k({pubkey:new $(K?x.id:x.marketAuthority)})),b.push(k({pubkey:new $(K?x.id:x.openOrders)})),b.push(k({pubkey:new $(x.vault.A)})),b.push(k({pubkey:new $(x.vault.B)})),b.push(k({pubkey:new $(K?x.id:x.marketId)})),b.push(k({pubkey:new $(K?x.id:x.marketBids)})),b.push(k({pubkey:new $(K?x.id:x.marketAsks)})),b.push(k({pubkey:new $(K?x.id:x.marketEventQueue)})),b.push(k({pubkey:new $(K?x.id:x.marketBaseVault)})),b.push(k({pubkey:new $(K?x.id:x.marketQuoteVault)}))}else if(I.version===7){let x=A[S];b.push(k({pubkey:new $(x.authority)})),b.push(k({pubkey:new $(x.config.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(k({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(k({pubkey:new $(I.observationId)}))}else throw Error("pool type error")}let h=N([q("insId"),w("amountIn"),w("amountOut"),Y(ee(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(h.span);return h.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new la({keys:b,programId:i,data:B})}function Hf(i,e){if(i)if(e){let t=new Xn(i).div(new Xn(25));return t.gt(Zo)?t:Zo}else{let t=new Xn(i).mul(new Xn(25));return t.lt($o)?t:$o}else return e?Zo:$o}function sl({routeProgram:i,ownerInfo:e,inputMint:t,swapInfo:n}){var o,r,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ke(m),p=t.equals(d.mintA.address)?Ot.add(xt):Mt.sub(xt);return he.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((r=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?r:new Xn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[br(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new $(m[d?"mintA":"mintB"].address),new $(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?F.CpmmSwapBaseIn:F.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[or({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new Xn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?F.AmmV5SwapBaseIn:F.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[jf(i,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new Xn(0)),n.remainingAccounts)],instructionTypes:[F.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var cn=new hr(0),mo=class extends Me{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(H));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}=e,r=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Z(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(s.addInstruction({instructions:[nn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):s.addInstruction({instructions:[nn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return s.versionBuild({txVersion:o})}async wrapWSol(e,t,n){let o=this.createTxBuilder(),r=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return o.addInstruction(r),o.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:r,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(H),m=u.amount.token.mint.equals(H),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?kr:Fe,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?kr:Fe);else{let{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?kr:Fe,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=h,B&&a.addInstruction(B)}m&&a.addInstruction({endInstructions:[nn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Fe})],endInstructionTypes:[F.CloseAccount]});let g;if(e.routeType==="route"){let h=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?kr:Fe)}let A=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),P=sl({routeProgram:r,inputMint:d,swapInfo:W(O({},e),{poolInfo:[...e.poolInfoList],poolKey:A,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[al(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]}),h.addInstruction(P);let{transactions:B}=s===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[al(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]})}return a.addInstruction(P),s===0?a.sizeCheckBuildV0({computeBudgetConfig:o,address:P.address}):a.sizeCheckBuild({computeBudgetConfig:o,address:P.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=hi,clmm:n=bn,cpmm:o=Ii}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:to.offsetOf("baseMint"),length:64}}),s=N([L("baseMint"),L("quoteMint")]),a=r.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=N([L("mintA"),L("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:Vn.span}],dataSlice:{offset:Vn.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:gr.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:r}){e=e.toString()===zn.default.toString()?H:e,t=t.toString()===zn.default.toString()?H:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let r=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=sr(r),a={};Object.values(s).forEach(f=>{o.delete(f.mintA.address),a[f.mintA.address]={address:new zn(f.mintA.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(f.mintB.address),a[f.mintB.address]={address:new zn(f.mintB.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:f.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 c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Fe)?(o.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),f.mintProgramB.equals(Fe)?(o.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await Yn({connection:this.scope.connection,mints:Array.from(o).map(f=>new zn(f))});a=O(O({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>W(O({},f),{[b]:W(O({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:r,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:r,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,A,P,h,B,T,S,I,C;let m=l===void 0?new hr(0):e.raw.mul(new hr(l.feeBps.toNumber())).div(new hr(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=W(O({},t),{address:Bt(t.address).toString()}),b=[];for(let x of n)try{b.push(W(O({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(K){this.logDebug("direct error",x.version,x.id.toString(),K.message)}this.logDebug("direct done");for(let[x,K]of Object.entries(o)){let V={chainId:101,address:x,programId:K.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:K.mDecimals,tags:[],extensions:{}},R=K.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:V,amountIn:p})}}catch(D){this.logDebug("route in error",G.version,G.id.toString(),D.message);return}}).sort((G,D)=>{var Se,bt,gt,Tt;let Te=G===void 0?cn:G.data.amountOut.amount.raw.sub((bt=(Se=G.data.amountOut.fee)==null?void 0:Se.raw)!=null?bt:cn),dt=D===void 0?cn:D.data.amountOut.amount.raw.sub((Tt=(gt=D.data.amountOut.fee)==null?void 0:gt.raw)!=null?Tt:cn);return Te.lt(dt)?1:-1})[0];if(R===void 0)continue;let X=new be(nr(V),R.data.amountOut.amount.raw.sub((A=(g=R.data.amountOut.fee)==null?void 0:g.raw)!=null?A:cn));for(let G of K.out)try{let D=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:X});b.push(W(O({},D),{allTrade:!!(R.data.allTrade&&D.allTrade),amountIn:R.data.amountIn,amountOut:D.amountOut,minAmountOut:D.minAmountOut,currentPrice:void 0,executionPrice:new M(new nt({baseToken:R.data.amountIn.amount.token,denominator:R.data.amountIn.amount.raw,quoteToken:D.amountOut.amount.token,numerator:D.amountOut.amount.raw.sub((h=(P=D.amountOut.fee)==null?void 0:P.raw)!=null?h:cn)}).toFixed()),priceImpact:new M(R.data.priceImpact.add(D.priceImpact).toFixed()),fee:[R.data.fee[0],D.fee[0]],routeType:"route",poolInfoList:[R.pool,G],remainingAccounts:[R.data.remainingAccounts[0],D.remainingAccounts[0]],minMiddleAmountFee:(B=D.amountOut.fee)!=null&&B.raw?new be(R.data.amountOut.amount.token,((S=(T=R.data.amountOut.fee)==null?void 0:T.raw)!=null?S:cn).add((C=(I=D.amountOut.fee)==null?void 0:I.raw)!=null?C:cn)):void 0,middleToken:R.data.amountOut.amount.token,poolReady:R.data.poolReady&&D.poolReady,poolType:[R.data.poolType,D.poolType],feeConfig:y,expirationTime:Dt(R.data.expirationTime,D.expirationTime)}))}catch(D){this.logDebug("route out error",G.version,G.id.toString(),D.message)}}return b.filter(x=>(x.allTrade||this.logDebug(`pool ${x.poolInfoList.map(K=>K.id.toString()).join(",")} filter out since not all trade`),x.allTrade)).sort((x,K)=>x.amountOut.amount.raw.sub(K.amountOut.amount.raw).gt(cn)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:r,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:A,executionPriceX64:P}=xe.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:r,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(y.toFixed()),executionPrice:new M(f.toFixed()),priceImpact:new M(b.toFixed()),fee:[g],remainingAccounts:[A],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[P],expirationTime:Dt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:eo(W(O({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:eo(W(O({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:eo(W(O({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:eo(W(O({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(c.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:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await Qe(this.scope.connection,Array.from(s).map(l=>({pubkey:new zn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=ua.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Pr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:W(O({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=O({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:ta({programId:new zn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:di(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:lt({address:u.mintLp.toBase58(),programId:Fe.toBase58(),decimals:u.lpDecimals}),config:W(O({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Zf,Transaction as da,TransactionInstruction as $f}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Jf}from"@solana/spl-token";import ul from"bn.js";var mt=class extends Me{static getPdaPoolId(e,t){return ue([mt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ue([mt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new ul(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:r}){if(n.length===0)return[];let s=n.map(l=>mt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<mt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>mt.getPdaOwnerId(t,m,o,l).publicKey));let c=await _t(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==mt.POOL_LAYOUT.span||b.data.length!==mt.OWNER_LAYOUT.span)continue;let g=mt.POOL_LAYOUT.decode(f.data),A=mt.OWNER_LAYOUT.decode(b.data),P=g.openTime.toNumber(),h=g.endTime.toNumber(),B=A.tokenInfo.map(I=>I.debtAmount.gt(new ul(0))).filter(I=>!I).length!==3,T=r>P&&r<h&&g.status===1,S=B&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:A.lpAmount,project:mt.VERSION_PROJECT[m],openTime:P,endTime:h,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((I,C)=>({mintAddress:I.mintAddress,mintVault:I.mintVault,mintDecimals:I.mintDecimals,perLpLoss:I.perLpLoss,debtAmount:A.tokenInfo[C].debtAmount.add(A.tokenInfo[C].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,r=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(we.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!c.mintAddress.equals(we.WSOL.mint),associatedOnly:c.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),r.push(u)}n.addInstruction({instructions:[mt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,r={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(we.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!m.mintAddress.equals(we.WSOL.mint),associatedOnly:m.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(r[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[mt.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:o,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return _o(c,[o,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new da().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new da().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new da().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=N([]),r=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Jf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new $f({keys:r,programId:e,data:a})}},Nt=mt;Nt.CLAIMED_NUM=3,Nt.POOL_LAYOUT=N([Ae(8),q("bump"),q("status"),w("openTime"),w("endTime"),L("ammId"),Y(N([q("mintDecimals"),L("mintAddress"),L("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),mt.CLAIMED_NUM,"tokenInfo"),Y(w(),10,"padding")]),Nt.OWNER_LAYOUT=N([Ae(8),q("bump"),q("version"),L("poolId"),L("owner"),w("lpAmount"),Y(N([L("mintAddress"),w("debtAmount"),w("claimedAmount")]),mt.CLAIMED_NUM,"tokenInfo"),Y(w(),4,"padding")]),Nt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Zf(e)),Nt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Nt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as fo}from"@solana/web3.js";import cl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as ey,TransactionInstruction as fa}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ya}from"@solana/spl-token";var pa=N([q("instruction"),Su("amount")]),po=N([q("instruction")]);function B0({programId:i,amount:e,instructionKeys:t}){let n=[{pubkey:Co,isSigner:!1,isWritable:!1},{pubkey:ya,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:qr,isSigner:!1,isWritable:!1},...Object.entries(t).map(([r,s])=>({pubkey:s,isSigner:r==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(r)}))],o=Buffer.alloc(pa.span);return pa.encode({instruction:1,amount:Number(e)},o),new fa({keys:n,programId:i,data:o})}function Tr({programId:i},e){let t=[{pubkey:ya,isSigner:!1,isWritable:!1},{pubkey:qr,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,r])=>({pubkey:r,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(po.span);return po.encode({instruction:2},n),new fa({keys:t,programId:i,data:n})}function ba(i){let{poolConfig:e,userKeys:t,side:n}=i,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,r=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(po.span);po.encode({instruction:2},s);let a=[{pubkey:ya,isWritable:!1,isSigner:!1},{pubkey:ey,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new fa({programId:e.programId,keys:a,data:s})}var ty={[Si.IDO_PROGRAM_ID_V1.toString()]:1,[Si.IDO_PROGRAM_ID_V2.toString()]:2,[Si.IDO_PROGRAM_ID_V3.toString()]:3,[Si.IDO_PROGRAM_ID_V4.toString()]:4},pi=class extends Me{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:r}){let s=this.createTxBuilder(),a=ty[t.programId];a||this.logAndCreateError("invalid version",a);let c=Ke(t),[u,l]=[!new cl(e.coin).isZero(),!new cl(e.pc).isZero()],m=c.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:o});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(H),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[Tr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new fo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Tr({programId:new fo(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new fo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:r});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Tr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new fo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:r});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new fo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[ba(W(O({},g),{side:"base"}))]:[],...l?[ba(W(O({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:r})}};import{PublicKey as ny}from"@solana/web3.js";import{MintLayout as iy,TOKEN_2022_PROGRAM_ID as ga,TOKEN_PROGRAM_ID as Aa}from"@solana/spl-token";var yo=class extends Me{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:r,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Qt.address,Qt),this._mintGroup.official.add(Qt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,W(O({},u),{priority:-1}))}),r.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ga.toBase58():Aa.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ga.toBase58():Aa.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?ga.toBase58():Aa.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return Qt;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,W(O({},r),{priority:2})),r;let s=await this.scope.connection.getAccountInfo(new ny(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=iy.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var Ir=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:r,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new Et(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=r,this._apiCacheTime=c||5*60*1e3,this.logger=me("Raydium"),this.farm=new Gi({scope:this,moduleName:"Raydium_Farm"}),this.account=new Ni({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new ro({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new yo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new mo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new ao({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new lo({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Nt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new ci({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new pi({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=oy({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:r,logRequests:s,urlConfigs:a}=t,c=new Wo({cluster:n,timeout:o,urlConfigs:a,logCount:r,logRequests:s}),u=new Ir(W(O({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(qo);return this._owner.publicKey}setOwner(e){return this._owner=e?new Et(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Au);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 this.logger.error(qo),new Error(qo)}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){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=>W(O({},o),{mintAuthority:o.mint_authority||void 0,freezeAuthority:o.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var hC=i=>i;export{by as ACCOUNT_TYPE_SIZE,Ug as ALL_PROGRAM_ID,Ep as AMM_CONFIG_SEED,Gm as AMM_STABLE,hi as AMM_V4,ob as ANAMint,Ge as API_URLS,kl as AccountType,Wo as Api,ic as BIT_PRECISION,Ft as BNDivCeil,On as BNLayout,mg as BN_100,dg as BN_1000,pg as BN_10000,lg as BN_FIVE,Za as BN_ONE,Kn as BN_TEN,cg as BN_THREE,ug as BN_TWO,qe as BN_ZERO,kw as BitStructure,xu as Blob,Ti as CLMM_LOCK_AUTH_ID,Jn as CLMM_LOCK_PROGRAM_ID,bn as CLMM_PROGRAM_ID,qr as CLOCK_PROGRAM_ID,Jr as CREATE_CPMM_POOL_AUTH,Hm as CREATE_CPMM_POOL_FEE_ACC,Ii as CREATE_CPMM_POOL_PROGRAM,ao as Clmm,wc as ClmmConfigLayout,he as ClmmInstrument,lr as ConstantProductCurve,tl as CpmmConfigInfoLayout,mr as CpmmFee,gr as CpmmPoolInfoLayout,wi as Currency,Sn as CurrencyAmount,pr as CurveCalculator,Gg as DEVNET_PROGRAM_ID,CA as DEV_API_URLS,$m as DEV_CREATE_CPMM_POOL_AUTH,Jm as DEV_CREATE_CPMM_POOL_FEE_ACC,Zm as DEV_CREATE_CPMM_POOL_PROGRAM,td as DEV_LOCK_CPMM_AUTH,ed as DEV_LOCK_CPMM_PROGRAM,rf as DataElement,rb as ETHMint,Ds as EXTENSION_TICKARRAY_BITMAP_SIZE,Gu as FARM_LOCK_MINT,Xu as FARM_LOCK_VAULT,Hr as FARM_PROGRAM_ID_V3,lu as FARM_PROGRAM_ID_V4,Zr as FARM_PROGRAM_ID_V5,$n as FARM_PROGRAM_ID_V6,Rt as FARM_PROGRAM_TO_VERSION,Qu as FARM_VERSION_TO_LEDGER_LAYOUT,zu as FARM_VERSION_TO_STATE_LAYOUT,du as FEE_DESTINATION_ID,Jo as FEE_RATE_DENOMINATOR,oa as FEE_RATE_DENOMINATOR_VALUE,zp as FETCH_TICKARRAY_COUNT,Vp as Fee,ae as Fraction,Si as IDO_ALL_PROGRAM,zm as IDO_PROGRAM_ID_V1,Qm as IDO_PROGRAM_ID_V2,Ym as IDO_PROGRAM_ID_V3,jm as IDO_PROGRAM_ID_V4,Ko as INSTRUCTION_PROGRAM_ID,F as InstructionType,fu as JupTokenType,ir as LIQUIDITY_FEES_DENOMINATOR,Gs as LIQUIDITY_FEES_NUMERATOR,mu as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,tf as LIQUIDITY_VERSION_TO_SERUM_VERSION,CI as LIQUIDITY_VERSION_TO_STATE_LAYOUT,xi as LOCK_CPMM_AUTH,Bi as LOCK_CPMM_PROGRAM,Df as LOCK_LIQUIDITY_SEED,oc as LOG_B_2_X32,rc as LOG_B_P_ERR_MARGIN_LOWER_X64,sc as LOG_B_P_ERR_MARGIN_UPPER_X64,Eo as LOOKUP_TABLE_CACHE,Oi as Layout,pe as LiquidityMath,qT as LockClPositionLayoutV2,WT as LockPositionLayout,bl as LogLevel,Sr as Logger,ia as MARKET_STATE_LAYOUT_V2,ua as MARKET_STATE_LAYOUT_V3,ol as MARKET_VERSION_TO_STATE_LAYOUT,su as MAX_BASE64_SIZE,Mt as MAX_SQRT_PRICE_X64,$o as MAX_SQRT_PRICE_X64_SUB_ONE,ft as MAX_TICK,So as MEMO_PROGRAM_ID,yn as MEMO_PROGRAM_ID2,Zt as METADATA_PROGRAM_ID,Ot as MIN_SQRT_PRICE_X64,Zo as MIN_SQRT_PRICE_X64_ADD_ONE,ct as MIN_TICK,ai as MODEL_DATA_PUBKEY,Pr as Market,re as MathUtil,_s as MaxU64,nc as MaxUint128,rn as NEGATIVE_ONE,ib as NRVMint,Xp as OBSERVATION_SEED,xt as ONE,$r as OPEN_BOOK_PROGRAM,Up as OPERATION_SEED,Pc as ObservationInfoLayout,jp as ObservationLayout,kc as OperationLayout,ds as OptionLayout,Et as Owner,Hy as PAIMint,yc as POOL_LOCK_ID_SEED,Wp as POOL_REWARD_VAULT_SEED,Fp as POOL_SEED,Gp as POOL_TICK_ARRAY_BITMAP_SEED,Dp as POOL_VAULT_SEED,mc as POSITION_SEED,ve as Percent,yu as PoolFetchType,Vn as PoolInfoLayout,xe as PoolUtils,$i as PositionInfoLayout,Zp as PositionRewardInfoLayout,ji as PositionUtils,nt as Price,DT as ProtocolPositionLayout,Ho as Q128,St as Q64,jy as RAYMint,tt as RENT_PROGRAM_ID,Ir as Raydium,Hp as RewardInfo,Uc as RoundDirection,Vr as Rounding,Xm as Router,nl as SERUM_PROGRAMID_TO_VERSION,vo as SERUM_PROGRAM_ID_V3,il as SERUM_VERSION_TO_PROGRAMID,bu as SESSION_KEY,$e as SOLMint,Qt as SOL_INFO,oI as SPL_MINT_LAYOUT,Zy as SRMMint,ns as STORAGE_KEY,Co as SYSTEM_PROGRAM_ID,te as SqrtPriceMath,si as StableLayout,ps as Structure,vn as SwapMath,_n as TICK_ARRAY_BITMAP_SIZE,qp as TICK_ARRAY_SEED,et as TICK_ARRAY_SIZE,hh as TICK_SPACINGS,Ze as TOKEN_WSOL,sn as TickArrayBitmap,Ac as TickArrayBitmapExtensionLayout,Zi as TickArrayBitmapExtensionUtils,Hi as TickArrayLayout,$p as TickLayout,En as TickMath,fe as TickQuery,j as TickUtils,we as Token,be as TokenAmount,Fo as TxBuilder,Rn as TxVersion,Xi as U64Resolution,Ih as U64_IGNORE_RANGE,cs as UInt,$y as USDCMint,nb as USDHMint,Jy as USDTMint,Um as UTIL1216,fs as Union,qu as Voter,hp as VoterDepositEntry,kp as VoterLockup,Wu as VoterRegistrar,Pp as VoterVotingMintConfig,H as WSOLMint,Qo as WideBits,tn as WrappedLayout,ye as ZERO,Qa as _100_PERCENT,k as accountMeta,Ub as add,Mo as addComputeBudget,Ys as addLiquidityLayout,sP as array,As as associatedLedgerAccountLayout,ls as bits,Ae as blob,Oe as bool,Ls as calFarmRewardAmount,Lf as ceilDiv,Pi as checkLegacyTxSize,ki as checkV0TxSize,Rr as chunkArray,po as claimLayout,gc as clmmComputeInfoToApiInfo,nn as closeAccountInstruction,el as collectCpFeeInstruction,Fr as commonSystemAccountMeta,No as confirmTransaction,Gf as cpmmLockPositionInstruction,Di as createAssociatedLedgerAccountInstruction,me as createLogger,Sc as createPoolFeeLayout,$s as createPoolV4InstructionV2,KI as createPoolV4Layout,on as createWSolAccountInstructions,jw as cstr,fb as currencyEquals,Nm as decimalToFraction,ep as decodeBool,Fb as div,Ro as divCeil,pt as dwLayout,tp as encodeBool,HA as endlessRetry,Cm as eq,Gw as f32,Xw as f32be,zw as f64,Qw as f64be,hs as farmAddRewardLayout,ek as farmLedgerLayoutV3_1,vi as farmLedgerLayoutV3_2,tk as farmLedgerLayoutV5_1,Fu as farmLedgerLayoutV5_2,Du as farmLedgerLayoutV6_1,ju as farmRewardInfoToConfig,Ps as farmRewardLayout,ks as farmRewardRestartLayout,wp as farmRewardTimeInfoLayout,Vu as farmStateV3Layout,Eu as farmStateV5Layout,_i as farmStateV6Layout,xk as fetchMultipleFarmInfoAndUpdate,uB as fetchMultipleInfo,Yn as fetchMultipleMintInfos,ue as findProgramAddress,Xs as fixedSwapInLayout,zs as fixedSwapOutLayout,Gc as floorDiv,_o as forecastTransactionSize,yf as formatLayout,Ve as generatePubKey,ie as getATAAddress,Yu as getAssociatedAuthority,rr as getAssociatedConfigId,ut as getAssociatedLedgerAccount,Ei as getAssociatedLedgerPoolAccount,If as getAssociatedOpenOrders,na as getAssociatedPoolKeys,yr as getCpLockPda,lS as getCpmmPdaAmmConfigId,sa as getCpmmPdaPoolId,Qc as getCreatePoolKeys,eu as getDate,Os as getDepositEntryIndex,Lc as getDxByDyBaseIn,Rc as getDyByDxBaseIn,_g as getEpochInfo,oi as getFarmLedgerLayout,Tp as getFarmStateLayout,ta as getLiquidityAssociatedAuthority,Wn as getLiquidityAssociatedId,bT as getLiquidityFromAmounts,qb as getMax,_t as getMultipleAccountsInfo,Qe as getMultipleAccountsInfoWithCustomFlags,es as getMultipleLookupTableInfo,Lh as getPdaAmmConfigId,Xe as getPdaExBitmapAccount,Yi as getPdaLockClPositionIdV2,Fs as getPdaLockPositionId,Ef as getPdaLpMint,Nn as getPdaMetadataKey,fc as getPdaObservationAccount,fr as getPdaObservationId,Qi as getPdaOperationAccount,yt as getPdaPersonalPositionAddress,di as getPdaPoolAuthority,dc as getPdaPoolId,pc as getPdaPoolRewardVaulId,Es as getPdaPoolVaultId,qt as getPdaProtocolPositionAddress,de as getPdaTickArrayAddress,zc as getPdaVault,Zn as getRecentBlockHash,Bs as getRegistrarAddress,id as getSessionKey,Oc as getStablePrice,vm as getTime,jb as getTimestamp,Rs as getTokenOwnerRecordAddress,Qg as getTransferAmountFee,ge as getTransferAmountFeeV2,Ks as getVoterAddress,Cs as getVoterWeightRecordAddress,Ss as getVotingMintAuthority,xs as getVotingTokenMint,Op as governanceCreateTokenOwnerRecord,hw as greedy,Km as gt,Eb as gte,Mu as i128,xh as i16ToBytes,er as i32ToBytes,ti as i64,Ou as i8,Qs as initPoolLayout,bs as initTokenAccountInstruction,Kf as initializeMarket,Pg as intersection,nu as isDateAfter,tu as isDateBefore,_m as isDecimal,Wb as isMeaningfulNumber,Ja as isNumber,Ts as isValidFarmVersion,zi as isZero,Ke as jsonInfo2PoolKeys,Sk as judgeFarmType,vs as leadingZeros,lc as leastSignificantBit,to as liquidityStateV4Layout,nf as liquidityStateV5Layout,vb as lt,Vb as lte,eb as mSOLMint,or as makeAMMSwapInstruction,_c as makeAddLiquidityInstruction,Ns as makeAddNewRewardInstruction,Tr as makeClaimInstruction,ba as makeClaimInstructionV4,Jc as makeCpmmLockInstruction,jc as makeCreateCpmmPoolInInstruction,Hu as makeCreateFarmInstruction,ar as makeCreateMarketInstruction,Zu as makeCreatorWithdrawFarmRewardInstruction,Hc as makeDepositCpmmInInstruction,Ju as makeDepositInstructionV3,ec as makeDepositInstructionV5,tc as makeDepositInstructionV6,Uk as makeDepositTokenInstruction,Xk as makeDepositWithdrawInstruction,zI as makeInitPoolInstructionV4,B0 as makePurchaseInstruction,Ms as makeRestartRewardInstruction,vc as makeSimulatePoolInfoInstruction,br as makeSwapCpmmBaseInInInstruction,$c as makeSwapCpmmBaseOutInInstruction,Af as makeSwapFixedInInstruction,wf as makeSwapFixedOutInstruction,sl as makeSwapInstruction,vu as makeTransferInstruction,Zc as makeWithdrawCpmmInInstruction,Ui as makeWithdrawInstructionV3,$u as makeWithdrawInstructionV4,qi as makeWithdrawInstructionV5,Wi as makeWithdrawInstructionV6,Gk as makeWithdrawTokenInstruction,Dt as minExpirationTime,Th as mockCreatePoolInfo,ac as mockV3CreatePoolInfo,sf as modelDataInfoLayout,cc as mostSignificantBit,Qr as mul,Yr as notInnerObject,Vw as ns64,Uw as ns64be,Su as nu64,Lw as nu64be,ms as offset,Ag as offsetDateTime,tP as option,Z as parseBigNumberish,Cn as parseNumberInfo,uu as parseSimulateLogToJson,Jt as parseSimulateValue,_u as parseTokenAccountResp,fI as parseTokenInfo,kn as poolTypeV6,Ln as printSimulate,L as publicKey,pa as purchaseLayout,bp as realFarmStateV3Layout,gp as realFarmStateV5Layout,Ap as realFarmV6Layout,Ha as recursivelyDecimalToFraction,Zs as removeLiquidityInstruction,js as removeLiquidityLayout,LK as route1Instruction,OK as route2Instruction,jf as routeInstruction,rP as rustEnum,Mw as s16,Ew as s16be,Nw as s24,Fw as s24be,Ce as s32,Dw as s32be,_w as s40,Ww as s40be,vw as s48,qw as s48be,Ow as s8,Y as seq,ay as setLoggerLevel,Om as shakeFractionDecimal,au as simulateMultipleInstruction,XI as simulatePoolInfoInstruction,Fm as simulateTransaction,Ya as sleep,Bt as solToWSol,bI as solToWSolToken,wn as splAccountLayout,Ga as splitNumber,tb as stSOLMint,oP as str,N as struct,Db as sub,iP as tagged,zr as tenExponential,sr as toAmmComputePoolInfo,lt as toApiV3Token,Mm as toBN,cu as toBuffer,hn as toFeeConfig,$a as toFraction,_b as toFractionWithDecimals,fg as toPercent,nr as toToken,eo as toTokenAmount,yI as toTokenInfo,yg as toTokenPrice,bg as toTotalPrice,ja as toUsdCurrency,Vs as trailingZeros,vg as transformTxToBase64,Wr as tryParsePublicKey,Dm as txToBase64,ee as u128,en as u16,uc as u16ToBytes,xw as u16be,Tw as u24,Sw as u24be,rt as u32,Sh as u32ToBytes,Kw as u32be,Iw as u40,Cw as u40be,Bw as u48,Rw as u48be,w as u64,q as u8,aP as union,hC as unionArr,Yw as unionLayoutDiscriminator,hg as uniq,Ip as updateFarmPoolInfo,Do as updateReqHistory,Hw as utf8,Dr as validateAndParsePublicKey,Is as validateFarmRewards,nP as vec,np as vecU8,Np as voterStakeRegistryCreateDepositEntry,Mp as voterStakeRegistryCreateVoter,Cp as voterStakeRegistryDeposit,Rp as voterStakeRegistryUpdateVoterWeightRecord,Lp as voterStakeRegistryWithdraw,gI as wSolToSolToken,ws as withdrawRewardLayout,kg as xor,uP as zeros};
1
+ var pl=Object.defineProperty,fl=Object.defineProperties;var yl=Object.getOwnPropertyDescriptors;var bo=Object.getOwnPropertySymbols;var Ia=Object.prototype.hasOwnProperty,Ba=Object.prototype.propertyIsEnumerable;var Ta=(i,e,t)=>e in i?pl(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,O=(i,e)=>{for(var t in e||(e={}))Ia.call(e,t)&&Ta(i,t,e[t]);if(bo)for(var t of bo(e))Ba.call(e,t)&&Ta(i,t,e[t]);return i},W=(i,e)=>fl(i,yl(e));var De=(i,e)=>{var t={};for(var n in i)Ia.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&bo)for(var n of bo(i))e.indexOf(n)<0&&Ba.call(i,n)&&(t[n]=i[n]);return t};import gu from"axios";import{PublicKey as Ka}from"@solana/web3.js";import{get as xr,set as xa}from"lodash";var bl=(o=>(o[o.Error=0]="Error",o[o.Warning=1]="Warning",o[o.Info=2]="Info",o[o.Debug=3]="Debug",o))(bl||{}),Sr=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}},Kr={},Sa={};function me(i){let e=xr(Kr,i);if(!e){let t=xr(Sa,i);e=new Sr({name:i,logLevel:t}),xa(Kr,i,e)}return e}function ay(i,e){xa(Sa,i,e);let t=xr(Kr,i);t&&(t.level=e)}import{MINT_SIZE as gl,TOKEN_PROGRAM_ID as Al,getTransferFeeConfig as wl,unpackMint as Pl}from"@solana/spl-token";var Cr=me("Raydium_accountInfo_util");async function _t(i,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:r=100}=O({batchRequest:!1},t),s=Rr(e,r),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=i._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=Rr(c,10);a=(await(await Promise.all(u.map(async m=>await i._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Cr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Cr.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Ka(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>i.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&Cr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Qe(i,e,t){let n=await _t(i,e.map(o=>o.pubkey),t);return e.map((o,r)=>W(O({},o),{accountInfo:n[r]}))}var kl=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(kl||{}),by=1;async function Yn({connection:i,mints:e,config:t}){var r,s,a;if(e.length===0)return{};let n=await Qe(i,e.map(c=>({pubkey:Bt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<gl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Pl(c.pubkey,c.accountInfo,(r=c.accountInfo)==null?void 0:r.owner);o[c.pubkey.toString()]=W(O({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Al,feeConfig:(a=wl(u))!=null?a:void 0})}return o[Ka.default.toBase58()]=o[H.toBase58()],o}import Ue from"bn.js";var jn=9e15,pn=1e9,Lr="0123456789abcdef",Ao="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",wo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Or={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-jn,maxE:jn,crypto:!1},Oa,Ht,se=!0,ko="[DecimalError] ",dn=ko+"Invalid argument: ",Ma=ko+"Precision limit exceeded",Na=ko+"crypto unavailable",_a="[object Decimal]",at=Math.floor,He=Math.pow,hl=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Tl=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Il=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,va=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Vt=1e7,ne=7,Bl=9007199254740991,xl=Ao.length-1,Mr=wo.length-1,E={toStringTag:_a};E.absoluteValue=E.abs=function(){var i=new this.constructor(this);return i.s<0&&(i.s=1),J(i)};E.ceil=function(){return J(new this.constructor(this),this.e+1,2)};E.clampedTo=E.clamp=function(i,e){var t,n=this,o=n.constructor;if(i=new o(i),e=new o(e),!i.s||!e.s)return new o(NaN);if(i.gt(e))throw Error(dn+e);return t=n.cmp(i),t<0?i:n.cmp(e)>0?e:new o(n)};E.comparedTo=E.cmp=function(i){var e,t,n,o,r=this,s=r.d,a=(i=new r.constructor(i)).d,c=r.s,u=i.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(r.e!==i.e)return r.e>i.e^c<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};E.cosine=E.cos=function(){var i,e,t=this,n=t.constructor;return t.d?t.d[0]?(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+ne,n.rounding=1,t=Sl(n,Wa(n,t)),n.precision=i,n.rounding=e,J(Ht==2||Ht==3?t.neg():t,i,e,!0)):new n(1):new n(NaN)};E.cubeRoot=E.cbrt=function(){var i,e,t,n,o,r,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(se=!1,r=l.s*He(l.s*l,1/3),!r||Math.abs(r)==1/0?(t=ot(l.d),i=l.e,(r=(i-t.length+1)%3)&&(t+=r==1||r==-2?"0":"00"),r=He(t,1/3),i=at((i+1)/3)-(i%3==(i<0?-1:2)),r==1/0?t="5e"+i:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+i),n=new m(t),n.s=l.s):n=new m(r.toString()),s=(i=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Be(u.plus(l).times(a),u.plus(c),s+2,1),ot(a.d).slice(0,s)===(t=ot(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(J(a,i+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(J(n,i+1,1),e=!n.times(n).times(n).eq(l));break}return se=!0,J(n,i,m.rounding,e)};E.decimalPlaces=E.dp=function(){var i,e=this.d,t=NaN;if(e){if(i=e.length-1,t=(i-at(this.e/ne))*ne,i=e[i],i)for(;i%10==0;i/=10)t--;t<0&&(t=0)}return t};E.dividedBy=E.div=function(i){return Be(this,new this.constructor(i))};E.dividedToIntegerBy=E.divToInt=function(i){var e=this,t=e.constructor;return J(Be(e,new t(i),0,1,1),t.precision,t.rounding)};E.equals=E.eq=function(i){return this.cmp(i)===0};E.floor=function(){return J(new this.constructor(this),this.e+1,3)};E.greaterThan=E.gt=function(i){return this.cmp(i)>0};E.greaterThanOrEqualTo=E.gte=function(i){var e=this.cmp(i);return e==1||e===0};E.hyperbolicCosine=E.cosh=function(){var i,e,t,n,o,r=this,s=r.constructor,a=new s(1);if(!r.isFinite())return new s(r.s?1/0:NaN);if(r.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(r.e,r.sd())+4,s.rounding=1,o=r.d.length,o<32?(i=Math.ceil(o/3),e=(1/To(4,i)).toString()):(i=16,e="2.3283064365386962890625e-10"),r=Hn(s,1,r.times(e),new s(1),!0);for(var c,u=i,l=new s(8);u--;)c=r.times(r),r=a.minus(c.times(l.minus(c.times(l))));return J(r,s.precision=t,s.rounding=n,!0)};E.hyperbolicSine=E.sinh=function(){var i,e,t,n,o=this,r=o.constructor;if(!o.isFinite()||o.isZero())return new r(o);if(e=r.precision,t=r.rounding,r.precision=e+Math.max(o.e,o.sd())+4,r.rounding=1,n=o.d.length,n<3)o=Hn(r,2,o,o,!0);else{i=1.4*Math.sqrt(n),i=i>16?16:i|0,o=o.times(1/To(5,i)),o=Hn(r,2,o,o,!0);for(var s,a=new r(5),c=new r(16),u=new r(20);i--;)s=o.times(o),o=o.times(a.plus(s.times(c.times(s).plus(u))))}return r.precision=e,r.rounding=t,J(o,e,t,!0)};E.hyperbolicTangent=E.tanh=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+7,n.rounding=1,Be(t.sinh(),t.cosh(),n.precision=i,n.rounding=e)):new n(t.s)};E.inverseCosine=E.acos=function(){var i,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,r=t.rounding;return n!==-1?n===0?e.isNeg()?vt(t,o,r):new t(0):new t(NaN):e.isZero()?vt(t,o+4,r).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),i=vt(t,o+4,r).times(.5),t.precision=o,t.rounding=r,i.minus(e))};E.inverseHyperbolicCosine=E.acosh=function(){var i,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(i=n.precision,e=n.rounding,n.precision=i+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,se=!1,t=t.times(t).minus(1).sqrt().plus(t),se=!0,n.precision=i,n.rounding=e,t.ln()):new n(t)};E.inverseHyperbolicSine=E.asinh=function(){var i,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,se=!1,t=t.times(t).plus(1).sqrt().plus(t),se=!0,n.precision=i,n.rounding=e,t.ln())};E.inverseHyperbolicTangent=E.atanh=function(){var i,e,t,n,o=this,r=o.constructor;return o.isFinite()?o.e>=0?new r(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(i=r.precision,e=r.rounding,n=o.sd(),Math.max(n,i)<2*-o.e-1?J(new r(o),i,e,!0):(r.precision=t=n-o.e,o=Be(o.plus(1),new r(1).minus(o),t+i,1),r.precision=i+4,r.rounding=1,o=o.ln(),r.precision=i,r.rounding=e,o.times(.5))):new r(NaN)};E.inverseSine=E.asin=function(){var i,e,t,n,o=this,r=o.constructor;return o.isZero()?new r(o):(e=o.abs().cmp(1),t=r.precision,n=r.rounding,e!==-1?e===0?(i=vt(r,t+4,n).times(.5),i.s=o.s,i):new r(NaN):(r.precision=t+6,r.rounding=1,o=o.div(new r(1).minus(o.times(o)).sqrt().plus(1)).atan(),r.precision=t,r.rounding=n,o.times(2)))};E.inverseTangent=E.atan=function(){var i,e,t,n,o,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=Mr)return s=vt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Mr)return s=vt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ne+2|0),i=t;i;--i)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(se=!1,e=Math.ceil(a/ne),n=1,c=u.times(u),s=new l(u),o=u;i!==-1;)if(o=o.times(c),r=s.minus(o.div(n+=2)),o=o.times(c),s=r.plus(o.div(n+=2)),s.d[e]!==void 0)for(i=e;s.d[i]===r.d[i]&&i--;);return t&&(s=s.times(2<<t-1)),se=!0,J(s,l.precision=m,l.rounding=d,!0)};E.isFinite=function(){return!!this.d};E.isInteger=E.isInt=function(){return!!this.d&&at(this.e/ne)>this.d.length-2};E.isNaN=function(){return!this.s};E.isNegative=E.isNeg=function(){return this.s<0};E.isPositive=E.isPos=function(){return this.s>0};E.isZero=function(){return!!this.d&&this.d[0]===0};E.lessThan=E.lt=function(i){return this.cmp(i)<0};E.lessThanOrEqualTo=E.lte=function(i){return this.cmp(i)<1};E.logarithm=E.log=function(i){var e,t,n,o,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(i==null)i=new l(10),e=!0;else{if(i=new l(i),t=i.d,i.s<0||!t||!t[0]||i.eq(1))return new l(NaN);e=i.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)r=!0;else{for(o=t[0];o%10===0;)o/=10;r=o!==1}if(se=!1,a=m+p,s=mn(u,a),n=e?Po(l,a+10):mn(i,a),c=Be(s,n,a,1),fi(c.d,o=m,d))do if(a+=10,s=mn(u,a),n=e?Po(l,a+10):mn(i,a),c=Be(s,n,a,1),!r){+ot(c.d).slice(o+1,o+15)+1==1e14&&(c=J(c,m+1,0));break}while(fi(c.d,o+=10,d));return se=!0,J(c,m,d)};E.minus=E.sub=function(i){var e,t,n,o,r,s,a,c,u,l,m,d,p=this,y=p.constructor;if(i=new y(i),!p.d||!i.d)return!p.s||!i.s?i=new y(NaN):p.d?i.s=-i.s:i=new y(i.d||p.s!==i.s?p:NaN),i;if(p.s!=i.s)return i.s=-i.s,p.plus(i);if(u=p.d,d=i.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])i.s=-i.s;else if(u[0])i=new y(p);else return new y(c===3?-0:0);return se?J(i,a,c):i}if(t=at(i.e/ne),l=at(p.e/ne),u=u.slice(),r=l-t,r){for(m=r<0,m?(e=u,r=-r,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ne),s)+2,r>n&&(r=n,e.length=1),e.reverse(),n=r;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}r=0}for(m&&(e=u,u=d,d=e,i.s=-i.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>r;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=Vt-1;--u[o],u[n]+=Vt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(i.d=u,i.e=ho(u,t),se?J(i,a,c):i):new y(c===3?-0:0)};E.modulo=E.mod=function(i){var e,t=this,n=t.constructor;return i=new n(i),!t.d||!i.s||i.d&&!i.d[0]?new n(NaN):!i.d||t.d&&!t.d[0]?J(new n(t),n.precision,n.rounding):(se=!1,n.modulo==9?(e=Be(t,i.abs(),0,3,1),e.s*=i.s):e=Be(t,i,0,n.modulo,1),e=e.times(i),se=!0,t.minus(e))};E.naturalExponential=E.exp=function(){return Nr(this)};E.naturalLogarithm=E.ln=function(){return mn(this)};E.negated=E.neg=function(){var i=new this.constructor(this);return i.s=-i.s,J(i)};E.plus=E.add=function(i){var e,t,n,o,r,s,a,c,u,l,m=this,d=m.constructor;if(i=new d(i),!m.d||!i.d)return!m.s||!i.s?i=new d(NaN):m.d||(i=new d(i.d||m.s===i.s?m:NaN)),i;if(m.s!=i.s)return i.s=-i.s,m.minus(i);if(u=m.d,l=i.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(i=new d(m)),se?J(i,a,c):i;if(r=at(m.e/ne),n=at(i.e/ne),u=u.slice(),o=r-n,o){for(o<0?(t=u,o=-o,s=l.length):(t=l,n=r,s=u.length),r=Math.ceil(a/ne),s=r>s?r+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/Vt|0,u[o]%=Vt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return i.d=u,i.e=ho(u,n),se?J(i,a,c):i};E.precision=E.sd=function(i){var e,t=this;if(i!==void 0&&i!==!!i&&i!==1&&i!==0)throw Error(dn+i);return t.d?(e=Va(t.d),i&&t.e+1>e&&(e=t.e+1)):e=NaN,e};E.round=function(){var i=this,e=i.constructor;return J(new e(i),i.e+1,e.rounding)};E.sine=E.sin=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+ne,n.rounding=1,t=Cl(n,Wa(n,t)),n.precision=i,n.rounding=e,J(Ht>2?t.neg():t,i,e,!0)):new n(NaN)};E.squareRoot=E.sqrt=function(){var i,e,t,n,o,r,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(se=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=ot(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=at((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(r=n,n=r.plus(Be(s,r,t+2,1)).times(.5),ot(r.d).slice(0,t)===(e=ot(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(J(r,c+1,0),r.times(r).eq(s))){n=r;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(J(n,c+1,1),i=!n.times(n).eq(s));break}return se=!0,J(n,c,l.rounding,i)};E.tangent=E.tan=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+10,n.rounding=1,t=t.sin(),t.s=1,t=Be(t,new n(1).minus(t.times(t)).sqrt(),i+10,0),n.precision=i,n.rounding=e,J(Ht==2||Ht==4?t.neg():t,i,e,!0)):new n(NaN)};E.times=E.mul=function(i){var e,t,n,o,r,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(i=new m(i)).d;if(i.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!i.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?i.s/0:i.s*0);for(t=at(l.e/ne)+at(i.e/ne),c=d.length,u=p.length,c<u&&(r=d,d=p,p=r,s=c,c=u,u=s),r=[],s=c+u,n=s;n--;)r.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=r[o]+p[n]*d[o-n-1]+e,r[o--]=a%Vt|0,e=a/Vt|0;r[o]=(r[o]+e)%Vt|0}for(;!r[--s];)r.pop();return e?++t:r.shift(),i.d=r,i.e=ho(r,t),se?J(i,m.precision,m.rounding):i};E.toBinary=function(i,e){return vr(this,2,i,e)};E.toDecimalPlaces=E.toDP=function(i,e){var t=this,n=t.constructor;return t=new n(t),i===void 0?t:(wt(i,0,pn),e===void 0?e=n.rounding:wt(e,0,8),J(t,i+t.e+1,e))};E.toExponential=function(i,e){var t,n=this,o=n.constructor;return i===void 0?t=zt(n,!0):(wt(i,0,pn),e===void 0?e=o.rounding:wt(e,0,8),n=J(new o(n),i+1,e),t=zt(n,!0,i+1)),n.isNeg()&&!n.isZero()?"-"+t:t};E.toFixed=function(i,e){var t,n,o=this,r=o.constructor;return i===void 0?t=zt(o):(wt(i,0,pn),e===void 0?e=r.rounding:wt(e,0,8),n=J(new r(o),i+o.e+1,e),t=zt(n,!1,i+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};E.toFraction=function(i){var e,t,n,o,r,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),r=e.e=Va(y)-p.e-1,s=r%ne,e.d[0]=He(10,s<0?ne+s:s),i==null)i=r>0?e:u;else{if(a=new f(i),!a.isInt()||a.lt(u))throw Error(dn+a);i=a.gt(e)?r>0?e:u:a}for(se=!1,a=new f(ot(y)),l=f.precision,f.precision=r=y.length*ne*2;m=Be(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(i)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=Be(i.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=Be(u,n,r,1).minus(p).abs().cmp(Be(c,t,r,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,se=!0,d};E.toHexadecimal=E.toHex=function(i,e){return vr(this,16,i,e)};E.toNearest=function(i,e){var t=this,n=t.constructor;if(t=new n(t),i==null){if(!t.d)return t;i=new n(1),e=n.rounding}else{if(i=new n(i),e===void 0?e=n.rounding:wt(e,0,8),!t.d)return i.s?t:i;if(!i.d)return i.s&&(i.s=t.s),i}return i.d[0]?(se=!1,t=Be(t,i,0,e,1).times(i),se=!0,J(t)):(i.s=t.s,t=i),t};E.toNumber=function(){return+this};E.toOctal=function(i,e){return vr(this,8,i,e)};E.toPower=E.pow=function(i){var e,t,n,o,r,s,a=this,c=a.constructor,u=+(i=new c(i));if(!a.d||!i.d||!a.d[0]||!i.d[0])return new c(He(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,r=c.rounding,i.eq(1))return J(a,n,r);if(e=at(i.e/ne),e>=i.d.length-1&&(t=u<0?-u:u)<=Bl)return o=Ea(c,a,t,n),i.s<0?new c(1).div(o):J(o,n,r);if(s=a.s,s<0){if(e<i.d.length-1)return new c(NaN);if((i.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=He(+a,u),e=t==0||!isFinite(t)?at(u*(Math.log("0."+ot(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(se=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=Nr(i.times(mn(a,n+t)),n),o.d&&(o=J(o,n+5,1),fi(o.d,n,r)&&(e=n+10,o=J(Nr(i.times(mn(a,e+t)),e),e+5,1),+ot(o.d).slice(n+1,n+15)+1==1e14&&(o=J(o,n+1,0)))),o.s=s,se=!0,c.rounding=r,J(o,n,r))};E.toPrecision=function(i,e){var t,n=this,o=n.constructor;return i===void 0?t=zt(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(wt(i,1,pn),e===void 0?e=o.rounding:wt(e,0,8),n=J(new o(n),i,e),t=zt(n,i<=n.e||n.e<=o.toExpNeg,i)),n.isNeg()&&!n.isZero()?"-"+t:t};E.toSignificantDigits=E.toSD=function(i,e){var t=this,n=t.constructor;return i===void 0?(i=n.precision,e=n.rounding):(wt(i,1,pn),e===void 0?e=n.rounding:wt(e,0,8)),J(new n(t),i,e)};E.toString=function(){var i=this,e=i.constructor,t=zt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()&&!i.isZero()?"-"+t:t};E.truncated=E.trunc=function(){return J(new this.constructor(this),this.e+1,1)};E.valueOf=E.toJSON=function(){var i=this,e=i.constructor,t=zt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()?"-"+t:t};function ot(i){var e,t,n,o=i.length-1,r="",s=i[0];if(o>0){for(r+=s,e=1;e<o;e++)n=i[e]+"",t=ne-n.length,t&&(r+=ln(t)),r+=n;s=i[e],n=s+"",t=ne-n.length,t&&(r+=ln(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return r+s}function wt(i,e,t){if(i!==~~i||i<e||i>t)throw Error(dn+i)}function fi(i,e,t,n){var o,r,s,a;for(r=i[0];r>=10;r/=10)--e;return--e<0?(e+=ne,o=0):(o=Math.ceil((e+1)/ne),e%=ne),r=He(10,ne-e),a=i[o]%r|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==r||t>3&&a+1==r/2)&&(i[o+1]/r/100|0)==He(10,e-2)-1||(a==r/2||a==0)&&(i[o+1]/r/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==r||!n&&t>3&&a+1==r/2)&&(i[o+1]/r/1e3|0)==He(10,e-3)-1,s}function go(i,e,t){for(var n,o=[0],r,s=0,a=i.length;s<a;){for(r=o.length;r--;)o[r]*=e;for(o[0]+=Lr.indexOf(i.charAt(s++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function Sl(i,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/To(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),i.precision+=t,e=Hn(i,1,e.times(o),new i(1));for(var r=t;r--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return i.precision-=t,e}var Be=function(){function i(n,o,r){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*o+a,n[c]=s%r|0,a=s/r|0;return a&&n.unshift(a),n}function e(n,o,r,s){var a,c;if(r!=s)c=r>s?1:-1;else for(a=c=0;a<r;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,r,s){for(var a=0;r--;)n[r]-=a,a=n[r]<o[r]?1:0,n[r]=a*s+n[r]-o[r];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,r,s,a,c){var u,l,m,d,p,y,f,b,g,A,P,h,B,T,S,I,C,x,K,V,R=n.constructor,X=n.s==o.s?1:-1,G=n.d,D=o.d;if(!G||!G[0]||!D||!D[0])return new R(!n.s||!o.s||(G?D&&G[0]==D[0]:!D)?NaN:G&&G[0]==0||!D?X*0:X/0);for(c?(p=1,l=n.e-o.e):(c=Vt,p=ne,l=at(n.e/p)-at(o.e/p)),K=D.length,C=G.length,g=new R(X),A=g.d=[],m=0;D[m]==(G[m]||0);m++);if(D[m]>(G[m]||0)&&l--,r==null?(T=r=R.precision,s=R.rounding):a?T=r+(n.e-o.e)+1:T=r,T<0)A.push(1),y=!0;else{if(T=T/p+2|0,m=0,K==1){for(d=0,D=D[0],T++;(m<C||d)&&T--;m++)S=d*c+(G[m]||0),A[m]=S/D|0,d=S%D|0;y=d||m<C}else{for(d=c/(D[0]+1)|0,d>1&&(D=i(D,d,c),G=i(G,d,c),K=D.length,C=G.length),I=K,P=G.slice(0,K),h=P.length;h<K;)P[h++]=0;V=D.slice(),V.unshift(0),x=D[0],D[1]>=c/2&&++x;do d=0,u=e(D,P,K,h),u<0?(B=P[0],K!=h&&(B=B*c+(P[1]||0)),d=B/x|0,d>1?(d>=c&&(d=c-1),f=i(D,d,c),b=f.length,h=P.length,u=e(f,P,b,h),u==1&&(d--,t(f,K<b?V:D,b,c))):(d==0&&(u=d=1),f=D.slice()),b=f.length,b<h&&f.unshift(0),t(P,f,h,c),u==-1&&(h=P.length,u=e(D,P,K,h),u<1&&(d++,t(P,K<h?V:D,h,c))),h=P.length):u===0&&(d++,P=[0]),A[m++]=d,u&&P[0]?P[h++]=G[I]||0:(P=[G[I]],h=1);while((I++<C||P[0]!==void 0)&&T--);y=P[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,Oa=y;else{for(m=1,d=A[0];d>=10;d/=10)m++;g.e=m+l*p-1,J(g,a?r+g.e+1:r,s,y)}return g}}();function J(i,e,t,n){var o,r,s,a,c,u,l,m,d,p=i.constructor;e:if(e!=null){if(m=i.d,!m)return i;for(o=1,a=m[0];a>=10;a/=10)o++;if(r=e-o,r<0)r+=ne,s=e,l=m[d=0],c=l/He(10,o-s-1)%10|0;else if(d=Math.ceil((r+1)/ne),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,r%=ne,s=r-ne+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;r%=ne,s=r-ne+o,c=s<0?0:l/He(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%He(10,o-s-1)),u=t<4?(c||n)&&(t==0||t==(i.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(r>0?s>0?l/He(10,o-s):0:m[d-1])%10&1||t==(i.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=i.e+1,m[0]=He(10,(ne-e%ne)%ne),i.e=-e||0):m[0]=i.e=0,i;if(r==0?(m.length=d,a=1,d--):(m.length=d+1,a=He(10,ne-r),m[d]=s>0?(l/He(10,o-s)%He(10,s)|0)*a:0),u)for(;;)if(d==0){for(r=1,s=m[0];s>=10;s/=10)r++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;r!=a&&(i.e++,m[0]==Vt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Vt)break;m[d--]=0,a=1}for(r=m.length;m[--r]===0;)m.pop()}return se&&(i.e>p.maxE?(i.d=null,i.e=NaN):i.e<p.minE&&(i.e=0,i.d=[0])),i}function zt(i,e,t){if(!i.isFinite())return Da(i);var n,o=i.e,r=ot(i.d),s=r.length;return e?(t&&(n=t-s)>0?r=r.charAt(0)+"."+r.slice(1)+ln(n):s>1&&(r=r.charAt(0)+"."+r.slice(1)),r=r+(i.e<0?"e":"e+")+i.e):o<0?(r="0."+ln(-o-1)+r,t&&(n=t-s)>0&&(r+=ln(n))):o>=s?(r+=ln(o+1-s),t&&(n=t-o-1)>0&&(r=r+"."+ln(n))):((n=o+1)<s&&(r=r.slice(0,n)+"."+r.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(r+="."),r+=ln(n))),r}function ho(i,e){var t=i[0];for(e*=ne;t>=10;t/=10)e++;return e}function Po(i,e,t){if(e>xl)throw se=!0,t&&(i.precision=t),Error(Ma);return J(new i(Ao),e,1,!0)}function vt(i,e,t){if(e>Mr)throw Error(Ma);return J(new i(wo),e,t,!0)}function Va(i){var e=i.length-1,t=e*ne+1;if(e=i[e],e){for(;e%10==0;e/=10)t--;for(e=i[0];e>=10;e/=10)t++}return t}function ln(i){for(var e="";i--;)e+="0";return e}function Ea(i,e,t,n){var o,r=new i(1),s=Math.ceil(n/ne+4);for(se=!1;;){if(t%2&&(r=r.times(e),Ra(r.d,s)&&(o=!0)),t=at(t/2),t===0){t=r.d.length-1,o&&r.d[t]===0&&++r.d[t];break}e=e.times(e),Ra(e.d,s)}return se=!0,r}function Ca(i){return i.d[i.d.length-1]&1}function Fa(i,e,t){for(var n,o=new i(e[0]),r=0;++r<e.length;)if(n=new i(e[r]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function Nr(i,e){var t,n,o,r,s,a,c,u=0,l=0,m=0,d=i.constructor,p=d.rounding,y=d.precision;if(!i.d||!i.d[0]||i.e>17)return new d(i.d?i.d[0]?i.s<0?0:1/0:1:i.s?i.s<0?0:i:0/0);for(e==null?(se=!1,c=y):c=e,a=new d(.03125);i.e>-2;)i=i.times(a),m+=5;for(n=Math.log(He(2,m))/Math.LN10*2+5|0,c+=n,t=r=s=new d(1),d.precision=c;;){if(r=J(r.times(i),c,1),t=t.times(++l),a=s.plus(Be(r,t,c,1)),ot(a.d).slice(0,c)===ot(s.d).slice(0,c)){for(o=m;o--;)s=J(s.times(s),c,1);if(e==null)if(u<3&&fi(s.d,c-n,p,u))d.precision=c+=10,t=r=a=new d(1),l=0,u++;else return J(s,d.precision=y,p,se=!0);else return d.precision=y,s}s=a}}function mn(i,e){var t,n,o,r,s,a,c,u,l,m,d,p=1,y=10,f=i,b=f.d,g=f.constructor,A=g.rounding,P=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(se=!1,l=P):l=e,g.precision=l+=y,t=ot(b),n=t.charAt(0),Math.abs(r=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(i),t=ot(f.d),n=t.charAt(0),p++;r=f.e,n>1?(f=new g("0."+t),r++):f=new g(n+"."+t.slice(1))}else return u=Po(g,l+2,P).times(r+""),f=mn(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=P,e==null?J(f,P,A,se=!0):f;for(m=f,c=s=f=Be(f.minus(1),f.plus(1),l,1),d=J(f.times(f),l,1),o=3;;){if(s=J(s.times(d),l,1),u=c.plus(Be(s,new g(o),l,1)),ot(u.d).slice(0,l)===ot(c.d).slice(0,l))if(c=c.times(2),r!==0&&(c=c.plus(Po(g,l+2,P).times(r+""))),c=Be(c,new g(p),l,1),e==null)if(fi(c.d,l-y,A,a))g.precision=l+=y,u=s=f=Be(m.minus(1),m.plus(1),l,1),d=J(f.times(f),l,1),o=a=1;else return J(c,g.precision=P,A,se=!0);else return g.precision=P,c;c=u,o+=2}}function Da(i){return String(i.s*i.s/0)}function _r(i,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,i.e=t=t-n-1,i.d=[],n=(t+1)%ne,t<0&&(n+=ne),n<o){for(n&&i.d.push(+e.slice(0,n)),o-=ne;n<o;)i.d.push(+e.slice(n,n+=ne));e=e.slice(n),n=ne-e.length}else n-=o;for(;n--;)e+="0";i.d.push(+e),se&&(i.e>i.constructor.maxE?(i.d=null,i.e=NaN):i.e<i.constructor.minE&&(i.e=0,i.d=[0]))}else i.e=0,i.d=[0];return i}function Kl(i,e){var t,n,o,r,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),va.test(e))return _r(i,e)}else if(e==="Infinity"||e==="NaN")return+e||(i.s=NaN),i.e=NaN,i.d=null,i;if(Tl.test(e))t=16,e=e.toLowerCase();else if(hl.test(e))t=2;else if(Il.test(e))t=8;else throw Error(dn+e);for(r=e.search(/p/i),r>0?(c=+e.slice(r+1),e=e.substring(2,r)):e=e.slice(2),r=e.indexOf("."),s=r>=0,n=i.constructor,s&&(e=e.replace(".",""),a=e.length,r=a-r,o=Ea(n,new n(t),r,r*2)),u=go(e,t,Vt),l=u.length-1,r=l;u[r]===0;--r)u.pop();return r<0?new n(i.s*0):(i.e=ho(u,l),i.d=u,se=!1,s&&(i=Be(i,o,a*4)),c&&(i=i.times(Math.abs(c)<54?He(2,c):yi.pow(2,c))),se=!0,i)}function Cl(i,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Hn(i,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/To(5,t)),e=Hn(i,2,e,e);for(var o,r=new i(5),s=new i(16),a=new i(20);t--;)o=e.times(e),e=e.times(r.plus(o.times(s.times(o).minus(a))));return e}function Hn(i,e,t,n,o){var r,s,a,c,u=1,l=i.precision,m=Math.ceil(l/ne);for(se=!1,c=t.times(t),a=new i(n);;){if(s=Be(a.times(c),new i(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=Be(s.times(c),new i(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(r=m;s.d[r]===a.d[r]&&r--;);if(r==-1)break}r=a,a=n,n=s,s=r,u++}return se=!0,s.d.length=m+1,s}function To(i,e){for(var t=i;--e;)t*=i;return t}function Wa(i,e){var t,n=e.s<0,o=vt(i,i.precision,1),r=o.times(.5);if(e=e.abs(),e.lte(r))return Ht=n?4:1,e;if(t=e.divToInt(o),t.isZero())Ht=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(r))return Ht=Ca(t)?n?2:3:n?4:1,e;Ht=Ca(t)?n?1:4:n?3:2}return e.minus(o).abs()}function vr(i,e,t,n){var o,r,s,a,c,u,l,m,d,p=i.constructor,y=t!==void 0;if(y?(wt(t,1,pn),n===void 0?n=p.rounding:wt(n,0,8)):(t=p.precision,n=p.rounding),!i.isFinite())l=Da(i);else{for(l=zt(i),s=l.indexOf("."),y?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=go(zt(d),10,o),d.e=d.d.length),m=go(l,10,o),r=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?r--:(i=new p(i),i.d=m,i.e=r,i=Be(i,d,t,n,0,o),m=i.d,r=i.e,u=Oa),s=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(i.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(i.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++r,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=Lr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=go(l,o,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=Lr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(r<0?"p":"p+")+r}else if(r<0){for(;++r;)l="0"+l;l="0."+l}else if(++r>c)for(r-=c;r--;)l+="0";else r<c&&(l=l.slice(0,r)+"."+l.slice(r))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return i.s<0?"-"+l:l}function Ra(i,e){if(i.length>e)return i.length=e,!0}function Rl(i){return new this(i).abs()}function Ll(i){return new this(i).acos()}function Ol(i){return new this(i).acosh()}function Ml(i,e){return new this(i).plus(e)}function Nl(i){return new this(i).asin()}function _l(i){return new this(i).asinh()}function vl(i){return new this(i).atan()}function Vl(i){return new this(i).atanh()}function El(i,e){i=new this(i),e=new this(e);var t,n=this.precision,o=this.rounding,r=n+4;return!i.s||!e.s?t=new this(NaN):!i.d&&!e.d?(t=vt(this,r,1).times(e.s>0?.25:.75),t.s=i.s):!e.d||i.isZero()?(t=e.s<0?vt(this,n,o):new this(0),t.s=i.s):!i.d||e.isZero()?(t=vt(this,r,1).times(.5),t.s=i.s):e.s<0?(this.precision=r,this.rounding=1,t=this.atan(Be(i,e,r,1)),e=vt(this,r,1),this.precision=n,this.rounding=o,t=i.s<0?t.minus(e):t.plus(e)):t=this.atan(Be(i,e,r,1)),t}function Fl(i){return new this(i).cbrt()}function Dl(i){return J(i=new this(i),i.e+1,2)}function Wl(i,e,t){return new this(i).clamp(e,t)}function ql(i){if(!i||typeof i!="object")throw Error(ko+"Object expected");var e,t,n,o=i.defaults===!0,r=["precision",1,pn,"rounding",0,8,"toExpNeg",-jn,0,"toExpPos",0,jn,"maxE",0,jn,"minE",-jn,0,"modulo",0,9];for(e=0;e<r.length;e+=3)if(t=r[e],o&&(this[t]=Or[t]),(n=i[t])!==void 0)if(at(n)===n&&n>=r[e+1]&&n<=r[e+2])this[t]=n;else throw Error(dn+t+": "+n);if(t="crypto",o&&(this[t]=Or[t]),(n=i[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(Na);else this[t]=!1;else throw Error(dn+t+": "+n);return this}function Ul(i){return new this(i).cos()}function Gl(i){return new this(i).cosh()}function qa(i){var e,t,n;function o(r){var s,a,c,u=this;if(!(u instanceof o))return new o(r);if(u.constructor=o,La(r)){u.s=r.s,se?!r.d||r.e>o.maxE?(u.e=NaN,u.d=null):r.e<o.minE?(u.e=0,u.d=[0]):(u.e=r.e,u.d=r.d.slice()):(u.e=r.e,u.d=r.d?r.d.slice():r.d);return}if(c=typeof r,c==="number"){if(r===0){u.s=1/r<0?-1:1,u.e=0,u.d=[0];return}if(r<0?(r=-r,u.s=-1):u.s=1,r===~~r&&r<1e7){for(s=0,a=r;a>=10;a/=10)s++;se?s>o.maxE?(u.e=NaN,u.d=null):s<o.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[r]):(u.e=s,u.d=[r]);return}else if(r*0!==0){r||(u.s=NaN),u.e=NaN,u.d=null;return}return _r(u,r.toString())}else if(c!=="string")throw Error(dn+r);return(a=r.charCodeAt(0))===45?(r=r.slice(1),u.s=-1):(a===43&&(r=r.slice(1)),u.s=1),va.test(r)?_r(u,r):Kl(u,r)}if(o.prototype=E,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=ql,o.clone=qa,o.isDecimal=La,o.abs=Rl,o.acos=Ll,o.acosh=Ol,o.add=Ml,o.asin=Nl,o.asinh=_l,o.atan=vl,o.atanh=Vl,o.atan2=El,o.cbrt=Fl,o.ceil=Dl,o.clamp=Wl,o.cos=Ul,o.cosh=Gl,o.div=Xl,o.exp=zl,o.floor=Ql,o.hypot=Yl,o.ln=jl,o.log=Hl,o.log10=$l,o.log2=Zl,o.max=Jl,o.min=em,o.mod=tm,o.mul=nm,o.pow=im,o.random=om,o.round=rm,o.sign=sm,o.sin=am,o.sinh=um,o.sqrt=cm,o.sub=lm,o.sum=mm,o.tan=dm,o.tanh=pm,o.trunc=fm,i===void 0&&(i={}),i&&i.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)i.hasOwnProperty(t=n[e++])||(i[t]=this[t]);return o.config(i),o}function Xl(i,e){return new this(i).div(e)}function zl(i){return new this(i).exp()}function Ql(i){return J(i=new this(i),i.e+1,3)}function Yl(){var i,e,t=new this(0);for(se=!1,i=0;i<arguments.length;)if(e=new this(arguments[i++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return se=!0,new this(1/0);t=e}return se=!0,t.sqrt()}function La(i){return i instanceof yi||i&&i.toStringTag===_a||!1}function jl(i){return new this(i).ln()}function Hl(i,e){return new this(i).log(e)}function Zl(i){return new this(i).log(2)}function $l(i){return new this(i).log(10)}function Jl(){return Fa(this,arguments,"lt")}function em(){return Fa(this,arguments,"gt")}function tm(i,e){return new this(i).mod(e)}function nm(i,e){return new this(i).mul(e)}function im(i,e){return new this(i).pow(e)}function om(i){var e,t,n,o,r=0,s=new this(1),a=[];if(i===void 0?i=this.precision:wt(i,1,pn),n=Math.ceil(i/ne),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));r<n;)o=e[r],o>=429e7?e[r]=crypto.getRandomValues(new Uint32Array(1))[0]:a[r++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);r<n;)o=e[r]+(e[r+1]<<8)+(e[r+2]<<16)+((e[r+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,r):(a.push(o%1e7),r+=4);r=n/4}else throw Error(Na);else for(;r<n;)a[r++]=Math.random()*1e7|0;for(n=a[--r],i%=ne,n&&i&&(o=He(10,ne-i),a[r]=(n/o|0)*o);a[r]===0;r--)a.pop();if(r<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ne)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<ne&&(t-=ne-n)}return s.e=t,s.d=a,s}function rm(i){return J(i=new this(i),i.e+1,this.rounding)}function sm(i){return i=new this(i),i.d?i.d[0]?i.s:0*i.s:i.s||NaN}function am(i){return new this(i).sin()}function um(i){return new this(i).sinh()}function cm(i){return new this(i).sqrt()}function lm(i,e){return new this(i).sub(e)}function mm(){var i=0,e=arguments,t=new this(e[i]);for(se=!1;t.s&&++i<e.length;)t=t.plus(e[i]);return se=!0,J(t,this.precision,this.rounding)}function dm(i){return new this(i).tan()}function pm(i){return new this(i).tanh()}function fm(i){return J(i=new this(i),i.e+1,1)}E[Symbol.for("nodejs.util.inspect.custom")]=E.toString;E[Symbol.toStringTag]="Decimal";var yi=E.constructor=qa(Or);Ao=new yi(Ao);wo=new yi(wo);var M=yi;import km from"big.js";import fn from"bn.js";import ym from"toformat";var bm=ym,bi=bm;import Bo from"big.js";import gm from"bn.js";import Am from"decimal.js-light";import gi from"bn.js";var Vr=(n=>(n[n.ROUND_DOWN=0]="ROUND_DOWN",n[n.ROUND_HALF_UP=1]="ROUND_HALF_UP",n[n.ROUND_UP=2]="ROUND_UP",n))(Vr||{}),Ua=9007199254740991;function Z(i){let e=me("Raydium_parseBigNumberish");if(i instanceof gi)return i;if(typeof i=="string"){if(i.match(/^-?[0-9]+$/))return new gi(i);e.logWithError(`invalid BigNumberish string: ${i}`)}return typeof i=="number"?(i%1&&e.logWithError(`BigNumberish number underflow: ${i}`),(i>=Ua||i<=-Ua)&&e.logWithError(`BigNumberish number overflow: ${i}`),new gi(String(i))):typeof i=="bigint"?new gi(i.toString()):(e.error(`invalid BigNumberish value: ${i}`),new gi(0))}var Io=me("module/fraction"),Er=bi(Bo),Ai=bi(Am),wm={[0]:Ai.ROUND_DOWN,[1]:Ai.ROUND_HALF_UP,[2]:Ai.ROUND_UP},Pm={[0]:Bo.roundDown,[1]:Bo.roundHalfUp,[2]:Bo.roundUp},ae=class{constructor(e,t=new gm(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new ae(this.denominator,this.numerator)}add(e){let t=e instanceof ae?e:new ae(Z(e));return this.denominator.eq(t.denominator)?new ae(this.numerator.add(t.numerator),this.denominator):new ae(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof ae?e:new ae(Z(e));return this.denominator.eq(t.denominator)?new ae(this.numerator.sub(t.numerator),this.denominator):new ae(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof ae?e:new ae(Z(e));return new ae(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof ae?e:new ae(Z(e));return new ae(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Io.logWithError(`${e} is not an integer.`),e<=0&&Io.logWithError(`${e} is not positive.`),Ai.set({precision:e+1,rounding:wm[n]});let o=new Ai(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)||Io.logWithError(`${e} is not an integer.`),e<0&&Io.logWithError(`${e} is negative.`),Er.DP=e,Er.RM=Pm[n]||1,new Er(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var hm=me("Raydium_amount"),xo=bi(km);function Ga(i,e){let t="0",n="0";if(i.includes(".")){let o=i.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):hm.logWithError(`invalid number string, num: ${i}`)}else t=i;return[t,n.slice(0,e)||n]}var be=class extends ae{constructor(t,n,o=!0,r){let s=new fn(0),a=Kn.pow(new fn(t.decimals));if(o)s=Z(n);else{let c=new fn(0),u=new fn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Ga(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=me(r||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(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 xo.DP=this.token.decimals,new xo(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},Sn=class extends ae{constructor(t,n,o=!0,r){let s=new fn(0),a=Kn.pow(new fn(t.decimals));if(o)s=Z(n);else{let c=new fn(0),u=new fn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Ga(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=me(r||"TokenAmount"),this.currency=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.currency.equals(t.currency)||this.logger.logWithError("gt currency not equals"),this.raw.gt(t.raw)}lt(t){return this.currency.equals(t.currency)||this.logger.logWithError("lt currency not equals"),this.raw.lt(t.raw)}add(t){return this.currency.equals(t.currency)||this.logger.logWithError("add currency not equals"),new Sn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new Sn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.currency.decimals,n,o=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return xo.DP=this.currency.decimals,new xo(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as Tm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Xa}from"@solana/spl-token";var Qt={chainId:101,address:Tm.default.toBase58(),programId:Xa.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ze={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Xa.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 Ur}from"@solana/web3.js";import{PublicKey as Le,SystemProgram as za,SYSVAR_RENT_PUBKEY as Im}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bm}from"@solana/spl-token";function k({pubkey:i,isSigner:e=!1,isWritable:t=!0}){return{pubkey:i,isWritable:t,isSigner:e}}var Fr=[k({pubkey:Bm,isWritable:!1}),k({pubkey:za.programId,isWritable:!1}),k({pubkey:Im,isWritable:!1})];function Dr({publicKey:i,transformSol:e}){let t=Wr(i.toString());if(t instanceof Le)return e&&t.equals($e)?H:t;if(e&&t.toString()===$e.toBase58())return H;if(typeof t=="string"){if(t===Le.default.toBase58())return Le.default;try{return new Le(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Wr(i){try{return new Le(i)}catch{return i}}var So=new Le("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),yn=new Le("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),tt=new Le("SysvarRent111111111111111111111111111111111"),qr=new Le("SysvarC1ock11111111111111111111111111111111"),Zt=new Le("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Ko=new Le("Sysvar1nstructions1111111111111111111111111"),Co=za.programId,jy=new Le("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Hy=new Le("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Zy=new Le("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),$y=new Le("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Jy=new Le("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),eb=new Le("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),tb=new Le("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),nb=new Le("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),ib=new Le("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),ob=new Le("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),rb=new Le("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Le("So11111111111111111111111111111111111111112"),$e=Le.default;function Bt(i){return Dr({publicKey:i,transformSol:!0})}var Gr=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:r=!1,isToken2022:s=!1}){if(e===$e.toBase58()||e instanceof Ur&&$e.equals(e)){this.decimals=Ze.decimals,this.symbol=Ze.symbol,this.name=Ze.name,this.mint=new Ur(Ze.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=r?Ur.default:Dr({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},we=Gr;we.WSOL=new Gr(W(O({},Ze),{mint:Ze.address}));var Xr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},wi=Xr;wi.SOL=new Xr(Qt);function fb(i,e){return i instanceof we&&e instanceof we?i.equals(e):i instanceof we||e instanceof we?!1:i===e}import xm from"bn.js";var Qa=new ae(new xm(100)),ve=class extends ae{toSignificant(e=5,t,n){return this.mul(Qa).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Qa).toFixed(e,t,n)}};var Sm=me("Raydium_price"),nt=class extends ae{constructor(t){let{baseToken:n,quoteToken:o,numerator:r,denominator:s}=t;super(r,s);this.baseToken=n,this.quoteToken=o,this.scalar=new ae(zr(n.decimals),zr(o.decimals))}get raw(){return new ae(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new nt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Sm.logWithError("mul token not equals");let n=super.mul(t);return new nt({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)}};function We(i){if(i instanceof ve)return new ae(i.numerator,i.denominator);if(i instanceof nt)return i.adjusted;if(i instanceof be)try{return We(i.toExact())}catch{return new ae(qe)}if(i instanceof ae)return i;let e=String(i),t=Cn(e);return new ae(t.numerator,t.denominator)}function _b(i){var n;if(i instanceof ve)return{fr:new ae(i.numerator,i.denominator)};if(i instanceof nt)return{fr:i.adjusted};if(i instanceof be)return{fr:We(i.toExact()),decimals:i.token.decimals};if(i instanceof ae)return{fr:i};let e=String(i),t=Cn(e);return{fr:new ae(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function vb(i,e){if(i==null||e==null)return!1;let t=We(i),n=We(e);return t.sub(n).numerator,t.sub(n).numerator.lt(qe)}function Km(i,e){if(i==null||e==null)return!1;let t=We(i),n=We(e);return t.sub(n).numerator.gt(qe)}function Vb(i,e){if(i==null||e==null)return!1;let t=We(i),n=We(e);return t.sub(n).numerator.lte(qe)}function Eb(i,e){if(i==null||e==null)return!1;let t=We(i),n=We(e);return t.sub(n).numerator.gte(qe)}function Cm(i,e){if(i==null||e==null)return!1;let t=We(i),n=We(e);return t.sub(n).numerator.eq(qe)}function Fb(i,e){if(i==null||e==null)return;let t=We(i),n=We(e);try{return t.div(n)}catch{return t}}function Db(i,e){if(i==null||e==null)return;let t=We(i),n=We(e);return t.sub(n)}function Wb(i){return i==null?!1:!Cm(i,0)}function qb(i,e){return Km(e,i)?e:i}function Qr(i,e){if(i==null||e==null)return;let t=We(i),n=We(e);return t.mul(n)}function Ub(i,e){if(i==null||e==null)return;let t=We(i),n=We(e);return t.add(n)}import{PublicKey as Rm}from"@solana/web3.js";import Lm from"bn.js";async function Ya(i){new Promise(e=>setTimeout(e,i))}function jb(){return new Date().getTime()}function Yr(i){return typeof i=="object"&&i!==null&&![we,be,Rm,ae,Lm,nt,ve].some(e=>typeof e=="object"&&i instanceof e)}function Ke(i){return typeof i=="string"?Wr(i):Array.isArray(i)?i.map(e=>Ke(e)):Yr(i)?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ke(t)])):i}var qe=new Ue(0),Za=new Ue(1),ug=new Ue(2),cg=new Ue(3),lg=new Ue(5),Kn=new Ue(10),mg=new Ue(100),dg=new Ue(1e3),pg=new Ue(1e4);function zr(i){return Kn.pow(Z(i))}function Cn(i){var a;if(i===void 0)return{denominator:"1",numerator:"0"};if(i instanceof Ue)return{numerator:i.toString(),denominator:"1"};if(i instanceof ae)return{denominator:i.denominator.toString(),numerator:i.numerator.toString()};let e=String(i),[,t="",n="",o=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],r="1"+"0".repeat(o.length),s=t+(n==="0"?"":n)+o||"0";return{denominator:r,numerator:s,sign:t,int:n,dec:o}}function Ro(i,e){let t=i.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Om(i){var n;let[,e="",t=""]=(n=i.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function Mm(i,e=0){return i instanceof Ue?i:new Ue(Om($a(i).mul(Kn.pow(new Ue(String(e))))))}function $a(i){if(i instanceof ve)return new ae(i.numerator,i.denominator);if(i instanceof nt)return i.adjusted;if(i instanceof be)try{return $a(i.toExact())}catch{return new ae(qe)}if(i instanceof ae)return i;let e=String(i),t=Cn(e);return new ae(t.numerator,t.denominator)}function fg(i,e){let{numerator:t,denominator:n}=Cn(i);return new ve(new Ue(t),new Ue(n).mul(e!=null&&e.alreadyDecimaled?new Ue(100):new Ue(1)))}function yg(i){let{token:e,numberPrice:t,decimalDone:n}=i,o=new we({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:r,denominator:s}=Cn(t),a=n?new Ue(r).mul(Kn.pow(new Ue(e.decimals))):r,c=new Ue(s).mul(Kn.pow(new Ue(o.decimals)));return new nt({baseToken:o,denominator:c.toString(),quoteToken:new we(W(O({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function ja(i){let e=new wi({decimals:6,symbol:"usd",name:"usd"}),t=Mm(Qr(i,10**e.decimals));return new Sn(e,t)}function bg(i,e){return ja(!e||!i?0:Qr(i,e))}function Nm(i){if(i==null)return;let{numerator:e,denominator:t}=Cn(i.toString());return new ae(e,t)}function _m(i){return i instanceof M}function Ha(i){return _m(i)?Nm(i):Array.isArray(i)?i.map(e=>Ha(e)):Yr(i)?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ha(t)])):i}var Ja=i=>typeof i=="number",eu=i=>i?new Date(i):new Date,vm=i=>eu(i).getTime();function tu(i,e,t){let n=Ja(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(i).getTime()<=n}function nu(i,e,t){let n=Ja(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(i).getTime()>n}function Ag(i,e){let n=vm(i)+(e.days?e.days*24*60*60*1e3:0)+(e.hours?e.hours*60*60*1e3:0)+(e.minutes?e.minutes*60*1e3:0)+(e.seconds?e.seconds*1e3:0)+(e.milliseconds?e.milliseconds:0);return eu(n)}function Rr(i,e=1,t=[]){let n=[...i];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function Pg(i,...e){return i.filter(t=>e.every(n=>n.includes(t)))}function kg(i,...e){return i.filter(t=>e.every(n=>!n.includes(t)))}function hg(i){return[...new Set(i)]}var Et=class{constructor(e){this._owner=e}get publicKey(){return Et.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Et.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Et.isKeyPair(this._owner)}get isPublicKey(){return Et.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Et.isKeyPair(e)}};import{PublicKey as Wm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as qm}from"@solana/spl-token";import{ComputeBudgetProgram as iu,Keypair as ou,PublicKey as ru,Transaction as Oo,TransactionMessage as Vm,VersionedTransaction as jr}from"@solana/web3.js";var Rn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(Rn||{}),F={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"};import{TOKEN_PROGRAM_ID as Em}from"@solana/spl-token";var $t=me("Raydium_txUtil"),su=1644;function Mo(i){let e=[],t=[];return i.microLamports&&(e.push(iu.setComputeUnitPrice({microLamports:i.microLamports})),t.push(F.SetComputeUnitPrice)),i.units&&(e.push(iu.setComputeUnitLimit({units:i.units})),t.push(F.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Zn(i,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=i.getLatestBlockhash)==null?void 0:n.call(i,{commitment:t})))==null?void 0:o.blockhash}async function No(i,e){return i.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);i.onSignature(e,r=>{if(clearTimeout(o),!r.err){t("");return}n(r.err.toString())},"confirmed")})}function _o(i,e){i.length<1&&$t.logWithError(`no instructions provided: ${i.toString()}`),e.length<1&&$t.logWithError(`no signers provided:, ${e.toString()}`);let t=new Oo;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...i);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<su}catch{return!1}}async function au(i,e,t,n=!0){let o=new ru("RaydiumSimuLateTransaction11111111111111111"),r=[],s=new Oo;s.feePayer=o;for(let u of e)_o([...s.instructions,u],[o])||(r.push(s),s=new Oo,s.feePayer=o),s.add(u);s.instructions.length>0&&r.push(s);let a=[];try{if(a=await Fm(i,r,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&$t.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if($t.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));$t.debug("filteredLog:",c),l.length||$t.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function uu(i,e){let t=i.match(/{["\w:,]+}/g);return!t||t.length!==1?$t.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Jt(i,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(i);return!n||n.length!==2?$t.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ue(i,e){let[t,n]=ru.findProgramAddressSync(i,e);return{publicKey:t,nonce:n}}async function Fm(i,e,t){let n=[];if(t){let o=await i.getLatestBlockhash(),r=[];for(let u of e){u.recentBlockhash=o.blockhash,u.lastValidBlockHeight=o.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");r.push(p)}let s=r.map(u=>{let l=i._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await i._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async o=>await(await i.simulateTransaction(o)).value))}catch(o){o instanceof Error&&$t.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:o.message})}return n}function Pi({instructions:i,payer:e,signers:t}){return _o(i,[e,...t])}function ki({instructions:i,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=ou.generate().publicKey.toString()}){let r=new Vm({payerKey:e,recentBlockhash:n,instructions:i}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new jr(r).serialize()).toString("base64").length<su}catch{return!1}}var Lo={time:0,data:void 0};async function _g(i){if(!Lo.data||(Date.now()-Lo.time)/1e3>30){let e=await i.getEpochInfo();return Lo={time:Date.now(),data:e},e}else return Lo.data}var cu=i=>Buffer.isBuffer(i)?i:i instanceof Uint8Array?Buffer.from(i.buffer,i.byteOffset,i.byteLength):Buffer.from(i),Dm=i=>{let e=i.serialize({requireAllSignatures:!1,verifySignatures:!1});i instanceof jr&&(e=cu(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Ln(i){let e=[];return i.forEach(t=>{t instanceof Oo&&(t.recentBlockhash||(t.recentBlockhash=Em.toBase58()),t.feePayer||(t.feePayer=ou.generate().publicKey)),e.push(Dm(t))}),console.log("simulate tx string:",e),e}function vg(i){let e=i.serialize({requireAllSignatures:!1,verifySignatures:!1});return i instanceof jr&&(e=cu(e)),e.toString("base64")}function ie(i,e,t){return ue([i.toBuffer(),(t!=null?t:qm).toBuffer(),e.toBuffer()],new Wm("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ce}from"@solana/web3.js";var Hr=new ce("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),lu=new ce("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Zr=new ce("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),$n=new ce("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Um=new ce("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),$r=new ce("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),vo=new ce("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),hi=new ce("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Gm=new ce("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),mu=new ce("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),bn=new ce("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Jn=new ce("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Ti=new ce("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),Xm=new ce("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),du=new ce("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),zm=new ce("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Qm=new ce("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ym=new ce("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),jm=new ce("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Ii=new ce("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Jr=new ce("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Hm=new ce("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Zm=new ce("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),$m=new ce("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Jm=new ce("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Bi=new ce("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ed=new ce("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),xi=new ce("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),td=new ce("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),Si={IDO_PROGRAM_ID_V1:zm,IDO_PROGRAM_ID_V2:Qm,IDO_PROGRAM_ID_V3:Ym,IDO_PROGRAM_ID_V4:jm},Ug={AMM_V4:hi,AMM_STABLE:Gm,CLMM_PROGRAM_ID:bn,CLMM_LOCK_PROGRAM_ID:Jn,CLMM_LOCK_AUTH_ID:Ti,FARM_PROGRAM_ID_V3:Hr,FARM_PROGRAM_ID_V5:Zr,FARM_PROGRAM_ID_V6:$n,OPEN_BOOK_PROGRAM:$r,SERUM_PROGRAM_ID_V3:vo,UTIL1216:Um,Router:Xm,CREATE_CPMM_POOL_PROGRAM:Ii,CREATE_CPMM_POOL_AUTH:Jr,CREATE_CPMM_POOL_FEE_ACC:Hm,LOCK_CPMM_PROGRAM:Bi,LOCK_CPMM_AUTH:xi},Gg={SERUM_MARKET:ce.default,OPENBOOK_MARKET:new ce("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ce.default,FarmV3:new ce("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ce("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ce("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ce("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ce("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ce("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),CLMM_LOCK_PROGRAM_ID:new ce("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),CLMM_LOCK_AUTH_ID:new ce("8qmHNvu2Kr2C7U8mJL4Vz1vTDxMhVuXKREwU7TNoaVEo"),Router:new ce("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Zm,CREATE_CPMM_POOL_AUTH:$m,CREATE_CPMM_POOL_FEE_ACC:Jm,FEE_DESTINATION_ID:new ce("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:ed,LCOK_CPMM_AUTH:td};import Ye from"bn.js";var Yt=1e4;function Qg(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let o=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new Ye(o.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===Yt){let a=new Ye(o.maximumFee.toString());return{amount:i.add(a),fee:a,expirationTime:s}}else{let a=Ft(i.mul(new Ye(Yt)),new Ye(Yt-o.transferFeeBasisPoints)),c=new Ye(o.maximumFee.toString()),u=a.sub(i).gt(c)?i.add(c):a,l=Ft(u.mul(new Ye(o.transferFeeBasisPoints)),new Ye(Yt)),m=l.gt(r)?r:l;return{amount:u,fee:m,expirationTime:s}}else{let a=Ft(i.mul(new Ye(o.transferFeeBasisPoints)),new Ye(Yt)),c=a.gt(r)?r:a;return{amount:i,fee:c,expirationTime:s}}}function ge(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let o=W(O({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),r=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,s=new Ye(r.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===Yt){let c=new Ye(r.maximumFee.toString());return{amount:i.add(c),fee:c,expirationTime:a}}else{let c=Ft(i.mul(new Ye(Yt)),new Ye(Yt-r.transferFeeBasisPoints)),u=new Ye(r.maximumFee.toString()),l=c.sub(i).gt(u)?i.add(u):c,m=Ft(l.mul(new Ye(r.transferFeeBasisPoints)),new Ye(Yt)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Ft(i.mul(new Ye(r.transferFeeBasisPoints)),new Ye(Yt)),u=c.gt(s)?s:c;return{amount:i,fee:u,expirationTime:a}}}function Dt(i,e){return i===void 0?e:e===void 0?i:Math.min(i,e)}function Ft(i,e){let{div:t,mod:n}=i.divmod(e);return n.gt(new Ye(0))?t.add(new Ye(1)):t}import{PublicKey as pu,AddressLookupTableAccount as Vo}from"@solana/web3.js";async function es({connection:i,address:e}){let t=await _t(i,[...new Set(e.map(o=>o.toString()))].map(o=>new pu(o))),n={};for(let o=0;o<e.length;o++){let r=t[o],s=e[o];if(!r)continue;let a=new Vo({key:s,state:Vo.deserialize(r.data)});n[s.toString()]=a,Eo[s.toString()]=a}return n}var Eo={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new Vo({key:new pu("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:Vo.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};import{PublicKey as Ki,sendAndConfirmTransaction as ts,Transaction as Ci,TransactionMessage as Ri,VersionedTransaction as Li}from"@solana/web3.js";import nd from"axios";var Fo=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.api=e.api}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 nd.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}=Mo(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:r=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...s.filter(a=>a!==Ki.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(O({},t||{})):this.build(t)}build(e){var n;let t=new Ci;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var u;let{recentBlockHash:r,skipPreflight:s=!0,sendAndConfirm:a}=o||{},c=r!=null?r:await Zn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),Ln([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await ts(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),s=[o,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:y,skipPreflight:f=!0}=l||{},b=y!=null?y:await Zn(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let A=[],P=0;for(let h of s){if(++P,P<=p)continue;let B=await ts(this.connection,h,this.signers.find(T=>T.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});A.push(B)}return{txIds:A,signedTxs:s}}return{txIds:await await Promise.all(s.map(async A=>(A.recentBlockhash=b,await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:f})))),signedTxs:s}}if(this.signAllTransactions){let A=s.map((h,B)=>(h.recentBlockhash=b,a[B].length&&h.sign(...a[B]),h));Ln(A);let P=await this.signAllTransactions(A);if(m){let h=0,B=[],T=async()=>{if(!P[h])return;let S=await this.connection.sendRawTransaction(P[h].serialize(),{skipPreflight:f});B.push({txId:S,status:"sent",signedTx:P[h]}),d==null||d([...B]),h++,this.connection.onSignature(S,I=>{let C=B.findIndex(x=>x.txId===S);C>-1&&(B[C].status=I.err?"error":"success"),d==null||d([...B]),I.err||T()},"processed"),this.connection.getSignatureStatus(S)};return await T(),{txIds:B.map(S=>S.txId),signedTxs:P}}else{let h=[];for(let B=0;B<P.length;B+=1){let T=await this.connection.sendRawTransaction(P[B].serialize(),{skipPreflight:f});h.push(T)}return{txIds:h,signedTxs:P}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:r}=y,s=De(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=O(O({},this.cluster==="devnet"?{}:Eo),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Ki(b));let l=await es({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?Ki.default.toBase58():r!=null?r:await Zn(this.connection,this.blockhashCommitment),d=new Ri({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Li(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var P;let{skipPreflight:g=!0,sendAndConfirm:A}=b||{};if(Ln([p]),(P=this.owner)!=null&&P.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await No(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),s=[o,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),Ln(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let A=await this.connection.sendTransaction(g,{skipPreflight:y});await No(this.connection,A),b.push(A)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,A=[],P=async()=>{if(!b[g])return;let h=await this.connection.sendTransaction(b[g],{skipPreflight:y});A.push({txId:h,status:"sent",signedTx:b[g]}),d==null||d([...A]),g++,this.connection.onSignature(h,B=>{let T=A.findIndex(S=>S.txId===h);T>-1&&(A[T].status=B.err?"error":"success"),d==null||d([...A]),B.err||P()},"processed"),this.connection.getSignatureStatus(h)};return P(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let P=await this.connection.sendTransaction(b[A],{skipPreflight:y});g.push(P)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,o=De(m,["splitIns","computeBudgetConfig"]),r=n?Mo(n):{instructions:[],instructionTypes:[]},s=this.signers.reduce((p,y)=>W(O({},p),{[y.publicKey.toBase58()]:y}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let y=[...u,p],f=n?[...r.instructions,...y]:y,g=[...new Set(y.map(A=>A.keys.filter(P=>P.isSigner).map(P=>P.pubkey.toString())).flat()).values()].map(A=>new Ki(A));if(p!==t[l]&&u.length<12&&(Pi({instructions:f,payer:this.feePayer,signers:g})||Pi({instructions:y,payer:this.feePayer,signers:g})))u.push(p);else{if(u.length===0)throw Error("item ins too big");l+=p===t[l]?1:0,Pi({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new Ci().add(...r.instructions,...u)):a.push(new Ci().add(...u)),c.push(Array.from(new Set(u.map(A=>A.keys.filter(P=>P.isSigner).map(P=>P.pubkey.toString())).flat())).map(A=>s[A]).filter(A=>A!==void 0)),u=[p]}}),u.length>0){let y=[...new Set(u.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>s[f]).filter(f=>f!==void 0);Pi({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:y.map(f=>f.publicKey)})?a.push(new Ci().add(...r.instructions,...u)):a.push(new Ci().add(...u)),c.push(y)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(y=>y.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var h;let{sequentially:y,onTxUpdate:f,skipTxCount:b=0,recentBlockHash:g,skipPreflight:A=!0}=p||{},P=g!=null?g:await Zn(this.connection,this.blockhashCommitment);if(a.forEach(async(B,T)=>{B.recentBlockhash=P,c[T].length&&B.sign(...c[T])}),Ln(a),(h=this.owner)!=null&&h.isKeyPair){if(y){let B=0,T=[];for(let S of a){if(++B,B<=b){T.push("tx skipped");continue}let I=await ts(this.connection,S,this.signers.find(C=>C.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});T.push(I)}return{txIds:T,signedTxs:a}}return{txIds:await Promise.all(a.map(async B=>await this.connection.sendRawTransaction(B.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let B=await this.signAllTransactions(a.slice(b,a.length)),T=[...a.slice(0,b),...B];if(y){let S=0,I=[],C=async()=>{if(!T[S])return;S<b&&(I.push({txId:"",status:"success",signedTx:T[S]}),f==null||f([...I]),S++,C());let x=await this.connection.sendRawTransaction(T[S].serialize(),{skipPreflight:A});I.push({txId:x,status:"sent",signedTx:T[S]}),f==null||f([...I]),S++,this.connection.onSignature(x,K=>{let V=I.findIndex(R=>R.txId===x);V>-1&&(I[V].status=K.err?"error":"success"),f==null||f([...I]),K.err||C()},"processed"),this.connection.getSignatureStatus(x)};return await C(),{txIds:I.map(x=>x.txId),signedTxs:T}}else{let S=[];for(let I=0;I<T.length;I+=1){let C=await this.connection.sendRawTransaction(T[I].serialize(),{skipPreflight:A});S.push(C)}return{txIds:S,signedTxs:T}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var P;let A=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:r=[]}=A,s=De(A,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=O(O({},this.cluster==="devnet"?{}:Eo),o),c=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let h of c)a[h]===void 0&&u.push(new Ki(h));let l=await es({connection:this.connection,address:u});for(let[h,B]of Object.entries(l))a[h]=B;let m=t?Mo(t):{instructions:[],instructionTypes:[]},d=await Zn(this.connection,this.blockhashCommitment),p=this.signers.reduce((h,B)=>W(O({},h),{[B.publicKey.toBase58()]:B}),{}),y=[],f=[],b=[],g=0;if(this.allInstructions.forEach(h=>{let B=[...b,h],T=t?[...m.instructions,...B]:B;if(h!==n[g]&&b.length<12&&(ki({instructions:T,payer:this.feePayer,lookupTableAddressAccount:a})||ki({instructions:B,payer:this.feePayer,lookupTableAddressAccount:a})))b.push(h);else{if(b.length===0)throw Error("item ins too big");g+=h===n[g]?1:0;let S={};for(let I of[...new Set(c)])a[I]!==void 0&&(S[I]=a[I]);if(t&&ki({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let I=new Ri({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));y.push(new Li(I))}else{let I=new Ri({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));y.push(new Li(I))}f.push(Array.from(new Set(b.map(I=>I.keys.filter(C=>C.isSigner).map(C=>C.pubkey.toString())).flat())).map(I=>p[I]).filter(I=>I!==void 0)),b=[h]}}),b.length>0){let B=[...new Set(b.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat()).values()].map(T=>p[T]).filter(T=>T!==void 0);if(t&&ki({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let T=new Ri({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));y.push(new Li(T))}else{let T=new Ri({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));y.push(new Li(T))}f.push(B)}return(P=this.owner)!=null&&P.signer&&f.forEach(h=>{h.some(B=>B.publicKey.equals(this.owner.publicKey))||h.push(this.owner.signer)}),{builder:this,transactions:y,buildProps:e,signers:f,instructionTypes:this.instructionTypes,execute:async h=>{var x;let{sequentially:B,onTxUpdate:T,skipTxCount:S=0,recentBlockHash:I,skipPreflight:C=!0}=h||{};if(y.map(async(K,V)=>{f[V].length&&K.sign(f[V]),I&&(K.message.recentBlockhash=I)}),Ln(y),(x=this.owner)!=null&&x.isKeyPair){if(B){let K=0,V=[];for(let R of y){if(++K,K<=S){console.log("skip tx: ",K),V.push("tx skipped");continue}let X=await this.connection.sendTransaction(R,{skipPreflight:C});await No(this.connection,X),V.push(X)}return{txIds:V,signedTxs:y}}return{txIds:await Promise.all(y.map(async K=>await this.connection.sendTransaction(K,{skipPreflight:C}))),signedTxs:y}}if(this.signAllTransactions){let K=await this.signAllTransactions(y.slice(S,y.length)),V=[...y.slice(0,S),...K];if(B){let R=0,X=[],G=async()=>{if(!V[R])return;if(R<S){X.push({txId:"",status:"success",signedTx:V[R]}),T==null||T([...X]),R++,G();return}let D=await this.connection.sendTransaction(V[R],{skipPreflight:C});X.push({txId:D,status:"sent",signedTx:V[R]}),T==null||T([...X]),R++,this.connection.onSignature(D,Te=>{let dt=X.findIndex(Se=>Se.txId===D);dt>-1&&(X[dt].status=Te.err?"error":"success"),T==null||T([...X]),Te.err||G()},"processed"),this.connection.getSignatureStatus(D)};return G(),{txIds:[],signedTxs:V}}else{let R=[];for(let X=0;X<V.length;X+=1){let G=await this.connection.sendTransaction(V[X],{skipPreflight:C});R.push(G)}return{txIds:R,signedTxs:V}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};var fu=(t=>(t.ALL="all",t.Strict="strict",t))(fu||{}),yu=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(yu||{});var Ge={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",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",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://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",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_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",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",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position"},CA=O({},Ge);var bu="ray_tab_hash",ns="ray_req_hash",id=()=>{if(typeof window===void 0)return"";let i=sessionStorage.getItem(bu);return i||(i=`ray-${Date.now()}`,sessionStorage.setItem(bu,i)),i},Do=async n=>{var o=n,{logCount:i=1e3,removeLastLog:e}=o,t=De(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let r=JSON.parse(localStorage.getItem(ns)||"[]").slice(0,i-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(W(O({},t),{time:Date.now(),session:id()}));try{localStorage.setItem(ns,JSON.stringify(r))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(r[0].data=a+(a.length>100?"...":"");!s;){r.pop();let c=JSON.stringify(t.data).substring(0,100);r[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(ns,JSON.stringify(r)),s=!0}catch{s=!1}}return new Promise(c=>c())}return Do(W(O({},t),{logCount:i,removeLastLog:!0}))}};var ei=me("Raydium_Api"),is=new Map;async function HA(i,e,t=1e3){let n;for(;n==null;)try{ei.debug(`Request ${i} through endlessRetry`),n=await e()}catch(o){ei.error(`Request ${i} failed, retry after ${t} ms`,o),await Ya(t)}return n}var Wo=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=o||1e3,this.api=gu.create({baseURL:this.urlConfigs.BASE_HOST||Ge.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return ei.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(ei.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&Do({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),ei.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&Do({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),ei.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ge.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Ge.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ge.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await gu.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,r)=>o+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ge.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ge.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ge.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Ge.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ge.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:r=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ge.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${r}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ge.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>is.has(s)?(n.push(is.get(s)),!1):!0),r=[];return o.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ge.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),r.forEach(a=>{is.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:r="default",order:s="desc",page:a=1}=e,[c,u]=[t&&Bt(t).toBase58(),n&&n!=="undefined"?Bt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ge.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${r}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ge.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ge.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ge.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ge.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ge.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ge.JITO})).data}};import{merge as oy}from"lodash";var qo="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Au="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Yo,SystemProgram as pp}from"@solana/web3.js";import{AccountLayout as ii,createAssociatedTokenAccountInstruction as gs,TOKEN_PROGRAM_ID as Pn,TOKEN_2022_PROGRAM_ID as fp}from"@solana/spl-token";var os=(...i)=>i.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Me=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=me(t)}createTxBuilder(e){return this.scope.checkOwner(),new Fo({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(os(e))}logInfo(...e){this.logger.info(os(e))}logAndCreateError(...e){let t=os(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as ap,SystemProgram as up}from"@solana/web3.js";import cp from"bn.js";import{createCloseAccountInstruction as lp,createInitializeAccountInstruction as mp,createTransferInstruction as dp,TOKEN_PROGRAM_ID as ni}from"@solana/spl-token";import{Keypair as ip,PublicKey as Nu}from"@solana/web3.js";import op from"bn.js";import{TOKEN_PROGRAM_ID as rp}from"@solana/spl-token";function od(i){return i instanceof Uint8Array||i!=null&&typeof i=="object"&&i.constructor.name==="Uint8Array"}function rs(i,...e){if(!od(i))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(i.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${i.length}`)}function ss(i,e=!0){if(i.destroyed)throw new Error("Hash instance has been destroyed");if(e&&i.finished)throw new Error("Hash#digest() has already been called")}function wu(i,e){rs(i);let t=e.outputLen;if(i.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Go=i=>new DataView(i.buffer,i.byteOffset,i.byteLength),Wt=(i,e)=>i<<32-e|i>>>e;var lw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function rd(i){if(typeof i!="string")throw new Error(`utf8ToBytes expected string, got ${typeof i}`);return new Uint8Array(new TextEncoder().encode(i))}function as(i){return typeof i=="string"&&(i=rd(i)),rs(i),i}var Uo=class{clone(){return this._cloneInto()}},mw={}.toString;function Pu(i){let e=n=>i().update(as(n)).digest(),t=i();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>i(),e}function sd(i,e,t,n){if(typeof i.setBigUint64=="function")return i.setBigUint64(e,t,n);let o=BigInt(32),r=BigInt(4294967295),s=Number(t>>o&r),a=Number(t&r),c=n?4:0,u=n?0:4;i.setUint32(e+c,s,n),i.setUint32(e+u,a,n)}var ku=(i,e,t)=>i&e^~i&t,hu=(i,e,t)=>i&e^i&t^e&t,Xo=class extends Uo{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=Go(this.buffer)}update(e){ss(this);let{view:t,buffer:n,blockLen:o}=this;e=as(e);let r=e.length;for(let s=0;s<r;){let a=Math.min(o-this.pos,r-s);if(a===o){let c=Go(e);for(;o<=r-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ss(this),wu(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:r}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;sd(n,o-8,BigInt(this.length*8),r),this.process(n,0);let a=Go(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],r)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:r,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=r,e.destroyed=s,o%t&&e.buffer.set(n),e}};var ad=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]),gn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),An=new Uint32Array(64),us=class extends Xo{constructor(){super(64,32,8,!1),this.A=gn[0]|0,this.B=gn[1]|0,this.C=gn[2]|0,this.D=gn[3]|0,this.E=gn[4]|0,this.F=gn[5]|0,this.G=gn[6]|0,this.H=gn[7]|0}get(){let{A:e,B:t,C:n,D:o,E:r,F:s,G:a,H:c}=this;return[e,t,n,o,r,s,a,c]}set(e,t,n,o,r,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=r|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)An[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=An[m-15],p=An[m-2],y=Wt(d,7)^Wt(d,18)^d>>>3,f=Wt(p,17)^Wt(p,19)^p>>>10;An[m]=f+An[m-7]+y+An[m-16]|0}let{A:n,B:o,C:r,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=Wt(a,6)^Wt(a,11)^Wt(a,25),p=l+d+ku(a,c,u)+ad[m]+An[m]|0,f=(Wt(n,2)^Wt(n,13)^Wt(n,22))+hu(n,o,r)|0;l=u,u=c,c=a,a=s+p|0,s=r,r=o,o=n,n=p+f|0}n=n+this.A|0,o=o+this.B|0,r=r+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,r,s,a,c,u,l)}roundClean(){An.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Tu=Pu(()=>new us);import{PublicKey as Jd}from"@solana/web3.js";import Ru,{isBN as Lu}from"bn.js";import{bits as ud,BitStructure as cd,blob as ld,Blob as md,cstr as dd,f32 as pd,f32be as fd,f64 as yd,f64be as bd,greedy as gd,Layout as Ad,ns64 as wd,ns64be as Pd,nu64 as kd,nu64be as hd,offset as Td,s16 as Id,s16be as Bd,s24 as xd,s24be as Sd,s32 as Kd,s32be as Cd,s40 as Rd,s40be as Ld,s48 as Od,s48be as Md,s8 as Nd,seq as _d,struct as Pw,Structure as vd,u16 as Vd,u16be as Ed,u24 as Fd,u24be as Dd,u32 as Wd,u32be as qd,u40 as Ud,u40be as Gd,u48 as Xd,u48be as zd,u8 as Qd,UInt as Yd,union as jd,Union as Hd,unionLayoutDiscriminator as Zd,utf8 as $d}from"@solana/buffer-layout";var Oi=Ad,Iu=vd,Bu=Hd,kw=cd,cs=Yd,xu=md,hw=gd,zo=Qd,en=Vd,Tw=Fd,Mi=Wd,Iw=Ud,Bw=Xd,Su=kd,xw=Ed,Sw=Dd,Kw=qd,Cw=Gd,Rw=zd,Lw=hd,Ow=Nd,Mw=Id,Nw=xd,Ce=Kd,_w=Rd,vw=Od,Vw=wd,Ew=Bd,Fw=Sd,Dw=Cd,Ww=Ld,qw=Md,Uw=Pd,Gw=pd,Xw=fd,zw=yd,Qw=bd;var Ku=_d,Cu=jd,Yw=Zd,Ae=ld,jw=dd,Hw=$d,ls=ud,ms=Td;var On=class extends Oi{constructor(t,n,o){super(t,o);this.blob=Ae(t),this.signed=n}decode(t,n=0){let o=new Ru(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 Ru(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Qo=class extends Oi{constructor(t){super(8,t);this._lower=ls(Mi(),!1),this._upper=ls(Mi(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),r=this._upper.decode(t,n+this._lower.span);return O(O({},o),r)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function q(i){return new cs(1,i)}function rt(i){return new cs(4,i)}function w(i){return new On(8,!1,i)}function ee(i){return new On(16,!1,i)}function Ou(i){return new On(1,!0,i)}function ti(i){return new On(8,!0,i)}function Mu(i){return new On(16,!0,i)}var tn=class extends Oi{constructor(t,n,o,r){super(t.span,r);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function L(i){return new tn(Ae(32),e=>new Jd(e),e=>e.toBuffer(),i)}var ds=class extends Oi{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=zo()}encode(t,n,o=0){return t==null?this.discriminator.encode(0,n,o):(this.discriminator.encode(1,n,o),this.layout.encode(t,n,o+1)+1)}decode(t,n=0){let o=this.discriminator.decode(t,n);if(o===0)return null;if(o===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let o=this.discriminator.decode(t,n);if(o===0)return 1;if(o===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function tP(i,e){return new ds(i,e)}function Oe(i){return new tn(zo(),ep,tp,i)}function ep(i){if(i===0)return!1;if(i===1)return!0;throw new Error("Invalid bool: "+i)}function tp(i){return i?1:0}function nP(i,e){let t=Mi("length"),n=N([t,Y(i,ms(t,-t.span),"values")]);return new tn(n,({values:o})=>o,o=>({values:o}),e)}function iP(i,e,t){let n=N([w("tag"),e.replicate("data")]);function o({tag:r,data:s}){if(!r.eq(i))throw new Error("Invalid tag, expected: "+i.toString("hex")+", got: "+r.toString("hex"));return s}return new tn(n,o,r=>({tag:i,data:r}),t)}function np(i){let e=Mi("length"),t=N([e,Ae(ms(e,-e.span),"data")]);return new tn(t,({data:n})=>n,n=>({data:n}),i)}function oP(i){return new tn(np(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),i)}function rP(i,e){let t=Cu(zo(),e);return i.forEach((n,o)=>t.addVariant(o,n,n.property)),t}function sP(i,e,t){let n=N([Y(i,e,"values")]);return new tn(n,({values:o})=>o,o=>({values:o}),t)}var ps=class extends Iu{decode(e,t){return super.decode(e,t)}};function N(i,e,t){return new ps(i,e,t)}var fs=class extends Bu{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(o=>o.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function aP(i,e,t){return new fs(i,e,t)}var ys=class extends xu{decode(e,t){let n=super.decode(e,t);if(!n.every(o=>o===0))throw new Error("nonzero padding bytes");return n}};function uP(i){return new ys(i)}function Y(i,e,t){let n,o=typeof e=="number"?e:Lu(e)?e.toNumber():new Proxy(e,{get(r,s){if(!n){let a=Reflect.get(r,"count");n=Lu(a)?a.toNumber():a,Reflect.set(r,"count",n)}return Reflect.get(r,s)},set(r,s,a){return s==="count"&&(n=a),Reflect.set(r,s,a)}});return Ku(i,o,t)}var wn=N([L("mint"),L("owner"),w("amount"),rt("delegateOption"),L("delegate"),q("state"),rt("isNativeOption"),w("isNative"),w("delegatedAmount"),rt("closeAuthorityOption"),L("closeAuthority")]);var hP=me("Raydium_Util");function _u({owner:i,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:r,account:s}of t.value){let a=wn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:r,mint:c,amount:u,isAssociated:ie(i,c,s.owner).publicKey.equals(r),isNative:!1,programId:s.owner}),o.push({pubkey:r,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Nu.default,amount:new op(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function Ve({fromPublicKey:i,programId:e=rp,assignSeed:t}){let n=t?btoa(t).slice(0,32):ip.generate().publicKey.toBase58().slice(0,32);return{publicKey:sp(i,n,e),seed:n}}function sp(i,e,t){let n=Buffer.concat([i.toBuffer(),Buffer.from(e),t.toBuffer()]),o=Tu(n);return new Nu(o)}function bs(i){let{mint:e,tokenAccount:t,owner:n,programId:o=ni}=i;return mp(t,e,n,o)}function nn(i){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:r=ni}=i;return lp(e,t,o,n,r)}async function on(i){let{connection:e,amount:t,commitment:n,payer:o,owner:r,skipCloseAccount:s}=i,a=await e.getMinimumBalanceForRentExemption(wn.span,n),c=Z(t).add(new cp(a)),u=Ve({fromPublicKey:o,programId:ni});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[up.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:wn.span,programId:ni}),bs({mint:new ap(Ze.address),tokenAccount:u.publicKey,owner:r,programId:ni})],instructionTypes:[F.CreateAccount,F.InitAccount],endInstructionTypes:s?[]:[F.CloseAccount],endInstructions:s?[]:[nn({tokenAccount:u.publicKey,payer:o,owner:r})]}}function vu({source:i,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:r=ni}){return dp(i,e,t,BigInt(String(n)),o,r)}var Ni=class extends Me{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o,notSubscribeAccountChange:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._notSubscribeAccountChange=r!=null?r:!1,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 ie(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<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=O(O({},{}),t),[r,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Pn},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:fp},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=_u({owner:this.scope.ownerPubKey,solAccountResp:r,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=Pn,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let r=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of r){let{publicKey:c}=a;if(c&&(!o||o&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var f,b,g,A;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:r,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new Yo(t.tokenProgram||Pn),d=this.getAssociatedTokenAccount(n,new Yo(m)),p=(a?[]:this.tokenAccountRawInfos).filter(P=>P.accountInfo.mint.equals(n)&&(!r||P.pubkey.equals(d))).sort((P,h)=>P.accountInfo.amount.lt(h.accountInfo.amount)?1:-1);if(o===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let y={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let P=gs(s,d,s,n,m);if(u){let h=await this.scope.connection.getAccountInfo(d);if(h===null)(f=y.instructions)==null||f.push(P),y.instructionTypes.push(F.CreateATA);else if(!(h.owner.equals(m)&&ii.decode(h.data).mint.equals(n)&&ii.decode(h.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else y.instructions.push(P),y.instructionTypes.push(F.CreateATA);if(n.equals(H)&&o.amount){let h=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(b=o.amount)!=null?b:0,skipCloseAccount:c});y.instructions.push(...h.instructions||[]),y.endInstructions.push(...h.endInstructions||[]),y.instructionTypes.push(...h.instructionTypes||[]),y.endInstructionTypes.push(...h.endInstructionTypes||[]),o.amount&&(y.instructions.push(vu({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:Pn})),y.instructionTypes.push(F.TransferAmount))}return c||(y.endInstructions.push(nn({owner:s,payer:o.payer||s,tokenAccount:d,programId:m})),y.endInstructionTypes.push(F.CloseAccount)),{account:d,instructionParams:y}}else{let P=Ve({fromPublicKey:s,programId:m,assignSeed:l}),h=await this.scope.connection.getMinimumBalanceForRentExemption(ii.span),B=pp.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:P.seed,newAccountPubkey:P.publicKey,lamports:h+Number((A=(g=o.amount)==null?void 0:g.toString())!=null?A:0),space:ii.span,programId:m});return y.instructions.push(B,bs({mint:n,tokenAccount:P.publicKey,owner:this.scope.ownerPubKey,programId:m})),y.instructionTypes.push(F.CreateAccount),y.instructionTypes.push(F.InitAccount),c||(y.endInstructions.push(nn({owner:s,payer:o.payer||s,tokenAccount:P.publicKey,programId:m})),y.endInstructionTypes.push(F.CloseAccount)),{account:P.publicKey,instructionParams:y}}}async checkOrCreateAta({mint:t,programId:n=Pn,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let r=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!r){let u=this.getAssociatedTokenAccount(t,n),l=await gs(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[F.CreateATA],r=u}return o&&H.toBase58()===t.toBase58()&&(a.endInstructions=[nn({owner:s,payer:s,tokenAccount:r,programId:n})],a.endInstructionTypes=[F.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:r,programId:s=Pn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(r,s);if(new Yo(H).equals(r)){let p=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return O({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=gs(this.scope.ownerPubKey,d,this.scope.ownerPubKey,r,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(Pn)&&ii.decode(f.data).mint.equals(r)&&ii.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[F.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=Pn,amount:r,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Yo(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=l,p=De(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=m,p=De(m,["tokenAccount"]);c=d,u.addInstruction(p)}return O({tokenAccount:c},u.AllTxData)}};import{PublicKey as Pe,SystemProgram as _p}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as vp}from"@solana/spl-token";import{PublicKey as Uu}from"@solana/web3.js";var As=N([q("instruction")]),ws=N([q("instruction")]),yp=N([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),ee("accRewardPerShare"),L("rewardVault"),L("rewardMint"),L("rewardSender"),w("rewardType"),Y(w(),15,"padding")]),bp=N([w("state"),w("nonce"),L("lpVault"),L("rewardVault"),L(),L(),w(),w(),w("totalReward"),ee("perShareReward"),w("lastSlot"),w("perSlotReward")]),gp=N([w("state"),w("nonce"),L("lpVault"),L("rewardVaultA"),w("totalRewardA"),ee("perShareRewardA"),w("perSlotRewardA"),q("option"),L("rewardVaultB"),Ae(7),w("totalRewardB"),ee("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),L()]),Ap=N([w(),w("state"),w("nonce"),w("validRewardTokenNum"),ee("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),L("lpMint"),L("lpVault"),Y(yp,5,"rewardInfos"),L("creator"),L(),Y(w(),32,"padding")]),Vu=new Proxy(bp,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return W(O({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(i,e,t)}}),Eu=new Proxy(gp,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return W(O({},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(i,e,t)}}),_i=new Proxy(Ap,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return W(O({},o),{version:6,rewardInfos:o.rewardInfos.map(r=>{var s;return W(O({},r),{rewardType:((s=Object.entries(kn).find(a=>String(a[1])===r.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(i,e,t)}}),wp=N([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Ps=N([q("instruction"),w("nonce"),Y(wp,5,"rewardTimeInfo")]),ks=N([q("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),hs=N([q("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),ek=N([w("state"),L("id"),L("owner"),w("deposited"),Y(w(),1,"rewardDebts")]),vi=N([w("state"),L("id"),L("owner"),w("deposited"),Y(ee(),1,"rewardDebts"),w(""),w("voteLockedBalance"),Y(w(),15)]),tk=N([w("state"),L("id"),L("owner"),w("deposited"),Y(w(),2,"rewardDebts")]),Fu=N([w("state"),L("id"),L("owner"),w("deposited"),Y(ee(),2,"rewardDebts"),Y(w(),17)]),Du=N([w(),w("state"),L("id"),L("owner"),w("deposited"),Y(ee(),5,"rewardDebts"),Y(w(),16)]),pt=N([q("instruction"),w("amount")]),Pp=N([L("mint"),L("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Ou("digitShift"),Y(q(),7,"reserved1"),Y(w(),7,"reserved2")]),Wu=N([Ae(8),L("governanceProgramId"),L("realm"),L("realmGoverningTokenMint"),L("realmAuthority"),Y(q(),32,"reserved1"),Y(Pp,4,"votingMints"),ti("timeOffset"),q("bump"),Y(q(),7,"reserved2"),Y(w(),11,"reserved3")]),kp=N([ti("startTime"),ti("endTime"),q("kind"),Y(q(),15,"reserved")]),hp=N([Y(kp,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),Oe("isUsed"),Oe("allowClawback"),q("votingMintConfigIdx"),Y(q(),29,"reserved")]),qu=N([Ae(8),L("voterAuthority"),L("registrar"),Y(hp,32,"deposits"),q("voterBump"),q("voterWweightRecordBump"),Y(q(),94,"reserved")]);var ck=me("Raydium_farm_config"),Gu=new Uu("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Xu=new Uu("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),zu={3:Vu,5:Eu,6:_i},Qu={3:vi,5:Fu,6:Du},Ts=i=>[3,4,5,6].indexOf(i)!==-1,Is=i=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=i,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,r={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(s=r[e])==null?void 0:s.call(r)},kn={"Standard SPL":0,"Option tokens":1},Rt={[Hr.toString()]:3,[lu.toString()]:4,[Zr.toString()]:5,[$n.toString()]:6};import{PublicKey as oe,SystemProgram as Mn,SYSVAR_CLOCK_PUBKEY as ri,SYSVAR_RENT_PUBKEY as Bp,TransactionInstruction as Je}from"@solana/web3.js";import jo from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as xp,createAssociatedTokenAccountInstruction as Sp,TOKEN_PROGRAM_ID as kt}from"@solana/spl-token";function Bs(i,e,t){return ue([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],i)}function xs(i,e){return ue([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],i)}function Ss(i,e){return ue([e.toBuffer()],i)}function Ks(i,e,t){return ue([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],i)}function Cs(i,e,t){return ue([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],i)}function Rs(i,e,t,n){return ue([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}import Pt from"bn.js";var Vi=me("Raydium.farm.util");function Ei({programId:i,poolId:e,mint:t,type:n}){let{publicKey:o}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],i);return o}function ut({programId:i,poolId:e,owner:t,version:n}){let{publicKey:o}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],i);return o}var Yu=({programId:i,poolId:e})=>ue([e.toBuffer()],i);function ju(i){return{isSet:new Pt(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(kn[i.rewardType])}}function Ls(i){return Z(i.endTime).sub(Z(i.openTime)).mul(Z(i.perSecond))}function oi(i){let e=Qu[i];return e||Vi.logWithError("invalid version",i),e}function Tp(i){let e=zu[i];return e||Vi.logWithError("invalid version",i),e}function Ip(i,e,t,n){if(i.version===3||i.version===5){if(i.lastSlot.gte(new Pt(t)))return i;let o=new Pt(t).sub(i.lastSlot);i.lastSlot=new Pt(t);for(let r of i.rewardInfos){if(e.amount.eq(new Pt(0)))continue;let s=r.perSlotReward.mul(o);r.perShareReward=r.perShareReward.add(s.mul(new Pt(10).pow(new Pt(i.version===3?9:15))).div(e.amount)),r.totalReward=r.totalReward.add(s)}}else if(i.version===6)for(let o of i.rewardInfos){if(o.rewardState.eq(new Pt(0)))continue;let r=Pt.min(new Pt(n),o.rewardEndTime);if(o.rewardOpenTime.gte(r))continue;let a=r.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),c=o.totalReward.sub(o.totalRewardEmissioned);c.lt(a)?(a=c,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(c.div(o.rewardPerSecond))):o.rewardLastUpdateTime=r,!e.amount.eq(new Pt(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(i.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return i}async function xk({connection:i,farmPools:e,owner:t,config:n,chainTime:o}){let r=!1,s=!1,a=new Pt(10),c=[];for(let d of e){let p=Ke(d);p.version===6?s=!0:r=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:ut({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await Qe(i,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=O({},u[g]),y==="state"){let A=Tp(p);(!b||!b.data||b.data.length!==A.span)&&Vi.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=A.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==wn.span)&&Vi.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=wn.decode(b.data);else if(y==="ledger"){let A=oi(p);b&&b.data&&(b.data.length!==A.span&&Vi.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=A.decode(b.data))}}let m=s||r?await i.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Ip(u[d].state,u[d].lpVault,m,o));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new Pt(9)):a.pow(new Pt(15)),b=p.rewardInfos.map((g,A)=>{let P=y.rewardDebts[A];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(P)});u[d].wrapped=W(O({},u[d].wrapped),{pendingRewards:b})}return u}function Sk(i,e=Date.now()){if(i.version===6){let t=i.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>tu(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>nu(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=i.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Os(i,e,t,n){let o=await i.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let s=Wu.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await i.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=qu.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Kp=me("Raydium_farm_instruction"),Fi={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 Di(i){let{version:e,id:t,ledger:n,programId:o,owner:r}=i,s={3:9,5:10}[e];s||Kp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(As.span);As.encode({instruction:s},a);let c=[k({pubkey:t}),k({pubkey:n}),k({pubkey:r,isWritable:!1}),k({pubkey:Mn.programId,isWritable:!1}),k({pubkey:Bp,isWritable:!1})];return{instruction:new Je({programId:o,keys:c,data:a}),instructionType:F.FarmV3CreateLedger}}function Hu(i){var n;let e=Buffer.alloc(Ps.span);Ps.encode({instruction:0,nonce:new jo(i.nonce),rewardTimeInfo:i.rewardInfoConfig},e);let t=[...Fr,k({pubkey:i.farmId}),k({pubkey:i.farmAuthority,isWritable:!1}),k({pubkey:i.lpVault}),k({pubkey:i.lpMint,isWritable:!1}),k({pubkey:i.lockVault}),k({pubkey:i.lockMint,isWritable:!1}),k({pubkey:(n=i.lockUserAccount)!=null?n:$e}),k({pubkey:i.owner,isWritable:!1,isSigner:!0})];for(let o of i.rewardInfo)t.push(k({pubkey:o.rewardMint,isWritable:!1}),k({pubkey:o.rewardVault}),k({pubkey:o.userRewardToken}));return{instruction:new Je({programId:i.programId,keys:t,data:e}),instructionType:F.FarmV6Create}}function Zu(i){let e=Buffer.alloc(ws.span);ws.encode({instruction:5},e);let t=[k({pubkey:kt,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.authority,isWritable:!1}),k({pubkey:i.lpVault,isWritable:!1}),k({pubkey:i.rewardVault}),k({pubkey:i.userRewardToken}),k({pubkey:i.owner,isWritable:!1,isSigner:!0})];return{instruction:new Je({programId:i.programId,keys:t,data:e}),instructionType:F.FarmV6CreatorWithdraw}}function Cp(i,e,t,n,o,r,s,a,c,u,l,m,d){let p=N([q("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:kt,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Ko,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...Fi.voterStakeRegistryDeposit,...f]);return new Je({keys:y,programId:i,data:b})}function Rp(i,e,t,n){let o=N([]),r=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:Mn.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([...Fi.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Je({keys:r,programId:i,data:a})}function Lp(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y){let f=N([q("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:kt,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Ko,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let A=Buffer.from([...Fi.voterStakeRegistryWithdraw,...g]);return new Je({keys:b,programId:i,data:A})}function Op(i,e,t,n,o,r){let s=N([q("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:Mn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Je({keys:a,programId:i,data:c})}function Mp(i,e,t,n,o,r,s,a){let c=N([q("voterBump"),q("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Ko,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...Fi.voterStakeRegistryCreateVoter,...l]);return new Je({keys:u,programId:i,data:m})}function Np(i,e,t,n,o,r,s,a,c,u,l,m){let d=N([q("depositEntryIndex"),q("kind"),q("option"),w("startTs"),rt("periods"),Oe("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Mn.programId,isSigner:!1,isWritable:!1},{pubkey:kt,isSigner:!1,isWritable:!1},{pubkey:xp,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...Fi.voterStakeRegistryCreateDepositEntry,...y]);return new Je({keys:p,programId:i,data:f})}async function Uk({connection:i,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=Bs(n,o,r).publicKey,l=ut({programId:e,poolId:a,owner:s,version:3}),m=await i.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=vi.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new jo(0)))throw Error("user do not has new stake amount");let y=xs(e,a).publicKey,f=Ss(e,a).publicKey,{publicKey:b,nonce:g}=Ks(n,u,s),A=ie(b,y,c).publicKey,{publicKey:P,nonce:h}=Cs(n,u,s),B=Rs(t,o,r,s).publicKey,T=[],S=ie(s,y,c).publicKey;if(await i.getAccountInfo(S)===null&&T.push(Sp(s,S,s,y)),await i.getAccountInfo(b)===null){let V=Op(t,o,s,r,s,B);T.push(V,Mp(n,u,b,P,s,s,g,h))}let{index:x,isInit:K}=await Os(i,u,b,y);return K||T.push(Np(n,u,b,A,s,s,y,x,0,void 0,0,!1)),T.push(Cp(n,u,b,A,S,s,l,a,y,f,e,x,p),Rp(n,u,b,P)),T}async function Gk({connection:i,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=Bs(n,o,r).publicKey,l=ut({programId:e,poolId:a,owner:s,version:3}),m=await i.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=vi.decode(m.data);if(d.voteLockedBalance.eq(new jo(0)))throw Error("user has vote locked balance = 0");let p=xs(e,a).publicKey,y=Ss(e,a).publicKey,{publicKey:f}=Ks(n,u,s),b=ie(f,p,c).publicKey,{publicKey:g}=Cs(n,u,s),A=Rs(t,o,r,s).publicKey,P=[],{index:h,isInit:B}=await Os(i,u,f,p);if(!B)throw Error("deposit entry index check error");return P.push(Lp(n,u,f,s,A,g,b,ie(s,p,c).publicKey,l,a,p,y,e,h,d.voteLockedBalance)),P}function Ms({payer:i,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let r=Buffer.alloc(ks.span);ks.encode({instruction:3,rewardReopenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardPerSecond:Z(o.perSecond)},r);let s=[k({pubkey:kt,isWritable:!1}),k({pubkey:n.id}),k({pubkey:n.lpVault,isWritable:!1}),k({pubkey:e}),k({pubkey:t}),k({pubkey:i,isWritable:!1,isSigner:!0})];return new Je({programId:n.programId,keys:s,data:r})}function Ns({payer:i,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let r=Buffer.alloc(hs.span);hs.encode({instruction:4,isSet:new jo(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(kn[o.rewardType])},r);let s=[...Fr,k({pubkey:t.id}),k({pubkey:t.authority,isWritable:!1}),k({pubkey:o.mint,isWritable:!1}),k({pubkey:n}),k({pubkey:e}),k({pubkey:i,isWritable:!1,isSigner:!0})];return new Je({programId:t.programId,keys:s,data:r})}function Xk(i){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:r,owner:s,instruction:a,amount:c,deposit:u}=i,[l,m]=[new oe(e.programId),new oe(e.id)],d=ut({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(pt.span);pt.encode({instruction:a,amount:c},p);let y=n===6?[k({pubkey:kt,isWritable:!1}),...u?[k({pubkey:Mn.programId,isWritable:!1})]:[],k({pubkey:m}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:new oe(t.lpVault)}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:o})]:[k({pubkey:m}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:o}),k({pubkey:new oe(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(k({pubkey:r[f]})),y.push(k({pubkey:new oe(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(k({pubkey:new oe(t.rewardInfos[f].vault)})),y.push(k({pubkey:r[f]}));return new Je({programId:l,keys:y,data:p})}function Wi(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s}=i,[a,c]=[new oe(e.programId),new oe(e.id)],u=ut({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(pt.span);pt.encode({instruction:2,amount:Z(s)},l);let m=[k({pubkey:kt,isWritable:!1}),k({pubkey:c}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:new oe(t.lpVault)}),k({pubkey:u}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new oe(t.rewardInfos[d].vault)})),m.push(k({pubkey:o[d]}));return new Je({programId:a,keys:m,data:l})}function qi(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new oe(e.programId),new oe(e.id)],l=ut({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(pt.span);pt.encode({instruction:12,amount:Z(s)},m);let d=[k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:o[p]})),d.push(k({pubkey:new oe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Je({programId:c,keys:d,data:m})}function $u(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new oe(e.programId),new oe(e.id)],l=N([q("instruction"),w("amount")]),m=[k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:a[0]}),k({pubkey:r,isSigner:!0,isWritable:!1}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1}),k({pubkey:o[1]}),k({pubkey:new oe(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new Je({keys:m,programId:c,data:d})}function Ui(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new oe(e.programId),new oe(e.id)],l=ut({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(pt.span);pt.encode({instruction:11,amount:Z(s)},m);let d=[k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Je({programId:c,keys:d,data:m})}function Ju(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new oe(e.programId),new oe(e.id)],l=ut({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(pt.span);pt.encode({instruction:10,amount:Z(s)},m);let d=[k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Je({programId:c,keys:d,data:m})}function ec(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new oe(e.programId),new oe(e.id)],l=ut({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(pt.span);pt.encode({instruction:11,amount:Z(s)},m);let d=[k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:ri,isWritable:!1}),k({pubkey:kt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:o[p]})),d.push(k({pubkey:new oe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Je({programId:c,keys:d,data:m})}function tc(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s}=i,[a,c]=[new oe(e.programId),new oe(e.id)],u=ut({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(pt.span);pt.encode({instruction:1,amount:Z(s)},l);let m=[k({pubkey:kt,isWritable:!1}),k({pubkey:Mn.programId,isWritable:!1}),k({pubkey:c}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:new oe(t.lpVault)}),k({pubkey:u}),k({pubkey:r,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new oe(t.rewardInfos[d].vault)})),m.push(k({pubkey:o[d]}));return new Je({programId:a,keys:m,data:l})}var Gi=class extends Me{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals($e)){let n=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Ls(W(O({},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=$n,txVersion:r}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new Pe(e.lpMint.address),lockInfo:{lockMint:Gu,lockVault:Xu},version:6,rewardInfos:t,programId:o},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Ve({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(_i.span);c.addInstruction({instructions:[_p.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:_i.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Yu({programId:new Pe(a.programId),poolId:l.publicKey}),y=Ei({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(kn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(ju(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let I=B.mint.equals($e)?new Pe(Ze.address):B.mint;b.push({rewardMint:I,rewardVault:Ei({programId:a.programId,poolId:l.publicKey,mint:I,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({mint:new Pe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});A&&c.addInstruction(A),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:h}=Hu({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[P],instructionTypes:[h]}).versionBuild({txVersion:r,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o}){var b;let r=Rt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals($e)?new Pe(Ze.address):n.mint,l=a.rewardInfos.findIndex(g=>new Pe(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:$e,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Ms({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[F.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o}){var l;let r=Rt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals($e)?new Pe(Ze.address):m.mint,p=a.rewardInfos.findIndex(P=>new Pe(P.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:$e,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let A=Ms({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[A],instructionTypes:[F.FarmV6Restart]})}return u.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:r}=e,s=Rt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder(),l=o.mint.equals($e)?new Pe(Ze.address):o.mint,m=Ei({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:o,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,u.addInstruction({instructions:[Ns({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:o})],instructionTypes:[F.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:r}=e,s=Rt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of o){let m=l.mint.equals($e)?new Pe(Ze.address):l.mint,d=Ei({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Ns({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:W(O({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[F.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:r,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=Rt[d];p===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),Ts(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new Pe(n.programId),new Pe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=ut({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),A=this.createTxBuilder();A.addCustomComputeBudget(l);let P={};for(let R of this.scope.account.tokenAccounts)if(a){let X=ie(this.scope.ownerPubKey,R.mint,R.programId).publicKey;R.publicKey&&X.equals(R.publicKey)&&(P[R.mint.toString()]=R.publicKey)}else P[R.mint.toString()]=R.publicKey;let h=b.lpMint,B=P[h.address];B||this.logAndCreateError("you don't have any lp","lp zero",P);let T=[];for(let R of m){let X=s&&R.mint.address===H.toString(),G=P[R.mint.address];if(!G){let{account:D,instructionParams:Te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new Pe(R.mint.address),notUseTokenAccount:X,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!X,associatedOnly:X?!1:a,checkCreateATAOwner:c});G=D,Te&&A.addInstruction(Te)}P[R.mint.address]=G,T.push(G)}let S,I=await this.scope.connection.getAccountInfo(g);if(I&&(S=oi(p).decode(I.data)),n.programId!==$n.toString()&&!S){let{instruction:R,instructionType:X}=Di({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});A.addInstruction({instructions:[R],instructionTypes:[X]})}let C=Is({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});C&&this.logAndCreateError(C);let x={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(R=>new Pe(R))},K=p===6?tc(x):p===5?ec(x):Ju(x),V={3:F.FarmV3Deposit,5:F.FarmV5Deposit,6:F.FarmV6Deposit};return A.addInstruction({instructions:[K],instructionTypes:[V[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:r,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=Rt[n.programId];Ts(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let C of this.scope.account.tokenAccounts)if(c){let x=ie(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(!r&&p!==4){let C=ut({programId:new Pe(n.programId),poolId:new Pe(n.id),owner:this.scope.ownerPubKey,version:p}),x=await this.scope.connection.getAccountInfo(C);if(x)oi(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:K,instructionType:V}=Di({id:new Pe(y.id),programId:new Pe(y.programId),version:p,ledger:C,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[K],instructionTypes:[V]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x})}else r&&r.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});let g=y.lpMint.address,A=s&&g===H.toString(),P=b[g.toString()];if(!P){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Pe(g),notUseTokenAccount:A,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:A?!1:c,checkCreateATAOwner:u});P=C,x&&f.addInstruction(x)}b[g.toString()]=P;let h=[];for(let C of d){let x=s&&C.mint.address===H.toString(),K=b[C.mint.address];if(!K){let{account:V,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new Pe(C.mint.address),notUseTokenAccount:x,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!x,associatedOnly:x?!1:c,checkCreateATAOwner:u});K=V,R&&f.addInstruction(R)}b[C.mint.address]=K,h.push(K)}let B=Is({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:h});B&&this.logAndCreateError(B);let T={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:P,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new Pe(C))},S=p===6?Wi(T):p===5?qi(T):p===4?$u(T):Ui(T),I={3:F.FarmV3Withdraw,4:F.FarmV4Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[I[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let o=Ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),r=Rt[e.programId];r!==6&&this.logAndCreateError("invalid farm version",r);let s=e.rewardInfos.findIndex(y=>y.mint.address===$e.toString()?new Pe(Ze.address):t),a=o.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:$e,u=this.createTxBuilder(),l;if(t.equals($e)){let y=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Ls(W(O({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new M(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[vp(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[F.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Zu({programId:o.programId,id:o.id,authority:o.authority,lpVault:o.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(r){let f=ie(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>W(O({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:A}=y,P=Rt[f],h=b.address,B=n&&h===H.toString(),T=m[h];if(!T){let{account:V,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Pe(h),notUseTokenAccount:B,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:r,checkCreateATAOwner:s});T=V,R&&l.addInstruction(R)}m[h.toString()]=T;let S=[];for(let V of g){let R=n&&V.mint.address===H.toString(),X=m[V.mint.address];if(!X){let{account:G,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:V.mint.programId,mint:new Pe(V.mint.address),notUseTokenAccount:R,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:r,checkCreateATAOwner:s});X=G,D&&l.addInstruction(D)}m[V.mint.address]=X,S.push(X)}let I=p[A],C={amount:qe,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:I,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(V=>new Pe(V))},x=P===6?Wi(C):P===5?qi(C):Ui(C),K={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[K[P]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as ze}from"@solana/web3.js";import{AccountLayout as Cf,NATIVE_MINT as ur,TOKEN_PROGRAM_ID as Tn}from"@solana/spl-token";import{Keypair as tr,PublicKey as U,SystemProgram as an,TransactionInstruction as st}from"@solana/web3.js";import Us from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ji,TOKEN_2022_PROGRAM_ID as Ne,TOKEN_PROGRAM_ID as ke}from"@solana/spl-token";import Yp from"bn.js";import Lt from"bn.js";var ye=new Lt(0),xt=new Lt(1),rn=new Lt(-1),St=new Lt(1).shln(64),Ho=new Lt(1).shln(128),_s=St.sub(xt),Xi=64,nc=Ho.subn(1),ct=-443636,ft=-ct,Ot=new Lt("4295048016"),Mt=new Lt("79226673521066979257578248091"),Zo=new Lt("4295048017"),$o=new Lt("79226673521066979257578248090"),ic=16,oc="59543866431248",rc="184467440737095516",sc="15793534762490258745",Jo=new Lt(10).pow(new Lt(6)),Vp=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(Vp||{}),hh={[500]:10,[3e3]:60,[1e4]:200},Th={version:6,liquidity:ye,tickCurrent:0,feeGrowthGlobalX64A:ye,feeGrowthGlobalX64B:ye,protocolFeesTokenA:ye,protocolFeesTokenB:ye,swapInAmountTokenA:ye,swapOutAmountTokenB:ye,swapInAmountTokenB:ye,swapOutAmountTokenA:ye,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},ac={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:[]},Ih=new Lt("18446744073700000000");import le from"bn.js";function uc(i){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,i,!1),new Uint8Array(e)}function xh(i){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,i,!1),new Uint8Array(e)}function Sh(i){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,i,!1),new Uint8Array(e)}function er(i){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,i,!1),new Uint8Array(e)}function vs(i,e){let t=0;for(let n=i-1;n>=0&&!e.testn(n);n--)t++;return t}function Vs(i,e){let t=0;for(let n=0;n<i&&!e.testn(n);n++)t++;return t}function zi(i,e){for(let t=0;t<i;t++)if(e.testn(t))return!1;return!0}function cc(i,e){return zi(i,e)?null:vs(i,e)}function lc(i,e){return zi(i,e)?null:Vs(i,e)}var Ep=Buffer.from("amm_config","utf8"),Fp=Buffer.from("pool","utf8"),Dp=Buffer.from("pool_vault","utf8"),Wp=Buffer.from("pool_reward_vault","utf8"),mc=Buffer.from("position","utf8"),qp=Buffer.from("tick_array","utf8"),Up=Buffer.from("operation","utf8"),Gp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Xp=Buffer.from("observation","utf8");function Lh(i,e){return ue([Ep,uc(e)],i)}function dc(i,e,t,n){return ue([Fp,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function Es(i,e,t){return ue([Dp,e.toBuffer(),t.toBuffer()],i)}function pc(i,e,t){return ue([Wp,e.toBuffer(),t.toBuffer()],i)}function de(i,e,t){return ue([qp,e.toBuffer(),er(t)],i)}function qt(i,e,t,n){return ue([mc,e.toBuffer(),er(t),er(n)],i)}function yt(i,e){return ue([mc,e.toBuffer()],i)}function Nn(i){return ue([Buffer.from("metadata","utf8"),Zt.toBuffer(),i.toBuffer()],Zt)}function Qi(i){return ue([Up],i)}function Xe(i,e){return ue([Gp,e.toBuffer()],i)}function fc(i,e){return ue([Xp,e.toBuffer()],i)}var yc=Buffer.from("locked_position","utf8");function Fs(i,e){return ue([yc,e.toBuffer()],i)}function Yi(i,e){return ue([yc,e.toBuffer()],i)}import{PublicKey as Ut}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as bc}from"@solana/spl-token";import Re from"bn.js";import jt from"bn.js";var ji=class{static getfeeGrowthInside(e,t,n){let o=new jt(0),r=new jt(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),r=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new jt(0),a=new jt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=re.wrappingSubU128(re.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),u=re.wrappingSubU128(re.wrappingSubU128(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=re.mulDivFloor(re.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,St),c=t.tokenFeesOwedA.add(a),u=re.mulDivFloor(re.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,St),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=re.mulDivFloor(re.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,St),c=t.tokenFeesOwedA.add(a),u=re.mulDivFloor(re.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,St),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let r=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=re.wrappingSubU128(c,u.growthInsideLastX64),m=re.mulDivFloor(l,t.liquidity,St),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static GetPositionRewards(e,t,n,o){let r=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=re.wrappingSubU128(c,u.growthInsideLastX64),m=re.mulDivFloor(l,t.liquidity,St),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static getRewardGrowthInside(e,t,n,o){let r=[];for(let s=0;s<o.length;s++){let a=new jt(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new jt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(re.wrappingSubU128(re.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return r}static getRewardGrowthInsideV2(e,t,n,o){let r=[];for(let s=0;s<o.length;s++){let a=new jt(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new jt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(re.wrappingSubU128(re.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return r}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:r,epochInfo:s}){var b,g,A,P;let a=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=te.getSqrtPriceX64FromTick(t.tickLower),u=te.getSqrtPriceX64FromTick(t.tickUpper),l=r?1+o:1-o,m=pe.getAmountsFromLiquidity(a,c,u,n,r),[d,p]=[ge(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),ge(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[ge(new jt(new M(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,s,!0),ge(new jt(new M(m.amountB.toString()).mul(l).toFixed(0)),(P=e.mintB.extensions)==null?void 0:P.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Dt(d.expirationTime,p.expirationTime)}}};var zp=15,fe=class{static async getTickArrays(e,t,n,o,r,s,a){let c=[],u=j.getTickArrayStartIndexByTick(o,r),l=j.getInitializedTickArrayInRange(s,a,r,u,Math.floor(zp/2));for(let p=0;p<l.length;p++){let{publicKey:y}=de(t,n,l[p]);c.push(y)}let m=(await _t(e,c)).map(p=>p!==null?Hi.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=W(O({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,r,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,r,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,r,s),this.checkIsValidStartIndex(u,r))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,r){let s=Math.floor(e/fe.tickCount(t)),a=n?j.searchLowBitFromStart(o,r,s-1,1,t):j.searchHightBitFromStart(o,r,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let r;if(o){let a=et-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a-1}}else{let a=0;for(;a<et;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a+1}}let{publicKey:s}=de(e,t,n.startTickIndex);return{nextTick:r,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,r,s){let a=j.getTickArrayStartIndexByTick(o,r),c=Math.floor((o-a)/r),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<et;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=de(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(j.checkIsOutOfBoundary(e)){if(e>ft)return!1;let n=j.getTickArrayStartIndexByTick(ct,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return et*e}};var Ds=14,sn=class{static maxTickInTickarrayBitmap(e){return e*et*_n}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let r=n*o;return e<0?{minValue:-r,maxValue:-r+n}:{minValue:r,maxValue:r+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!fe.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let r=this.maxTickInTickarrayBitmap(n),s=o?t-fe.tickCount(n):t+fe.tickCount(n);if(s<-r||s>=r)return{isInit:!1,tickIndex:t};let a=n*et,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=cc(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-r}}else{let l=e.shrn(u),m=lc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:r-fe.tickCount(n)}}}},Zi=class{static getBitmapOffset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=sn.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=sn.maxTickInTickarrayBitmap(e),n=-t;if(ft<=t)throw Error(`extensionTickBoundary check error: ${ft}, ${t}`);if(n<=ct)throw Error(`extensionTickBoundary check error: ${n}, ${ct}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),r=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(o).testn(r),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let r=fe.tickCount(t),s=n?e-r:e+r,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:r,maxValue:s}=sn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=j.mergeTickArrayBitmap(e).shln(_n-1-a),u=zi(512,c)?null:vs(512,c);if(u!==null){let l=t-u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=zi(512,c)?null:Vs(512,c);if(u!==null){let l=t+u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-fe.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%sn.maxTickInTickarrayBitmap(t),o=Math.floor(n/fe.tickCount(t));return e<0&&n!=0&&(o=_n-o),o}};var xe=class{static getOutputAmountAndRemainAccounts(e,t,n,o,r,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=vn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,r,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(rn),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,r){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=de(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=vn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(rn),u,r);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=xe.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Zi.checkTickArrayIsInit(fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=de(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:r,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(r){let{publicKey:a}=de(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/fe.tickCount(e.tickSpacing)),o=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:r}=sn.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:r};t=r;let{isInit:s,tickIndex:a}=Zi.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<ct||t>ft)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:r}){var a,c,u;let s=[];for(let l=0;l<r.length;l++){let m=r[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=W(O({},m),{perSecond:re.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Ut(d)});if(p.tokenMint.equals(Ut.default))continue;if(n<=p.openTime.toNumber()||o.eq(ye)){s.push(p);continue}let y=new Re(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=re.mulDivFloor(f,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),A=re.mulDivFloor(f,p.emissionsPerSecondX64,St),P=p.rewardTotalEmissioned.add(A);s.push(W(O({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:P,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let r of t){let s=j.getTickArrayStartIndexByTick(r,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=sn.maxTickInTickarrayBitmap(e),n=-t;return t>ft&&(t=fe.getArrayStartIndex(ft,e)+fe.tickCount(e)),n<ct&&(n=fe.getArrayStartIndex(ct,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/fe.tickCount(t)*_n}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await Qe(e,t.map(s=>({pubkey:s})),{batchRequest:n}),r={};for(let s of o)s.accountInfo!==null&&(r[s.pubkey.toString()]=Ac.decode(s.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},r=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=de(c.programId,c.id,m);r.push({pubkey:d}),o[d.toString()]=c.id}}let s=await Qe(e,r,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Hi.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=W(O({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:r=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(yt(p,d).publicKey);let l=await _t(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=$i.decode(d.data),y=p.poolId.toString(),f=e.find(I=>I.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),A=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:P,amountB:h}=pe.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,A.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(A.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:A.price,amountA:P,amountB:h,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(I=>W(O({},I),{pendingReward:new Re(0)})),leverage:B,tokenFeeAmountA:new Re(0),tokenFeeAmountB:new Re(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(r){let d=Object.values(m),p=await _t(t,d,{batchRequest:o}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=Hi.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let A=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,P=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,h=y[m[A].toString()],B=y[m[P].toString()],T=h.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:I,tokenFeeAmountB:C}=await ji.GetPositionFees(f,g,T,S),x=await ji.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=I.gte(new Re(0))?I:new Re(0),g.tokenFeeAmountB=C.gte(new Re(0))?C:new Re(0);for(let K=0;K<x.length;K++)g.rewardInfos[K].pendingReward=x[K].gte(new Re(0))?x[K]:new Re(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:r,slippage:s,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var V;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new M(0))?u=l?Ot.add(new Re(1)):Mt.sub(new Re(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ge(r,m,o,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:A}=xe.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((V=p.fee)!=null?V:ye),u,c),P=ge(f,d,o,!1),h=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?h:new M(1).div(h),T=f.mul(new Re(Math.floor((1-s)*1e10))).div(new Re(1e10)),S=ge(T,d,o,!1),I=l?e.currentPrice:new M(1).div(e.currentPrice),C=new M(B).sub(I).abs(),x=I,K=new ve(new M(C).mul(10**15).toFixed(0),new M(x).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:P,minAmountOut:S,expirationTime:Dt(p.expirationTime,P.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:K,fee:A,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:r,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new we(W(O({},u),{mint:u.address,isToken2022:u.programId===bc.toBase58()})),new we(W(O({},l),{mint:l.address,isToken2022:l.programId===bc.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:P,priceImpact:h,fee:B,remainingAccounts:T,executionPriceX64:S}=xe.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Ut(u.address),amountIn:n,slippage:r,epochInfo:s,catchLiquidityInsufficient:a}),I=W(O({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),C=W(O({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),x=W(O({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),K=new nt({baseToken:m,denominator:new Re(10).pow(new Re(20+m.decimals)),quoteToken:d,numerator:A.mul(new M(10**(20+d.decimals))).toFixed(0)}),V=new nt({baseToken:m,denominator:new Re(10).pow(new Re(20+m.decimals)),quoteToken:d,numerator:P.mul(new M(10**(20+d.decimals))).toFixed(0)}),R=new be(m,B);return{allTrade:p,realAmountIn:I,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:K,executionPrice:V,priceImpact:h,fee:R,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:r,slippage:s,priceLimit:a=new M(0)}){var x;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new M(0))?l=c?Mt.sub(new Re(1)):Ot.add(new Re(1)):l=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=ge(r,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=xe.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((x=m.fee)!=null?x:ye),l),b=c?e.mintB.address:e.mintA.address,g=ge(d,u[b],o,!1),A=te.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),P=c?A:new M(1).div(A),h=d.mul(new Re(Math.floor((1+s)*1e10))).div(new Re(1e10)),B=ge(h,u[b],o,!0),T=c?e.currentPrice:new M(1).div(e.currentPrice),S=new M(P).sub(T).abs(),I=T,C=new ve(new M(S).mul(10**15).toFixed(0),new M(I).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:B,realAmountOut:m,expirationTime:Dt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:P,priceImpact:C,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var y,f,b;let r=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(s,r.priceMin),l=Math.min(a,r.priceMax)-c,m=a-s,d=r.priceMax-r.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:r.feeApr*p,rewardsApr:[((y=r.rewardApr[0])!=null?y:0)*p,((f=r.rewardApr[1])!=null?f:0)*p,((b=r.rewardApr[2])!=null?b:0)*p],apr:r.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:r,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[Bt(e.mintA.address).toString()],d=o[Bt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:A,amountSlippageB:P}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:h,amountSlippageB:B}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,r,!1,!1,0),T=new M(A.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(P.toString()).div(new M(10).pow(y)).mul(d.value)),S=new M(h.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(B.toString()).div(new M(10).pow(y)).mul(d.value)),I=new M(1).div(T.add(S)),x=new M(l.volumeFee).mul(365).div(u).mul(I).mul(100).toNumber(),K=3600*24*365,V=e.rewardDefaultInfos.map(R=>{var D,Te;let X=R.mint.decimals,G=o[R.mint.address];return c<((D=R.startTime)!=null?D:0)||c>((Te=R.endTime)!=null?Te:0)||!R.perSecond||!G||X===void 0?0:new M(G.value).mul(new M(R.perSecond).mul(K)).div(new M(10).pow(X)).mul(I).mul(100).toNumber()});return{feeApr:x,rewardsApr:V,apr:x+V.reduce((R,X)=>R+X,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:r,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,A;let l=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(o),p=a?1-s:1+s,y=ge(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Re(new M(y.amount.sub((A=y.fee)!=null?A:ye).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?pe.getLiquidityFromTokenAmountA(m,d,f,!a):new Re(0);else if(l.lte(d)){let P=pe.getLiquidityFromTokenAmountA(l,d,f,!a),h=pe.getLiquidityFromTokenAmountB(m,l,f);b=t?P:h}else b=t?new Re(0):pe.getLiquidityFromTokenAmountB(m,d,f);return xe.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:r,slippage:s,add:a}){var b,g,A,P;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=pe.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,r,a),[d,p]=[ge(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ge(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[ge(m.amountA.muln(l),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),ge(m.amountB.muln(l),(P=t.mintB.extensions)==null?void 0:P.feeConfig,e,!0)];return{liquidity:r,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Dt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Ut(c.id));(await _t(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=Vn.decode(c.data))});let s=t.map(c=>Xe(new Ut(c.programId),new Ut(c.id)).publicKey),a=await xe.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>W(O({},c),{[u.id]:W(O({},n[u.id]),{id:new Ut(u.id),version:6,programId:new Ut(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:W(O({},u.config),{id:new Ut(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapInfo:a[Xe(new Ut(u.programId),new Ut(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function bT({poolInfo:i,tickLower:e,tickUpper:t,amountA:n,amountB:o,slippage:r,add:s,epochInfo:a,amountHasFee:c}){var P,h,B,T;let[u,l,m,d]=e<t?[e,t,n,o]:[t,e,o,n],p=te.priceToSqrtPriceX64(new M(i.price),i.mintA.decimals,i.mintB.decimals),y=te.getSqrtPriceX64FromTick(u),f=te.getSqrtPriceX64FromTick(l),[b,g]=[ge(m,(P=i.mintA.extensions)==null?void 0:P.feeConfig,a,!c),ge(d,(h=i.mintB.extensions)==null?void 0:h.feeConfig,a,!c)],A=pe.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((B=b.fee)!=null?B:ye),g.amount.sub((T=g.fee)!=null?T:ye));return pe.getAmountsOutFromLiquidity({poolInfo:i,tickLower:e,tickUpper:t,liquidity:A,slippage:r,add:s,epochInfo:a,amountAddFee:!c})}var Ws={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function gc(i){return W(O({},i),{type:"Concentrated",programId:i.programId.toString(),id:i.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:i.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:i.ammConfig.tradeFeeRate,openTime:i.startTime.toString(),tvl:0,day:Ws,week:Ws,month:Ws,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:W(O({},i.ammConfig),{id:i.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var re=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),r=o.div(n);return o.mod(n).eq(ye)||(r=r.add(xt)),r}static mulDivFloor(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).add(n.sub(xt)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new le(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ho).sub(t).mod(Ho)}};function it(i,e){return qs(i.mul(e),64,256)}function Qp(i,e,t){let n=i.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function qs(i,e,t){let n=i.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var te=class{static sqrtPriceX64ToPrice(e,t,n){return re.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return re.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(ye))return e;let r=t.shln(Xi);if(o){let s=r,a=r.add(n.mul(e));return a.gte(s)?re.mulDivCeil(s,e,a):re.mulDivRoundingUp(s,xt,s.div(e).add(n))}else{let s=n.mul(e);if(!r.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=r.sub(s);return re.mulDivCeil(r,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let r=n.shln(Xi);if(o)return e.add(r.div(t));{let s=re.mulDivRoundingUp(r,xt,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<ct||e>ft)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new le("18445821805675395072"):new le("18446744073709551616");return(t&2)!=0&&(n=it(n,new le("18444899583751176192"))),(t&4)!=0&&(n=it(n,new le("18443055278223355904"))),(t&8)!=0&&(n=it(n,new le("18439367220385607680"))),(t&16)!=0&&(n=it(n,new le("18431993317065453568"))),(t&32)!=0&&(n=it(n,new le("18417254355718170624"))),(t&64)!=0&&(n=it(n,new le("18387811781193609216"))),(t&128)!=0&&(n=it(n,new le("18329067761203558400"))),(t&256)!=0&&(n=it(n,new le("18212142134806163456"))),(t&512)!=0&&(n=it(n,new le("17980523815641700352"))),(t&1024)!=0&&(n=it(n,new le("17526086738831433728"))),(t&2048)!=0&&(n=it(n,new le("16651378430235570176"))),(t&4096)!=0&&(n=it(n,new le("15030750278694412288"))),(t&8192)!=0&&(n=it(n,new le("12247334978884435968"))),(t&16384)!=0&&(n=it(n,new le("8131365268886854656"))),(t&32768)!=0&&(n=it(n,new le("3584323654725218816"))),(t&65536)!=0&&(n=it(n,new le("696457651848324352"))),(t&131072)!=0&&(n=it(n,new le("26294789957507116"))),(t&262144)!=0&&(n=it(n,new le("37481735321082"))),e>0&&(n=nc.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Mt)||e.lt(Ot))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new le(t-64),o=Qp(n,32,128),r=new le("8000000000000000","hex"),s=0,a=new le(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;r.gt(new le(0))&&s<ic;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(r.mul(y)),r=r.shrn(1),s+=1}let u=a.shrn(32),m=o.add(u).mul(new le(oc)),d=qs(m.sub(new le(rc)),64,128).toNumber(),p=qs(m.add(new le(sc)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},En=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let r=En.getTickWithPriceAndTickspacing(e,t,n,o),s=te.getSqrtPriceX64FromTick(r);return te.sqrtPriceX64ToPrice(s,n,o)}},pe=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");let r=n.ushln(Xi),s=t.sub(e);return o?re.mulDivRoundingUp(re.mulDivCeil(r,s,t),xt,e):re.mulDivFloor(r,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");return o?re.mulDivCeil(n,t.sub(e),St):re.mulDivFloor(n,t.sub(e),St)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let r=n.mul(e).mul(t),s=t.sub(e),a=r.div(s);return o?re.mulDivRoundingUp(a,xt,_s):a.shrn(Xi)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),re.mulDivFloor(n,_s,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return pe.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=pe.getLiquidityFromTokenAmountA(e,n,o,!1),a=pe.getLiquidityFromTokenAmountB(t,e,r);return s.lt(a)?s:a}else return pe.getLiquidityFromTokenAmountB(t,n,r)}static getAmountsFromLiquidity(e,t,n,o,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:pe.getTokenAmountAFromLiquidity(t,n,o,r),amountB:new le(0)};if(e.lt(n)){let s=pe.getTokenAmountAFromLiquidity(e,n,o,r),a=pe.getTokenAmountBFromLiquidity(t,e,o,r);return{amountA:s,amountB:a}}else return{amountA:new le(0),amountB:pe.getTokenAmountBFromLiquidity(t,n,o,r)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,r,s,a){let{amountA:c,amountB:u}=pe.getAmountsFromLiquidity(e,t,n,o,s),l=r?1+a:1-a,m=new le(new M(c.toString()).mul(l).toFixed(0)),d=new le(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:r,add:s,epochInfo:a,amountAddFee:c}){var A,P,h,B;let u=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+r:1-r,p=pe.getAmountsFromLiquidity(u,l,m,o,s),[y,f]=[ge(p.amountA,(A=e.mintA.extensions)==null?void 0:A.feeConfig,a,c),ge(p.amountB,(P=e.mintB.extensions)==null?void 0:P.feeConfig,a,c)],[b,g]=[ge(new le(new M(p.amountA.toString()).mul(d).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),ge(new le(new M(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:o,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Dt(y.expirationTime,f.expirationTime)}}},vn=class{static swapCompute(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(ye))throw new Error("amountSpecified must not be 0");if(y||(y=s?Ot.add(xt):Mt.sub(xt)),s){if(y.lt(Ot))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(Mt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(ye),g={amountSpecifiedRemaining:d,amountCalculated:ye,sqrtPriceX64:m,tick:u>p?Math.min(p+fe.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new le(0)},A=p,P=n[p],h=0,B=!s&&P.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(ye)&&!g.sqrtPriceX64.eq(y);){h>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(P,g.tick,l,s,B),I=S||null,C=null;if(!(I!=null&&I.liquidityGross.gtn(0))){let K=xe.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:r},A,s);if(!K.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}A=K.nextStartIndex;let{publicKey:V}=de(e,t,A);C=V,P=n[A];try{I=j.firstInitializedTick(P,s)}catch{throw Error("not found next tick info")}}T.tickNext=I.tick,T.initialized=I.liquidityGross.gtn(0),p!==A&&C&&(g.accounts.push(C),p=A),T.tickNext<ct?T.tickNext=ct:T.tickNext>ft&&(T.tickNext=ft),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let x;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?x=y:x=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=vn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let K=I.liquidityNet;s&&(K=K.mul(rn)),g.liquidity=pe.addDelta(g.liquidity,K)}B=T.tickNext!=g.tick&&!s&&P.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let K=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=K!=g.tick&&!s&&P.startTickIndex===K,g.tick=K}++h}try{let{nextStartIndex:T,isExist:S}=fe.nextInitializedTickArray(g.tick,l,s,o,r);S&&p!==T&&(g.accounts.push(de(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:ye,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,r){let s={sqrtPriceX64Next:new le(0),amountIn:new le(0),amountOut:new le(0),feeAmount:new le(0)},a=e.gte(t),c=o.gte(ye);if(c){let l=re.mulDivFloor(o,Jo.sub(new le(r.toString())),Jo);s.amountIn=a?pe.getTokenAmountAFromLiquidity(t,e,n,!0):pe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?pe.getTokenAmountBFromLiquidity(t,e,n,!1):pe.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(rn).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,o.mul(rn),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=pe.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=pe.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:pe.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:pe.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(o.mul(rn))&&(s.amountOut=o.mul(rn)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=o.sub(s.amountIn):s.feeAmount=re.mulDivCeil(s.amountIn,new le(r),Jo.sub(new le(r))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var et=60,_n=512,j=class{static getTickArrayAddressByTick(e,t,n,o){let r=j.getTickArrayStartIndexByTick(n,o),{publicKey:s}=de(e,t,r);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=et)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=fe.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*fe.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*et,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*et,r=Math.floor(t/o)+512,s=Math.abs(r);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*et:e+t*et}static mergeTickArrayBitmap(e){let t=new Yp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,r){let s=Math.floor(o/(n*et));return[...j.searchLowBitFromStart(e,t,s-1,r,n),...j.searchHightBitFromStart(e,t,s,r,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,_n,n)}static getAllInitializedTickArrayInfo(e,t,n,o,r){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,o,r);for(let c of a){let{publicKey:u}=de(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=fe.tickCount(r);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=fe.tickCount(r);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<ct||e>ft}static nextInitTick(e,t,n,o,r){if(fe.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(r||(a=a+1);a<et;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=et-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<et;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=te.getSqrtPriceX64FromTick(t),r=te.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(r),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),r=En.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(r),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=te.getSqrtPriceX64FromTick(t),r=te.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(r),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),r=En.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(r),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new M(1).div(a)}}};var wc=N([Ae(8),q("bump"),en("index"),L(""),rt("protocolFeeRate"),rt("tradeFeeRate"),en("tickSpacing"),Y(w(),8,"")]),jp=N([rt("blockTimestamp"),ti("tickCumulative"),Y(w(),4)]),Pc=N([Ae(8),Oe("initialized"),w("recentEpoch"),en("observationIndex"),L("poolId"),Y(jp,100,"observations"),Y(w(),4)]),Hp=N([q("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),ee("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),L("tokenMint"),L("tokenVault"),L("creator"),ee("rewardGrowthGlobalX64")]),Vn=N([Ae(8),q("bump"),L("ammConfig"),L("creator"),L("mintA"),L("mintB"),L("vaultA"),L("vaultB"),L("observationId"),q("mintDecimalsA"),q("mintDecimalsB"),en("tickSpacing"),ee("liquidity"),ee("sqrtPriceX64"),Ce("tickCurrent"),rt(),ee("feeGrowthGlobalX64A"),ee("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),ee("swapInAmountTokenA"),ee("swapOutAmountTokenB"),ee("swapInAmountTokenB"),ee("swapOutAmountTokenA"),q("status"),Y(q(),7,""),Y(Hp,3,"rewardInfos"),Y(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),Y(w(),15*4-3,"padding")]),Zp=N([ee("growthInsideLastX64"),w("rewardAmountOwed")]),$i=N([Ae(8),q("bump"),L("nftMint"),L("poolId"),Ce("tickLower"),Ce("tickUpper"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),Y(Zp,3,"rewardInfos"),Y(w(),8,"")]),DT=N([Ae(8),q("bump"),L("poolId"),Ce("tickLowerIndex"),Ce("tickUpperIndex"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),Y(ee(),3,"rewardGrowthInside"),Y(w(),8,"")]),$p=N([Ce("tick"),Mu("liquidityNet"),ee("liquidityGross"),ee("feeGrowthOutsideX64A"),ee("feeGrowthOutsideX64B"),Y(ee(),3,"rewardGrowthsOutsideX64"),Y(rt(),13,"")]),Hi=N([Ae(8),L("poolId"),Ce("startTickIndex"),Y($p,et,"ticks"),q("initializedTickCount"),Y(q(),115,"")]),kc=N([Ae(329),Y(L(),100,"whitelistMints")]),Ac=N([Ae(8),L("poolId"),Y(Y(w(),8),Ds,"positiveTickArrayBitmap"),Y(Y(w(),8),Ds,"negativeTickArrayBitmap")]),WT=N([w(),q("bump"),L("owner"),L("poolId"),L("positionId"),L("nftAccount"),Y(w(),8)]),qT=N([Ae(8),q("bump"),L("lockOwner"),L("poolId"),L("positionId"),L("nftAccount"),L("lockNftMint"),w("recentEpoch"),Y(w(),8)]);Pc.span;var hc=me("Raydium_Clmm"),Kt={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],openPositionWithTokenEx:[77,255,174,82,125,29,201,46],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},Tc=[188,37,179,131,82,150,84,73],Ic=[16,72,250,198,14,162,212,19],he=class{static createPoolInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y){let f=N([ee("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let A=Buffer.from([...Kt.createPool,...g]);return new st({keys:b,programId:e,data:A})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:r,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new U(o.address),new U(r.address)],{publicKey:m}=dc(t,s,u,l),{publicKey:d}=fc(t,m),{publicKey:p}=Es(t,m,u),{publicKey:y}=Es(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,u,p,new U(o.programId||ke),l,y,new U(r.programId||ke),Xe(t,m).publicKey,a,c)];return{signers:[],instructions:f,instructionTypes:[F.CreateAccount,F.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P,h,B,T,S,I,C,x){let K=N([Ce("tickLowerIndex"),Ce("tickUpperIndex"),Ce("tickArrayLowerStartIndex"),Ce("tickArrayUpperStartIndex"),ee("liquidity"),w("amountMaxA"),w("amountMaxB"),Oe("withMetadata"),q("optionBaseFlag"),Oe("baseFlag")]),V=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ji,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...V],X=Buffer.alloc(K.span);K.encode({tickLowerIndex:A,tickUpperIndex:P,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:I,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},X);let G=Buffer.from([...Kt.openPosition,...X]);return new st({keys:R,programId:e,data:G})}static openPositionFromLiquidityInstruction22(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P,h,B,T,S,I,C){let x=N([Ce("tickLowerIndex"),Ce("tickUpperIndex"),Ce("tickArrayLowerStartIndex"),Ce("tickArrayUpperStartIndex"),ee("liquidity"),w("amountMaxA"),w("amountMaxB"),Oe("withMetadata"),q("optionBaseFlag"),Oe("baseFlag")]),K=[...C?[{pubkey:C,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ji,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...K],R=Buffer.alloc(x.span);x.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:h,liquidity:B,amountMaxA:T,amountMaxB:S,withMetadata:I==="create",baseFlag:!1,optionBaseFlag:0},R);let X=Buffer.from([...Kt.openPositionWithTokenEx,...R]);return new st({keys:V,programId:e,data:X})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,y]=[new U(e.programId),new U(e.id)],f;if(l)f=new U((await l(1))[0]);else{let C=tr.generate();d.push(C),f=C.publicKey}let b=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:A}=de(p,y,b),{publicKey:P}=de(p,y,g),{publicKey:h}=m?ie(n.wallet,f,Ne):ie(n.wallet,f,ke),{publicKey:B}=Nn(f),{publicKey:T}=yt(p,f),{publicKey:S}=qt(p,y,o,r),I=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,y,n.wallet,f,h,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,r,b,g,s,a,c,u,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(p,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,y,n.wallet,f,h,B,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,r,b,g,s,a,c,u,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(p,y).publicKey:void 0);return{signers:d,instructions:[I],instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:f,tickArrayLower:A,tickArrayUpper:P,positionNftAccount:h,metadataAccount:B,personalPosition:T,protocolPosition:S}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,y]=[new U(e.programId),new U(e.id)],f;if(l)f=new U((await l(1))[0]);else{let C=tr.generate();d.push(C),f=C.publicKey}let b=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:A}=de(p,y,b),{publicKey:P}=de(p,y,g),{publicKey:h}=m?ie(n.wallet,f,Ne):ie(n.wallet,f,ke),{publicKey:B}=Nn(f),{publicKey:T}=yt(p,f),{publicKey:S}=qt(p,y,o,r),I=m?this.openPositionFromBaseInstruction22(p,n.feePayer,y,n.wallet,f,h,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,r,b,g,u,s,a,c,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(p,y).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,y,n.wallet,f,h,B,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,r,b,g,u,s,a,c,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(p,y).publicKey:void 0);return{address:{nftMint:f,tickArrayLower:A,tickArrayUpper:P,positionNftAccount:h,metadataAccount:B,personalPosition:T,protocolPosition:S},instructions:[I],signers:d,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P,h,B,T,S,I,C,x){let K=N([Ce("tickLowerIndex"),Ce("tickUpperIndex"),Ce("tickArrayLowerStartIndex"),Ce("tickArrayUpperStartIndex"),ee("liquidity"),w("amountMaxA"),w("amountMaxB"),Oe("withMetadata"),q("optionBaseFlag"),Oe("baseFlag")]),V=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ji,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...V],X=Buffer.alloc(K.span);K.encode({tickLowerIndex:A,tickUpperIndex:P,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:B,liquidity:new Us(0),amountMaxA:S==="MintA"?I:C,amountMaxB:S==="MintA"?C:I,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},X);let G=Buffer.from([...Kt.openPosition,...X]);return new st({keys:R,programId:e,data:G})}static openPositionFromBaseInstruction22(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P,h,B,T,S,I,C){let x=N([Ce("tickLowerIndex"),Ce("tickUpperIndex"),Ce("tickArrayLowerStartIndex"),Ce("tickArrayUpperStartIndex"),ee("liquidity"),w("amountMaxA"),w("amountMaxB"),Oe("withMetadata"),q("optionBaseFlag"),Oe("baseFlag")]),K=[...C?[{pubkey:C,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ji,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...K],R=Buffer.alloc(x.span);x.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:h,liquidity:new Us(0),amountMaxA:T==="MintA"?S:I,amountMaxB:T==="MintA"?I:S,withMetadata:B==="create",baseFlag:T==="MintA",optionBaseFlag:1},R);let X=Buffer.from([...Kt.openPositionWithTokenEx,...R]);return new st({keys:V,programId:e,data:X})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new U((await l(1))[0]);else{let C=tr.generate();p.push(C),d=C.publicKey}let[y,f]=[new U(e.programId),new U(e.id)],b=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:A}=de(y,f,b),{publicKey:P}=de(y,f,g),{publicKey:h}=m?ie(n.wallet,d,Ne):ie(n.wallet,d,ke),{publicKey:B}=Nn(d),{publicKey:T}=yt(y,d),{publicKey:S}=qt(y,f,o,r),I=m?this.openPositionFromLiquidityInstruction22(y,n.wallet,f,n.wallet,d,h,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,r,b,g,s,a,c,u,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(y,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(y,n.wallet,f,n.wallet,d,h,B,S,A,P,T,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,r,b,g,s,a,c,u,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Xe(y,f).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:A,tickArrayUpper:P,positionNftAccount:h,metadataAccount:B,personalPosition:T,protocolPosition:S},instructions:[I],signers:p,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,r,s){let a=N([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:s?Ne:ke,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Kt.closePosition,...u]);return new st({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:r}){let s=new U(e.programId),a=r?ie(n.wallet,o.nftMint,Ne).publicKey:ie(n.wallet,o.nftMint,ke).publicKey,{publicKey:c}=yt(s,o.nftMint),u=[];return u.push(this.closePositionInstruction(s,n.wallet,o.nftMint,a,c,r)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[F.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A){let P=N([ee("liquidity"),w("amountMaxA"),w("amountMaxB"),q("optionBaseFlag"),Oe("baseFlag")]),h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(P.span);P.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...Kt.increaseLiquidity,...T]);return new st({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:r,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=de(u,l,m),{publicKey:y}=de(u,l,d),{publicKey:f}=c?ie(o.wallet,n.nftMint,Ne):ie(o.wallet,n.nftMint,ke),{publicKey:b}=yt(u,n.nftMint),{publicKey:g}=qt(u,l,n.tickLower,n.tickUpper),A=this.increasePositionFromLiquidityInstruction(u,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Xe(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:[A],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:r,baseAmount:s,otherAmountMax:a,nft2022:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=de(u,l,m),{publicKey:y}=de(u,l,d),{publicKey:f}=c?ie(o.wallet,n.nftMint,Ne):ie(o.wallet,n.nftMint,ke),{publicKey:b}=yt(u,n.nftMint),{publicKey:g}=qt(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Xe(u,l).publicKey:void 0)],signers:[],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A){let P=N([ee("liquidity"),w("amountMaxA"),w("amountMaxB"),q("optionBaseFlag"),Oe("baseFlag")]),h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(P.span);P.encode({liquidity:new Us(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...Kt.increaseLiquidity,...T]);return new st({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P){let h=N([ee("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...f.map(C=>[{pubkey:C.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:So,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(h.span);h.encode({liquidity:b,amountMinA:g,amountMinB:A},S);let I=Buffer.from([...Kt.decreaseLiquidity,...S]);return new st({keys:T,programId:e,data:I})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:r,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new U(e.programId),new U(e.id)],d=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:y}=de(l,m,d),{publicKey:f}=de(l,m,p),{publicKey:b}=u?ie(o.wallet,n.nftMint,Ne):ie(o.wallet,n.nftMint,c),{publicKey:g}=yt(l,n.nftMint),{publicKey:A}=qt(l,m,n.tickLower,n.tickUpper),P=[];for(let T=0;T<e.rewardDefaultInfos.length;T++)P.push({poolRewardVault:new U(t.rewardInfos[T].vault),ownerRewardVault:o.rewardAccounts[T],rewardMint:new U(e.rewardDefaultInfos[T].mint.address)});let h=[],B=this.decreaseLiquidityInstruction(l,o.wallet,b,g,m,A,y,f,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),P,r,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?Xe(l,m).publicKey:void 0);return h.push(B),{address:{tickArrayLower:y,tickArrayUpper:f,positionNftAccount:b,personalPosition:g,protocolPosition:A},signers:[],instructions:h,instructionTypes:[F.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g){let A=N([w("amount"),w("otherAmountThreshold"),ee("sqrtPriceLimitX64"),Oe("isBaseInput")]),P=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:So,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...P],B=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...Kt.swap,...B]);return new st({keys:h,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:r,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===r.toString(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,Xe(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:r,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===r.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountB:o.tokenAccountA,b?o.tokenAccountA:o.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,u,n,s,a,c,!1,Xe(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,r,s,a,c,u,l,m,d){let p=N([w("openTime"),w("endTime"),ee("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Kt.initReward,...f]);return new st({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[r,s]=[new U(e.programId),new U(e.id)],a=pc(r,s,o.mint).publicKey,c=Qi(r).publicKey,u=[this.initRewardInstruction(r,n.wallet,s,c,new U(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[F.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,r,s,a,c,u,l,m,d){let p=N([q("rewardIndex"),ee("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...Kt.setRewardEmissions,...f]);return new st({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[r,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&hc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Qi(r).publicKey,m=[this.setRewardInstruction(r,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[F.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,r,s,a){let c=N([q("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:So,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Kt.collectReward,...l]);return new st({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[r,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&hc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(r,n.wallet,s,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[F.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:r,nftMint:s,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new U((await c(1))[0]);else{let g=tr.generate();u.push(g),l=g.publicKey}let m=a?ie(r,s,Ne).publicKey:ie(r,s,ke).publicKey,{publicKey:d}=yt(n,s),p=Yi(e,l).publicKey,y=ie(r,l,ke).publicKey,f=Nn(l).publicKey,b=he.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:r,lockOwner:r,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:y,metadataAccount:f,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:ie(t,s,a?Ne:ke).publicKey,positionNftProgram:a?Ne:ke});return{address:{positionId:d,lockPositionId:p,lockNftAccount:y,lockNftMint:l,positionNftAccount:m,metadataAccount:f},instructions:[b],signers:u,instructionTypes:[F.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:r,positionNftAccount:s,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:m,lockNftMint:d,lockNftAccount:p,metadataAccount:y,withMetadata:f}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:Zt,isSigner:!1,isWritable:!1},{pubkey:Ji,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1}],g=N([Oe("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:f},A);let P=Buffer.from([...Tc,...A]);return new st({keys:b,programId:e,data:P})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:r}){let{publicKey:s}=ie(o,r,ke),{publicKey:a}=yt(n,r),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Fs(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:an.programId,isSigner:!1,isWritable:!1}];return new st({keys:c,programId:e,data:Buffer.from(Tc)})}static harvestLockPositionInstruction(e){let[t,n]=[new U(e.poolKeys.programId),new U(e.poolKeys.id)],o=j.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=j.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=de(t,n,o),{publicKey:a}=de(t,n,r),{publicKey:c}=ie(e.owner,e.ownerPosition.nftMint,ke),{publicKey:u}=yt(t,e.ownerPosition.nftMint),{publicKey:l}=qt(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let y=0;y<e.poolKeys.rewardInfos.length;y++)m.push({poolRewardVault:new U(e.poolKeys.rewardInfos[y].vault),ownerRewardVault:e.ownerRewardAccounts[y],rewardMint:new U(e.poolKeys.rewardInfos[y].mint.address)});let d=[...m.map(y=>[{pubkey:y.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:Fs(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new U(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new U(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,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:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:yn,isSigner:!1,isWritable:!1},{pubkey:new U(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new U(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new st({keys:p,programId:e.programId,data:Buffer.from(Ic)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:r,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:y,tickArrayUpper:f,userVaultA:b,userVaultB:g,mintA:A,mintB:P,rewardAccounts:h,exTickArrayBitmap:B}){let T=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[],...h.map(I=>[{pubkey:I.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:I.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:I.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:yn,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},...T];return new st({keys:S,programId:e,data:Buffer.from(Ic)})}};var oI=N([rt("mintAuthorityOption"),L("mintAuthority"),w("supply"),q("decimals"),q("isInitialized"),rt("freezeAuthorityOption"),L("freezeAuthority")]);import{PublicKey as Jp}from"@solana/web3.js";import{MintLayout as Bc,TOKEN_PROGRAM_ID as ef}from"@solana/spl-token";var fI=async({connection:i,mint:e})=>{let t=await i.getAccountInfo(new Jp(e));return!t||t.data.length!==Bc.span?void 0:Bc.decode(t.data)},yI=({mint:i,decimals:e,programId:t=ef,logoURI:n="",priority:o=3})=>{let r=i.toBase58().substring(0,6);return{address:i.toBase58(),decimals:e,symbol:r,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:r,tags:[],priority:o}},nr=i=>new we({mint:i.address,decimals:i.decimals,symbol:i.symbol,name:i.name}),eo=o=>{var r=o,{amount:i,isRaw:e,name:t}=r,n=De(r,["amount","isRaw","name"]);return new be(new we({mint:Bt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),i,e,t)};function bI(i){return i.address===Qt.address?Ze:i}function gI(i){return i.address===Ze.address?Qt:i}var lt=o=>{var r=o,{address:i,programId:e,decimals:t}=r,n=De(r,["address","programId","decimals"]);return O({chainId:101,address:Bt(i).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},hn=i=>i?W(O({},i),{transferFeeConfigAuthority:i.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:i.withdrawWithheldAuthority.toBase58(),withheldAmount:i.withheldAmount.toString(),olderTransferFee:W(O({},i.olderTransferFee),{epoch:i.olderTransferFee.epoch.toString(),maximumFee:i.olderTransferFee.maximumFee.toString()}),newerTransferFee:W(O({},i.newerTransferFee),{epoch:i.newerTransferFee.epoch.toString(),maximumFee:i.newerTransferFee.maximumFee.toString()})}):void 0;import xc from"bn.js";var Gs=new xc(25),ir=new xc(1e4),tf={4:3,5:3};import{PublicKey as Ie,SystemProgram as Nc,SYSVAR_RENT_PUBKEY as bf,TransactionInstruction as un}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as gf,TOKEN_PROGRAM_ID as ui}from"@solana/spl-token";var Xs=N([q("instruction"),w("amountIn"),w("minAmountOut")]),zs=N([q("instruction"),w("maxAmountIn"),w("amountOut")]),KI=N([q("instruction"),q("nonce")]),Qs=N([q("instruction"),q("nonce"),w("startTime")]),to=N([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"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),w("swapBase2QuoteFee"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),w("swapQuote2BaseFee"),L("baseVault"),L("quoteVault"),L("baseMint"),L("quoteMint"),L("lpMint"),L("openOrders"),L("marketId"),L("marketProgramId"),L("targetOrders"),L("withdrawQueue"),L("lpVault"),L("owner"),w("lpReserve"),Y(w(),3,"padding")]),nf=N([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"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),L("baseVault"),L("quoteVault"),L("baseMint"),L("quoteMint"),L("lpMint"),L("modelDataAccount"),L("openOrders"),L("marketId"),L("marketProgramId"),L("targetOrders"),L("owner"),Y(w(),64,"padding")]),Ys=N([q("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide"),w("otherAmountMin")]),js=N([q("instruction"),w("lpAmount"),w("baseAmountMin"),w("quoteAmountMin")]),CI={4:to,5:nf},Sc=N([w("fee")]);import{PublicKey as of}from"@solana/web3.js";var ai=new of("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Dn=5e4,rf=N([w("x"),w("y"),w("price")]),sf=N([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),Y(rf,Dn,"DataElement")]);function af(i,e){return[0,Dn-2]}function uf(i){return[0,Dn-2]}function cf(i){return[0,Dn-2]}function lf(i,e,t){let[n,o]=af(e,t),r=n,s=o,a=0,c=e*i.multiplier/t;for(;r<=s;){if(a=Math.floor((s+r)/2),a===0||a>=Dn-2)return[a,a,!1];let u=i.DataElement[a].x*i.multiplier/i.DataElement[a].y,l=i.DataElement[a-1].x*i.multiplier/i.DataElement[a-1].y,m=i.DataElement[a+1].x*i.multiplier/i.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];r=a+1}}return[a,a,!1]}function Hs(i,e,t){let[n,o,r]=lf(i,e,t);if(!r)return 0;if(n===o){let s=i.DataElement[n].x;return e*i.multiplier/s}else{let s=i.DataElement[n].x,a=i.DataElement[n].y,c=i.DataElement[o].x,u=i.DataElement[o].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*i.multiplier*l/p}}function Fn(i,e,t){return e*i.multiplier/t}function Kc(i,e,t){return e*t/i.multiplier}function mf(i,e){let[t,n]=uf(e),o=t,r=n,s=0,a=e;for(;o<r;){if(s=Math.floor((r+o)/2),s<=0||s>Dn-2)return[s,s,!1];let c=i.DataElement[s].x,u=i.DataElement[s-1].x,l=i.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)r=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];o=s+1}}return[s,s,!1]}function df(i,e){let[t,n]=cf(e),o=t,r=n,s=0,a=e;for(;o<=r;){if(s=Math.floor((r+o)/2),s<=0||s>=Dn-2)return[s,s,!1];let c=i.DataElement[s].y,u=i.DataElement[s-1].y,l=i.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)o=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];r=s-1}}return[s,s,!1]}function Cc(i,e,t,n){let o=n?e+t:e-t,[r,s,a]=mf(i,o);if(!a)return[0,0,!1,a];if(r===s)return[i.DataElement[s].price,i.DataElement[s].y,!1,a];{let c=i.DataElement[r].x,u=i.DataElement[s].x,l=i.DataElement[r].price,m=i.DataElement[s].price,d=i.DataElement[r].y,p=i.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(o-c)*i.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-o)*i.multiplier/l),[y,f,!1,a]}}}function pf(i,e,t,n){let o=n?e-t:e+t,[r,s,a]=df(i,o);if(!a)return[0,0,!1,a];if(r===s)return[i.DataElement[s].price,i.DataElement[s].x,!1,a];{let c=i.DataElement[r].x,u=i.DataElement[s].x,l=i.DataElement[r].price,m=i.DataElement[s].price,d=i.DataElement[r].y,p=i.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-o)/i.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(o-p)/i.multiplier),[y,f,!1,a]}}}function ff(i,e){let t=Cc(i,e,0,!1);return t[3]?t[0]:0}function Rc(i,e,t,n){let o=Hs(i,e,t),r=Fn(i,e,o),s=Fn(i,t,o),a=Fn(i,n,o),c=!0,[u,l,m,d]=Cc(i,r,a,c);if(!d)return 0;if(m)return n*i.multiplier/u;{let p=s-l;return Kc(i,p,o)}}function Lc(i,e,t,n){let o=Hs(i,e,t),r=Fn(i,e,o),s=Fn(i,t,o),a=Fn(i,n,o),c=!1,[u,l,m,d]=pf(i,s,a,c);if(!d)return 0;if(m)return n*u/i.multiplier;{let p=r-l;return Kc(i,p,o)}}function yf(i){let e=sf.decode(i);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 Oc(i,e,t,n){let o=ff(i,Fn(i,e,Hs(i,e,t)))/i.multiplier;return n?o:1/o}var si=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(ai);e&&(this._layoutData=yf(e==null?void 0:e.data))}}};var Mc=me("Raydium_liquidity_instruction");function _c(i){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:r,fixedSide:s,otherAmountMin:a}=i,c=Buffer.alloc(Ys.span);Ys.encode({instruction:3,baseAmountIn:Z(o),quoteAmountIn:Z(r),otherAmountMin:Z(a),fixedSide:s==="base"?qe:Za},c);let u=[k({pubkey:ui,isWritable:!1}),k({pubkey:new Ie(e.id)}),k({pubkey:new Ie(t.authority),isWritable:!1}),k({pubkey:new Ie(t.openOrders),isWritable:!1}),k({pubkey:new Ie(t.targetOrders)}),k({pubkey:new Ie(e.lpMint.address)}),k({pubkey:new Ie(t.vault.A)}),k({pubkey:new Ie(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(k({pubkey:ai})),u.push(k({pubkey:new Ie(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 Ie(t.marketEventQueue),isWritable:!1})),new un({programId:new Ie(e.programId),keys:u,data:c})}function Zs(i){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:r,quoteAmountMin:s}=i,a=Ke(t),c=4;if(e.pooltype.includes("StablePool")&&(c=5),c===4||c===5){let u=Buffer.alloc(js.span);js.encode({instruction:4,lpAmount:Z(o),baseAmountMin:Z(r),quoteAmountMin:Z(s)},u);let l=[k({pubkey:ui,isWritable:!1}),k({pubkey:a.id}),k({pubkey:a.authority,isWritable:!1}),k({pubkey:a.openOrders}),k({pubkey:a.targetOrders}),k({pubkey:a.mintLp.address}),k({pubkey:a.vault.A}),k({pubkey:a.vault.B})];return c===5?l.push(k({pubkey:ai})):(l.push(k({pubkey:a.id})),l.push(k({pubkey:a.id}))),l.push(k({pubkey:a.marketProgramId,isWritable:!1}),k({pubkey:a.marketId}),k({pubkey:a.marketBaseVault}),k({pubkey:a.marketQuoteVault}),k({pubkey:a.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:a.marketEventQueue}),k({pubkey:a.marketBids}),k({pubkey:a.marketAsks})),new un({programId:a.programId,keys:l,data:u})}return new un({programId:a.programId,keys:[]})}function $s({programId:i,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:r,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:A,openTime:P,coinAmount:h,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let I=N([q("instruction"),q("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),C=[{pubkey:ui,isSigner:!1,isWritable:!1},{pubkey:gf,isSigner:!1,isWritable:!1},{pubkey:Nc.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(I.span);return I.encode({instruction:1,nonce:A,openTime:P,coinAmount:h,pcAmount:B},x),{instruction:new un({keys:C,programId:i,data:x}),instructionType:F.AmmV4CreatePool}}function XI(i){let e=N([q("instruction"),q("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new Ie(i.id),isWritable:!1}),k({pubkey:new Ie(i.authority),isWritable:!1}),k({pubkey:new Ie(i.openOrders),isWritable:!1}),k({pubkey:new Ie(i.vault.A),isWritable:!1}),k({pubkey:new Ie(i.vault.B),isWritable:!1}),k({pubkey:new Ie(i.mintLp.address),isWritable:!1}),k({pubkey:new Ie(i.marketId),isWritable:!1}),k({pubkey:new Ie(i.marketEventQueue),isWritable:!1})];return new un({programId:new Ie(i.programId),keys:n,data:t})}function Af({poolKeys:i,userKeys:e,amountIn:t,minAmountOut:n},o){let r=Ke(i),s=Buffer.alloc(Xs.span);Xs.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[k({pubkey:ui,isWritable:!1}),k({pubkey:r.id}),k({pubkey:r.authority,isWritable:!1}),k({pubkey:r.openOrders})];return o===4&&a.push(k({pubkey:r.targetOrders})),a.push(k({pubkey:r.vault.A}),k({pubkey:r.vault.B})),o===5&&a.push(k({pubkey:ai})),a.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})),new un({programId:r.programId,keys:a,data:s})}function wf({poolKeys:i,userKeys:e,maxAmountIn:t,amountOut:n},o){let r=Ke(i),s=Buffer.alloc(zs.span);zs.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[k({pubkey:ui,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 o===5&&a.push(k({pubkey:ai})),a.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 un({programId:r.programId,keys:a,data:s})}function or(i){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:r,fixedSide:s}=i;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return Af(W(O({},a),{amountIn:o,minAmountOut:r}),t);if(s==="out")return wf(W(O({},a),{maxAmountIn:o,amountOut:r}),t);Mc.logWithError("invalid params","params",i)}throw Mc.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function zI({poolKeys:i,userKeys:e,startTime:t}){let n=Buffer.alloc(Qs.span);Qs.encode({instruction:0,nonce:5,startTime:Z(t)},n);let o=Ke(i),r=[k({pubkey:ui,isWritable:!1}),k({pubkey:Nc.programId,isWritable:!1}),k({pubkey:bf,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.mintLp.address}),k({pubkey:o.mintA.address,isWritable:!1}),k({pubkey:o.mintB.address,isWritable:!1}),k({pubkey:o.vault.A,isWritable:!1}),k({pubkey:o.vault.B,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.targetOrders}),k({pubkey:e.lpTokenAccount}),k({pubkey:o.id,isWritable:!1}),k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId,isWritable:!1}),k({pubkey:e.payer,isSigner:!0})];return new un({programId:o.programId,keys:r,data:n})}function vc({poolKeys:i}){let e=N([q("instruction"),q("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new Ie(i.id),isWritable:!1}),k({pubkey:new Ie(i.authority),isWritable:!1}),k({pubkey:new Ie(i.openOrders),isWritable:!1}),k({pubkey:new Ie(i.vault.A),isWritable:!1}),k({pubkey:new Ie(i.vault.B),isWritable:!1}),k({pubkey:new Ie(i.mintLp.address),isWritable:!1}),k({pubkey:new Ie(i.marketId),isWritable:!1}),k({pubkey:new Ie(i.marketEventQueue),isWritable:!1})];return{instruction:new un({programId:new Ie(i.programId),keys:n,data:t})}}import{PublicKey as hf}from"@solana/web3.js";import no from"bn.js";import{TOKEN_PROGRAM_ID as Tf}from"@solana/spl-token";import{PublicKey as Pf}from"@solana/web3.js";var kf=me("Raydium_liquidity_serum");function Vc({programId:i,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));o=Pf.createProgramAddressSync(r,i)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:o,nonce:n}}throw kf.logWithError("unable to find a viable program address nonce","params",{programId:i,marketId:e}),new Error("unable to find a viable program address nonce")}function rr({programId:i}){let{publicKey:e}=ue([Buffer.from("amm_config_account_seed","utf-8")],i);return e}function Wn({name:i,programId:e,marketId:t}){let{publicKey:n}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(i,"utf-8")],e);return n}function If({programId:i,marketId:e}){let{publicKey:t}=ue([i.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],i);return t}function ta({programId:i}){return ue([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],i)}function na({version:i,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:r,quoteDecimals:s,programId:a,marketProgramId:c}){let u=Wn({name:"amm_associated_seed",programId:a,marketId:t}),l=Wn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=ta({programId:a}),p=Wn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=Wn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=Wn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=If({programId:a,marketId:t}),g=Wn({name:"target_associated_seed",programId:a,marketId:t}),A=Wn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:P}=Vc({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:r,quoteDecimals:s,lpDecimals:r,version:i,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:P,lookupTableAccount:hf.default,configId:rr({programId:a})}}var Js;async function uB({connection:i,poolKeysList:e,config:t}){Js||(Js=new si({connection:i}),await Js.initStableModelLayout());let n=e.map(s=>vc({poolKeys:s}));return(await au(i,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=uu(s,"GetPoolData"),c=new no(Jt(a,"status")),u=Number(Jt(a,"coin_decimals")),l=Number(Jt(a,"pc_decimals")),m=Number(Jt(a,"lp_decimals")),d=new no(Jt(a,"pool_coin_amount")),p=new no(Jt(a,"pool_pc_amount")),y=new no(Jt(a,"pool_lp_supply")),f="0";try{f=Jt(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new no(f)}})}var ea={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},sr=i=>{let e={},t=Tf.toBase58();return Object.keys(i).map(n=>{let o=i[n],[r,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:lt({address:r,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:lt({address:s,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new M(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new M(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:ea,week:ea,month:ea,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:rr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:lt({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0}}),e};import _e from"bn.js";import{PublicKey as io}from"@solana/web3.js";import oo from"bn.js";import{TOKEN_PROGRAM_ID as Wc}from"@solana/spl-token";import{SystemProgram as qn,SYSVAR_RENT_PUBKEY as xf,Transaction as Ec,TransactionInstruction as Sf}from"@solana/web3.js";import{createInitializeAccountInstruction as Fc,TOKEN_PROGRAM_ID as Dc}from"@solana/spl-token";function Bf(i="accountFlags"){let e=new Qo(i);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ia=N([Ae(5),Bf("accountFlags"),L("ownAddress"),w("vaultSignerNonce"),L("baseMint"),L("quoteMint"),L("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),L("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),L("requestQueue"),L("eventQueue"),L("bids"),L("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),Ae(7)]);function Kf({programId:i,marketInfo:e}){let t=N([q("version"),rt("instruction"),w("baseLotSize"),w("quoteLotSize"),en("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:xf,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 Sf({keys:n,programId:i,data:o})}async function ar({connection:i,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Ec,o=await i.getMinimumBalanceForRentExemption(165);n.add(qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:Dc}),qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:Dc}),Fc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Fc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await i.getMinimumBalanceForRentExemption(ia.span),space:ia.span,programId:t.programId}));let r=new Ec;return r.add(qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await i.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await i.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await i.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),qn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await i.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Kf({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:[F.CreateAccount,F.CreateAccount,F.InitAccount,F.InitAccount]},{transaction:r,signer:[],instructionTypes:[F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.InitMarket]}]}var ci=class extends Me{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:r,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d}){let p=this.scope.ownerPubKey,y=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,f=Ve({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-market`}),b=Ve({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-request`}),g=Ve({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-event`}),A=Ve({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-bids`}),P=Ve({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-asks`}),h=Ve({fromPublicKey:p,programId:Wc,assignSeed:y&&`${y}-baseVault`}),B=Ve({fromPublicKey:p,programId:Wc,assignSeed:y&&`${y}-quoteVault`}),T=0,S=new oo(100);function I(){let G=new oo(0);for(;;)try{return{vaultOwner:io.createProgramAddressSync([f.publicKey.toBuffer(),G.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:G}}catch{if(G.iaddn(1),G.gt(new oo(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:x}=I(),K=new oo(Math.round(10**e.decimals*n)),V=new oo(Math.round(n*10**t.decimals*o));if(K.eq(qe))throw Error("lot size is too small");if(V.eq(qe))throw Error("tick size or lot size is too small");let R=await ar({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:f,baseMint:e.mint,quoteMint:t.mint,baseVault:h,quoteVault:B,vaultOwner:C,requestQueue:b,eventQueue:g,bids:A,asks:P,feeRateBps:T,quoteDustThreshold:S,vaultSignerNonce:x,baseLotSize:K,quoteLotSize:V,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),X=this.createTxBuilder();X.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let G of R.slice(1,R.length))X.addInstruction({instructions:G.transaction.instructions,signers:G.signer,instructionTypes:G.instructionTypes});return m===0?X.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:f.publicKey,requestQueue:b.publicKey,eventQueue:g.publicKey,bids:A.publicKey,asks:P.publicKey,baseVault:h.publicKey,quoteVault:B.publicKey,baseMint:new io(e.mint),quoteMin:new io(t.mint)}}):X.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:f.publicKey,requestQueue:b.publicKey,eventQueue:g.publicKey,bids:A.publicKey,asks:P.publicKey,baseVault:h.publicKey,quoteVault:B.publicKey,baseMint:new io(e.mint),quoteMin:new io(t.mint)}})}};var ro=class extends Me{constructor(t){super(t);this.stableLayout=new si({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:r}){let s=new _e(new M(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=nr(t[r?"mintB":"mintA"]),[c,u]=[new _e(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new _e(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new _e(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",r?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",r?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=r?"base":"quote";this.logDebug("input side:",m);let d=qe;s.isZero()||(d=m==="base"?Ro(s.mul(u),c):Ro(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Ro(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let y=new ve(new _e(1)).add(o),f=new ve(new _e(1)).sub(o),b=y.mul(d).quotient,g=f.mul(d).quotient,A=new be(a,d),P=new be(a,b),h=new be(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",P.toFixed()),{anotherAmount:A,maxAnotherAmount:P,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:r,amountInB:s,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",s),(r.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:s.toFixed()});let{account:d}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:y}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[f,b]=[r.token,s.token],g=await d.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1}),A=await d.getCreatedTokenAccount({mint:b.mint,associatedOnly:!1});!g&&!A&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",d.tokenAccounts);let P=await d.getCreatedTokenAccount({mint:new ze(n.lpMint.address)}),h=[f,b],B=[g,A],T=[r.raw,s.raw],S=r.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",c),S==="quote"?(h.reverse(),B.reverse(),T.reverse(),I=c==="a"?"quote":"base"):S==="base"&&(I=c==="a"?"base":"quote");let[C,x]=h,[K,V]=B,[R,X]=T,G=o!=null?o:await this.getAmmPoolKeys(n.id),D=this.createTxBuilder(),At=await d.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:K,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Te}=At,dt=De(At,["tokenAccount"]);D.addInstruction(dt);let Ct=await d.handleTokenAccount({side:"in",amount:X,mint:x.mint,tokenAccount:V,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Se}=Ct,bt=De(Ct,["tokenAccount"]);D.addInstruction(bt);let Bn=await d.handleTokenAccount({side:"out",amount:0,mint:new ze(n.lpMint.address),tokenAccount:P,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:gt}=Bn,Tt=De(Bn,["tokenAccount"]);return D.addInstruction(Tt),D.addInstruction({instructions:[_c({poolInfo:n,poolKeys:G,userKeys:{baseTokenAccount:Te,quoteTokenAccount:Se,lpTokenAccount:gt,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:X,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5AddLiquidity:F.AmmV4AddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),D.addCustomComputeBudget(m),l===0&&await D.buildV0(),D.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,lpAmount:r,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l}=t,m=o!=null?o:await this.getAmmPoolKeys(n.id),[d,p,y]=[new ze(n.mintA.address),new ze(n.mintB.address),new ze(n.lpMint.address)];this.logDebug("lpAmount:",r),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),r.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",r.toString());let{account:f}=this.scope,b=await f.getCreatedTokenAccount({mint:y,associatedOnly:!1});b||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",f.tokenAccounts);let g=await f.getCreatedTokenAccount({mint:d}),A=await f.getCreatedTokenAccount({mint:p}),P=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:B}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),x=await f.handleTokenAccount({side:"out",amount:0,mint:d,tokenAccount:g,bypassAssociatedCheck:h,checkCreateATAOwner:B}),{tokenAccount:T}=x,S=De(x,["tokenAccount"]);P.addInstruction(S);let K=await f.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:A,bypassAssociatedCheck:h,checkCreateATAOwner:B}),{tokenAccount:I}=K,C=De(K,["tokenAccount"]);return P.addInstruction(C),P.addInstruction({instructions:[Zs({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:b,baseTokenAccount:T,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity]}),P.addCustomComputeBudget(l),u===0?await P.buildV0():P.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:r,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Tn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){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 b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let D of this.scope.account.tokenAccountRawInfos)(g[D.accountInfo.mint.toString()]===void 0||ie(this.scope.ownerPubKey,D.accountInfo.mint,Tn).publicKey.equals(D.pubkey))&&(g[D.accountInfo.mint.toString()]=D.pubkey);let A=g[t.lpMint.address];if(A===void 0)throw Error("find lp account error in trade accounts");let P=o.add(a!=null?a:new _e(0)),h=t.mintA.address===we.WSOL.mint.toString(),B=t.mintB.address===we.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Tn,mint:new ze(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Tn,mint:new ze(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(C||{}),I===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=I,s!==void 0&&!(a!=null&&a.isZero())){let D=Rt[s.programId],Te=ut({programId:new ze(s.programId),poolId:new ze(s.id),owner:this.scope.ownerPubKey,version:D}),dt,Se=await this.scope.connection.getAccountInfo(Te);if(Se&&(dt=oi(D).decode(Se.data)),D!==6&&!dt){let{instruction:It,instructionType:Qn}=Di({id:new ze(s.id),programId:new ze(s.programId),version:D,ledger:Te,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[It],instructionTypes:[Qn]})}let bt=[];for(let It of s.rewardInfos){let Qn=It.mint.address===we.WSOL.mint.toString();if(g[It.mint.address])bt.push(g[It.mint.address]);else{let{account:xn,instructionParams:je}=await this.scope.account.getOrCreateTokenAccount({mint:new ze(It.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Qn,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});xn||this.logAndCreateError("farm reward account not found:",It.mint.address),je&&b.addInstruction(je),bt.push(xn)}}let gt=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Tt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:gt,lpAccount:A,rewardAccounts:bt},At=Rt[s.programId],Ct=At===6?Wi(Tt):At===5?qi(Tt):Ui(Tt),Bn={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};b.addInstruction({instructions:[Ct],instructionTypes:[Bn[At]]})}let x=await this.getAmmPoolKeys(t.id),K=Zs({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:A,baseTokenAccount:T,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:P,baseAmountMin:0,quoteAmountMin:0});b.addInstruction({instructions:[K],instructionTypes:[t.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[V,R]=t.mintA.address===n.mintA.address?[T,I]:[I,T],X=await this.scope.clmm.getClmmPoolKeys(n.id),G=await he.openPositionFromBaseInstructions(W(O({poolInfo:n,poolKeys:X,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:V,tokenAccountB:R},withMetadata:"create"},r),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:r,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var V;let b=u.feePayer||((V=this.scope.owner)==null?void 0:V.publicKey),g=u.useSOLBalance&&o.mint.equals(ur),A=u.useSOLBalance&&r.mint.equals(ur),P=this.createTxBuilder(),{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});P.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:A?{payer:b,amount:a}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:l,checkCreateATAOwner:m});if(P.addInstruction(S||{}),h===void 0||T===void 0)throw Error("you don't has some token account");let I=na({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:r.mint,baseDecimals:o.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:I.id,ammAuthority:I.authority,ammOpenOrders:I.openOrders,lpMint:I.lpMint,coinMint:I.baseMint,pcMint:I.quoteMint,coinVault:I.baseVault,pcVault:I.quoteVault,withdrawQueue:I.withdrawQueue,ammTargetOrders:I.targetOrders,poolTempLp:I.lpVault,marketProgramId:I.marketProgramId,marketId:I.marketId,ammConfigId:I.configId,feeDestinationId:y},{instruction:x,instructionType:K}=$s(W(O({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:h,userPcVault:T,userLpVault:ie(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:s,pcAmount:a}));return P.addInstruction({instructions:[x],instructionTypes:[K]}),P.addCustomComputeBudget(f),P.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=hi,marketProgram:n=$r,feeDestinationId:o=du,tokenProgram:r,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:y=!1,checkCreateATAOwner:f=!1,lotSize:b=1,tickSize:g=.01,txVersion:A,computeBudgetConfig:P}){var Pa,ka,ha;let h=this.scope.ownerPubKey,B=m.feePayer||((Pa=this.scope.owner)==null?void 0:Pa.publicKey),T=m.useSOLBalance&&s.mint.equals(ur),S=m.useSOLBalance&&a.mint.equals(ur),I=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=Ve({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-market`}),x=Ve({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-request`}),K=Ve({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-event`}),V=Ve({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-bids`}),R=Ve({fromPublicKey:h,programId:n,assignSeed:I&&`${I}-asks`}),X=Ve({fromPublicKey:h,programId:Tn,assignSeed:I&&`${I}-baseVault`}),G=Ve({fromPublicKey:h,programId:Tn,assignSeed:I&&`${I}-quoteVault`}),D=0,Te=new _e(100);function dt(){let Xt=new _e(0);for(;;)try{return{vaultOwner:ze.createProgramAddressSync([C.publicKey.toBuffer(),Xt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Xt}}catch{if(Xt.iaddn(1),Xt.gt(new _e(25555)))throw Error("find vault owner error")}}let{vaultOwner:Se,vaultSignerNonce:bt}=dt(),gt=new _e(Math.round(10**s.decimals*b)),Tt=new _e(Math.round(b*10**a.decimals*g));if(gt.eq(qe))throw Error("lot size is too small");if(Tt.eq(qe))throw Error("tick size or lot size is too small");let At=await ar({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:Se,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:X,quoteVault:G,requestQueue:x,eventQueue:K,bids:V,asks:R,feeRateBps:D,quoteDustThreshold:Te,vaultSignerNonce:bt,baseLotSize:gt,quoteLotSize:Tt,lowestFeeMarket:d}}),Ct=this.createTxBuilder();Ct.addInstruction({instructions:At[0].transaction.instructions,signers:At[0].signer});for await(let Xt of At.slice(1,At.length))Ct.addInstruction({instructions:Xt.transaction.instructions,signers:Xt.signer,instructionTypes:Xt.instructionTypes});let{account:Bn,instructionParams:It}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:B,amount:c}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:y,checkCreateATAOwner:f,assignSeed:T&&I?`${I}-wsol`:void 0});Ct.addInstruction(It||{});let{account:Qn,instructionParams:xn}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:B,amount:u}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:y,checkCreateATAOwner:f,assignSeed:S&&I?`${I}-wsol`:void 0});if(Ct.addInstruction(xn||{}),Bn===void 0)throw Error("you don't has base token account");if(Qn===void 0)throw Error("you don't has quote token account");let je=na({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Br={programId:t,ammId:je.id,ammAuthority:je.authority,ammOpenOrders:je.openOrders,lpMint:je.lpMint,coinMint:je.baseMint,pcMint:je.quoteMint,coinVault:je.baseVault,pcVault:je.quoteVault,withdrawQueue:je.withdrawQueue,ammTargetOrders:je.targetOrders,poolTempLp:je.lpVault,marketProgramId:je.marketProgramId,marketId:je.marketId,ammConfigId:je.configId,feeDestinationId:o},{instruction:ll,instructionType:ml}=$s(W(O({},Br),{userWallet:this.scope.ownerPubKey,userCoinVault:Bn,userPcVault:Qn,userLpVault:ie(this.scope.ownerPubKey,je.lpMint,r).publicKey,nonce:je.nonce,openTime:l,coinAmount:c,pcAmount:u}));Ct.addInstruction({instructions:[ll],instructionTypes:[ml]});let wa=T||S?[((ka=It==null?void 0:It.instructions)==null?void 0:ka[0])||((ha=xn==null?void 0:xn.instructions)==null?void 0:ha[0])].filter(Xt=>!!Xt):void 0;return A===0?Ct.sizeCheckBuildV0({computeBudgetConfig:P,splitIns:wa,address:O({requestQueue:x.publicKey,eventQueue:K.publicKey,bids:V.publicKey,asks:R.publicKey,baseVault:X.publicKey,quoteVault:G.publicKey,baseMint:new ze(s.mint),quoteMin:new ze(a.mint)},Br)}):Ct.sizeCheckBuild({computeBudgetConfig:P,splitIns:wa,address:O({requestQueue:x.publicKey,eventQueue:K.publicKey,bids:V.publicKey,asks:R.publicKey,baseVault:X.publicKey,quoteVault:G.publicKey,baseMint:new ze(s.mint),quoteMin:new ze(a.mint)},Br)})}async getCreatePoolFee({programId:t}){let n=rr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return Sc.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:r,slippage:s}){let[a,c]=[o.toString(),r.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,A=t.version===4,P;if(A)P=new M(f.toString()).div(10**g).div(new M(y.toString()).div(10**b));else{let R=Oc(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?P=new M(1e6).div(R*1e6):P=new M(R*1e6).div(1e6)}let h=n,B=new _e(0),T=new _e(0);if(!h.isZero())if(A){T=Ft(h.mul(Gs),ir);let R=h.sub(T),X=y.add(R);B=f.mul(R).div(X)}else{T=h.mul(new _e(2)).div(new _e(1e4));let R=h.sub(T);p==="quote"?B=new _e(Rc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),R.toNumber())):B=new _e(Lc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),R.toNumber()))}let S=new _e(new M(B.toString()).mul(1-s).toFixed(0)),I=B,C=S,x=new M(B.toString()).div(new M(h.sub(T).toString()).toFixed(0));!h.isZero()&&!B.isZero()&&(x=new M(B.toString()).div(10**g).div(new M(h.sub(T).toString()).div(10**b)));let K=P.sub(x).div(P).mul(100);return{amountOut:I,minAmountOut:C,currentPrice:P,executionPrice:x,priceImpact:K,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:r,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=o.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new M(f.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(y.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(b).toString()} ${l.symbol||l.address}`);let g=new _e(0),A=n;if(!A.isZero()){A.gt(f)&&(A=f.sub(new _e(1)));let C=f.sub(A);g=y.mul(A).div(C).mul(ir).div(ir.sub(Gs))}let P=new _e(new M(g.toString()).mul(1+s).toFixed(0)),h=g,B=P;this.logDebug("amountIn:",new M(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(B.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!A.isZero()&&(T=new M(A.toString()).div(10**m.decimals).div(new M(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(h.toString()),I=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${I.toString()}%`),{amountIn:h,maxAmountIn:B,currentPrice:b,executionPrice:T,priceImpact:I}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:r,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===H.toBase58(),A=y&&b.address===H.toBase58(),{account:P,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Tn,mint:new ze(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(h||{}),P||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:P,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Tn,mint:new ze(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:d});m.addInstruction(T||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:A,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),m.addInstruction({instructions:[or({version:I,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:r,fixedSide:a})],instructionTypes:[I===4?F.AmmV4SwapBaseIn:F.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await Qe(this.scope.connection,t.map(l=>({pubkey:new ze(l)})),n),r={},s=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=to.decode(m.accountInfo.data);r[String(t[l])]=W(O({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await Qe(this.scope.connection,s.map(l=>({pubkey:new ze(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new _e(Cf.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(r)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=W(O({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=sr({[t]:n}),r=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:s[0]}}};import{PublicKey as Q}from"@solana/web3.js";import ht from"bn.js";import{AccountLayout as qc,TOKEN_2022_PROGRAM_ID as li,TOKEN_PROGRAM_ID as so}from"@solana/spl-token";var ao=class extends Me{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)||Q.default,mint1:o,mint2:r,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new ht(new Q(o.address).toBuffer()).gt(new ht(new Q(r.address).toBuffer()))?[r,o,new M(1).div(a)]:[o,r,a],g=te.priceToSqrtPriceX64(b,y.decimals,f.decimals),A=await he.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(A),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:W(O({},A.address),{programId:t.toString(),id:A.address.poolId.toString(),mintA:y,mintB:f,openTime:c.toString(),vault:{A:A.address.mintAVault.toString(),B:A.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:O({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:A.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},ac),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:y,txVersion:f}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let b=this.createTxBuilder(),g=null,A=null,P=n.useSOLBalance&&e.mintA.address===H.toString(),h=n.useSOLBalance&&e.mintB.address===H.toString(),[B,T]=s==="MintA"?[a,c]:[c,a],{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:l,checkCreateATAOwner:m});S&&(g=S),b.addInstruction(I||{});let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||T.isZero()?{payer:this.scope.ownerPubKey,amount:T}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});C&&(A=C),b.addInstruction(x||{}),(!g||!A)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:g==null?void 0:g.toBase58(),ownerTokenAccountB:A==null?void 0:A.toBase58()});let K=t||await this.getClmmPoolKeys(e.id),V=await he.openPositionFromBaseInstructions({poolInfo:e,poolKeys:K,ownerInfo:W(O({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:A}),tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return b.addInstruction(V),b.addCustomComputeBudget(y),b.versionBuild({txVersion:f,extInfo:O({},V.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:r,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y,nft2022:f}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let b=this.createTxBuilder(),g=null,A=null,P=n.useSOLBalance&&e.mintA.address===H.toBase58(),h=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});B&&(g=B),b.addInstruction(T||{});let{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});S&&(A=S),b.addInstruction(I||{}),(g===void 0||A===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),x=await he.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:A},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:r,withMetadata:m,getEphemeralSigners:y,nft2022:f});return b.addInstruction(x),b.addCustomComputeBudget(p),b.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){var I;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:r,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===H.toString(),g=c.useSOLBalance&&t.mintB.address===H.toString(),{account:A,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A&&(y=A),p.addInstruction(P||{});let{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});h&&(f=h),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=he.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:r,amountMaxB:s,nft2022:(I=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:I.owner.equals(li)});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){var S;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:r,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===H.toString(),b=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(o==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(A||{});let{account:P,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(o==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:r}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});P&&(y=P),d.addInstruction(h||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=he.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:o,baseAmount:r,otherAmountMax:s,nft2022:(S=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:S.owner.equals(li)});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){var V;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:r,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d,nftAccount:p}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let y=this.createTxBuilder(),f=r.useSOLBalance&&t.mintA.address===H.toString(),b=r.useSOLBalance&&t.mintB.address===H.toString(),g,A,{account:P,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=P,h&&y.addInstruction(h);let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A=B,T&&y.addInstruction(T);let S=[];for(let R of t.rewardDefaultInfos){let X=r.useSOLBalance&&R.mint.address===H.toString(),G;if(R.mint.address===t.mintA.address)G=g;else if(R.mint.address===t.mintB.address)G=A;else{let{account:D,instructionParams:Te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(R.mint.programId),mint:new Q(R.mint.address),notUseTokenAccount:X,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!X,associatedOnly:X?!1:u,checkCreateATAOwner:l});G=D,Te&&y.addInstruction(Te)}S.push(G)}!g&&!A&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=n!=null?n:await this.getClmmPoolKeys(t.id),C=(V=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:V.owner.equals(li),x=await he.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:A,rewardAccounts:S},liquidity:c,amountMinA:s,amountMinB:a,nft2022:C});y.addInstruction({instructions:x.instructions,instructionTypes:[F.ClmmDecreasePosition]});let K=O({},x.address);if(r.closePosition){let R=await he.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:C});y.addInstruction({endInstructions:R.instructions,endInstructionTypes:R.instructionTypes}),K=O(O({},K),R.address)}return y.addCustomComputeBudget(m),y.versionBuild({txVersion:d,extInfo:{address:K}})}async lockPosition(e){var d;let{programId:t=Jn,authProgramId:n=Ti,poolProgramId:o=bn,ownerPosition:r,payer:s,computeBudgetConfig:a,txVersion:c,getEphemeralSigners:u}=e,l=this.createTxBuilder(),m=await he.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:r.nftMint,getEphemeralSigners:u,nft2022:(d=await this.scope.connection.getAccountInfo(r.nftMint))==null?void 0:d.owner.equals(li)});return l.addInstruction(m),l.addCustomComputeBudget(a),l.versionBuild({txVersion:c,extInfo:m.address})}async harvestLockPosition(e){let{programId:t=Jn,authProgramId:n=Ti,clmmProgram:o=bn,poolKeys:r,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=r||await this.getClmmPoolKeys(s.poolId.toString()),p=this.createTxBuilder(),y=await this.scope.connection.getAccountInfo(s.positionId);y||this.logger.logWithError("position not found",s.positionId);let f=$i.decode(y.data),b=a.useSOLBalance&&d.mintA.address===H.toString(),g=a.useSOLBalance&&d.mintB.address===H.toString(),A,P,{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new Q(d.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A=h,B&&p.addInstruction(B);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new Q(d.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});P=T,S&&p.addInstruction(S);let I={},C=[];for(let Se of d.rewardInfos){let bt=a.useSOLBalance&&Se.mint.address===H.toString(),gt=I[Se.mint.address];if(!gt){let{account:Tt,instructionParams:At}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(Se.mint.programId),mint:new Q(Se.mint.address),notUseTokenAccount:bt,owner:this.scope.ownerPubKey,skipCloseAccount:!bt,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:bt?!1:c});gt=Tt,At&&p.addInstruction(At)}I[Se.mint.address]=gt,C.push(gt)}let x=Yi(t,s.lockNftMint).publicKey,K=ie(this.scope.ownerPubKey,s.lockNftMint,so).publicKey,V=j.getTickArrayStartIndexByTick(f.tickLower,d.config.tickSpacing),R=j.getTickArrayStartIndexByTick(f.tickUpper,d.config.tickSpacing),{publicKey:X}=de(new Q(d.programId),s.poolId,V),{publicKey:G}=de(new Q(d.programId),s.poolId,R),{publicKey:D}=qt(new Q(d.programId),s.poolId,f.tickLower,f.tickUpper),Te=[];for(let Se=0;Se<d.rewardInfos.length;Se++)Te.push({poolRewardVault:new Q(d.rewardInfos[Se].vault),ownerRewardVault:C[Se],rewardMint:new Q(d.rewardInfos[Se].mint.address)});let dt=await he.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:x,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:K,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:D,vaultA:new Q(d.vault.A),vaultB:new Q(d.vault.B),tickArrayLower:X,tickArrayUpper:G,userVaultA:A,userVaultB:P,mintA:new Q(d.mintA.address),mintB:new Q(d.mintB.address),rewardAccounts:Te,exTickArrayBitmap:Xe(o,s.poolId).publicKey});return p.addInstruction({instructions:[dt],instructionTypes:[F.ClmmHarvestLockPosition]}),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o}){var c;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=he.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(c=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:c.owner.equals(li)});return r.addInstruction(a).versionBuild({txVersion:o,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(n.mint.address),mint:new Q(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ht(new M(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:r});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=he.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new Q(n.mint.programId),mint:new Q(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:re.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of o){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ht(new M(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=he.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new Q(m.mint.programId),mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:re.decimalToX64(m.perSecond)}});l=O(O({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(H),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ht(new M(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:r});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=he.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:re.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===H.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ht(new M(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=he.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:re.decimalToX64(m.perSecond)}});u.addInstruction(b),l=O(O({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(H),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:o,checkCreateATAOwner:r});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=he.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:o,checkCreateATAOwner:r});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=he.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=O(O({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),A;!s||s.equals(new M(0))?A=f?Ot.add(new ht(1)):Mt.sub(new ht(1)):A=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?o:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});P=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:o}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!P||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(he.makeSwapBaseInInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:h},inputMint:new Q(n),amountIn:o,amountOutMin:r,sqrtPriceLimitX64:A,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),A;!s||s.equals(new M(0))?A=n.toString()===e.mintB.address?Ot.add(new ht(1)):Mt.sub(new ht(1)):A=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});P=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!P||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(he.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:h},outputMint:new Q(n),amountOut:o,amountInMax:r,sqrtPriceLimitX64:A,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u}){var f,b;let l={};for(let g of this.scope.account.tokenAccountRawInfos)r?ie(this.scope.ownerPubKey,g.accountInfo.mint,a).publicKey.equals(g.pubkey)&&(l[g.accountInfo.mint.toString()]=g.pubkey):l[g.accountInfo.mint.toString()]=g.pubkey;let m=Object.values(t).flat().map(g=>g.nftMint),d=await Qe(this.scope.connection,m.map(g=>({pubkey:g}))),p={};d.forEach(g=>{var A,P;p[g.pubkey.toBase58()]=(P=(A=g==null?void 0:g.accountInfo)==null?void 0:A.owner)!=null?P:null});let y=this.createTxBuilder();for(let g of Object.values(e)){if(t[g.id]===void 0||!t[g.id].find(x=>!x.liquidity.isZero()||x.rewardInfos.find(K=>!K.rewardAmountOwed.isZero())))continue;let A=g,P=o.useSOLBalance&&A.mintA.address===H.toString(),h=o.useSOLBalance&&A.mintB.address===H.toString(),B=l[A.mintA.address];if(!B){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:A.mintA.programId,mint:new Q(A.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:P?!1:r,checkCreateATAOwner:s});B=x,K&&y.addInstruction(K)}let T=l[A.mintB.address];if(!T){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:A.mintB.programId,mint:new Q(A.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,skipCloseAccount:!h,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:h?!1:r,checkCreateATAOwner:s});T=x,K&&y.addInstruction(K)}l[A.mintA.address]=B,l[A.mintB.address]=T;let S=[];for(let x of A.rewardDefaultInfos){let K=o.useSOLBalance&&x.mint.address===H.toString(),V=l[x.mint.address];if(!V){let{account:R,instructionParams:X}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(x.mint.programId),mint:new Q(x.mint.address),notUseTokenAccount:K,owner:this.scope.ownerPubKey,skipCloseAccount:!K,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:K?!1:r});V=R,X&&y.addInstruction(X)}l[x.mint.address]=V,S.push(V)}let I=await this.getClmmPoolKeys(A.id),C=[];for(let x=0;x<I.rewardInfos.length;x++)C.push({poolRewardVault:new Q(I.rewardInfos[x].vault),ownerRewardVault:S[x],rewardMint:new Q(I.rewardInfos[x].mint.address)});for(let x of t[g.id]){let K=(f=n==null?void 0:n[g.id])==null?void 0:f[x.nftMint.toBase58()];if(K){let V=ie(this.scope.ownerPubKey,K.lockNftMint,so).publicKey,R=j.getTickArrayStartIndexByTick(x.tickLower,I.config.tickSpacing),X=j.getTickArrayStartIndexByTick(x.tickUpper,I.config.tickSpacing),{publicKey:G}=de(new Q(I.programId),K.poolId,R),{publicKey:D}=de(new Q(I.programId),K.poolId,X),{publicKey:Te}=qt(new Q(I.programId),K.poolId,x.tickLower,x.tickUpper),dt=Yi(Jn,K.lockNftMint).publicKey,Se=he.harvestLockPositionInstructionV2({programId:Jn,auth:Ti,lockPositionId:dt,clmmProgram:bn,lockOwner:this.scope.ownerPubKey,lockNftMint:K.lockNftMint,lockNftAccount:V,positionNftAccount:K.nftAccount,positionId:K.positionId,poolId:K.poolId,protocolPosition:Te,vaultA:new Q(I.vault.A),vaultB:new Q(I.vault.B),tickArrayLower:G,tickArrayUpper:D,userVaultA:B,userVaultB:T,mintA:new Q(I.mintA.address),mintB:new Q(I.mintB.address),rewardAccounts:C,exTickArrayBitmap:Xe(bn,K.poolId).publicKey});y.addInstruction({instructions:[Se],instructionTypes:[F.ClmmHarvestLockPosition],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]})}else{let V=he.decreaseLiquidityInstructions({poolInfo:A,poolKeys:I,ownerPosition:x,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:B,tokenAccountB:T,rewardAccounts:S},liquidity:new ht(0),amountMinA:new ht(0),amountMinB:new ht(0),nft2022:(b=p[x.nftMint.toBase58()])==null?void 0:b.equals(li)});y.addInstruction(V)}}}return c===0?y.sizeCheckBuildV0({computeBudgetConfig:u}):y.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Qi(e).publicKey);return t?kc.decode(t.data).whitelistMints.filter(o=>!o.equals(Q.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new ht(1))).map(s=>yt(new Q(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return o.forEach(s=>{if(!s)return;let a=$i.decode(s.data);r.push(a)}),r}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Qe(this.scope.connection,e.map(r=>({pubkey:new Q(r)})),t),o={};for(let r=0;r<e.length;r++){let s=n[r];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[r]));let a=Vn.decode(s.accountInfo.data),c=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[r])]=W(O({},a),{currentPrice:c,programId:s.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await Qe(this.scope.connection,Array.from(n).map(c=>({pubkey:new Q(c)}))),r={};o.forEach(c=>{!c.accountInfo||(r[c.pubkey.toBase58()]=wc.decode(c.accountInfo.data))});let s=await xe.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:lt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||so.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?hn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:lt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||so.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?hn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:W(O({},r[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await xe.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await Yn({connection:this.scope.connection,mints:Array.from(n).map(m=>new Q(m))}),{computeClmmPoolInfo:r,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await Qe(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=gc(r[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(qc.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(qc.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=W(O({},r[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:r[e].rewardInfos.filter(m=>!m.tokenVault.equals(Q.default)).map(m=>({mint:lt({address:m.tokenMint.toBase58(),programId:so.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:r[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{AccountLayout as Xf,NATIVE_MINT as Ar,TOKEN_PROGRAM_ID as Gt}from"@solana/spl-token";import ra from"bn.js";import dr from"decimal.js-light";import uo from"bn.js";function cr(i,e){if(e.isZero())throw Error("divisor is zero");return i.mod(e)}function Rf(i,e){if(e.isZero())throw Error("rhs is zero");let t=i.div(e);if(t.isZero())throw Error("quotient is zero");let n=cr(i,e);return n.gt(mi)&&(t=t.add(new uo(1)),e=i.div(t),n=cr(i,t),n.gt(mi)&&(e=e.add(new uo(1)))),[t,e]}var mi=new uo(0),lr=class{static swapWithoutFees(e,t,n){let o=t.mul(n),r=t.add(e),[s,a]=Rf(o,r),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,o,r){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(r===0)return{tokenAmount0:s,tokenAmount1:a};if(r===1)return cr(e.mul(n),t).gt(mi)&&s.gt(mi)&&(s=s.add(new uo(1))),cr(e.mul(o),t).gt(mi)&&a.gt(mi)&&(a=a.add(new uo(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Xc from"bn.js";var oa=new Xc(1e6);function Lf(i,e,t){return i.mul(e).add(t).sub(new Xc(1)).div(t)}function Gc(i,e,t){return i.mul(e).div(t)}var mr=class{static tradingFee(e,t){return Lf(e,t,oa)}static protocolFee(e,t){return Gc(e,t,oa)}static fundFee(e,t){return Gc(e,t,oa)}};var Uc=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Uc||{}),pr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,o){let r=mr.tradingFee(e,o),s=e.sub(r),{sourceAmountSwapped:a,destinationAmountSwapped:c}=lr.swapWithoutFees(s,t,n),u=a.add(r);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:r}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:o,quoteReserve:r,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[o,r,e.decimals,t.decimals,e.address]:[r,o,t.decimals,e.decimals,t.address],p=new dr(u.toString()).div(10**m).div(new dr(c.toString()).div(10**l)),y=a.gte(u)?u.sub(new ra(1)):a,f=u.sub(y),b=Ft(c.mul(y),f),g=Ft(b.mul(new ra(1e6)),new ra(1e6).sub(n)),A=g.sub(b),P=new dr(y.toString()).div(10**m).div(new dr(g.toString()).div(10**l)),h=p.isZero()?0:P.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:A,priceImpact:h}}};import Ee from"bn.js";import{PublicKey as co,TransactionInstruction as Un,Keypair as Wf,SystemProgram as qf}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Yc,TOKEN_2022_PROGRAM_ID as aa,TOKEN_PROGRAM_ID as In}from"@solana/spl-token";var Of=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Mf=Buffer.from("amm_config","utf8"),Nf=Buffer.from("pool","utf8"),_f=Buffer.from("pool_lp_mint","utf8"),vf=Buffer.from("pool_vault","utf8"),Vf=Buffer.from("observation","utf8");function di(i){return ue([Of],i)}function lS(i,e){return ue([Mf,Ff(e)],i)}function sa(i,e,t,n){return ue([Nf,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function Ef(i,e){return ue([_f,e.toBuffer()],i)}function zc(i,e,t){return ue([vf,e.toBuffer(),t.toBuffer()],i)}function fr(i,e){return ue([Vf,e.toBuffer()],i)}function Ff(i){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,i,!1),new Uint8Array(e)}function Qc({poolId:i,programId:e,configId:t,mintA:n,mintB:o}){let r=di(e).publicKey,s=i||sa(e,t,n,o).publicKey,a=Ef(e,s).publicKey,c=zc(e,s,n).publicKey,u=zc(e,s,o).publicKey,l=fr(e,s).publicKey;return{poolId:s,configId:t,authority:r,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Df=Buffer.from("locked_liquidity","utf8");function yr(i,e){return ue([Df,e.toBuffer()],i)}var Uf=me("Raydium_cpmm"),Gn={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]};function jc(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y,f,b,g,A,P){let h=N([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=sa(i,t,r,s).publicKey,T=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!o.equals(B),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:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Yc,isSigner:!1,isWritable:!1},{pubkey:Co,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],S=Buffer.alloc(h.span);return h.encode({amountMaxA:g,amountMaxB:A,openTime:P},S),new Un({keys:T,programId:i,data:Buffer.from([...Gn.initialize,...S])})}function Hc(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y){let f=N([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:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:aa,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Uf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Un({keys:b,programId:i,data:Buffer.from([...Gn.deposit,...g])})}function Zc(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y){let f=N([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:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:aa,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:yn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Un({keys:b,programId:i,data:Buffer.from([...Gn.withdraw,...g])})}function br(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y,f){let b=N([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:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},A),new Un({keys:g,programId:i,data:Buffer.from([...Gn.swapBaseInput,...A])})}function $c(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y,f){let b=N([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:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},A),new Un({keys:g,programId:i,data:Buffer.from([...Gn.swapBaseOutput,...A])})}async function Jc(i){var f;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:o}=i,r=[],[s,a]=[new co(t.id),new co(t.lpMint.address)],c;if(o)c=new co((await o(1))[0]);else{let b=Wf.generate();r.push(b),c=b.publicKey}let{publicKey:u}=ie(e.feePayer,c,In),{publicKey:l}=Nn(c),{publicKey:m}=yr(i.lockProgram,c),{publicKey:d}=ie(e.feePayer,a,In),{publicKey:p}=ie(i.lockAuthProgram,a,In),y=Gf({programId:i.lockProgram,auth:i.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:c,nftAccount:u,poolId:s,lockPda:m,mintLp:a,userLpVault:d,lockLpVault:p,poolVaultA:new co(n.vault.A),poolVaultB:new co(n.vault.B),metadataAccount:l,lpAmount:i.lpAmount,withMetadata:(f=i.withMetadata)!=null?f:!0});return{address:{nftMint:c,nftAccount:u,metadataAccount:l,lockPda:m,userLpVault:d,lockLpVault:p},instructions:[y],signers:r,instructionTypes:[F.CpmmLockLp],lookupTableAddress:[]}}function Gf({programId:i,auth:e,payer:t,liquidityOwner:n,nftOwner:o,nftMint:r,nftAccount:s,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:y,lpAmount:f,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:qf.programId,isSigner:!1,isWritable:!1},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:Yc,isSigner:!1,isWritable:!1},{pubkey:Zt,isSigner:!1,isWritable:!1}],A=N([w("lpAmount"),Oe("withMetadata")]),P=Buffer.alloc(A.span);A.encode({lpAmount:f,withMetadata:b},P);let h=Buffer.from([...Gn.lockCpLiquidity,...P]);return new Un({keys:g,programId:i,data:h})}function el({programId:i,nftOwner:e,auth:t,nftAccount:n,lockPda:o,poolId:r,mintLp:s,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:y,cpmmProgram:f,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:f!=null?f:Ii,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Jr,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:aa,isSigner:!1,isWritable:!1},{pubkey:yn,isSigner:!1,isWritable:!1}],A=N([w("lpFeeAmount")]),P=Buffer.alloc(A.span);A.encode({lpFeeAmount:y},P);let h=Buffer.from([...Gn.collectCpFee,...P]);return new Un({keys:g,programId:i,data:h})}var tl=N([Ae(8),q("bump"),Oe("disableCreatePool"),en("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),L("protocolOwner"),L("fundOwner"),Y(w(),16)]),gr=N([Ae(8),L("configId"),L("poolCreator"),L("vaultA"),L("vaultB"),L("mintLp"),L("mintA"),L("mintB"),L("mintProgramA"),L("mintProgramB"),L("observationId"),q("bump"),q("status"),q("lpDecimals"),q("mintDecimalA"),q("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),Y(w(),32)]);var lo=class extends Me{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 Qe(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),o={},r=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=gr.decode(d.accountInfo.data);o[String(e[m])]=W(O({},p),{programId:d.accountInfo.owner}),r.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...r],d=await Qe(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=tl.decode(y.data)}}let c={},u=await Qe(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Ee(Xf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=W(O({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(y.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let r=e[o],[s,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return W(O({},n),{[o]:W(O({},r),{id:new z(o),configInfo:r.configInfo,version:7,authority:di(r.programId).publicKey,mintA:lt({address:s,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?hn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:lt({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?hn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Yn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=lt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?hn(n[t.mintA.toBase58()].feeConfig):void 0}}),r=lt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?hn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=lt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Gt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={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:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**r.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:di(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(d){var p=d,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l}=p,m=De(p,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var X,G,D;let y=r.feePayer||((X=this.scope.owner)==null?void 0:X.publicKey),f=new Ee(new z(m.mintA.address).toBuffer()).lte(new Ee(new z(m.mintB.address).toBuffer())),[b,g]=f?[m.mintA,m.mintB]:[m.mintB,m.mintA],[A,P]=f?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],h=r.useSOLBalance&&b.address===Ar.toBase58(),B=r.useSOLBalance&&g.address===Ar.toBase58(),[T,S]=[new z(b.address),new z(g.address)],I=this.createTxBuilder(),{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:T,tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:y,amount:A}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:s,checkCreateATAOwner:a});I.addInstruction(x||{});let{account:K,instructionParams:V}=await this.scope.account.getOrCreateTokenAccount({mint:new z(g.address),tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:y,amount:P}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:s,checkCreateATAOwner:a});if(I.addInstruction(V||{}),C===void 0||K===void 0)throw Error("you don't has some token account");let R=Qc({poolId:e,programId:t,configId:new z(u.id),mintA:T,mintB:S});return I.addInstruction({instructions:[jc(t,this.scope.ownerPubKey,new z(u.id),R.authority,R.poolId,T,S,R.lpMint,C,K,ie(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new z((G=b.programId)!=null?G:Gt),new z((D=g.programId)!=null?D:Gt),R.observationId,A,P,o)],instructionTypes:[F.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.versionBuild({txVersion:c,extInfo:{address:W(O({},R),{mintA:b,mintB:g,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:r,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:W(O({},t),{lpAmount:new M(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new ve(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(o.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),A=g.amount,P=t.mintA.address===Ar.toString(),h=t.mintB.address===Ar.toString(),B=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(r?o:A).isZero()?{payer:this.scope.ownerPubKey,amount:r?o:A}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(C||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||(r?A:o).isZero()?{payer:this.scope.ownerPubKey,amount:r?A:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(K||{}),!I&&!x&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let V=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Te=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:V,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:R}=Te,X=De(Te,["tokenAccount"]);B.addInstruction(X);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),D=new ve(new Ee(1)).sub(s);return B.addInstruction({instructions:[Hc(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),R,I,x,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:D.mul(f).quotient,r?b.amount:A,r?A:b.amount)],instructionTypes:[F.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var R,X;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:r,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new ve(new Ee(1)).sub(r),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(o.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(o.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[ge(l,t.mintA.extensions.feeConfig,d,!1),ge(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,A]=[new z(t.mintA.address),new z(t.mintB.address)],P=g.equals(H),h=A.equals(H),B,T,{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});B=S,I&&b.addInstruction(I);let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,associatedOnly:!h,checkCreateATAOwner:!1});T=C,x&&b.addInstruction(x),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let K=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});K||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let V=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Zc(new z(t.programId),this.scope.ownerPubKey,new z(V.authority),new z(t.id),K,B,T,new z(V.vault.A),new z(V.vault.B),g,A,new z(t.lpMint.address),o,l.sub((R=p.fee)!=null?R:new Ee(0)),m.sub((X=y.fee)!=null?X:new Ee(0)))],instructionTypes:[F.CpmmWithdrawLiquidity],lookupTableAddress:V.lookupTableAccount?[V.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var C,x,K,V,R,X;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:r,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)];r?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Ee((1+c)*1e4)).div(new Ee(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Ee((1-c)*1e4)).div(new Ee(1e4));let A=t.mintA.address===H.toBase58(),P=t.mintB.address===H.toBase58(),{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new z((C=t.mintA.programId)!=null?C:Gt),owner:this.scope.ownerPubKey,createInfo:A||!o?{payer:this.scope.ownerPubKey,amount:o?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});B&&f.addInstruction(B);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((x=t.mintB.programId)!=null?x:Gt),owner:this.scope.ownerPubKey,createInfo:P||o?{payer:this.scope.ownerPubKey,amount:o?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!h||!T)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:T,mintAUseSOLBalance:A,mintBUseSOLBalance:P,associatedOnly:y});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[r?$c(new z(t.programId),this.scope.ownerPubKey,new z(I.authority),new z(I.config.id),new z(t.id),o?h:T,o?T:h,new z(I.vault[o?"A":"B"]),new z(I.vault[o?"B":"A"]),new z((R=t[o?"mintA":"mintB"].programId)!=null?R:Gt),new z((X=t[o?"mintB":"mintA"].programId)!=null?X:Gt),o?b:g,o?g:b,fr(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):br(new z(t.programId),this.scope.ownerPubKey,new z(I.authority),new z(I.config.id),new z(t.id),o?h:T,o?T:h,new z(I.vault[o?"A":"B"]),new z(I.vault[o?"B":"A"]),new z((K=t[o?"mintA":"mintB"].programId)!=null?K:Gt),new z((V=t[o?"mintB":"mintA"].programId)!=null?V:Gt),o?b:g,o?g:b,fr(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[r?F.CpmmSwapBaseOut:F.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}async lockLp(e){var u,l,m,d,p;let{poolInfo:t,lpAmount:n,computeBudgetConfig:o,txVersion:r}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(),a=(u=e.poolKeys)!=null?u:await this.getCpmmPoolKeys(t.id),c=await Jc({poolInfo:t,poolKeys:a,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(l=e.feePayer)!=null?l:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:Bi,lockAuthProgram:(d=e.authProgram)!=null?d:xi,lpAmount:n,withMetadata:(p=e.withMetadata)!=null?p:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(c),s.addCustomComputeBudget(o),s.versionBuild({txVersion:r,extInfo:c.address})}async harvestLockLp(e){var x;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:r=Bi,authProgram:s=xi,cpmmProgram:a,computeBudgetConfig:c,txVersion:u}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let l=e.feePayer||this.scope.ownerPubKey,m=this.createTxBuilder(),[d,p]=[new z(t.mintA.address),new z(t.mintB.address)],y=d.equals(H),f=p.equals(H),b,g,{account:A,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:!y,checkCreateATAOwner:!1});b=A,P&&m.addInstruction(P);let{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});g=h,B&&m.addInstruction(B),(!b||!g)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:b,tokenAccountB:g});let T=(x=e.poolKeys)!=null?x:await this.getCpmmPoolKeys(t.id),{publicKey:S}=ie(l,o,Gt),{publicKey:I}=yr(r,o),{publicKey:C}=ie(s,new z(t.lpMint.address),Gt);return m.addInstruction({instructions:[el({programId:r!=null?r:Bi,nftOwner:this.scope.ownerPubKey,auth:s!=null?s:xi,nftMint:o,nftAccount:S,lockPda:I,poolId:new z(t.id),mintLp:new z(T.mintLp.address),userVaultA:b,userVaultB:g,poolVaultA:new z(T.vault.A),poolVaultB:new z(T.vault.B),mintA:d,mintB:p,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[F.CpmmCollectLockFee]}),m.addCustomComputeBudget(c),m.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let r=n.toString()===e.mintB.address,s=pr.swap(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new M(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ee((1-o)*1e4)).div(new Ee(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:r,epochInfo:s,baseIn:a}){var h,B,T,S,I,C,x,K,V;let c=1-Number(r.toSignificant())/100,u=new Ee(new M(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=ge(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Ee(0)),d=new Ee(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(T=(B=l.fee)==null?void 0:B.toString())!=null?T:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:qe,fee:void 0,expirationTime:void 0};if(!m.isZero()){let R=zf(y,t,n,d);this.logDebug("lpAmountData:",{amountA:R.amountA.toString(),amountB:R.amountB.toString()}),f=ge(R[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new ve(new Ee(1)).add(r),g=new ve(new Ee(1)).sub(r),A=ge(b.mul(f.amount.sub((S=f.fee)!=null?S:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),P=ge(g.mul(f.amount.sub((I=f.fee)!=null?I:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(x=(C=f.fee)==null?void 0:C.toString())!=null?x:0,"maxAnotherAmount:",A.amount.toString(),"maxAnotherAmountFee:",(V=(K=A.fee)==null?void 0:K.toString())!=null?V:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:A,minAnotherAmount:P,liquidity:y}}};function zf(i,e,t,n){let o=i.mul(e).div(n);!o.isZero()&&!i.mul(e).mod(n).isZero()&&(o=o.add(new Ee(1)));let r=i.mul(t).div(n);return!r.isZero()&&!i.mul(t).mod(n).isZero()&&(r=r.add(new Ee(1))),{amountA:o,amountB:r}}import{PublicKey as zn}from"@solana/web3.js";import{createTransferInstruction as al,TOKEN_PROGRAM_ID as Fe,TOKEN_2022_PROGRAM_ID as kr}from"@solana/spl-token";import hr from"bn.js";var nl={[vo.toBase58()]:3},il={3:vo};var ua=N([Ae(5),Ae(8),L("ownAddress"),w("vaultSignerNonce"),L("baseMint"),L("quoteMint"),L("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),L("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),L("requestQueue"),L("eventQueue"),L("bids"),L("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),Ae(7)]),ol={3:ua};import{PublicKey as rl}from"@solana/web3.js";var wr=me("Serum"),Pr=class{static getProgramId(e){let t=il[e];return t||wr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=nl[t];return n||wr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=ol[e];return t||wr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,r;for(;o<100;){try{let s=n.concat(Buffer.from([o]),Buffer.alloc(7));r=rl.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:r,nonce:o}}return wr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:rl.default,nonce:o}}};import{PublicKey as $,SystemProgram as ca,TransactionInstruction as la}from"@solana/web3.js";import Xn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Qf,TOKEN_2022_PROGRAM_ID as Yf,TOKEN_PROGRAM_ID as ma}from"@solana/spl-token";function LK(i,e,t,n,o,r,s,a,c,u,l,m){let d=N([q("instruction"),w("amountIn"),w("amountOut")]),p=[{pubkey:ca.programId,isSigner:!1,isWritable:!1},{pubkey:ma,isSigner:!1,isWritable:!1},{pubkey:new $(t.programId),isSigner:!1,isWritable:!1},{pubkey:new $(t.id),isSigner:!1,isWritable:!0},{pubkey:new $(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=Ke(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=Ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=Ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new la({keys:p,programId:i,data:y})}function OK(i,e,t,n,o,r,s,a,c,u){let l=N([q("instruction")]),m=[{pubkey:ca.programId,isSigner:!1,isWritable:!1},{pubkey:ma,isSigner:!1,isWritable:!1},{pubkey:new $(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new $(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new $(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=Ke(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=Ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=Ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new la({keys:m,programId:i,data:d})}function jf(i,e,t,n,o,r,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[k({pubkey:ma,isWritable:!1}),k({pubkey:Yf,isWritable:!1}),k({pubkey:Qf,isWritable:!1}),k({pubkey:ca.programId,isWritable:!1}),k({pubkey:e,isSigner:!0})];b.push(k({pubkey:t})),b.push(k({pubkey:o}));let g=[c,u],A=[l,m],P=[r,s,a];for(let S=0;S<g.length;S++){let I=g[S],C=P[S]===I.mintA.address;if(b.push(k({pubkey:new $(I.programId),isWritable:!1})),S===g.length-1?b.push(k({pubkey:o})):b.push(k({pubkey:n})),b.push(k({pubkey:new $(P[S])})),b.push(k({pubkey:new $(P[S+1])})),I.version===6){let x=A[S];b.push(k({pubkey:new $(x.config.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(k({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(k({pubkey:new $(I.observationId)})),b.push(k({pubkey:yn})),b.push(k({pubkey:Xe(new $(I.programId),new $(I.id)).publicKey})),f.push(Hf(I.sqrtPriceX64.toString(),C));for(let K of(T=y[S])!=null?T:[])b.push(k({pubkey:new $(K)}))}else if(I.version===5){let x=A[S];b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.authority),isWritable:!1})),b.push(k({pubkey:new $(x.marketProgramId)})),b.push(k({pubkey:new $(x.marketAuthority)})),b.push(k({pubkey:mu,isWritable:!1})),b.push(k({pubkey:new $(x.openOrders)})),b.push(k({pubkey:new $(x.vault.A)})),b.push(k({pubkey:new $(x.vault.B)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.marketId)})),b.push(k({pubkey:new $(x.marketBids)})),b.push(k({pubkey:new $(x.marketAsks)})),b.push(k({pubkey:new $(x.marketEventQueue)})),b.push(k({pubkey:new $(x.marketBaseVault)})),b.push(k({pubkey:new $(x.marketQuoteVault)}))}else if(I.version===4){let x=A[S],K=I.status!==1;b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(x.authority),isWritable:!1})),b.push(k({pubkey:new $(K?x.id:x.marketProgramId)})),b.push(k({pubkey:new $(K?x.id:x.marketAuthority)})),b.push(k({pubkey:new $(K?x.id:x.openOrders)})),b.push(k({pubkey:new $(x.vault.A)})),b.push(k({pubkey:new $(x.vault.B)})),b.push(k({pubkey:new $(K?x.id:x.marketId)})),b.push(k({pubkey:new $(K?x.id:x.marketBids)})),b.push(k({pubkey:new $(K?x.id:x.marketAsks)})),b.push(k({pubkey:new $(K?x.id:x.marketEventQueue)})),b.push(k({pubkey:new $(K?x.id:x.marketBaseVault)})),b.push(k({pubkey:new $(K?x.id:x.marketQuoteVault)}))}else if(I.version===7){let x=A[S];b.push(k({pubkey:new $(x.authority)})),b.push(k({pubkey:new $(x.config.id)})),b.push(k({pubkey:new $(x.id)})),b.push(k({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(k({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(k({pubkey:new $(I.observationId)}))}else throw Error("pool type error")}let h=N([q("insId"),w("amountIn"),w("amountOut"),Y(ee(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(h.span);return h.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new la({keys:b,programId:i,data:B})}function Hf(i,e){if(i)if(e){let t=new Xn(i).div(new Xn(25));return t.gt(Zo)?t:Zo}else{let t=new Xn(i).mul(new Xn(25));return t.lt($o)?t:$o}else return e?Zo:$o}function sl({routeProgram:i,ownerInfo:e,inputMint:t,swapInfo:n}){var o,r,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ke(m),p=t.equals(d.mintA.address)?Ot.add(xt):Mt.sub(xt);return he.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((r=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?r:new Xn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[br(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new $(m[d?"mintA":"mintB"].address),new $(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?F.CpmmSwapBaseIn:F.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[or({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new Xn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?F.AmmV5SwapBaseIn:F.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[jf(i,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new Xn(0)),n.remainingAccounts)],instructionTypes:[F.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var cn=new hr(0),mo=class extends Me{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(H));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}=e,r=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Z(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(s.addInstruction({instructions:[nn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):s.addInstruction({instructions:[nn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return s.versionBuild({txVersion:o})}async wrapWSol(e,t,n){let o=this.createTxBuilder(),r=await on({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return o.addInstruction(r),o.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:r,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(H),m=u.amount.token.mint.equals(H),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?kr:Fe,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route"&&!m)b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?kr:Fe);else{let{account:h,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?kr:Fe,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=h,B&&a.addInstruction(B)}m&&a.addInstruction({endInstructions:[nn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Fe})],endInstructionTypes:[F.CloseAccount]});let g;if(e.routeType==="route"){let h=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?kr:Fe)}let A=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),P=sl({routeProgram:r,inputMint:d,swapInfo:W(O({},e),{poolInfo:[...e.poolInfoList],poolKey:A,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[al(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]}),h.addInstruction(P);let{transactions:B}=s===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[al(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]})}return a.addInstruction(P),s===0?a.sizeCheckBuildV0({computeBudgetConfig:o,address:P.address}):a.sizeCheckBuild({computeBudgetConfig:o,address:P.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=hi,clmm:n=bn,cpmm:o=Ii}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:to.offsetOf("baseMint"),length:64}}),s=N([L("baseMint"),L("quoteMint")]),a=r.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=N([L("mintA"),L("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:Vn.span}],dataSlice:{offset:Vn.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:gr.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:r}){e=e.toString()===zn.default.toString()?H:e,t=t.toString()===zn.default.toString()?H:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let r=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=sr(r),a={};Object.values(s).forEach(f=>{o.delete(f.mintA.address),a[f.mintA.address]={address:new zn(f.mintA.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(f.mintB.address),a[f.mintB.address]={address:new zn(f.mintB.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:f.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 c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Fe)?(o.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),f.mintProgramB.equals(Fe)?(o.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await Yn({connection:this.scope.connection,mints:Array.from(o).map(f=>new zn(f))});a=O(O({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>W(O({},f),{[b]:W(O({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:r,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:r,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,A,P,h,B,T,S,I,C;let m=l===void 0?new hr(0):e.raw.mul(new hr(l.feeBps.toNumber())).div(new hr(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=W(O({},t),{address:Bt(t.address).toString()}),b=[];for(let x of n)try{b.push(W(O({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(K){this.logDebug("direct error",x.version,x.id.toString(),K.message)}this.logDebug("direct done");for(let[x,K]of Object.entries(o)){let V={chainId:101,address:x,programId:K.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:K.mDecimals,tags:[],extensions:{}},R=K.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:V,amountIn:p})}}catch(D){this.logDebug("route in error",G.version,G.id.toString(),D.message);return}}).sort((G,D)=>{var Se,bt,gt,Tt;let Te=G===void 0?cn:G.data.amountOut.amount.raw.sub((bt=(Se=G.data.amountOut.fee)==null?void 0:Se.raw)!=null?bt:cn),dt=D===void 0?cn:D.data.amountOut.amount.raw.sub((Tt=(gt=D.data.amountOut.fee)==null?void 0:gt.raw)!=null?Tt:cn);return Te.lt(dt)?1:-1})[0];if(R===void 0)continue;let X=new be(nr(V),R.data.amountOut.amount.raw.sub((A=(g=R.data.amountOut.fee)==null?void 0:g.raw)!=null?A:cn));for(let G of K.out)try{let D=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:X});b.push(W(O({},D),{allTrade:!!(R.data.allTrade&&D.allTrade),amountIn:R.data.amountIn,amountOut:D.amountOut,minAmountOut:D.minAmountOut,currentPrice:void 0,executionPrice:new M(new nt({baseToken:R.data.amountIn.amount.token,denominator:R.data.amountIn.amount.raw,quoteToken:D.amountOut.amount.token,numerator:D.amountOut.amount.raw.sub((h=(P=D.amountOut.fee)==null?void 0:P.raw)!=null?h:cn)}).toFixed()),priceImpact:new M(R.data.priceImpact.add(D.priceImpact).toFixed()),fee:[R.data.fee[0],D.fee[0]],routeType:"route",poolInfoList:[R.pool,G],remainingAccounts:[R.data.remainingAccounts[0],D.remainingAccounts[0]],minMiddleAmountFee:(B=D.amountOut.fee)!=null&&B.raw?new be(R.data.amountOut.amount.token,((S=(T=R.data.amountOut.fee)==null?void 0:T.raw)!=null?S:cn).add((C=(I=D.amountOut.fee)==null?void 0:I.raw)!=null?C:cn)):void 0,middleToken:R.data.amountOut.amount.token,poolReady:R.data.poolReady&&D.poolReady,poolType:[R.data.poolType,D.poolType],feeConfig:y,expirationTime:Dt(R.data.expirationTime,D.expirationTime)}))}catch(D){this.logDebug("route out error",G.version,G.id.toString(),D.message)}}return b.filter(x=>(x.allTrade||this.logDebug(`pool ${x.poolInfoList.map(K=>K.id.toString()).join(",")} filter out since not all trade`),x.allTrade)).sort((x,K)=>x.amountOut.amount.raw.sub(K.amountOut.amount.raw).gt(cn)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:r,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:A,executionPriceX64:P}=xe.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:r,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(y.toFixed()),executionPrice:new M(f.toFixed()),priceImpact:new M(b.toFixed()),fee:[g],remainingAccounts:[A],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[P],expirationTime:Dt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:eo(W(O({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:eo(W(O({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:eo(W(O({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:eo(W(O({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(c.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:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await Qe(this.scope.connection,Array.from(s).map(l=>({pubkey:new zn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=ua.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Pr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:W(O({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=O({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:ta({programId:new zn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:di(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:lt({address:u.mintLp.toBase58(),programId:Fe.toBase58(),decimals:u.lpDecimals}),config:W(O({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Zf,Transaction as da,TransactionInstruction as $f}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Jf}from"@solana/spl-token";import ul from"bn.js";var mt=class extends Me{static getPdaPoolId(e,t){return ue([mt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ue([mt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new ul(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:r}){if(n.length===0)return[];let s=n.map(l=>mt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<mt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>mt.getPdaOwnerId(t,m,o,l).publicKey));let c=await _t(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==mt.POOL_LAYOUT.span||b.data.length!==mt.OWNER_LAYOUT.span)continue;let g=mt.POOL_LAYOUT.decode(f.data),A=mt.OWNER_LAYOUT.decode(b.data),P=g.openTime.toNumber(),h=g.endTime.toNumber(),B=A.tokenInfo.map(I=>I.debtAmount.gt(new ul(0))).filter(I=>!I).length!==3,T=r>P&&r<h&&g.status===1,S=B&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:A.lpAmount,project:mt.VERSION_PROJECT[m],openTime:P,endTime:h,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((I,C)=>({mintAddress:I.mintAddress,mintVault:I.mintVault,mintDecimals:I.mintDecimals,perLpLoss:I.perLpLoss,debtAmount:A.tokenInfo[C].debtAmount.add(A.tokenInfo[C].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,r=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(we.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!c.mintAddress.equals(we.WSOL.mint),associatedOnly:c.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),r.push(u)}n.addInstruction({instructions:[mt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,r={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(we.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!m.mintAddress.equals(we.WSOL.mint),associatedOnly:m.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(r[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[mt.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:o,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return _o(c,[o,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new da().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new da().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new da().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=N([]),r=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Jf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new $f({keys:r,programId:e,data:a})}},Nt=mt;Nt.CLAIMED_NUM=3,Nt.POOL_LAYOUT=N([Ae(8),q("bump"),q("status"),w("openTime"),w("endTime"),L("ammId"),Y(N([q("mintDecimals"),L("mintAddress"),L("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),mt.CLAIMED_NUM,"tokenInfo"),Y(w(),10,"padding")]),Nt.OWNER_LAYOUT=N([Ae(8),q("bump"),q("version"),L("poolId"),L("owner"),w("lpAmount"),Y(N([L("mintAddress"),w("debtAmount"),w("claimedAmount")]),mt.CLAIMED_NUM,"tokenInfo"),Y(w(),4,"padding")]),Nt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Zf(e)),Nt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Nt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as fo}from"@solana/web3.js";import cl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as ey,TransactionInstruction as fa}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ya}from"@solana/spl-token";var pa=N([q("instruction"),Su("amount")]),po=N([q("instruction")]);function B0({programId:i,amount:e,instructionKeys:t}){let n=[{pubkey:Co,isSigner:!1,isWritable:!1},{pubkey:ya,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:qr,isSigner:!1,isWritable:!1},...Object.entries(t).map(([r,s])=>({pubkey:s,isSigner:r==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(r)}))],o=Buffer.alloc(pa.span);return pa.encode({instruction:1,amount:Number(e)},o),new fa({keys:n,programId:i,data:o})}function Tr({programId:i},e){let t=[{pubkey:ya,isSigner:!1,isWritable:!1},{pubkey:qr,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,r])=>({pubkey:r,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(po.span);return po.encode({instruction:2},n),new fa({keys:t,programId:i,data:n})}function ba(i){let{poolConfig:e,userKeys:t,side:n}=i,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,r=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(po.span);po.encode({instruction:2},s);let a=[{pubkey:ya,isWritable:!1,isSigner:!1},{pubkey:ey,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new fa({programId:e.programId,keys:a,data:s})}var ty={[Si.IDO_PROGRAM_ID_V1.toString()]:1,[Si.IDO_PROGRAM_ID_V2.toString()]:2,[Si.IDO_PROGRAM_ID_V3.toString()]:3,[Si.IDO_PROGRAM_ID_V4.toString()]:4},pi=class extends Me{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:r}){let s=this.createTxBuilder(),a=ty[t.programId];a||this.logAndCreateError("invalid version",a);let c=Ke(t),[u,l]=[!new cl(e.coin).isZero(),!new cl(e.pc).isZero()],m=c.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:o});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(H),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[Tr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new fo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Tr({programId:new fo(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new fo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:r});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Tr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new fo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:r});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new fo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[ba(W(O({},g),{side:"base"}))]:[],...l?[ba(W(O({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:r})}};import{PublicKey as ny}from"@solana/web3.js";import{MintLayout as iy,TOKEN_2022_PROGRAM_ID as ga,TOKEN_PROGRAM_ID as Aa}from"@solana/spl-token";var yo=class extends Me{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:r,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Qt.address,Qt),this._mintGroup.official.add(Qt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,W(O({},u),{priority:-1}))}),r.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ga.toBase58():Aa.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ga.toBase58():Aa.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?ga.toBase58():Aa.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return Qt;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,W(O({},r),{priority:2})),r;let s=await this.scope.connection.getAccountInfo(new ny(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=iy.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var Ir=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:r,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new Et(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=r,this._apiCacheTime=c||5*60*1e3,this.logger=me("Raydium"),this.farm=new Gi({scope:this,moduleName:"Raydium_Farm"}),this.account=new Ni({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new ro({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new yo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new mo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new ao({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new lo({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Nt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new ci({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new pi({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=oy({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:r,logRequests:s,urlConfigs:a}=t,c=new Wo({cluster:n,timeout:o,urlConfigs:a,logCount:r,logRequests:s}),u=new Ir(W(O({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(qo);return this._owner.publicKey}setOwner(e){return this._owner=e?new Et(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Au);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 this.logger.error(qo),new Error(qo)}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){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=>W(O({},o),{mintAuthority:o.mint_authority||void 0,freezeAuthority:o.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var hC=i=>i;export{by as ACCOUNT_TYPE_SIZE,Ug as ALL_PROGRAM_ID,Ep as AMM_CONFIG_SEED,Gm as AMM_STABLE,hi as AMM_V4,ob as ANAMint,Ge as API_URLS,kl as AccountType,Wo as Api,ic as BIT_PRECISION,Ft as BNDivCeil,On as BNLayout,mg as BN_100,dg as BN_1000,pg as BN_10000,lg as BN_FIVE,Za as BN_ONE,Kn as BN_TEN,cg as BN_THREE,ug as BN_TWO,qe as BN_ZERO,kw as BitStructure,xu as Blob,Ti as CLMM_LOCK_AUTH_ID,Jn as CLMM_LOCK_PROGRAM_ID,bn as CLMM_PROGRAM_ID,qr as CLOCK_PROGRAM_ID,Jr as CREATE_CPMM_POOL_AUTH,Hm as CREATE_CPMM_POOL_FEE_ACC,Ii as CREATE_CPMM_POOL_PROGRAM,ao as Clmm,wc as ClmmConfigLayout,he as ClmmInstrument,lr as ConstantProductCurve,tl as CpmmConfigInfoLayout,mr as CpmmFee,gr as CpmmPoolInfoLayout,wi as Currency,Sn as CurrencyAmount,pr as CurveCalculator,Gg as DEVNET_PROGRAM_ID,CA as DEV_API_URLS,$m as DEV_CREATE_CPMM_POOL_AUTH,Jm as DEV_CREATE_CPMM_POOL_FEE_ACC,Zm as DEV_CREATE_CPMM_POOL_PROGRAM,td as DEV_LOCK_CPMM_AUTH,ed as DEV_LOCK_CPMM_PROGRAM,rf as DataElement,rb as ETHMint,Ds as EXTENSION_TICKARRAY_BITMAP_SIZE,Gu as FARM_LOCK_MINT,Xu as FARM_LOCK_VAULT,Hr as FARM_PROGRAM_ID_V3,lu as FARM_PROGRAM_ID_V4,Zr as FARM_PROGRAM_ID_V5,$n as FARM_PROGRAM_ID_V6,Rt as FARM_PROGRAM_TO_VERSION,Qu as FARM_VERSION_TO_LEDGER_LAYOUT,zu as FARM_VERSION_TO_STATE_LAYOUT,du as FEE_DESTINATION_ID,Jo as FEE_RATE_DENOMINATOR,oa as FEE_RATE_DENOMINATOR_VALUE,zp as FETCH_TICKARRAY_COUNT,Vp as Fee,ae as Fraction,Si as IDO_ALL_PROGRAM,zm as IDO_PROGRAM_ID_V1,Qm as IDO_PROGRAM_ID_V2,Ym as IDO_PROGRAM_ID_V3,jm as IDO_PROGRAM_ID_V4,Ko as INSTRUCTION_PROGRAM_ID,F as InstructionType,fu as JupTokenType,ir as LIQUIDITY_FEES_DENOMINATOR,Gs as LIQUIDITY_FEES_NUMERATOR,mu as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,tf as LIQUIDITY_VERSION_TO_SERUM_VERSION,CI as LIQUIDITY_VERSION_TO_STATE_LAYOUT,xi as LOCK_CPMM_AUTH,Bi as LOCK_CPMM_PROGRAM,Df as LOCK_LIQUIDITY_SEED,oc as LOG_B_2_X32,rc as LOG_B_P_ERR_MARGIN_LOWER_X64,sc as LOG_B_P_ERR_MARGIN_UPPER_X64,Eo as LOOKUP_TABLE_CACHE,Oi as Layout,pe as LiquidityMath,qT as LockClPositionLayoutV2,WT as LockPositionLayout,bl as LogLevel,Sr as Logger,ia as MARKET_STATE_LAYOUT_V2,ua as MARKET_STATE_LAYOUT_V3,ol as MARKET_VERSION_TO_STATE_LAYOUT,su as MAX_BASE64_SIZE,Mt as MAX_SQRT_PRICE_X64,$o as MAX_SQRT_PRICE_X64_SUB_ONE,ft as MAX_TICK,So as MEMO_PROGRAM_ID,yn as MEMO_PROGRAM_ID2,Zt as METADATA_PROGRAM_ID,Ot as MIN_SQRT_PRICE_X64,Zo as MIN_SQRT_PRICE_X64_ADD_ONE,ct as MIN_TICK,ai as MODEL_DATA_PUBKEY,Pr as Market,re as MathUtil,_s as MaxU64,nc as MaxUint128,rn as NEGATIVE_ONE,ib as NRVMint,Xp as OBSERVATION_SEED,xt as ONE,$r as OPEN_BOOK_PROGRAM,Up as OPERATION_SEED,Pc as ObservationInfoLayout,jp as ObservationLayout,kc as OperationLayout,ds as OptionLayout,Et as Owner,Hy as PAIMint,yc as POOL_LOCK_ID_SEED,Wp as POOL_REWARD_VAULT_SEED,Fp as POOL_SEED,Gp as POOL_TICK_ARRAY_BITMAP_SEED,Dp as POOL_VAULT_SEED,mc as POSITION_SEED,ve as Percent,yu as PoolFetchType,Vn as PoolInfoLayout,xe as PoolUtils,$i as PositionInfoLayout,Zp as PositionRewardInfoLayout,ji as PositionUtils,nt as Price,DT as ProtocolPositionLayout,Ho as Q128,St as Q64,jy as RAYMint,tt as RENT_PROGRAM_ID,Ir as Raydium,Hp as RewardInfo,Uc as RoundDirection,Vr as Rounding,Xm as Router,nl as SERUM_PROGRAMID_TO_VERSION,vo as SERUM_PROGRAM_ID_V3,il as SERUM_VERSION_TO_PROGRAMID,bu as SESSION_KEY,$e as SOLMint,Qt as SOL_INFO,oI as SPL_MINT_LAYOUT,Zy as SRMMint,ns as STORAGE_KEY,Co as SYSTEM_PROGRAM_ID,te as SqrtPriceMath,si as StableLayout,ps as Structure,vn as SwapMath,_n as TICK_ARRAY_BITMAP_SIZE,qp as TICK_ARRAY_SEED,et as TICK_ARRAY_SIZE,hh as TICK_SPACINGS,Ze as TOKEN_WSOL,sn as TickArrayBitmap,Ac as TickArrayBitmapExtensionLayout,Zi as TickArrayBitmapExtensionUtils,Hi as TickArrayLayout,$p as TickLayout,En as TickMath,fe as TickQuery,j as TickUtils,we as Token,be as TokenAmount,Fo as TxBuilder,Rn as TxVersion,Xi as U64Resolution,Ih as U64_IGNORE_RANGE,cs as UInt,$y as USDCMint,nb as USDHMint,Jy as USDTMint,Um as UTIL1216,fs as Union,qu as Voter,hp as VoterDepositEntry,kp as VoterLockup,Wu as VoterRegistrar,Pp as VoterVotingMintConfig,H as WSOLMint,Qo as WideBits,tn as WrappedLayout,ye as ZERO,Qa as _100_PERCENT,k as accountMeta,Ub as add,Mo as addComputeBudget,Ys as addLiquidityLayout,sP as array,As as associatedLedgerAccountLayout,ls as bits,Ae as blob,Oe as bool,Ls as calFarmRewardAmount,Lf as ceilDiv,Pi as checkLegacyTxSize,ki as checkV0TxSize,Rr as chunkArray,po as claimLayout,gc as clmmComputeInfoToApiInfo,nn as closeAccountInstruction,el as collectCpFeeInstruction,Fr as commonSystemAccountMeta,No as confirmTransaction,Gf as cpmmLockPositionInstruction,Di as createAssociatedLedgerAccountInstruction,me as createLogger,Sc as createPoolFeeLayout,$s as createPoolV4InstructionV2,KI as createPoolV4Layout,on as createWSolAccountInstructions,jw as cstr,fb as currencyEquals,Nm as decimalToFraction,ep as decodeBool,Fb as div,Ro as divCeil,pt as dwLayout,tp as encodeBool,HA as endlessRetry,Cm as eq,Gw as f32,Xw as f32be,zw as f64,Qw as f64be,hs as farmAddRewardLayout,ek as farmLedgerLayoutV3_1,vi as farmLedgerLayoutV3_2,tk as farmLedgerLayoutV5_1,Fu as farmLedgerLayoutV5_2,Du as farmLedgerLayoutV6_1,ju as farmRewardInfoToConfig,Ps as farmRewardLayout,ks as farmRewardRestartLayout,wp as farmRewardTimeInfoLayout,Vu as farmStateV3Layout,Eu as farmStateV5Layout,_i as farmStateV6Layout,xk as fetchMultipleFarmInfoAndUpdate,uB as fetchMultipleInfo,Yn as fetchMultipleMintInfos,ue as findProgramAddress,Xs as fixedSwapInLayout,zs as fixedSwapOutLayout,Gc as floorDiv,_o as forecastTransactionSize,yf as formatLayout,Ve as generatePubKey,ie as getATAAddress,Yu as getAssociatedAuthority,rr as getAssociatedConfigId,ut as getAssociatedLedgerAccount,Ei as getAssociatedLedgerPoolAccount,If as getAssociatedOpenOrders,na as getAssociatedPoolKeys,yr as getCpLockPda,lS as getCpmmPdaAmmConfigId,sa as getCpmmPdaPoolId,Qc as getCreatePoolKeys,eu as getDate,Os as getDepositEntryIndex,Lc as getDxByDyBaseIn,Rc as getDyByDxBaseIn,_g as getEpochInfo,oi as getFarmLedgerLayout,Tp as getFarmStateLayout,ta as getLiquidityAssociatedAuthority,Wn as getLiquidityAssociatedId,bT as getLiquidityFromAmounts,qb as getMax,_t as getMultipleAccountsInfo,Qe as getMultipleAccountsInfoWithCustomFlags,es as getMultipleLookupTableInfo,Lh as getPdaAmmConfigId,Xe as getPdaExBitmapAccount,Yi as getPdaLockClPositionIdV2,Fs as getPdaLockPositionId,Ef as getPdaLpMint,Nn as getPdaMetadataKey,fc as getPdaObservationAccount,fr as getPdaObservationId,Qi as getPdaOperationAccount,yt as getPdaPersonalPositionAddress,di as getPdaPoolAuthority,dc as getPdaPoolId,pc as getPdaPoolRewardVaulId,Es as getPdaPoolVaultId,qt as getPdaProtocolPositionAddress,de as getPdaTickArrayAddress,zc as getPdaVault,Zn as getRecentBlockHash,Bs as getRegistrarAddress,id as getSessionKey,Oc as getStablePrice,vm as getTime,jb as getTimestamp,Rs as getTokenOwnerRecordAddress,Qg as getTransferAmountFee,ge as getTransferAmountFeeV2,Ks as getVoterAddress,Cs as getVoterWeightRecordAddress,Ss as getVotingMintAuthority,xs as getVotingTokenMint,Op as governanceCreateTokenOwnerRecord,hw as greedy,Km as gt,Eb as gte,Mu as i128,xh as i16ToBytes,er as i32ToBytes,ti as i64,Ou as i8,Qs as initPoolLayout,bs as initTokenAccountInstruction,Kf as initializeMarket,Pg as intersection,nu as isDateAfter,tu as isDateBefore,_m as isDecimal,Wb as isMeaningfulNumber,Ja as isNumber,Ts as isValidFarmVersion,zi as isZero,Ke as jsonInfo2PoolKeys,Sk as judgeFarmType,vs as leadingZeros,lc as leastSignificantBit,to as liquidityStateV4Layout,nf as liquidityStateV5Layout,vb as lt,Vb as lte,eb as mSOLMint,or as makeAMMSwapInstruction,_c as makeAddLiquidityInstruction,Ns as makeAddNewRewardInstruction,Tr as makeClaimInstruction,ba as makeClaimInstructionV4,Jc as makeCpmmLockInstruction,jc as makeCreateCpmmPoolInInstruction,Hu as makeCreateFarmInstruction,ar as makeCreateMarketInstruction,Zu as makeCreatorWithdrawFarmRewardInstruction,Hc as makeDepositCpmmInInstruction,Ju as makeDepositInstructionV3,ec as makeDepositInstructionV5,tc as makeDepositInstructionV6,Uk as makeDepositTokenInstruction,Xk as makeDepositWithdrawInstruction,zI as makeInitPoolInstructionV4,B0 as makePurchaseInstruction,Ms as makeRestartRewardInstruction,vc as makeSimulatePoolInfoInstruction,br as makeSwapCpmmBaseInInInstruction,$c as makeSwapCpmmBaseOutInInstruction,Af as makeSwapFixedInInstruction,wf as makeSwapFixedOutInstruction,sl as makeSwapInstruction,vu as makeTransferInstruction,Zc as makeWithdrawCpmmInInstruction,Ui as makeWithdrawInstructionV3,$u as makeWithdrawInstructionV4,qi as makeWithdrawInstructionV5,Wi as makeWithdrawInstructionV6,Gk as makeWithdrawTokenInstruction,Dt as minExpirationTime,Th as mockCreatePoolInfo,ac as mockV3CreatePoolInfo,sf as modelDataInfoLayout,cc as mostSignificantBit,Qr as mul,Yr as notInnerObject,Vw as ns64,Uw as ns64be,Su as nu64,Lw as nu64be,ms as offset,Ag as offsetDateTime,tP as option,Z as parseBigNumberish,Cn as parseNumberInfo,uu as parseSimulateLogToJson,Jt as parseSimulateValue,_u as parseTokenAccountResp,fI as parseTokenInfo,kn as poolTypeV6,Ln as printSimulate,L as publicKey,pa as purchaseLayout,bp as realFarmStateV3Layout,gp as realFarmStateV5Layout,Ap as realFarmV6Layout,Ha as recursivelyDecimalToFraction,Zs as removeLiquidityInstruction,js as removeLiquidityLayout,LK as route1Instruction,OK as route2Instruction,jf as routeInstruction,rP as rustEnum,Mw as s16,Ew as s16be,Nw as s24,Fw as s24be,Ce as s32,Dw as s32be,_w as s40,Ww as s40be,vw as s48,qw as s48be,Ow as s8,Y as seq,ay as setLoggerLevel,Om as shakeFractionDecimal,au as simulateMultipleInstruction,XI as simulatePoolInfoInstruction,Fm as simulateTransaction,Ya as sleep,Bt as solToWSol,bI as solToWSolToken,wn as splAccountLayout,Ga as splitNumber,tb as stSOLMint,oP as str,N as struct,Db as sub,iP as tagged,zr as tenExponential,sr as toAmmComputePoolInfo,lt as toApiV3Token,Mm as toBN,cu as toBuffer,hn as toFeeConfig,$a as toFraction,_b as toFractionWithDecimals,fg as toPercent,nr as toToken,eo as toTokenAmount,yI as toTokenInfo,yg as toTokenPrice,bg as toTotalPrice,ja as toUsdCurrency,Vs as trailingZeros,vg as transformTxToBase64,Wr as tryParsePublicKey,Dm as txToBase64,ee as u128,en as u16,uc as u16ToBytes,xw as u16be,Tw as u24,Sw as u24be,rt as u32,Sh as u32ToBytes,Kw as u32be,Iw as u40,Cw as u40be,Bw as u48,Rw as u48be,w as u64,q as u8,aP as union,hC as unionArr,Yw as unionLayoutDiscriminator,hg as uniq,Ip as updateFarmPoolInfo,Do as updateReqHistory,Hw as utf8,Dr as validateAndParsePublicKey,Is as validateFarmRewards,nP as vec,np as vecU8,Np as voterStakeRegistryCreateDepositEntry,Mp as voterStakeRegistryCreateVoter,Cp as voterStakeRegistryDeposit,Rp as voterStakeRegistryUpdateVoterWeightRecord,Lp as voterStakeRegistryWithdraw,gI as wSolToSolToken,ws as withdrawRewardLayout,kg as xor,uP as zeros};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=index.mjs.map