@raydium-io/raydium-sdk-v2 0.0.38-alpha → 0.0.39-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.d.ts +2 -2
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/lib/raydium/account/account.d.ts +2 -2
- package/lib/raydium/clmm/clmm.d.ts +2 -2
- package/lib/raydium/clmm/index.d.ts +2 -2
- package/lib/raydium/clmm/instrument.d.ts +1 -1
- package/lib/raydium/clmm/layout.d.ts +1 -1
- package/lib/raydium/clmm/type.d.ts +1 -1
- package/lib/raydium/clmm/utils/math.d.ts +1 -1
- package/lib/raydium/clmm/utils/pool.d.ts +1 -1
- package/lib/raydium/clmm/utils/position.d.ts +1 -1
- package/lib/raydium/clmm/utils/tick.d.ts +1 -1
- package/lib/raydium/clmm/utils/tickQuery.d.ts +1 -1
- package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +1 -1
- package/lib/raydium/cpmm/cpmm.d.ts +2 -2
- package/lib/raydium/cpmm/layout.d.ts +1 -1
- package/lib/raydium/farm/farm.d.ts +2 -2
- package/lib/raydium/ido/ido.d.ts +2 -2
- package/lib/raydium/ido/index.d.ts +2 -2
- package/lib/raydium/index.d.ts +2 -2
- package/lib/raydium/index.js +1 -1
- package/lib/raydium/index.js.map +1 -1
- package/lib/raydium/index.mjs +1 -1
- package/lib/raydium/index.mjs.map +1 -1
- package/lib/raydium/liquidity/layout.d.ts +2 -2
- package/lib/raydium/liquidity/liquidity.d.ts +2 -2
- package/lib/raydium/liquidity/liquidity.js +1 -1
- package/lib/raydium/liquidity/liquidity.js.map +1 -1
- package/lib/raydium/liquidity/liquidity.mjs +1 -1
- package/lib/raydium/liquidity/liquidity.mjs.map +1 -1
- package/lib/raydium/marketV2/createMarket.d.ts +2 -2
- package/lib/raydium/marketV2/index.d.ts +2 -2
- package/lib/raydium/moduleBase.d.ts +2 -2
- package/lib/raydium/raydium.d.ts +2 -2
- package/lib/raydium/raydium.js +1 -1
- package/lib/raydium/raydium.js.map +1 -1
- package/lib/raydium/raydium.mjs +1 -1
- package/lib/raydium/raydium.mjs.map +1 -1
- package/lib/raydium/token/token.d.ts +2 -2
- package/lib/raydium/tradeV2/index.d.ts +1 -1
- package/lib/raydium/tradeV2/instrument.d.ts +1 -1
- package/lib/raydium/tradeV2/trade.d.ts +2 -2
- package/lib/raydium/tradeV2/type.d.ts +1 -1
- package/lib/raydium/utils1216/index.d.ts +2 -2
- package/lib/raydium/utils1216/utils1216.d.ts +2 -2
- package/lib/{raydium-34e76972.d.ts → raydium-2631faa2.d.ts} +2 -2
- package/package.json +1 -1
- package/src/raydium/liquidity/liquidity.ts +9 -6
- /package/lib/{type-6d046773.d.ts → type-08d7cf11.d.ts} +0 -0
package/lib/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var tc=Object.defineProperty,nc=Object.defineProperties;var rc=Object.getOwnPropertyDescriptors;var Cr=Object.getOwnPropertySymbols;var bs=Object.prototype.hasOwnProperty,gs=Object.prototype.propertyIsEnumerable;var ys=(r,e,t)=>e in r?tc(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,M=(r,e)=>{for(var t in e||(e={}))bs.call(e,t)&&ys(r,t,e[t]);if(Cr)for(var t of Cr(e))gs.call(e,t)&&ys(r,t,e[t]);return r},D=(r,e)=>nc(r,rc(e));var Te=(r,e)=>{var t={};for(var n in r)bs.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Cr)for(var n of Cr(r))e.indexOf(n)<0&&gs.call(r,n)&&(t[n]=r[n]);return t};import Xl from"axios";import{get as Bi,set as ws}from"lodash";import As from"dayjs";import ic from"dayjs/plugin/utc";As.extend(ic);var oc=(i=>(i[i.Error=0]="Error",i[i.Warning=1]="Warning",i[i.Info=2]="Info",i[i.Debug=3]="Debug",i))(oc||{}),Si=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 As().utc().format("YYYY/MM/DD HH:mm:ss UTC")}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}},Ki={},Ps={};function ae(r){let e=Bi(Ki,r);if(!e){let t=Bi(Ps,r);e=new Si({name:r,logLevel:t}),ws(Ki,r,e)}return e}function Yp(r,e){ws(Ps,r,e);let t=Bi(Ki,r);t&&(t.level=e)}import{PublicKey as wl}from"@solana/web3.js";import Al from"bn.js";import bl from"big.js";import Xt from"bn.js";import Pe from"bn.js";var gn=9e15,Gt=1e9,Ci="0123456789abcdef",Lr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Or="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Ri={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-gn,maxE:gn,crypto:!1},Is,Ot,J=!0,Mr="[DecimalError] ",Ut=Mr+"Invalid argument: ",xs=Mr+"Precision limit exceeded",Bs=Mr+"crypto unavailable",Ss="[object Decimal]",Ge=Math.floor,Oe=Math.pow,sc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,ac=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,uc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ks=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,bt=1e7,H=7,cc=9007199254740991,lc=Lr.length-1,Li=Or.length-1,O={toStringTag:Ss};O.absoluteValue=O.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),X(r)};O.ceil=function(){return X(new this.constructor(this),this.e+1,2)};O.clampedTo=O.clamp=function(r,e){var t,n=this,i=n.constructor;if(r=new i(r),e=new i(e),!r.s||!e.s)return new i(NaN);if(r.gt(e))throw Error(Ut+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new i(n)};O.comparedTo=O.cmp=function(r){var e,t,n,i,o=this,s=o.d,a=(r=new o.constructor(r)).d,u=o.s,c=r.s;if(!s||!a)return!u||!c?NaN:u!==c?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-c:0;if(u!==c)return u;if(o.e!==r.e)return o.e>r.e^u<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===i?0:n>i^u<0?1:-1};O.cosine=O.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+H,n.rounding=1,t=mc(n,Ns(n,t)),n.precision=r,n.rounding=e,X(Ot==2||Ot==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};O.cubeRoot=O.cbrt=function(){var r,e,t,n,i,o,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(J=!1,o=l.s*Oe(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=Fe(l.d),r=l.e,(o=(r-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=Oe(t,1/3),r=Ge((r+1)/3)-(r%3==(r<0?-1:2)),o==1/0?t="5e"+r:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(o.toString()),s=(r=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=we(c.plus(l).times(a),c.plus(u),s+2,1),Fe(a.d).slice(0,s)===(t=Fe(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(X(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(X(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return J=!0,X(n,r,m.rounding,e)};O.decimalPlaces=O.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-Ge(this.e/H))*H,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};O.dividedBy=O.div=function(r){return we(this,new this.constructor(r))};O.dividedToIntegerBy=O.divToInt=function(r){var e=this,t=e.constructor;return X(we(e,new t(r),0,1,1),t.precision,t.rounding)};O.equals=O.eq=function(r){return this.cmp(r)===0};O.floor=function(){return X(new this.constructor(this),this.e+1,3)};O.greaterThan=O.gt=function(r){return this.cmp(r)>0};O.greaterThanOrEqualTo=O.gte=function(r){var e=this.cmp(r);return e==1||e===0};O.hyperbolicCosine=O.cosh=function(){var r,e,t,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(r=Math.ceil(i/3),e=(1/Vr(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),o=wn(s,1,o.times(e),new s(1),!0);for(var u,c=r,l=new s(8);c--;)u=o.times(o),o=a.minus(u.times(l.minus(u.times(l))));return X(o,s.precision=t,s.rounding=n,!0)};O.hyperbolicSine=O.sinh=function(){var r,e,t,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(e=o.precision,t=o.rounding,o.precision=e+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=wn(o,2,i,i,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,i=i.times(1/Vr(5,r)),i=wn(o,2,i,i,!0);for(var s,a=new o(5),u=new o(16),c=new o(20);r--;)s=i.times(i),i=i.times(a.plus(s.times(u.times(s).plus(c))))}return o.precision=e,o.rounding=t,X(i,e,t,!0)};O.hyperbolicTangent=O.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,we(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};O.inverseCosine=O.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,o=t.rounding;return n!==-1?n===0?e.isNeg()?yt(t,i,o):new t(0):new t(NaN):e.isZero()?yt(t,i+4,o).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),r=yt(t,i+4,o).times(.5),t.precision=i,t.rounding=o,r.minus(e))};O.inverseHyperbolicCosine=O.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,J=!1,t=t.times(t).minus(1).sqrt().plus(t),J=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};O.inverseHyperbolicSine=O.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,J=!1,t=t.times(t).plus(1).sqrt().plus(t),J=!0,n.precision=r,n.rounding=e,t.ln())};O.inverseHyperbolicTangent=O.atanh=function(){var r,e,t,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(r=o.precision,e=o.rounding,n=i.sd(),Math.max(n,r)<2*-i.e-1?X(new o(i),r,e,!0):(o.precision=t=n-i.e,i=we(i.plus(1),new o(1).minus(i),t+r,1),o.precision=r+4,o.rounding=1,i=i.ln(),o.precision=r,o.rounding=e,i.times(.5))):new o(NaN)};O.inverseSine=O.asin=function(){var r,e,t,n,i=this,o=i.constructor;return i.isZero()?new o(i):(e=i.abs().cmp(1),t=o.precision,n=o.rounding,e!==-1?e===0?(r=yt(o,t+4,n).times(.5),r.s=i.s,r):new o(NaN):(o.precision=t+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,i.times(2)))};O.inverseTangent=O.atan=function(){var r,e,t,n,i,o,s,a,u,c=this,l=c.constructor,m=l.precision,p=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=Li)return s=yt(l,m+4,p).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=Li)return s=yt(l,m+4,p).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/H+2|0),r=t;r;--r)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(J=!1,e=Math.ceil(a/H),n=1,u=c.times(c),s=new l(c),i=c;r!==-1;)if(i=i.times(u),o=s.minus(i.div(n+=2)),i=i.times(u),s=o.plus(i.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===o.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),J=!0,X(s,l.precision=m,l.rounding=p,!0)};O.isFinite=function(){return!!this.d};O.isInteger=O.isInt=function(){return!!this.d&&Ge(this.e/H)>this.d.length-2};O.isNaN=function(){return!this.s};O.isNegative=O.isNeg=function(){return this.s<0};O.isPositive=O.isPos=function(){return this.s>0};O.isZero=function(){return!!this.d&&this.d[0]===0};O.lessThan=O.lt=function(r){return this.cmp(r)<0};O.lessThanOrEqualTo=O.lte=function(r){return this.cmp(r)<1};O.logarithm=O.log=function(r){var e,t,n,i,o,s,a,u,c=this,l=c.constructor,m=l.precision,p=l.rounding,d=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.eq(10)}if(t=c.d,c.s<0||!t||!t[0]||c.eq(1))return new l(t&&!t[0]?-1/0:c.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)o=!0;else{for(i=t[0];i%10===0;)i/=10;o=i!==1}if(J=!1,a=m+d,s=qt(c,a),n=e?Nr(l,a+10):qt(r,a),u=we(s,n,a,1),Vn(u.d,i=m,p))do if(a+=10,s=qt(c,a),n=e?Nr(l,a+10):qt(r,a),u=we(s,n,a,1),!o){+Fe(u.d).slice(i+1,i+15)+1==1e14&&(u=X(u,m+1,0));break}while(Vn(u.d,i+=10,p));return J=!0,X(u,m,p)};O.minus=O.sub=function(r){var e,t,n,i,o,s,a,u,c,l,m,p,d=this,y=d.constructor;if(r=new y(r),!d.d||!r.d)return!d.s||!r.s?r=new y(NaN):d.d?r.s=-r.s:r=new y(r.d||d.s!==r.s?d:NaN),r;if(d.s!=r.s)return r.s=-r.s,d.plus(r);if(c=d.d,p=r.d,a=y.precision,u=y.rounding,!c[0]||!p[0]){if(p[0])r.s=-r.s;else if(c[0])r=new y(d);else return new y(u===3?-0:0);return J?X(r,a,u):r}if(t=Ge(r.e/H),l=Ge(d.e/H),c=c.slice(),o=l-t,o){for(m=o<0,m?(e=c,o=-o,s=p.length):(e=p,t=l,s=c.length),n=Math.max(Math.ceil(a/H),s)+2,o>n&&(o=n,e.length=1),e.reverse(),n=o;n--;)e.push(0);e.reverse()}else{for(n=c.length,s=p.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=p[n]){m=c[n]<p[n];break}o=0}for(m&&(e=c,c=p,p=e,r.s=-r.s),s=c.length,n=p.length-s;n>0;--n)c[s++]=0;for(n=p.length;n>o;){if(c[--n]<p[n]){for(i=n;i&&c[--i]===0;)c[i]=bt-1;--c[i],c[n]+=bt}c[n]-=p[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(r.d=c,r.e=_r(c,t),J?X(r,a,u):r):new y(u===3?-0:0)};O.modulo=O.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?X(new n(t),n.precision,n.rounding):(J=!1,n.modulo==9?(e=we(t,r.abs(),0,3,1),e.s*=r.s):e=we(t,r,0,n.modulo,1),e=e.times(r),J=!0,t.minus(e))};O.naturalExponential=O.exp=function(){return Oi(this)};O.naturalLogarithm=O.ln=function(){return qt(this)};O.negated=O.neg=function(){var r=new this.constructor(this);return r.s=-r.s,X(r)};O.plus=O.add=function(r){var e,t,n,i,o,s,a,u,c,l,m=this,p=m.constructor;if(r=new p(r),!m.d||!r.d)return!m.s||!r.s?r=new p(NaN):m.d||(r=new p(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(c=m.d,l=r.d,a=p.precision,u=p.rounding,!c[0]||!l[0])return l[0]||(r=new p(m)),J?X(r,a,u):r;if(o=Ge(m.e/H),n=Ge(r.e/H),c=c.slice(),i=o-n,i){for(i<0?(t=c,i=-i,s=l.length):(t=l,n=o,s=c.length),o=Math.ceil(a/H),s=o>s?o+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=c.length,i=l.length,s-i<0&&(i=s,t=l,l=c,c=t),e=0;i;)e=(c[--i]=c[i]+l[i]+e)/bt|0,c[i]%=bt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return r.d=c,r.e=_r(c,n),J?X(r,a,u):r};O.precision=O.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Ut+r);return t.d?(e=Cs(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};O.round=function(){var r=this,e=r.constructor;return X(new e(r),r.e+1,e.rounding)};O.sine=O.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+H,n.rounding=1,t=pc(n,Ns(n,t)),n.precision=r,n.rounding=e,X(Ot>2?t.neg():t,r,e,!0)):new n(NaN)};O.squareRoot=O.sqrt=function(){var r,e,t,n,i,o,s=this,a=s.d,u=s.e,c=s.s,l=s.constructor;if(c!==1||!a||!a[0])return new l(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);for(J=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=Fe(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=Ge((u+1)/2)-(u<0||u%2),c==1/0?e="5e"+u:(e=c.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new l(e)):n=new l(c.toString()),t=(u=l.precision)+3;;)if(o=n,n=o.plus(we(s,o,t+2,1)).times(.5),Fe(o.d).slice(0,t)===(e=Fe(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(X(o,u+1,0),o.times(o).eq(s))){n=o;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(X(n,u+1,1),r=!n.times(n).eq(s));break}return J=!0,X(n,u,l.rounding,r)};O.tangent=O.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=we(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,X(Ot==2||Ot==4?t.neg():t,r,e,!0)):new n(NaN)};O.times=O.mul=function(r){var e,t,n,i,o,s,a,u,c,l=this,m=l.constructor,p=l.d,d=(r=new m(r)).d;if(r.s*=l.s,!p||!p[0]||!d||!d[0])return new m(!r.s||p&&!p[0]&&!d||d&&!d[0]&&!p?NaN:!p||!d?r.s/0:r.s*0);for(t=Ge(l.e/H)+Ge(r.e/H),u=p.length,c=d.length,u<c&&(o=p,p=d,d=o,s=u,u=c,c=s),o=[],s=u+c,n=s;n--;)o.push(0);for(n=c;--n>=0;){for(e=0,i=u+n;i>n;)a=o[i]+d[n]*p[i-n-1]+e,o[i--]=a%bt|0,e=a/bt|0;o[i]=(o[i]+e)%bt|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=_r(o,t),J?X(r,m.precision,m.rounding):r};O.toBinary=function(r,e){return Mi(this,2,r,e)};O.toDecimalPlaces=O.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(tt(r,0,Gt),e===void 0?e=n.rounding:tt(e,0,8),X(t,r+t.e+1,e))};O.toExponential=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=ht(n,!0):(tt(r,0,Gt),e===void 0?e=i.rounding:tt(e,0,8),n=X(new i(n),r+1,e),t=ht(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};O.toFixed=function(r,e){var t,n,i=this,o=i.constructor;return r===void 0?t=ht(i):(tt(r,0,Gt),e===void 0?e=o.rounding:tt(e,0,8),n=X(new o(i),r+i.e+1,e),t=ht(n,!1,r+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};O.toFraction=function(r){var e,t,n,i,o,s,a,u,c,l,m,p,d=this,y=d.d,f=d.constructor;if(!y)return new f(d);if(c=t=new f(1),n=u=new f(0),e=new f(n),o=e.e=Cs(y)-d.e-1,s=o%H,e.d[0]=Oe(10,s<0?H+s:s),r==null)r=o>0?e:c;else{if(a=new f(r),!a.isInt()||a.lt(c))throw Error(Ut+a);r=a.gt(e)?o>0?e:c:a}for(J=!1,a=new f(Fe(y)),l=f.precision,f.precision=o=y.length*H*2;m=we(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(r)!=1;)t=n,n=i,i=c,c=u.plus(m.times(i)),u=i,i=e,e=a.minus(m.times(i)),a=i;return i=we(r.minus(t),n,0,1,1),u=u.plus(i.times(c)),t=t.plus(i.times(n)),u.s=c.s=d.s,p=we(c,n,o,1).minus(d).abs().cmp(we(u,t,o,1).minus(d).abs())<1?[c,n]:[u,t],f.precision=l,J=!0,p};O.toHexadecimal=O.toHex=function(r,e){return Mi(this,16,r,e)};O.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:tt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(J=!1,t=we(t,r,0,e,1).times(r),J=!0,X(t)):(r.s=t.s,t=r),t};O.toNumber=function(){return+this};O.toOctal=function(r,e){return Mi(this,8,r,e)};O.toPower=O.pow=function(r){var e,t,n,i,o,s,a=this,u=a.constructor,c=+(r=new u(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new u(Oe(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,o=u.rounding,r.eq(1))return X(a,n,o);if(e=Ge(r.e/H),e>=r.d.length-1&&(t=c<0?-c:c)<=cc)return i=Rs(u,a,t,n),r.s<0?new u(1).div(i):X(i,n,o);if(s=a.s,s<0){if(e<r.d.length-1)return new u(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Oe(+a,c),e=t==0||!isFinite(t)?Ge(c*(Math.log("0."+Fe(a.d))/Math.LN10+a.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?s/0:0):(J=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),i=Oi(r.times(qt(a,n+t)),n),i.d&&(i=X(i,n+5,1),Vn(i.d,n,o)&&(e=n+10,i=X(Oi(r.times(qt(a,e+t)),e),e+5,1),+Fe(i.d).slice(n+1,n+15)+1==1e14&&(i=X(i,n+1,0)))),i.s=s,J=!0,u.rounding=o,X(i,n,o))};O.toPrecision=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=ht(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(tt(r,1,Gt),e===void 0?e=i.rounding:tt(e,0,8),n=X(new i(n),r,e),t=ht(n,r<=n.e||n.e<=i.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};O.toSignificantDigits=O.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(tt(r,1,Gt),e===void 0?e=n.rounding:tt(e,0,8)),X(new n(t),r,e)};O.toString=function(){var r=this,e=r.constructor,t=ht(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};O.truncated=O.trunc=function(){return X(new this.constructor(this),this.e+1,1)};O.valueOf=O.toJSON=function(){var r=this,e=r.constructor,t=ht(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function Fe(r){var e,t,n,i=r.length-1,o="",s=r[0];if(i>0){for(o+=s,e=1;e<i;e++)n=r[e]+"",t=H-n.length,t&&(o+=Dt(t)),o+=n;s=r[e],n=s+"",t=H-n.length,t&&(o+=Dt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function tt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Ut+r)}function Vn(r,e,t,n){var i,o,s,a;for(o=r[0];o>=10;o/=10)--e;return--e<0?(e+=H,i=0):(i=Math.ceil((e+1)/H),e%=H),o=Oe(10,H-e),a=r[i]%o|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==o||t>3&&a+1==o/2)&&(r[i+1]/o/100|0)==Oe(10,e-2)-1||(a==o/2||a==0)&&(r[i+1]/o/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==o||!n&&t>3&&a+1==o/2)&&(r[i+1]/o/1e3|0)==Oe(10,e-3)-1,s}function Rr(r,e,t){for(var n,i=[0],o,s=0,a=r.length;s<a;){for(o=i.length;o--;)i[o]*=e;for(i[0]+=Ci.indexOf(r.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function mc(r,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/Vr(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),r.precision+=t,e=wn(r,1,e.times(i),new r(1));for(var o=t;o--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var we=function(){function r(n,i,o){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*i+a,n[u]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function e(n,i,o,s){var a,u;if(o!=s)u=o>s?1:-1;else for(a=u=0;a<o;a++)if(n[a]!=i[a]){u=n[a]>i[a]?1:-1;break}return u}function t(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,u){var c,l,m,p,d,y,f,b,g,P,A,h,T,I,B,x,R,N,E,Q,W=n.constructor,j=n.s==i.s?1:-1,ee=n.d,se=i.d;if(!ee||!ee[0]||!se||!se[0])return new W(!n.s||!i.s||(ee?se&&ee[0]==se[0]:!se)?NaN:ee&&ee[0]==0||!se?j*0:j/0);for(u?(d=1,l=n.e-i.e):(u=bt,d=H,l=Ge(n.e/d)-Ge(i.e/d)),E=se.length,R=ee.length,g=new W(j),P=g.d=[],m=0;se[m]==(ee[m]||0);m++);if(se[m]>(ee[m]||0)&&l--,o==null?(I=o=W.precision,s=W.rounding):a?I=o+(n.e-i.e)+1:I=o,I<0)P.push(1),y=!0;else{if(I=I/d+2|0,m=0,E==1){for(p=0,se=se[0],I++;(m<R||p)&&I--;m++)B=p*u+(ee[m]||0),P[m]=B/se|0,p=B%se|0;y=p||m<R}else{for(p=u/(se[0]+1)|0,p>1&&(se=r(se,p,u),ee=r(ee,p,u),E=se.length,R=ee.length),x=E,A=ee.slice(0,E),h=A.length;h<E;)A[h++]=0;Q=se.slice(),Q.unshift(0),N=se[0],se[1]>=u/2&&++N;do p=0,c=e(se,A,E,h),c<0?(T=A[0],E!=h&&(T=T*u+(A[1]||0)),p=T/N|0,p>1?(p>=u&&(p=u-1),f=r(se,p,u),b=f.length,h=A.length,c=e(f,A,b,h),c==1&&(p--,t(f,E<b?Q:se,b,u))):(p==0&&(c=p=1),f=se.slice()),b=f.length,b<h&&f.unshift(0),t(A,f,h,u),c==-1&&(h=A.length,c=e(se,A,E,h),c<1&&(p++,t(A,E<h?Q:se,h,u))),h=A.length):c===0&&(p++,A=[0]),P[m++]=p,c&&A[0]?A[h++]=ee[x]||0:(A=[ee[x]],h=1);while((x++<R||A[0]!==void 0)&&I--);y=A[0]!==void 0}P[0]||P.shift()}if(d==1)g.e=l,Is=y;else{for(m=1,p=P[0];p>=10;p/=10)m++;g.e=m+l*d-1,X(g,a?o+g.e+1:o,s,y)}return g}}();function X(r,e,t,n){var i,o,s,a,u,c,l,m,p,d=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(i=1,a=m[0];a>=10;a/=10)i++;if(o=e-i,o<0)o+=H,s=e,l=m[p=0],u=l/Oe(10,i-s-1)%10|0;else if(p=Math.ceil((o+1)/H),a=m.length,p>=a)if(n){for(;a++<=p;)m.push(0);l=u=0,i=1,o%=H,s=o-H+1}else break e;else{for(l=a=m[p],i=1;a>=10;a/=10)i++;o%=H,s=o-H+i,u=s<0?0:l/Oe(10,i-s-1)%10|0}if(n=n||e<0||m[p+1]!==void 0||(s<0?l:l%Oe(10,i-s-1)),c=t<4?(u||n)&&(t==0||t==(r.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(o>0?s>0?l/Oe(10,i-s):0:m[p-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=r.e+1,m[0]=Oe(10,(H-e%H)%H),r.e=-e||0):m[0]=r.e=0,r;if(o==0?(m.length=p,a=1,p--):(m.length=p+1,a=Oe(10,H-o),m[p]=s>0?(l/Oe(10,i-s)%Oe(10,s)|0)*a:0),c)for(;;)if(p==0){for(o=1,s=m[0];s>=10;s/=10)o++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(r.e++,m[0]==bt&&(m[0]=1));break}else{if(m[p]+=a,m[p]!=bt)break;m[p--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return J&&(r.e>d.maxE?(r.d=null,r.e=NaN):r.e<d.minE&&(r.e=0,r.d=[0])),r}function ht(r,e,t){if(!r.isFinite())return Os(r);var n,i=r.e,o=Fe(r.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+Dt(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r.e<0?"e":"e+")+r.e):i<0?(o="0."+Dt(-i-1)+o,t&&(n=t-s)>0&&(o+=Dt(n))):i>=s?(o+=Dt(i+1-s),t&&(n=t-i-1)>0&&(o=o+"."+Dt(n))):((n=i+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+="."),o+=Dt(n))),o}function _r(r,e){var t=r[0];for(e*=H;t>=10;t/=10)e++;return e}function Nr(r,e,t){if(e>lc)throw J=!0,t&&(r.precision=t),Error(xs);return X(new r(Lr),e,1,!0)}function yt(r,e,t){if(e>Li)throw Error(xs);return X(new r(Or),e,t,!0)}function Cs(r){var e=r.length-1,t=e*H+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function Dt(r){for(var e="";r--;)e+="0";return e}function Rs(r,e,t,n){var i,o=new r(1),s=Math.ceil(n/H+4);for(J=!1;;){if(t%2&&(o=o.times(e),hs(o.d,s)&&(i=!0)),t=Ge(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}e=e.times(e),hs(e.d,s)}return J=!0,o}function ks(r){return r.d[r.d.length-1]&1}function Ls(r,e,t){for(var n,i=new r(e[0]),o=0;++o<e.length;)if(n=new r(e[o]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function Oi(r,e){var t,n,i,o,s,a,u,c=0,l=0,m=0,p=r.constructor,d=p.rounding,y=p.precision;if(!r.d||!r.d[0]||r.e>17)return new p(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(J=!1,u=y):u=e,a=new p(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Oe(2,m))/Math.LN10*2+5|0,u+=n,t=o=s=new p(1),p.precision=u;;){if(o=X(o.times(r),u,1),t=t.times(++l),a=s.plus(we(o,t,u,1)),Fe(a.d).slice(0,u)===Fe(s.d).slice(0,u)){for(i=m;i--;)s=X(s.times(s),u,1);if(e==null)if(c<3&&Vn(s.d,u-n,d,c))p.precision=u+=10,t=o=a=new p(1),l=0,c++;else return X(s,p.precision=y,d,J=!0);else return p.precision=y,s}s=a}}function qt(r,e){var t,n,i,o,s,a,u,c,l,m,p,d=1,y=10,f=r,b=f.d,g=f.constructor,P=g.rounding,A=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?(J=!1,l=A):l=e,g.precision=l+=y,t=Fe(b),n=t.charAt(0),Math.abs(o=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=Fe(f.d),n=t.charAt(0),d++;o=f.e,n>1?(f=new g("0."+t),o++):f=new g(n+"."+t.slice(1))}else return c=Nr(g,l+2,A).times(o+""),f=qt(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?X(f,A,P,J=!0):f;for(m=f,u=s=f=we(f.minus(1),f.plus(1),l,1),p=X(f.times(f),l,1),i=3;;){if(s=X(s.times(p),l,1),c=u.plus(we(s,new g(i),l,1)),Fe(c.d).slice(0,l)===Fe(u.d).slice(0,l))if(u=u.times(2),o!==0&&(u=u.plus(Nr(g,l+2,A).times(o+""))),u=we(u,new g(d),l,1),e==null)if(Vn(u.d,l-y,P,a))g.precision=l+=y,c=s=f=we(m.minus(1),m.plus(1),l,1),p=X(f.times(f),l,1),i=a=1;else return X(u,g.precision=A,P,J=!0);else return g.precision=A,u;u=c,i+=2}}function Os(r){return String(r.s*r.s/0)}function Ni(r,e){var t,n,i;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(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%H,t<0&&(n+=H),n<i){for(n&&r.d.push(+e.slice(0,n)),i-=H;n<i;)r.d.push(+e.slice(n,n+=H));e=e.slice(n),n=H-e.length}else n-=i;for(;n--;)e+="0";r.d.push(+e),J&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function dc(r,e){var t,n,i,o,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ks.test(e))return Ni(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(ac.test(e))t=16,e=e.toLowerCase();else if(sc.test(e))t=2;else if(uc.test(e))t=8;else throw Error(Ut+e);for(o=e.search(/p/i),o>0?(u=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),o=e.indexOf("."),s=o>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,o=a-o,i=Rs(n,new n(t),o,o*2)),c=Rr(e,t,bt),l=c.length-1,o=l;c[o]===0;--o)c.pop();return o<0?new n(r.s*0):(r.e=_r(c,l),r.d=c,J=!1,s&&(r=we(r,i,a*4)),u&&(r=r.times(Math.abs(u)<54?Oe(2,u):En.pow(2,u))),J=!0,r)}function pc(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:wn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Vr(5,t)),e=wn(r,2,e,e);for(var i,o=new r(5),s=new r(16),a=new r(20);t--;)i=e.times(e),e=e.times(o.plus(i.times(s.times(i).minus(a))));return e}function wn(r,e,t,n,i){var o,s,a,u,c=1,l=r.precision,m=Math.ceil(l/H);for(J=!1,u=t.times(t),a=new r(n);;){if(s=we(a.times(u),new r(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=we(s.times(u),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(o=m;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,c++}return J=!0,s.d.length=m+1,s}function Vr(r,e){for(var t=r;--e;)t*=r;return t}function Ns(r,e){var t,n=e.s<0,i=yt(r,r.precision,1),o=i.times(.5);if(e=e.abs(),e.lte(o))return Ot=n?4:1,e;if(t=e.divToInt(i),t.isZero())Ot=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(o))return Ot=ks(t)?n?2:3:n?4:1,e;Ot=ks(t)?n?1:4:n?3:2}return e.minus(i).abs()}function Mi(r,e,t,n){var i,o,s,a,u,c,l,m,p,d=r.constructor,y=t!==void 0;if(y?(tt(t,1,Gt),n===void 0?n=d.rounding:tt(n,0,8)):(t=d.precision,n=d.rounding),!r.isFinite())l=Os(r);else{for(l=ht(r),s=l.indexOf("."),y?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),p=new d(1),p.e=l.length-s,p.d=Rr(ht(p),10,i),p.e=p.d.length),m=Rr(l,10,i),o=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?o--:(r=new d(r),r.d=m,r.e=o,r=we(r,p,t,n,0,i),m=r.d,o=r.e,c=Is),s=m[t],a=i/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,c)for(;++m[--t]>i-1;)m[t]=0,t||(++o,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=Ci.charAt(m[s]);if(y){if(u>1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)l+="0";for(m=Rr(l,i,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=Ci.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)l="0"+l;l="0."+l}else if(++o>u)for(o-=u;o--;)l+="0";else o<u&&(l=l.slice(0,o)+"."+l.slice(o))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function hs(r,e){if(r.length>e)return r.length=e,!0}function fc(r){return new this(r).abs()}function yc(r){return new this(r).acos()}function bc(r){return new this(r).acosh()}function gc(r,e){return new this(r).plus(e)}function wc(r){return new this(r).asin()}function Ac(r){return new this(r).asinh()}function Pc(r){return new this(r).atan()}function kc(r){return new this(r).atanh()}function hc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,i=this.rounding,o=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=yt(this,o,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?yt(this,n,i):new this(0),t.s=r.s):!r.d||e.isZero()?(t=yt(this,o,1).times(.5),t.s=r.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(we(r,e,o,1)),e=yt(this,o,1),this.precision=n,this.rounding=i,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(we(r,e,o,1)),t}function Tc(r){return new this(r).cbrt()}function Ic(r){return X(r=new this(r),r.e+1,2)}function xc(r,e,t){return new this(r).clamp(e,t)}function Bc(r){if(!r||typeof r!="object")throw Error(Mr+"Object expected");var e,t,n,i=r.defaults===!0,o=["precision",1,Gt,"rounding",0,8,"toExpNeg",-gn,0,"toExpPos",0,gn,"maxE",0,gn,"minE",-gn,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],i&&(this[t]=Ri[t]),(n=r[t])!==void 0)if(Ge(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(Ut+t+": "+n);if(t="crypto",i&&(this[t]=Ri[t]),(n=r[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(Bs);else this[t]=!1;else throw Error(Ut+t+": "+n);return this}function Sc(r){return new this(r).cos()}function Kc(r){return new this(r).cosh()}function Ms(r){var e,t,n;function i(o){var s,a,u,c=this;if(!(c instanceof i))return new i(o);if(c.constructor=i,Ts(o)){c.s=o.s,J?!o.d||o.e>i.maxE?(c.e=NaN,c.d=null):o.e<i.minE?(c.e=0,c.d=[0]):(c.e=o.e,c.d=o.d.slice()):(c.e=o.e,c.d=o.d?o.d.slice():o.d);return}if(u=typeof o,u==="number"){if(o===0){c.s=1/o<0?-1:1,c.e=0,c.d=[0];return}if(o<0?(o=-o,c.s=-1):c.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;J?s>i.maxE?(c.e=NaN,c.d=null):s<i.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[o]):(c.e=s,c.d=[o]);return}else if(o*0!==0){o||(c.s=NaN),c.e=NaN,c.d=null;return}return Ni(c,o.toString())}else if(u!=="string")throw Error(Ut+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),c.s=-1):(a===43&&(o=o.slice(1)),c.s=1),Ks.test(o)?Ni(c,o):dc(c,o)}if(i.prototype=O,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Bc,i.clone=Ms,i.isDecimal=Ts,i.abs=fc,i.acos=yc,i.acosh=bc,i.add=gc,i.asin=wc,i.asinh=Ac,i.atan=Pc,i.atanh=kc,i.atan2=hc,i.cbrt=Tc,i.ceil=Ic,i.clamp=xc,i.cos=Sc,i.cosh=Kc,i.div=Cc,i.exp=Rc,i.floor=Lc,i.hypot=Oc,i.ln=Nc,i.log=Mc,i.log10=Vc,i.log2=_c,i.max=Ec,i.min=Fc,i.mod=vc,i.mul=Wc,i.pow=Dc,i.random=qc,i.round=Uc,i.sign=Gc,i.sin=Xc,i.sinh=zc,i.sqrt=Yc,i.sub=Qc,i.sum=Hc,i.tan=jc,i.tanh=Zc,i.trunc=$c,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return i.config(r),i}function Cc(r,e){return new this(r).div(e)}function Rc(r){return new this(r).exp()}function Lc(r){return X(r=new this(r),r.e+1,3)}function Oc(){var r,e,t=new this(0);for(J=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return J=!0,new this(1/0);t=e}return J=!0,t.sqrt()}function Ts(r){return r instanceof En||r&&r.toStringTag===Ss||!1}function Nc(r){return new this(r).ln()}function Mc(r,e){return new this(r).log(e)}function _c(r){return new this(r).log(2)}function Vc(r){return new this(r).log(10)}function Ec(){return Ls(this,arguments,"lt")}function Fc(){return Ls(this,arguments,"gt")}function vc(r,e){return new this(r).mod(e)}function Wc(r,e){return new this(r).mul(e)}function Dc(r,e){return new this(r).pow(e)}function qc(r){var e,t,n,i,o=0,s=new this(1),a=[];if(r===void 0?r=this.precision:tt(r,1,Gt),n=Math.ceil(r/H),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));o<n;)i=e[o],i>=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);o<n;)i=e[o]+(e[o+1]<<8)+(e[o+2]<<16)+((e[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(Bs);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],r%=H,n&&r&&(i=Oe(10,H-r),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=H)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<H&&(t-=H-n)}return s.e=t,s.d=a,s}function Uc(r){return X(r=new this(r),r.e+1,this.rounding)}function Gc(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Xc(r){return new this(r).sin()}function zc(r){return new this(r).sinh()}function Yc(r){return new this(r).sqrt()}function Qc(r,e){return new this(r).sub(e)}function Hc(){var r=0,e=arguments,t=new this(e[r]);for(J=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return J=!0,X(t,this.precision,this.rounding)}function jc(r){return new this(r).tan()}function Zc(r){return new this(r).tanh()}function $c(r){return X(r=new this(r),r.e+1,1)}O[Symbol.for("nodejs.util.inspect.custom")]=O.toString;O[Symbol.toStringTag]="Decimal";var En=O.constructor=Ms(Ri);Lr=new En(Lr);Or=new En(Or);var F=En;import{PublicKey as vi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Jc}from"@solana/spl-token";import{PublicKey as Ie,SystemProgram as _s,SYSVAR_RENT_PUBKEY as el}from"@solana/web3.js";function k({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var _i=[k({pubkey:Jc,isWritable:!1}),k({pubkey:_s.programId,isWritable:!1}),k({pubkey:el,isWritable:!1})];function Vi({publicKey:r,transformSol:e}){let t=Ei(r.toString());if(t instanceof Ie)return e&&t.equals(Ne)?te:t;if(e&&t.toString()===Ne.toBase58())return te;if(typeof t=="string"){if(t===Ie.default.toBase58())return Ie.default;try{return new Ie(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Ei(r){try{return new Ie(r)}catch{return r}}var An=new Ie("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Vs=new Ie("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),nt=new Ie("SysvarRent111111111111111111111111111111111"),Fi=new Ie("SysvarC1ock11111111111111111111111111111111"),Pn=new Ie("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Er=new Ie("Sysvar1nstructions1111111111111111111111111"),Es=_s.programId,Jp=new Ie("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ef=new Ie("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),tf=new Ie("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),nf=new Ie("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),rf=new Ie("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),of=new Ie("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),sf=new Ie("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),af=new Ie("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),uf=new Ie("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),cf=new Ie("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),lf=new Ie("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),te=new Ie("So11111111111111111111111111111111111111112"),Ne=Ie.default;function kn(r){return Vi({publicKey:r,transformSol:!0})}import{PublicKey as tl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fs}from"@solana/spl-token";var Tt={chainId:101,address:tl.default.toBase58(),programId:Fs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Me={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Fs.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};var Wi=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:o=!1,isToken2022:s=!1}){if(e===Ne.toBase58()||e instanceof vi&&Ne.equals(e)){this.decimals=Me.decimals,this.symbol=Me.symbol,this.name=Me.name,this.mint=new vi(Me.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=o?vi.default:Vi({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},de=Wi;de.WSOL=new Wi(D(M({},Me),{mint:Me.address}));import vr from"big.js";import il from"bn.js";import ol from"decimal.js-light";import nl from"toformat";var rl=nl,Fn=rl;var Fr=ae("module/fraction"),Di=Fn(vr),vn=Fn(ol),sl={[0]:vn.ROUND_DOWN,[1]:vn.ROUND_HALF_UP,[2]:vn.ROUND_UP},al={[0]:vr.roundDown,[1]:vr.roundHalfUp,[2]:vr.roundUp},ne=class{constructor(e,t=new il(1)){this.numerator=U(e),this.denominator=U(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new ne(this.denominator,this.numerator)}add(e){let t=e instanceof ne?e:new ne(U(e));return this.denominator.eq(t.denominator)?new ne(this.numerator.add(t.numerator),this.denominator):new ne(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof ne?e:new ne(U(e));return this.denominator.eq(t.denominator)?new ne(this.numerator.sub(t.numerator),this.denominator):new ne(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof ne?e:new ne(U(e));return new ne(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof ne?e:new ne(U(e));return new ne(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Fr.logWithError(`${e} is not an integer.`),e<=0&&Fr.logWithError(`${e} is not positive.`),vn.set({precision:e+1,rounding:sl[n]});let i=new vn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Fr.logWithError(`${e} is not an integer.`),e<0&&Fr.logWithError(`${e} is negative.`),Di.DP=e,Di.RM=al[n]||1,new Di(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var ul=ae("Raydium_price"),Xe=class extends ne{constructor(t){let{baseToken:n,quoteToken:i,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=i,this.scalar=new ne(Ui(n.decimals),Ui(i.decimals))}get raw(){return new ne(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Xe({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&ul.logWithError("mul token not equals");let n=super.mul(t);return new Xe({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};var Gi=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Wn=Gi;Wn.SOL=new Gi(Tt);function vf(r,e){return r instanceof de&&e instanceof de?r.equals(e):r instanceof de||e instanceof de?!1:r===e}import cl from"bn.js";var vs=new ne(new cl(100)),ve=class extends ne{toSignificant(e=5,t,n){return this.mul(vs).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(vs).toFixed(e,t,n)}};function Ke(r){if(r instanceof ve)return new ne(r.numerator,r.denominator);if(r instanceof Xe)return r.adjusted;if(r instanceof he)try{return Ke(r.toExact())}catch{return new ne(Se)}if(r instanceof ne)return r;let e=String(r),t=tn(e);return new ne(t.numerator,t.denominator)}function Yf(r){var n;if(r instanceof ve)return{fr:new ne(r.numerator,r.denominator)};if(r instanceof Xe)return{fr:r.adjusted};if(r instanceof he)return{fr:Ke(r.toExact()),decimals:r.token.decimals};if(r instanceof ne)return{fr:r};let e=String(r),t=tn(e);return{fr:new ne(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function Qf(r,e){if(r==null||e==null)return!1;let t=Ke(r),n=Ke(e);return t.sub(n).numerator,t.sub(n).numerator.lt(Se)}function ll(r,e){if(r==null||e==null)return!1;let t=Ke(r),n=Ke(e);return t.sub(n).numerator.gt(Se)}function Hf(r,e){if(r==null||e==null)return!1;let t=Ke(r),n=Ke(e);return t.sub(n).numerator.lte(Se)}function jf(r,e){if(r==null||e==null)return!1;let t=Ke(r),n=Ke(e);return t.sub(n).numerator.gte(Se)}function ml(r,e){if(r==null||e==null)return!1;let t=Ke(r),n=Ke(e);return t.sub(n).numerator.eq(Se)}function Zf(r,e){if(r==null||e==null)return;let t=Ke(r),n=Ke(e);try{return t.div(n)}catch{return t}}function $f(r,e){if(r==null||e==null)return;let t=Ke(r),n=Ke(e);return t.sub(n)}function Jf(r){return r==null?!1:!ml(r,0)}function ey(r,e){return ll(e,r)?e:r}function Xi(r,e){if(r==null||e==null)return;let t=Ke(r),n=Ke(e);return t.mul(n)}function ty(r,e){if(r==null||e==null)return;let t=Ke(r),n=Ke(e);return t.add(n)}var qi=(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))(qi||{}),Se=new Pe(0),Us=new Pe(1),fy=new Pe(2),yy=new Pe(3),by=new Pe(5),nn=new Pe(10),gy=new Pe(100),wy=new Pe(1e3),Ay=new Pe(1e4),Ws=9007199254740991;function U(r){let e=ae("Raydium_parseBigNumberish");if(r instanceof Pe)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new Pe(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Ws||r<=-Ws)&&e.logWithError(`BigNumberish number overflow: ${r}`),new Pe(String(r))):typeof r=="bigint"?new Pe(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new Pe(0))}function Ui(r){return nn.pow(U(r))}function tn(r){var a;if(r===void 0)return{denominator:"1",numerator:"0"};if(r instanceof Pe)return{numerator:r.toString(),denominator:"1"};if(r instanceof ne)return{denominator:r.denominator.toString(),numerator:r.numerator.toString()};let e=String(r),[,t="",n="",i=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],o="1"+"0".repeat(i.length),s=t+(n==="0"?"":n)+i||"0";return{denominator:o,numerator:s,sign:t,int:n,dec:i}}function Wr(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function dl(r){var n;let[,e="",t=""]=(n=r.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function pl(r,e=0){return r instanceof Pe?r:new Pe(dl(Gs(r).mul(nn.pow(new Pe(String(e))))))}function Gs(r){if(r instanceof ve)return new ne(r.numerator,r.denominator);if(r instanceof Xe)return r.adjusted;if(r instanceof he)try{return Gs(r.toExact())}catch{return new ne(Se)}if(r instanceof ne)return r;let e=String(r),t=tn(e);return new ne(t.numerator,t.denominator)}function Py(r,e){let{numerator:t,denominator:n}=tn(r);return new ve(new Pe(t),new Pe(n).mul(e!=null&&e.alreadyDecimaled?new Pe(100):new Pe(1)))}function ky(r){let{token:e,numberPrice:t,decimalDone:n}=r,i=new de({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:o,denominator:s}=tn(t),a=n?new Pe(o).mul(nn.pow(new Pe(e.decimals))):o,u=new Pe(s).mul(nn.pow(new Pe(i.decimals)));return new Xe({baseToken:i,denominator:u.toString(),quoteToken:new de(D(M({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function Ds(r){let e=new Wn({decimals:6,symbol:"usd",name:"usd"}),t=pl(Xi(r,10**e.decimals));return new rn(e,t)}function hy(r,e){return Ds(!e||!r?0:Xi(r,e))}function fl(r){if(r==null)return;let{numerator:e,denominator:t}=tn(r.toString());return new ne(e,t)}function yl(r){return r instanceof F}function qs(r){return yl(r)?fl(r):Array.isArray(r)?r.map(e=>qs(e)):zi(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,qs(t)])):r}var gl=ae("Raydium_amount"),Dr=Fn(bl);function Xs(r,e){let t="0",n="0";if(r.includes(".")){let i=r.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):gl.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var he=class extends ne{constructor(t,n,i=!0,o){let s=new Xt(0),a=nn.pow(new Xt(t.decimals));if(i)s=U(n);else{let u=new Xt(0),c=new Xt(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Xs(n.toString(),t.decimals);u=U(l),c=U(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=ae(o||"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 he(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new he(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Dr.DP=this.token.decimals,new Dr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},rn=class extends ne{constructor(t,n,i=!0,o){let s=new Xt(0),a=nn.pow(new Xt(t.decimals));if(i)s=U(n);else{let u=new Xt(0),c=new Xt(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Xs(n.toString(),t.decimals);u=U(l),c=U(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=ae(o||"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 rn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new rn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.currency.decimals,n,i=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Dr.DP=this.currency.decimals,new Dr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};async function zs(r){new Promise(e=>setTimeout(e,r))}function zy(){return new Date().getTime()}function zi(r){return typeof r=="object"&&r!==null&&![de,he,wl,ne,Al,Xe,ve].some(e=>typeof e=="object"&&r instanceof e)}function fe(r){return typeof r=="string"?Ei(r):Array.isArray(r)?r.map(e=>fe(e)):zi(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,fe(t)])):r}import{PublicKey as Gn,sendAndConfirmTransaction as ji,Transaction as Xn,TransactionMessage as zn,VersionedTransaction as Yn}from"@solana/web3.js";import Kl from"axios";var Dn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(Dn||{}),V={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",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",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"};import{PublicKey as Qs,ComputeBudgetProgram as Ys,Transaction as Ur,TransactionMessage as Pl,Keypair as Hs,VersionedTransaction as js}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as kl}from"@solana/spl-token";var Nt=ae("Raydium_txUtil"),Zs=1644;function Gr(r){let e=[],t=[];return r.microLamports&&(e.push(Ys.setComputeUnitPrice({microLamports:r.microLamports})),t.push(V.SetComputeUnitPrice)),r.units&&(e.push(Ys.setComputeUnitLimit({units:r.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function hn(r){var e,t;try{return((t=await((e=r.getLatestBlockhash)==null?void 0:e.call(r)))==null?void 0:t.blockhash)||(await r.getRecentBlockhash()).blockhash}catch{return(await r.getRecentBlockhash()).blockhash}}function Xr(r,e){r.length<1&&Nt.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Nt.logWithError(`no signers provided:, ${e.toString()}`);let t=new Ur;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Zs}catch{return!1}}async function $s(r,e,t,n=!0){let i=new Qs("RaydiumSimuLateTransaction11111111111111111"),o=[],s=new Ur;s.feePayer=i;for(let c of e)Xr([...s.instructions,c],[i])||(o.push(s),s=new Ur,s.feePayer=i),s.add(c);s.instructions.length>0&&o.push(s);let a=[];try{if(a=await hl(r,o,n),a.find(c=>c.err!==null))throw Error("rpc simulateTransaction error")}catch(c){c instanceof Error&&Nt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:c.message})}let u=[];for(let c of a)if(Nt.debug("simulate result:",c),c.logs){let l=c.logs.filter(m=>m&&m.includes(t));Nt.debug("filteredLog:",u),l.length||Nt.logWithError("simulate log not match keyword","keyword",t),u.push(...l)}return u}function Js(r,e){let t=r.match(/{["\w:,]+}/g);return!t||t.length!==1?Nt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Mt(r,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(r);return!n||n.length!==2?Nt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function oe(r,e){let[t,n]=Qs.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}async function hl(r,e,t){let n=[];if(t){let i=await r.getLatestBlockhash(),o=[];for(let c of e){c.recentBlockhash=i.blockhash,c.lastValidBlockHeight=i.lastValidBlockHeight;let m=c._compile().serialize(),d=c._serialize(m).toString("base64");o.push(d)}let s=o.map(c=>{let l=r._buildArgs([c],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],u=20;for(let c=0;c<Math.ceil(s.length/u);c++)a.push(s.slice(c*u,(c+1)*u));n=await(await Promise.all(a.map(async c=>(await r._rpcBatchRequest(c)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async i=>await(await r.simulateTransaction(i)).value))}catch(i){i instanceof Error&&Nt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:i.message})}return n}function qn({instructions:r,payer:e,signers:t}){return Xr(r,[e,...t])}function Un({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Hs.generate().publicKey.toString()}){let o=new Pl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new js(o).serialize()).toString("base64").length<Zs}catch{return!1}}var qr={time:0,data:void 0};async function rb(r){if(!qr.data||(Date.now()-qr.time)/1e3>30){let e=await r.getEpochInfo();return qr={time:Date.now(),data:e},e}else return qr.data}var Tl=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r);function on(r){let e=[];return r.forEach(t=>{t instanceof Ur&&(t.recentBlockhash||(t.recentBlockhash=kl.toBase58()),t.feePayer||(t.feePayer=Hs.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof js&&(n=Tl(n));let i=n.toString("base64");e.push(i)}),console.log("simulate tx string:",e),e}import{PublicKey as ea,AddressLookupTableAccount as zr}from"@solana/web3.js";import{PublicKey as Il}from"@solana/web3.js";import{getTransferFeeConfig as xl,unpackMint as Bl}from"@solana/spl-token";var Yi=ae("Raydium_accountInfo_util");async function It(r,e,t){let{batchRequest:n,commitment:i="confirmed"}=M({batchRequest:!1},t),o=Qi(e,100),s=new Array(o.length).fill([]);if(n){let a=o.map(l=>{let m=r._buildArgs([l.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:m}}),u=Qi(a,10);s=(await(await Promise.all(u.map(async l=>await r._rpcBatchRequest(l)))).flat()).map(l=>(l.error&&Yi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${l.error.message}`),l.result.value.map(m=>{if(m){let{data:p,executable:d,lamports:y,owner:f,rentEpoch:b}=m;return p.length!==2&&p[1]!=="base64"&&Yi.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:d,lamports:y,owner:new Il(f),rentEpoch:b}}return null})))}else try{s=await Promise.all(o.map(a=>r.getMultipleAccountsInfo(a,i)))}catch(a){a instanceof Error&&Yi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${a.message}`)}return s.flat()}async function Tn(r,e,t){let n=await It(r,e.map(i=>i.pubkey),t);return e.map((i,o)=>D(M({},i),{accountInfo:n[o]}))}var Sl=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(Sl||{}),db=1;async function pb({connection:r,mints:e}){var i,o;if(e.length===0)return{};let t=await Tn(r,e.map(s=>({pubkey:s}))),n={};for(let s of t){let a=Bl(s.pubkey,s.accountInfo,(i=s.accountInfo)==null?void 0:i.owner);n[s.pubkey.toString()]=D(M({},a),{feeConfig:(o=xl(a))!=null?o:void 0})}return n}async function Hi({connection:r,address:e}){let t=await It(r,[...new Set(e.map(i=>i.toString()))].map(i=>new ea(i))),n={};for(let i=0;i<e.length;i++){let o=t[i],s=e[i];if(!o)continue;let a=new zr({key:s,state:zr.deserialize(o.data)});n[s.toString()]=a,Yr[s.toString()]=a}return n}var Yr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new zr({key:new ea("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:zr.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"))})};var Qr=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}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 Kl.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}=Gr(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:i=[],endInstructionTypes:o=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...o),this.lookupTableAddress.push(...s.filter(a=>a!==Gn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(M({},t||{})):this.build(t)}build(e){let t=new Xn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async n=>{var a;let{recentBlockHash:i,skipPreflight:o=!0}=n||{},s=i!=null?i:await hn(this.connection);if(t.recentBlockhash=s,this.signers.length&&t.sign(...this.signers),on([t]),(a=this.owner)!=null&&a.isKeyPair)return{txId:await ji(this.connection,t,this.signers.find(u=>u.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:o}),signedTx:t};if(this.signAllTransactions){let u=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(u[0].serialize(),{skipPreflight:o}),signedTx:u[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),o=t.filter(c=>c.transaction.instructions.length>0),s=[i,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async c=>{var f;let{sequentially:l,onTxUpdate:m,recentBlockHash:p,skipPreflight:d=!0}=c||{},y=p!=null?p:await hn(this.connection);if((f=this.owner)!=null&&f.isKeyPair)return{txIds:await await Promise.all(s.map(async(b,g)=>(b.recentBlockhash=y,await ji(this.connection,b,a[g].find(P=>P.publicKey.equals(this.owner.publicKey))?a[g]:[...a[g],this.owner.signer],{skipPreflight:d})))),signedTxs:s};if(this.signAllTransactions){let b=s.map((P,A)=>(P.recentBlockhash=y,a[A].length&&P.sign(...a[A]),P));on(b);let g=await this.signAllTransactions(b);if(l){let P=0,A=[],h=async()=>{if(!g[P])return;let T=await this.connection.sendRawTransaction(g[P].serialize(),{skipPreflight:d});A.push({txId:T,status:"sent",signedTx:g[P]}),m==null||m([...A]),P++,this.connection.onSignature(T,I=>{let B=A.findIndex(x=>x.txId===T);B>-1&&(A[B].status=I.err?"error":"success"),m==null||m([...A]),I.err||h()},"processed"),this.connection.getSignatureStatus(T)};return await h(),{txIds:A.map(T=>T.txId),signedTxs:g}}else{let P=[];for(let A=0;A<g.length;A+=1){let h=await this.connection.sendRawTransaction(g[A].serialize(),{skipPreflight:d});P.push(h)}return{txIds:P,signedTxs:g}}}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){let p=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i}=p,o=Te(p,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=M(M({},this.cluster==="devnet"?{}:Yr),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let d of a)s[d]===void 0&&u.push(new Gn(d));let c=await Hi({connection:this.connection,address:u});for(let[d,y]of Object.entries(c))s[d]=y;let l=new zn({payerKey:this.feePayer,recentBlockhash:i?Gn.default.toBase58():await hn(this.connection),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s)),m=new Yn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async d=>{var b;let{recentBlockHash:y,skipPreflight:f=!0}=d||{};if(y&&(m.message.recentBlockhash=y),on([m]),(b=this.owner)!=null&&b.isKeyPair){this.signers.find(h=>h.publicKey.equals(this.owner.publicKey))||m.sign([this.owner.signer]);let g=await this.connection.sendTransaction(m,{skipPreflight:f}),{lastValidBlockHeight:P,blockhash:A}=await this.connection.getLatestBlockhash();return await this.connection.confirmTransaction({blockhash:A,lastValidBlockHeight:P,signature:g},"confirmed"),{txId:g,signedTx:m}}if(this.signAllTransactions){let g=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(g[0],{skipPreflight:f}),signedTx:g[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async buildV0MultiTx(e){let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),o=t.filter(c=>c.builder.instructions.length>0),s=[i,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return s.forEach(async(c,l)=>{c.sign(a[l])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async c=>{var y;let{sequentially:l,onTxUpdate:m,recentBlockHash:p,skipPreflight:d=!0}=c||{};if(p&&s.forEach(f=>f.message.recentBlockhash=p),on(s),(y=this.owner)!=null&&y.isKeyPair){let{lastValidBlockHeight:f,blockhash:b}=await this.connection.getLatestBlockhash();return s.forEach((g,P)=>{a[P].find(A=>A.publicKey.equals(this.owner.publicKey))||g.sign([this.owner.signer])}),{txIds:await Promise.all(s.map(async g=>{let P=await this.connection.sendTransaction(g,{skipPreflight:d});return await this.connection.confirmTransaction({blockhash:b,lastValidBlockHeight:f,signature:P},"confirmed"),P})),signedTxs:s}}if(this.signAllTransactions){let f=await this.signAllTransactions(s);if(l){let b=0,g=[],P=async()=>{if(!f[b])return;let A=await this.connection.sendTransaction(f[b],{skipPreflight:d});g.push({txId:A,status:"sent",signedTx:f[b]}),m==null||m([...g]),b++,this.connection.onSignature(A,h=>{let T=g.findIndex(I=>I.txId===A);T>-1&&(g[T].status=h.err?"error":"success"),m==null||m([...g]),h.err||P()},"processed"),this.connection.getSignatureStatus(A)};return P(),{txIds:[],signedTxs:f}}else{let b=[];for(let g=0;g<f.length;g+=1){let P=await this.connection.sendTransaction(f[g],{skipPreflight:d});b.push(P)}return{txIds:b,signedTxs:f}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){let c=e||{},{computeBudgetConfig:t}=c,n=Te(c,["computeBudgetConfig"]),i=t?Gr(t):{instructions:[],instructionTypes:[]},o=this.signers.reduce((l,m)=>D(M({},l),{[m.publicKey.toBase58()]:m}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(l=>{let m=[...u,l],p=t?[...i.instructions,...m]:m,y=[...new Set(m.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>new Gn(f));if(u.length<12&&qn({instructions:p,payer:this.feePayer,signers:y})||qn({instructions:m,payer:this.feePayer,signers:y}))u.push(l);else{if(u.length===0)throw Error("item ins too big");qn({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:y})?s.push(new Xn().add(...i.instructions,...u)):s.push(new Xn().add(...u)),a.push(Array.from(new Set(u.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat())).map(f=>o[f]).filter(f=>f!==void 0)),u=[l]}}),u.length>0){let m=[...new Set(u.map(p=>p.keys.filter(d=>d.isSigner).map(d=>d.pubkey.toString())).flat()).values()].map(p=>o[p]).filter(p=>p!==void 0);qn({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:m.map(p=>p.publicKey)})?s.push(new Xn().add(...i.instructions,...u)):s.push(new Xn().add(...u)),a.push(m)}return s.forEach(l=>l.feePayer=this.feePayer),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async l=>{var b;let{sequentially:m,onTxUpdate:p,recentBlockHash:d,skipPreflight:y=!0}=l||{},f=d!=null?d:await hn(this.connection);if(s.forEach(async(g,P)=>{g.recentBlockhash=f,a[P].length&&g.sign(...a[P])}),on(s),(b=this.owner)!=null&&b.isKeyPair)return{txIds:await Promise.all(s.map(async(g,P)=>await ji(this.connection,g,a[P].find(A=>A.publicKey.equals(this.owner.publicKey))?a[P]:[...a[P],this.owner.signer],{skipPreflight:y}))),signedTxs:s};if(this.signAllTransactions){let g=await this.signAllTransactions(s);if(m){let P=0,A=[],h=async()=>{if(!g[P])return;let T=await this.connection.sendRawTransaction(g[P].serialize(),{skipPreflight:y});A.push({txId:T,status:"sent",signedTx:g[P]}),p==null||p([...A]),P++,this.connection.onSignature(T,I=>{let B=A.findIndex(x=>x.txId===T);B>-1&&(A[B].status=I.err?"error":"success"),p==null||p([...A]),I.err||h()},"processed"),this.connection.getSignatureStatus(T)};return await h(),{txIds:A.map(T=>T.txId),signedTxs:g}}else{let P=[];for(let A=0;A<g.length;A+=1){let h=await this.connection.sendRawTransaction(g[A].serialize(),{skipPreflight:y});P.push(h)}return{txIds:P,signedTxs:g}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:i=[]}=b,o=Te(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=M(M({},this.cluster==="devnet"?{}:Yr),n),a=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let g of a)s[g]===void 0&&u.push(new Gn(g));let c=await Hi({connection:this.connection,address:u});for(let[g,P]of Object.entries(c))s[g]=P;let l=t?Gr(t):{instructions:[],instructionTypes:[]},m=await hn(this.connection),p=this.signers.reduce((g,P)=>D(M({},g),{[P.publicKey.toBase58()]:P}),{}),d=[],y=[],f=[];if(this.allInstructions.forEach(g=>{let P=[...f,g],A=t?[...l.instructions,...P]:P;if(f.length<12&&Un({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s})||Un({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(g);else{if(f.length===0)throw Error("item ins too big");let h={};for(let T of[...new Set(a)])s[T]!==void 0&&(h[T]=s[T]);if(t&&Un({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new zn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));d.push(new Yn(T))}else{let T=new zn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));d.push(new Yn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(T=>p[T]).filter(T=>T!==void 0)),f=[g]}}),f.length>0){let P=[...new Set(f.map(A=>A.keys.filter(h=>h.isSigner).map(h=>h.pubkey.toString())).flat()).values()].map(A=>p[A]).filter(A=>A!==void 0);if(t&&Un({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let A=new zn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));d.push(new Yn(A))}else{let A=new zn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));d.push(new Yn(A))}y.push(P)}return{builder:this,transactions:d,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async g=>{var I;let{sequentially:P,onTxUpdate:A,recentBlockHash:h,skipPreflight:T=!0}=g||{};if(d.map(async(B,x)=>{y[x].length&&B.sign(y[x]),h&&(B.message.recentBlockhash=h)}),on(d),(I=this.owner)!=null&&I.isKeyPair){let{lastValidBlockHeight:B,blockhash:x}=await this.connection.getLatestBlockhash();return d.forEach((R,N)=>{y[N].find(E=>E.publicKey.equals(this.owner.publicKey))||R.sign([this.owner.signer])}),{txIds:await Promise.all(d.map(async R=>{let N=await this.connection.sendTransaction(R,{skipPreflight:T});return await this.connection.confirmTransaction({blockhash:x,lastValidBlockHeight:B,signature:N},"confirmed"),N})),signedTxs:d}}if(this.signAllTransactions){let B=await this.signAllTransactions(d);if(P){let x=0,R=[],N=async()=>{if(!B[x])return;let E=await this.connection.sendTransaction(B[x],{skipPreflight:T});R.push({txId:E,status:"sent",signedTx:B[x]}),A==null||A([...R]),x++,this.connection.onSignature(E,Q=>{let W=R.findIndex(j=>j.txId===E);W>-1&&(R[W].status=Q.err?"error":"success"),A==null||A([...R]),Q.err||N()},"processed"),this.connection.getSignatureStatus(E)};return N(),{txIds:[],signedTxs:B}}else{let x=[];for(let R=0;R<B.length;R+=1){let N=await this.connection.sendTransaction(B[R],{skipPreflight:T});x.push(N)}return{txIds:x,signedTxs:B}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}};var gt=class{constructor(e){this._owner=e}get publicKey(){return gt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return gt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return gt.isKeyPair(this._owner)}get isPublicKey(){return gt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!gt.isKeyPair(e)}};function Qi(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function Rb(r,...e){return r.filter(t=>e.every(n=>n.includes(t)))}function Lb(r,...e){return r.filter(t=>e.every(n=>!n.includes(t)))}function Ob(r){return[...new Set(r)]}var ta=r=>typeof r=="number",na=r=>r?new Date(r):new Date,Cl=r=>na(r).getTime();function ra(r,e,t){let n=ta(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()<=n}function ia(r,e,t){let n=ta(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()>n}function Mb(r,e){let n=Cl(r)+(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 na(n)}import{PublicKey as Re}from"@solana/web3.js";var Zi=new Re("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),$i=new Re("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),In=new Re("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Rl=new Re("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Ll=new Re("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Hr=new Re("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Ji=new Re("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Ol=new Re("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Nl=new Re("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Ml=new Re("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),_l=new Re("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Vl=new Re("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),El=new Re("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Fl=new Re("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),vl=new Re("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Wl=new Re("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Dl=new Re("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Eb=new Re("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Fb=new Re("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),vb=new Re("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Qn={IDO_PROGRAM_ID_V1:_l,IDO_PROGRAM_ID_V2:Vl,IDO_PROGRAM_ID_V3:El,IDO_PROGRAM_ID_V4:Fl},Wb={AMM_V4:Ji,AMM_STABLE:Ol,CLMM_PROGRAM_ID:Nl,FARM_PROGRAM_ID_V3:Zi,FARM_PROGRAM_ID_V5:$i,FARM_PROGRAM_ID_V6:In,OPEN_BOOK_PROGRAM:Ll,SERUM_PROGRAM_ID_V3:Hr,UTIL1216:Rl,Router:Ml,CREATE_CPMM_POOL_PROGRAM:vl,CREATE_CPMM_POOL_AUTH:Wl,CREATE_CPMM_POOL_FEE_ACC:Dl};import{PublicKey as ql}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ul}from"@solana/spl-token";function ye(r,e,t){return oe([r.toBuffer(),(t!=null?t:Ul).toBuffer(),e.toBuffer()],new ql("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Le from"bn.js";var xt=1e4;function Yb(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,o=new Le(i.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===xt){let a=new Le(i.maximumFee.toString());return{amount:r.add(a),fee:a,expirationTime:s}}else{let a=zt(r.mul(new Le(xt)),new Le(xt-i.transferFeeBasisPoints)),u=new Le(i.maximumFee.toString()),c=a.sub(r).gt(u)?r.add(u):a,l=zt(c.mul(new Le(i.transferFeeBasisPoints)),new Le(xt)),m=l.gt(o)?o:l;return{amount:c,fee:m,expirationTime:s}}else{let a=zt(r.mul(new Le(i.transferFeeBasisPoints)),new Le(xt)),u=a.gt(o)?o:a;return{amount:r,fee:u,expirationTime:s}}}function Ae(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=D(M({},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}}),o=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Le(o.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===xt){let u=new Le(o.maximumFee.toString());return{amount:r.add(u),fee:u,expirationTime:a}}else{let u=zt(r.mul(new Le(xt)),new Le(xt-o.transferFeeBasisPoints)),c=new Le(o.maximumFee.toString()),l=u.sub(r).gt(c)?r.add(c):u,m=zt(l.mul(new Le(o.transferFeeBasisPoints)),new Le(xt)),p=m.gt(s)?s:m;return{amount:l,fee:p,expirationTime:a}}else{let u=zt(r.mul(new Le(o.transferFeeBasisPoints)),new Le(xt)),c=u.gt(s)?s:u;return{amount:r,fee:c,expirationTime:a}}}function sn(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function zt(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Le(0))?t.add(new Le(1)):t}var eo=(t=>(t.ALL="all",t.Strict="strict",t))(eo||{}),oa=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(oa||{});var We={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-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://token.jup.ag/{type}",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}",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"},pg=M({},We);var sa="ray_tab_hash",to="ray_req_hash",Gl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(sa);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(sa,r)),r},jr=async n=>{var i=n,{logCount:r=1e3,removeLastLog:e}=i,t=Te(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(to)||"[]").slice(0,r-1);e&&o.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),o.unshift(D(M({},t),{time:Date.now(),session:Gl()}));try{localStorage.setItem(to,JSON.stringify(o))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(o[0].data=a+(a.length>100?"...":"");!s;){o.pop();let u=JSON.stringify(t.data).substring(0,100);o[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(to,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(u=>u())}return jr(D(M({},t),{logCount:r,removeLastLog:!0}))}};var xn=ae("Raydium_Api"),no=new Map;async function Ng(r,e,t=1e3){let n;for(;n==null;)try{xn.debug(`Request ${r} through endlessRetry`),n=await e()}catch(i){xn.error(`Request ${r} failed, retry after ${t} ms`,i),await zs(t)}return n}var Zr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=i||1e3,this.api=Xl.create({baseURL:this.urlConfigs.BASE_HOST||We.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return xn.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(xn.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:u,status:c}=s,{method:l,baseURL:m,url:p}=a;return n&&jr({status:c,url:`${m}${p}`,params:a.params,data:u,logCount:this.logCount}),xn.debug(`${l==null?void 0:l.toUpperCase()} ${m}${p} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:p}=a;return n&&jr({status:c,url:`${m}${p}`,params:a.params,data:s.message,logCount:this.logCount}),xn.error(`${l.toUpperCase()} ${m}${p} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||We.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||We.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await this.api.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,o)=>i+o,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||We.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||We.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||We.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||We.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||We.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:o=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||We.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${o}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||We.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>no.has(s)?(n.push(no.get(s)),!1):!0),o=[];return i.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||We.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),o.forEach(a=>{no.set(a.id,a)})),n.concat(o)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:o="default",order:s="desc",page:a=1}=e,[u,c]=[t&&kn(t).toBase58(),n&&n!=="undefined"?kn(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return console.log(123123555,`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`),(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||We.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||We.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||We.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||We.CHECK_AVAILABILITY)).data}};import{merge as Fp}from"lodash";var $r="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",aa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as go,TOKEN_PROGRAM_ID as jt,AccountLayout as Sn,TOKEN_2022_PROGRAM_ID as td}from"@solana/spl-token";import{PublicKey as oi,SystemProgram as nd}from"@solana/web3.js";var ro=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),xe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ae(t)}createTxBuilder(e){return this.scope.checkOwner(),new Qr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(ro(e))}logInfo(...e){this.logger.info(ro(e))}logAndCreateError(...e){let t=ro(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Hm,createCloseAccountInstruction as jm,createTransferInstruction as Zm,TOKEN_PROGRAM_ID as Bn}from"@solana/spl-token";import{PublicKey as $m,SystemProgram as Jm}from"@solana/web3.js";import ed from"bn.js";import{PublicKey as Ta,Keypair as Xm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as zm}from"@solana/spl-token";import Ym from"bn.js";import{PublicKey as Em}from"@solana/web3.js";import fa,{isBN as ya}from"bn.js";import{bits as zl,BitStructure as Yl,blob as Ql,Blob as Hl,cstr as jl,f32 as Zl,f32be as $l,f64 as Jl,f64be as em,greedy as tm,Layout as nm,ns64 as rm,ns64be as im,nu64 as om,nu64be as sm,offset as am,s16 as um,s16be as cm,s24 as lm,s24be as mm,s32 as dm,s32be as pm,s40 as fm,s40be as ym,s48 as bm,s48be as gm,s8 as wm,seq as Am,struct as zg,Structure as Pm,u16 as km,u16be as hm,u24 as Tm,u24be as Im,u32 as xm,u32be as Bm,u40 as Sm,u40be as Km,u48 as Cm,u48be as Rm,u8 as Lm,UInt as Om,union as Nm,Union as Mm,unionLayoutDiscriminator as _m,utf8 as Vm}from"@solana/buffer-layout";var Hn=nm,ua=Pm,ca=Mm,Yg=Yl,io=Om,la=Hl,Qg=tm,Jr=Lm,Bt=km,Hg=Tm,jn=xm,jg=Sm,Zg=Cm,ma=om,$g=hm,Jg=Im,ew=Bm,tw=Km,nw=Rm,rw=sm,iw=wm,ow=um,sw=lm,De=dm,aw=fm,uw=bm,cw=rm,lw=cm,mw=mm,dw=pm,pw=ym,fw=gm,yw=im,bw=Zl,gw=$l,ww=Jl,Aw=em;var da=Am,pa=Nm,Pw=_m,pe=Ql,kw=jl,hw=Vm,oo=zl,so=am;var an=class extends Hn{constructor(t,n,i){super(t,i);this.blob=pe(t),this.signed=n}decode(t,n=0){let i=new fa(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new fa(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},ei=class extends Hn{constructor(t){super(8,t);this._lower=oo(jn(),!1),this._upper=oo(jn(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),o=this._upper.decode(t,n+this._lower.span);return M(M({},i),o)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function _(r){return new io(1,r)}function ze(r){return new io(4,r)}function w(r){return new an(8,!1,r)}function z(r){return new an(16,!1,r)}function ba(r){return new an(1,!0,r)}function ti(r){return new an(8,!0,r)}function ga(r){return new an(16,!0,r)}var _t=class extends Hn{constructor(t,n,i,o){super(t.span,o);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function S(r){return new _t(pe(32),e=>new Em(e),e=>e.toBuffer(),r)}var ao=class extends Hn{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=Jr()}encode(t,n,i=0){return t==null?this.discriminator.encode(0,n,i):(this.discriminator.encode(1,n,i),this.layout.encode(t,n,i+1)+1)}decode(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return null;if(i===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return 1;if(i===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function Sw(r,e){return new ao(r,e)}function qe(r){return new _t(Jr(),Fm,vm,r)}function Fm(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function vm(r){return r?1:0}function Kw(r,e){let t=jn("length"),n=L([t,q(r,so(t,-t.span),"values")]);return new _t(n,({values:i})=>i,i=>({values:i}),e)}function Cw(r,e,t){let n=L([w("tag"),e.replicate("data")]);function i({tag:o,data:s}){if(!o.eq(r))throw new Error("Invalid tag, expected: "+r.toString("hex")+", got: "+o.toString("hex"));return s}return new _t(n,i,o=>({tag:r,data:o}),t)}function Wm(r){let e=jn("length"),t=L([e,pe(so(e,-e.span),"data")]);return new _t(t,({data:n})=>n,n=>({data:n}),r)}function Rw(r){return new _t(Wm(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),r)}function Lw(r,e){let t=pa(Jr(),e);return r.forEach((n,i)=>t.addVariant(i,n,n.property)),t}function Ow(r,e,t){let n=L([q(r,e,"values")]);return new _t(n,({values:i})=>i,i=>({values:i}),t)}var uo=class extends ua{decode(e,t){return super.decode(e,t)}};function L(r,e,t){return new uo(r,e,t)}var co=class extends ca{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(i=>i.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function Nw(r,e,t){return new co(r,e,t)}var lo=class extends la{decode(e,t){let n=super.decode(e,t);if(!n.every(i=>i===0))throw new Error("nonzero padding bytes");return n}};function Mw(r){return new lo(r)}function q(r,e,t){let n,i=typeof e=="number"?e:ya(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=ya(a)?a.toNumber():a,Reflect.set(o,"count",n)}return Reflect.get(o,s)},set(o,s,a){return s==="count"&&(n=a),Reflect.set(o,s,a)}});return da(r,i,t)}var Yt=L([S("mint"),S("owner"),w("amount"),ze("delegateOption"),S("delegate"),_("state"),ze("isNativeOption"),w("isNative"),w("delegatedAmount"),ze("closeAuthorityOption"),S("closeAuthority")]);function Dm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function mo(r,...e){if(!Dm(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function po(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function wa(r,e){mo(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var ri=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),wt=(r,e)=>r<<32-e|r>>>e;var Dw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function qm(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function fo(r){return typeof r=="string"&&(r=qm(r)),mo(r),r}var ni=class{clone(){return this._cloneInto()}},qw={}.toString;function Aa(r){let e=n=>r().update(fo(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Um(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),u=n?4:0,c=n?0:4;r.setUint32(e+u,s,n),r.setUint32(e+c,a,n)}var Pa=(r,e,t)=>r&e^~r&t,ka=(r,e,t)=>r&e^r&t^e&t,ii=class extends ni{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=ri(this.buffer)}update(e){po(this);let{view:t,buffer:n,blockLen:i}=this;e=fo(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let u=ri(e);for(;i<=o-s;s+=i)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){po(this),wa(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;Um(n,i-8,BigInt(this.length*8),o),this.process(n,0);let a=ri(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,l=this.get();if(c>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<c;m++)a.setUint32(4*m,l[m],o)}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:i,finished:o,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=o,e.destroyed=s,i%t&&e.buffer.set(n),e}};var Gm=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]),Qt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Ht=new Uint32Array(64),yo=class extends ii{constructor(){super(64,32,8,!1),this.A=Qt[0]|0,this.B=Qt[1]|0,this.C=Qt[2]|0,this.D=Qt[3]|0,this.E=Qt[4]|0,this.F=Qt[5]|0,this.G=Qt[6]|0,this.H=Qt[7]|0}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:u}=this;return[e,t,n,i,o,s,a,u]}set(e,t,n,i,o,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=u|0}process(e,t){for(let m=0;m<16;m++,t+=4)Ht[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let p=Ht[m-15],d=Ht[m-2],y=wt(p,7)^wt(p,18)^p>>>3,f=wt(d,17)^wt(d,19)^d>>>10;Ht[m]=f+Ht[m-7]+y+Ht[m-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let p=wt(a,6)^wt(a,11)^wt(a,25),d=l+p+Pa(a,u,c)+Gm[m]+Ht[m]|0,f=(wt(n,2)^wt(n,13)^wt(n,22))+ka(n,i,o)|0;l=c,c=u,u=a,a=s+d|0,s=o,o=i,i=n,n=d+f|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,i,o,s,a,u,c,l)}roundClean(){Ht.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ha=Aa(()=>new yo);var oA=ae("Raydium_Util");function Ia({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:o,account:s}of t.value){let a=Yt.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:o,mint:u,amount:c,isAssociated:ye(r,u,s.owner).publicKey.equals(o),isNative:!1,programId:s.owner}),i.push({pubkey:o,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Ta.default,amount:new Ym(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function Ye({fromPublicKey:r,programId:e=zm}){let t=Xm.generate().publicKey.toBase58().slice(0,32);return{publicKey:Qm(r,t,e),seed:t}}function Qm(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),i=ha(n);return new Ta(i)}function bo(r){let{mint:e,tokenAccount:t,owner:n,programId:i=Bn}=r;return Hm(t,e,n,i)}function Vt(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:o=Bn}=r;return jm(e,t,i,n,o)}async function St(r){let{connection:e,amount:t,commitment:n,payer:i,owner:o,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Yt.span,n),u=U(t).add(new ed(a)),c=Ye({fromPublicKey:i,programId:Bn});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[Jm.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:Yt.span,programId:Bn}),bo({mint:new $m(Me.address),tokenAccount:c.publicKey,owner:o,programId:Bn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[Vt({tokenAccount:c.publicKey,payer:i,owner:o})]}}function Zn({source:r,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:o=Bn}){return Zm(r,e,t,BigInt(String(n)),i,o)}var $n=class extends xe{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._clientOwnedToken=!!(n||i)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}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 ye(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=M(M({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:jt},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:td},i.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=Ia({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),"confirmed"),{tokenAccounts:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=jt,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let o=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of o){let{publicKey:u}=a;if(u&&(!i||i&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new oi(t.tokenProgram||jt),m=this.getAssociatedTokenAccount(n,new oi(l)),p=(a?[]:this.tokenAccountRawInfos).filter(g=>g.accountInfo.mint.equals(n)&&(!o||g.pubkey.equals(m))).sort((g,P)=>g.accountInfo.amount.lt(P.accountInfo.amount)?1:-1);if(i===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let d={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(o){let g=go(s,m,s,n,l);if(c){let P=await this.scope.connection.getAccountInfo(m);if(P===null)(y=d.instructions)==null||y.push(g),d.instructionTypes.push(V.CreateATA);else if(!(P.owner.equals(l)&&Sn.decode(P.data).mint.equals(n)&&Sn.decode(P.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else d.instructions.push(g),d.instructionTypes.push(V.CreateATA);if(n.equals(te)&&i.amount){let P=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(f=i.amount)!=null?f:0,skipCloseAccount:u});d.instructions.push(...P.instructions||[]),d.endInstructions.push(...P.endInstructions||[]),d.instructionTypes.push(...P.instructionTypes||[]),d.endInstructionTypes.push(...P.endInstructionTypes||[]),i.amount&&(d.instructions.push(Zn({source:P.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:jt})),d.instructionTypes.push(V.TransferAmount))}return u||(d.endInstructions.push(Vt({owner:s,payer:i.payer||s,tokenAccount:m,programId:l})),d.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:d}}else if(n.equals(te)){let g=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(b=i.amount)!=null?b:0,skipCloseAccount:u});return d.instructions.push(...g.instructions||[]),d.endInstructions.push(...g.endInstructions||[]),d.signers.push(...g.signers||[]),d.instructionTypes.push(...g.instructionTypes||[]),d.endInstructionTypes.push(...g.endInstructionTypes||[]),{account:g.addresses.newAccount,instructionParams:d}}else{let g=Ye({fromPublicKey:s,programId:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(Sn.span),A=nd.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:g.seed,newAccountPubkey:g.publicKey,lamports:P,space:Sn.span,programId:l});return d.instructions.push(A,bo({mint:n,tokenAccount:g.publicKey,owner:this.scope.ownerPubKey,programId:l})),d.instructionTypes.push(V.CreateAccount),d.instructionTypes.push(V.InitAccount),u||(d.endInstructions.push(Vt({owner:s,payer:i.payer||s,tokenAccount:g.publicKey,programId:l})),d.endInstructionTypes.push(V.CloseAccount)),{account:g.publicKey,instructionParams:d}}}async checkOrCreateAta({mint:t,programId:n=jt,autoUnwrapWSOLToSOL:i}){var u;await this.fetchWalletTokenAccounts();let o=(u=this.scope.account.tokenAccounts.find(({mint:c})=>(c==null?void 0:c.toBase58())===t.toBase58()))==null?void 0:u.publicKey,s=this.scope.ownerPubKey,a={};if(!o){let c=this.getAssociatedTokenAccount(t,n),l=await go(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],o=c}return i&&te.toBase58()===t.toBase58()&&(a.endInstructions=[Vt({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:o,programId:s=jt,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,p=this.getAssociatedTokenAccount(o,s);if(new oi(te).equals(o)){let d=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:i,skipCloseAccount:l});return M({tokenAccount:d.addresses.newAccount},d)}else if(!a||n==="out"&&!p.equals(a)&&!c){let d=[],y=go(this.scope.ownerPubKey,p,this.scope.ownerPubKey,o,s);if(m){let f=await this.scope.connection.getAccountInfo(p);if(f===null)d.push(y);else if(!(f.owner.equals(jt)&&Sn.decode(f.data).mint.equals(o)&&Sn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${o.toString()}, ata: ${p.toString()}`)}else d.push(y);return{tokenAccount:p,instructions:d,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=jt,amount:o,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new oi(te))&&s){let l=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:p}=l,d=Te(l,["tokenAccount"]);u=p,c.addInstruction(d)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:p}=m,d=Te(m,["tokenAccount"]);u=p,c.addInstruction(d)}return M({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as Td}from"@solana/spl-token";import{PublicKey as ke,SystemProgram as Id}from"@solana/web3.js";import{PublicKey as La}from"@solana/web3.js";var wo=L([_("instruction")]),Ao=L([_("instruction")]),rd=L([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),z("accRewardPerShare"),S("rewardVault"),S("rewardMint"),S("rewardSender"),w("rewardType"),q(w(),15,"padding")]),id=L([w("state"),w("nonce"),S("lpVault"),S("rewardVault"),S(),S(),w(),w(),w("totalReward"),z("perShareReward"),w("lastSlot"),w("perSlotReward")]),od=L([w("state"),w("nonce"),S("lpVault"),S("rewardVaultA"),w("totalRewardA"),z("perShareRewardA"),w("perSlotRewardA"),_("option"),S("rewardVaultB"),pe(7),w("totalRewardB"),z("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),S()]),sd=L([w(),w("state"),w("nonce"),w("validRewardTokenNum"),z("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),S("lpMint"),S("lpVault"),q(rd,5,"rewardInfos"),S("creator"),S(),q(w(),32,"padding")]),xa=new Proxy(id,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(M({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(r,e,t)}}),Ba=new Proxy(od,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(M({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(r,e,t)}}),Jn=new Proxy(sd,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(M({},i),{version:6,rewardInfos:i.rewardInfos.map(o=>{var s;return D(M({},o),{rewardType:((s=Object.entries(Zt).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),ad=L([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Po=L([_("instruction"),w("nonce"),q(ad,5,"rewardTimeInfo")]),ko=L([_("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),ho=L([_("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),EA=L([w("state"),S("id"),S("owner"),w("deposited"),q(w(),1,"rewardDebts")]),er=L([w("state"),S("id"),S("owner"),w("deposited"),q(z(),1,"rewardDebts"),w(""),w("voteLockedBalance"),q(w(),15)]),FA=L([w("state"),S("id"),S("owner"),w("deposited"),q(w(),2,"rewardDebts")]),Sa=L([w("state"),S("id"),S("owner"),w("deposited"),q(z(),2,"rewardDebts"),q(w(),17)]),Ka=L([w(),w("state"),S("id"),S("owner"),w("deposited"),q(z(),5,"rewardDebts"),q(w(),16)]),Je=L([_("instruction"),w("amount")]),ud=L([S("mint"),S("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),ba("digitShift"),q(_(),7,"reserved1"),q(w(),7,"reserved2")]),Ca=L([pe(8),S("governanceProgramId"),S("realm"),S("realmGoverningTokenMint"),S("realmAuthority"),q(_(),32,"reserved1"),q(ud,4,"votingMints"),ti("timeOffset"),_("bump"),q(_(),7,"reserved2"),q(w(),11,"reserved3")]),cd=L([ti("startTime"),ti("endTime"),_("kind"),q(_(),15,"reserved")]),ld=L([q(cd,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),_("votingMintConfigIdx"),q(_(),29,"reserved")]),Ra=L([pe(8),S("voterAuthority"),S("registrar"),q(ld,32,"deposits"),_("voterBump"),_("voterWweightRecordBump"),q(_(),94,"reserved")]);var zA=ae("Raydium_farm_config"),Oa=new La("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Na=new La("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Ma={3:xa,5:Ba,6:Jn},_a={3:er,5:Sa,6:Ka},To=r=>[3,5,6].indexOf(r)!==-1,Io=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,o={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=o[e])==null?void 0:s.call(o)},Zt={"Standard SPL":0,"Option tokens":1},At={[Zi.toString()]:3,[$i.toString()]:5,[In.toString()]:6};import{PublicKey as ie,SystemProgram as un,SYSVAR_RENT_PUBKEY as pd,SYSVAR_CLOCK_PUBKEY as rr,TransactionInstruction as Ve}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as fd,TOKEN_PROGRAM_ID as st,ASSOCIATED_TOKEN_PROGRAM_ID as yd}from"@solana/spl-token";import ai from"bn.js";function xo(r,e,t){return oe([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],r)}function Bo(r,e){return oe([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],r)}function So(r,e){return oe([e.toBuffer()],r)}function Ko(r,e,t){return oe([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],r)}function Co(r,e,t){return oe([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],r)}function Ro(r,e,t,n){return oe([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}import rt from"bn.js";var tr=ae("Raydium.farm.util");function nr({programId:r,poolId:e,mint:t,type:n}){let{publicKey:i}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return i}function it({programId:r,poolId:e,owner:t,version:n}){let{publicKey:i}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return i}var Va=({programId:r,poolId:e})=>oe([e.toBuffer()],r);function Ea(r){return{isSet:new rt(1),rewardPerSecond:U(r.perSecond),rewardOpenTime:U(r.openTime),rewardEndTime:U(r.endTime),rewardType:U(Zt[r.rewardType])}}function Lo(r){return U(r.endTime).sub(U(r.openTime)).mul(U(r.perSecond))}function si(r){let e=_a[r];return e||tr.logWithError("invalid version",r),e}function md(r){let e=Ma[r];return e||tr.logWithError("invalid version",r),e}function dd(r,e,t,n){if(r.version===3||r.version===5){if(r.lastSlot.gte(new rt(t)))return r;let i=new rt(t).sub(r.lastSlot);r.lastSlot=new rt(t);for(let o of r.rewardInfos){if(e.amount.eq(new rt(0)))continue;let s=o.perSlotReward.mul(i);o.perShareReward=o.perShareReward.add(s.mul(new rt(10).pow(new rt(r.version===3?9:15))).div(e.amount)),o.totalReward=o.totalReward.add(s)}}else if(r.version===6)for(let i of r.rewardInfos){if(i.rewardState.eq(new rt(0)))continue;let o=rt.min(new rt(n),i.rewardEndTime);if(i.rewardOpenTime.gte(o))continue;let a=o.sub(i.rewardLastUpdateTime).mul(i.rewardPerSecond),u=i.totalReward.sub(i.totalRewardEmissioned);u.lt(a)?(a=u,i.rewardLastUpdateTime=i.rewardLastUpdateTime.add(u.div(i.rewardPerSecond))):i.rewardLastUpdateTime=o,!e.amount.eq(new rt(0))&&(i.accRewardPerShare=i.accRewardPerShare.add(a.mul(r.rewardMultiplier).div(e.amount)),i.totalRewardEmissioned=i.totalRewardEmissioned.add(a))}return r}async function cP({connection:r,farmPools:e,owner:t,config:n,chainTime:i}){let o=!1,s=!1,a=new rt(10),u=[];for(let p of e){let d=fe(p);d.version===6?s=!0:o=!0,u.push({pubkey:d.id,version:d.version,key:"state",poolId:d.id},{pubkey:d.lpVault,version:d.version,key:"lpVault",poolId:d.id}),t&&u.push({pubkey:it({programId:d.programId,poolId:d.id,owner:t,version:p.version}),version:d.version,key:"ledger",poolId:d.id})}let c={},l=await Tn(r,u,n);for(let{pubkey:p,version:d,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(c[g]=M({},c[g]),y==="state"){let P=md(d);(!b||!b.data||b.data.length!==P.span)&&tr.logWithError(`invalid farm state account info, pools.id, ${p}`),c[g].state=P.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Yt.span)&&tr.logWithError(`invalid farm lp vault account info, pools.lpVault, ${p}`),c[g].lpVault=Yt.decode(b.data);else if(y==="ledger"){let P=si(d);b&&b.data&&(b.data.length!==P.span&&tr.logWithError(`invalid farm ledger account info, ledger, ${p}`),c[g].ledger=P.decode(b.data))}}let m=s||o?await r.getSlot():0;for(let p of Object.keys(c))c[p]!==void 0&&(c[p].state=dd(c[p].state,c[p].lpVault,m,i));for(let[p,{state:d,ledger:y}]of Object.entries(c))if(y){let f=d.version===6?d.rewardMultiplier:d.rewardInfos.length===1?a.pow(new rt(9)):a.pow(new rt(15)),b=d.rewardInfos.map((g,P)=>{let A=y.rewardDebts[P];return y.deposited.mul(d.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});c[p].wrapped=D(M({},c[p].wrapped),{pendingRewards:b})}return c}function lP(r,e=Date.now()){if(r.version===6){let t=r.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>ra(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ia(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=r.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 Oo(r,e,t,n){let i=await r.getAccountInfo(e);if(i===null)throw Error("registrar info check error");let s=Ca.decode(i.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await r.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let c=Ra.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return c===-1?{index:s,isInit:!1}:{index:c,isInit:!0}}var bd=ae("Raydium_farm_instruction"),ir={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 Fa(r){let{version:e,id:t,ledger:n,programId:i,owner:o}=r,s={3:9,5:10}[e];s||bd.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(wo.span);wo.encode({instruction:s},a);let u=[k({pubkey:t}),k({pubkey:n}),k({pubkey:o,isWritable:!1}),k({pubkey:un.programId,isWritable:!1}),k({pubkey:pd,isWritable:!1})];return{instruction:new Ve({programId:i,keys:u,data:a}),instructionType:V.FarmV3CreateLedger}}function va(r){var n;let e=Buffer.alloc(Po.span);Po.encode({instruction:0,nonce:new ai(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[..._i,k({pubkey:r.farmId}),k({pubkey:r.farmAuthority,isWritable:!1}),k({pubkey:r.lpVault}),k({pubkey:r.lpMint,isWritable:!1}),k({pubkey:r.lockVault}),k({pubkey:r.lockMint,isWritable:!1}),k({pubkey:(n=r.lockUserAccount)!=null?n:Ne}),k({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let i of r.rewardInfo)t.push(k({pubkey:i.rewardMint,isWritable:!1}),k({pubkey:i.rewardVault}),k({pubkey:i.userRewardToken}));return{instruction:new Ve({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function Wa(r){let e=Buffer.alloc(Ao.span);Ao.encode({instruction:5},e);let t=[k({pubkey:st,isWritable:!1}),k({pubkey:r.id}),k({pubkey:r.authority,isWritable:!1}),k({pubkey:r.lpVault,isWritable:!1}),k({pubkey:r.rewardVault}),k({pubkey:r.userRewardToken}),k({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ve({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function gd(r,e,t,n,i,o,s,a,u,c,l,m,p){let d=L([_("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Er,isSigner:!1,isWritable:!1}],f=Buffer.alloc(d.span);d.encode({depositEntryIndex:m,amount:p},f);let b=Buffer.from([...ir.voterStakeRegistryDeposit,...f]);return new Ve({keys:y,programId:r,data:b})}function wd(r,e,t,n){let i=L([]),o=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([...ir.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ve({keys:o,programId:r,data:a})}function Ad(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y){let f=L([_("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Er,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:d,amount:y},g);let P=Buffer.from([...ir.voterStakeRegistryWithdraw,...g]);return new Ve({keys:b,programId:r,data:P})}function Pd(r,e,t,n,i,o){let s=L([_("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);return s.encode({ins:23},u),new Ve({keys:a,programId:r,data:u})}function kd(r,e,t,n,i,o,s,a){let u=L([_("voterBump"),_("voterWeightRecordBump")]),c=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1},{pubkey:Er,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...ir.voterStakeRegistryCreateVoter,...l]);return new Ve({keys:c,programId:r,data:m})}function hd(r,e,t,n,i,o,s,a,u,c,l,m){let p=L([_("depositEntryIndex"),_("kind"),_("option"),w("startTs"),ze("periods"),qe("allowClawback")]),d=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:yd,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({depositEntryIndex:a,kind:u,option:c===void 0?0:1,startTs:c,periods:l,allowClawback:m},y);let f=Buffer.from([...ir.voterStakeRegistryCreateDepositEntry,...y]);return new Ve({keys:d,programId:r,data:f})}async function SP({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:o,owner:s,poolId:a,tokenProgram:u}){let c=xo(n,i,o).publicKey,l=it({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let p=er.decode(m.data),d=p.deposited.sub(p.voteLockedBalance);if(console.log("amount",d.toString()),d.eq(new ai(0)))throw Error("user do not has new stake amount");let y=Bo(e,a).publicKey,f=So(e,a).publicKey,{publicKey:b,nonce:g}=Ko(n,c,s),P=ye(b,y,u).publicKey,{publicKey:A,nonce:h}=Co(n,c,s),T=Ro(t,i,o,s).publicKey,I=[],B=ye(s,y,u).publicKey;if(await r.getAccountInfo(B)===null&&I.push(fd(s,B,s,y)),await r.getAccountInfo(b)===null){let Q=Pd(t,i,s,o,s,T);I.push(Q,kd(n,c,b,A,s,s,g,h))}let{index:N,isInit:E}=await Oo(r,c,b,y);return E||I.push(hd(n,c,b,P,s,s,y,N,0,void 0,0,!1)),I.push(gd(n,c,b,P,B,s,l,a,y,f,e,N,d),wd(n,c,b,A)),I}async function KP({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:o,owner:s,poolId:a,tokenProgram:u}){let c=xo(n,i,o).publicKey,l=it({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let p=er.decode(m.data);if(p.voteLockedBalance.eq(new ai(0)))throw Error("user has vote locked balance = 0");let d=Bo(e,a).publicKey,y=So(e,a).publicKey,{publicKey:f}=Ko(n,c,s),b=ye(f,d,u).publicKey,{publicKey:g}=Co(n,c,s),P=Ro(t,i,o,s).publicKey,A=[],{index:h,isInit:T}=await Oo(r,c,f,d);if(!T)throw Error("deposit entry index check error");return A.push(Ad(n,c,f,s,P,g,b,ye(s,d,u).publicKey,l,a,d,y,e,h,p.voteLockedBalance)),A}function No({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let o=Buffer.alloc(ko.span);ko.encode({instruction:3,rewardReopenTime:U(i.openTime),rewardEndTime:U(i.endTime),rewardPerSecond:U(i.perSecond)},o);let s=[k({pubkey:st,isWritable:!1}),k({pubkey:n.id}),k({pubkey:n.lpVault,isWritable:!1}),k({pubkey:e}),k({pubkey:t}),k({pubkey:r,isWritable:!1,isSigner:!0})];return new Ve({programId:n.programId,keys:s,data:o})}function Mo({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let o=Buffer.alloc(ho.span);ho.encode({instruction:4,isSet:new ai(1),rewardPerSecond:U(i.perSecond),rewardOpenTime:U(i.openTime),rewardEndTime:U(i.endTime),rewardType:U(Zt[i.rewardType])},o);let s=[..._i,k({pubkey:t.id}),k({pubkey:t.authority,isWritable:!1}),k({pubkey:i.mint,isWritable:!1}),k({pubkey:n}),k({pubkey:e}),k({pubkey:r,isWritable:!1,isSigner:!0})];return new Ve({programId:t.programId,keys:s,data:o})}function CP(r){let{farmInfo:e,farmKeys:t,version:n,lpAccount:i,rewardAccounts:o,owner:s,instruction:a,amount:u,deposit:c}=r,[l,m]=[new ie(e.programId),new ie(e.id)],p=it({programId:l,poolId:m,owner:s,version:n}),d=Buffer.alloc(Je.span);Je.encode({instruction:a,amount:u},d);let y=n===6?[k({pubkey:st,isWritable:!1}),...c?[k({pubkey:un.programId,isWritable:!1})]:[],k({pubkey:m}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:new ie(t.lpVault)}),k({pubkey:p}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i})]:[k({pubkey:m}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:p}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i}),k({pubkey:new ie(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:rr,isWritable:!1}),k({pubkey:st,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(k({pubkey:o[f]})),y.push(k({pubkey:new ie(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(k({pubkey:new ie(t.rewardInfos[f].vault)})),y.push(k({pubkey:o[f]}));return new Ve({programId:l,keys:y,data:d})}function or(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,u]=[new ie(e.programId),new ie(e.id)],c=it({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(Je.span);Je.encode({instruction:2,amount:U(s)},l);let m=[k({pubkey:st,isWritable:!1}),k({pubkey:u}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:new ie(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let p=0;p<t.rewardInfos.length;p++)m.push(k({pubkey:new ie(t.rewardInfos[p].vault)})),m.push(k({pubkey:i[p]}));return new Ve({programId:a,keys:m,data:l})}function sr(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=it({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(Je.span);Je.encode({instruction:12,amount:U(s)},m);let p=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:rr,isWritable:!1}),k({pubkey:st,isWritable:!1})];for(let d=1;d<t.rewardInfos.length;d++)p.push(k({pubkey:i[d]})),p.push(k({pubkey:new ie(t.rewardInfos[d].vault)}));if(a)for(let d of a)p.push(k({pubkey:d}));return new Ve({programId:u,keys:p,data:m})}function ar(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=it({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(Je.span);Je.encode({instruction:11,amount:U(s)},m);let p=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:rr,isWritable:!1}),k({pubkey:st,isWritable:!1})];if(a)for(let d of a)p.push(k({pubkey:d}));return new Ve({programId:u,keys:p,data:m})}function Da(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=it({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(Je.span);Je.encode({instruction:10,amount:U(s)},m);let p=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:rr,isWritable:!1}),k({pubkey:st,isWritable:!1})];if(a)for(let d of a)p.push(k({pubkey:d}));return new Ve({programId:u,keys:p,data:m})}function qa(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=it({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(Je.span);Je.encode({instruction:11,amount:U(s)},m);let p=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:rr,isWritable:!1}),k({pubkey:st,isWritable:!1})];for(let d=1;d<t.rewardInfos.length;d++)p.push(k({pubkey:i[d]})),p.push(k({pubkey:new ie(t.rewardInfos[d].vault)}));if(a)for(let d of a)p.push(k({pubkey:d}));return new Ve({programId:u,keys:p,data:m})}function Ua(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,u]=[new ie(e.programId),new ie(e.id)],c=it({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(Je.span);Je.encode({instruction:1,amount:U(s)},l);let m=[k({pubkey:st,isWritable:!1}),k({pubkey:un.programId,isWritable:!1}),k({pubkey:u}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:new ie(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let p=0;p<t.rewardInfos.length;p++)m.push(k({pubkey:new ie(t.rewardInfos[p].vault)})),m.push(k({pubkey:i[p]}));return new Ve({programId:a,keys:m,data:l})}var ur=class extends xe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ne)){let n=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Lo(D(M({},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:i=In,txVersion:o}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ke(e.lpMint.address),lockInfo:{lockMint:Oa,lockVault:Na},version:6,rewardInfos:t,programId:i},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ye({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(Jn.span);u.addInstruction({instructions:[Id.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:Jn.span,programId:a.programId})]});let{publicKey:p,nonce:d}=Va({programId:new ke(a.programId),poolId:l.publicKey}),y=nr({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let h of a.rewardInfos){h.openTime>=h.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",h.openTime.toString()),isNaN(Zt[h.rewardType])&&this.logAndCreateError("rewardType error",h.rewardType),Number(h.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",h.perSecond),f.push(Ea(h));let{rewardPubKey:T,newInstruction:I}=await this._getUserRewardInfo({rewardInfo:h,payer:c});I&&u.addInstruction(I),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=h.mint.equals(Ne)?new ke(Me.address):h.mint;b.push({rewardMint:B,rewardVault:nr({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:T})}let g=await this.scope.account.getCreatedTokenAccount({mint:a.lockInfo.lockMint});g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:A}=va({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:p,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:d});return u.addInstruction({instructions:[P],instructionTypes:[A]}).versionBuild({txVersion:o,extInfo:{farmId:l.publicKey,farmAuthority:p,lpVault:y,lockUserAccount:g,nonce:d}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var b;let o=At[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=fe((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 u=t||this.scope.ownerPubKey,c=n.mint.equals(Ne)?new ke(Me.address):n.mint,l=a.rewardInfos.findIndex(g=>new ke(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let p=(b=m.vault)!=null?b:Ne,d=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&d.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),d.addInstruction({instructions:[No({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let o=At[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=fe((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 u=t||this.scope.ownerPubKey,c=this.createTxBuilder();for(let m of n){let p=m.mint.equals(Ne)?new ke(Me.address):m.mint,d=a.rewardInfos.findIndex(A=>new ke(A.mint.address).equals(p)),y=s.rewardInfos[d];y||this.logAndCreateError("configuration does not exist","rewardMint",p);let f=(l=y.vault)!=null?l:Ne,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:u});g&&c.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let P=No({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[P],instructionTypes:[V.FarmV6Restart]})}return c.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:o}=e,s=At[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=fe((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder(),l=i.mint.equals(Ne)?new ke(Me.address):i.mint,m=nr({programId:new ke(n.programId),poolId:new ke(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:p,newInstruction:d}=await this._getUserRewardInfo({rewardInfo:i,payer:u});return d&&c.addInstruction(d),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,c.addInstruction({instructions:[Mo({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:o}=e,s=At[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=fe((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of i){let m=l.mint.equals(Ne)?new ke(Me.address):l.mint,p=nr({programId:new ke(n.programId),poolId:new ke(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:d,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),d||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Mo({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:p,rewardInfo:D(M({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[V.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:o,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:p}=n,d=At[p];To(d)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ke(n.programId),new ke(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=it({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:d}),P=this.createTxBuilder();P.addCustomComputeBudget(l);let A={};for(let W of this.scope.account.tokenAccounts)if(a){let j=ye(this.scope.ownerPubKey,W.mint,W.programId).publicKey;W.publicKey&&j.equals(W.publicKey)&&(A[W.mint.toString()]=W.publicKey)}else A[W.mint.toString()]=W.publicKey;let h=b.lpMint,T=A[h.address];T||this.logAndCreateError("you don't have any lp","lp zero",A);let I=[];for(let W of m){let j=s&&W.mint.address===te.toString(),ee=A[W.mint.address];if(!ee){let{account:se,instructionParams:ft}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new ke(W.mint.address),notUseTokenAccount:j,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!j,associatedOnly:j?!1:a,checkCreateATAOwner:u});ee=se,ft&&P.addInstruction(ft)}A[W.mint.address]=ee,I.push(ee)}let B,x=await this.scope.connection.getAccountInfo(g);if(x&&(B=si(d).decode(x.data)),n.programId!==In.toString()&&!B){let{instruction:W,instructionType:j}=Fa({id:f,programId:y,version:d,ledger:g,owner:this.scope.ownerPubKey});P.addInstruction({instructions:[W],instructionTypes:[j]})}let R=Io({version:d,rewardInfos:m,rewardTokenAccountsPublicKeys:I});R&&this.logAndCreateError(R);let N={amount:U(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:T,rewardAccounts:I,userAuxiliaryLedgers:c==null?void 0:c.map(W=>new ke(W))},E=d===6?Ua(N):d===5?qa(N):Da(N),Q={3:V.FarmV3Deposit,5:V.FarmV5Deposit,6:V.FarmV6Deposit};return P.addInstruction({instructions:[E],instructionTypes:[Q[d]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:o,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:p}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let d=At[n.programId];To(d)||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 R of this.scope.account.tokenAccounts)if(u){let N=ye(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&N.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(o)o.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=it({programId:new ke(n.programId),poolId:new ke(n.id),owner:this.scope.ownerPubKey,version:d}),N=await this.scope.connection.getAccountInfo(R);N||this.logAndCreateError("no lp data",{farmId:n.id,version:d,ledgerData:N}),si(d).decode(N.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,P=s&&g===te.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ke(g),notUseTokenAccount:P,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:P?!1:u,checkCreateATAOwner:c});A=R,N&&f.addInstruction(N)}b[g.toString()]=A;let h=[];for(let R of p){let N=s&&R.mint.address===te.toString(),E=b[R.mint.address];if(!E){let{account:Q,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new ke(R.mint.address),notUseTokenAccount:N,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:u,checkCreateATAOwner:c});E=Q,W&&f.addInstruction(W)}b[R.mint.address]=E,h.push(E)}let T=Io({version:d,rewardInfos:p,rewardTokenAccountsPublicKeys:h});T&&this.logAndCreateError(T);let I={amount:U(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new ke(R))},B=d===6?or(I):d===5?sr(I):ar(I),x={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[B],instructionTypes:[x[d]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var d;this.scope.checkOwner();let i=fe((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),o=At[e.programId];o!==6&&this.logAndCreateError("invalid farm version",o);let s=e.rewardInfos.findIndex(y=>y.mint.address===Ne.toString()?new ke(Me.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(d=a==null?void 0:a.vault)!=null?d:Ne,c=this.createTxBuilder(),l;if(t.equals(Ne)){let y=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Lo(D(M({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new F(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,c.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),c.addInstruction({instructions:[Td(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:p}=Wa({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[p]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(o){let f=ye(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 d=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>D(M({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:P}=y,A=At[f],h=b.address,T=n&&h===te.toString(),I=m[h];if(!I){let{account:Q,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ke(h),notUseTokenAccount:T,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:T?!1:o,checkCreateATAOwner:s});I=Q,W&&l.addInstruction(W)}m[h.toString()]=I;let B=[];for(let Q of g){let W=n&&Q.mint.address===te.toString(),j=m[Q.mint.address];if(!j){let{account:ee,instructionParams:se}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Q.mint.programId,mint:new ke(Q.mint.address),notUseTokenAccount:W,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!W,associatedOnly:W?!1:o,checkCreateATAOwner:s});j=ee,se&&l.addInstruction(se)}m[Q.mint.address]=j,B.push(j)}let x=d[P],R={amount:Se,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:I,rewardAccounts:B,userAuxiliaryLedgers:a==null?void 0:a.map(Q=>new ke(Q))},N=A===6?or(R):A===5?sr(R):ar(R),E={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};l.addInstruction({instructions:[N],instructionTypes:[E[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as ot}from"@solana/web3.js";import{NATIVE_MINT as xu,TOKEN_PROGRAM_ID as yi}from"@solana/spl-token";var $P=L([ze("mintAuthorityOption"),S("mintAuthority"),w("supply"),_("decimals"),_("isInitialized"),ze("freezeAuthorityOption"),S("freezeAuthority")]);import{PublicKey as xd}from"@solana/web3.js";import{MintLayout as Ga,TOKEN_PROGRAM_ID as Bd}from"@solana/spl-token";var sk=async({connection:r,mint:e})=>{let t=await r.getAccountInfo(new xd(e));return!t||t.data.length!==Ga.span?void 0:Ga.decode(t.data)},ak=({mint:r,decimals:e,programId:t=Bd,logoURI:n="",priority:i=3})=>{let o=r.toBase58().substring(0,6);return{address:r.toBase58(),decimals:e,symbol:o,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:o,tags:[],priority:i}},Xa=r=>new de({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),uk=i=>{var o=i,{amount:r,isRaw:e,name:t}=o,n=Te(o,["amount","isRaw","name"]);return new he(new de({mint:n.address,decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};function ck(r){return r.address===Tt.address?Me:r}function lk(r){return r.address===Me.address?Tt:r}import{TOKEN_PROGRAM_ID as cr,ASSOCIATED_TOKEN_PROGRAM_ID as Dd}from"@solana/spl-token";import{PublicKey as be,TransactionInstruction as Et,SystemProgram as Do,SYSVAR_RENT_PUBKEY as qd}from"@solana/web3.js";var _o=L([_("instruction"),w("amountIn"),w("minAmountOut")]),Vo=L([_("instruction"),w("maxAmountIn"),w("amountOut")]),hk=L([_("instruction"),_("nonce")]),Eo=L([_("instruction"),_("nonce"),w("startTime")]),Sd=L([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"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),w("swapBase2QuoteFee"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),w("swapQuote2BaseFee"),S("baseVault"),S("quoteVault"),S("baseMint"),S("quoteMint"),S("lpMint"),S("openOrders"),S("marketId"),S("marketProgramId"),S("targetOrders"),S("withdrawQueue"),S("lpVault"),S("owner"),w("lpReserve"),q(w(),3,"padding")]),Kd=L([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"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),S("baseVault"),S("quoteVault"),S("baseMint"),S("quoteMint"),S("lpMint"),S("modelDataAccount"),S("openOrders"),S("marketId"),S("marketProgramId"),S("targetOrders"),S("owner"),q(w(),64,"padding")]),Fo=L([_("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),vo=L([_("instruction"),w("amountIn")]),Tk={4:Sd,5:Kd},za=L([w("fee")]);import{PublicKey as Cd}from"@solana/web3.js";var Cn=new Cd("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ln=5e4,Rd=L([w("x"),w("y"),w("price")]),Ld=L([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),q(Rd,ln,"DataElement")]);function Od(r,e){return[0,ln-2]}function Nd(r){return[0,ln-2]}function Md(r){return[0,ln-2]}function _d(r,e,t){let[n,i]=Od(e,t),o=n,s=i,a=0,u=e*r.multiplier/t;for(;o<=s;){if(a=Math.floor((s+o)/2),a===0||a>=ln-2)return[a,a,!1];let c=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.DataElement[a+1].y;if(u===c)return[a,a,!0];if(u===l)return[a-1,a-1,!0];if(u===m)return[a+1,a+1,!0];if(u<l)s=a-1;else{if(u>l&&u<c)return[a-1,a,!0];if(u>c&&u<m)return[a,a+1,!0];o=a+1}}return[a,a,!1]}function Wo(r,e,t){let[n,i,o]=_d(r,e,t);if(!o)return 0;if(n===i){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,u=r.DataElement[i].x,c=r.DataElement[i].y,l=t*(u*a-s*c),m=s*l,p=(u-s)*(e*a-s*t)*c,d=m+p;return e*r.multiplier*l/d}}function cn(r,e,t){return e*r.multiplier/t}function Ya(r,e,t){return e*t/r.multiplier}function Vd(r,e){let[t,n]=Nd(e),i=t,o=n,s=0,a=e;for(;i<o;){if(s=Math.floor((o+i)/2),s<=0||s>ln-2)return[s,s,!1];let u=r.DataElement[s].x,c=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<c)o=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function Ed(r,e){let[t,n]=Md(e),i=t,o=n,s=0,a=e;for(;i<=o;){if(s=Math.floor((o+i)/2),s<=0||s>=ln-2)return[s,s,!1];let u=r.DataElement[s].y,c=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<c&&a>u)return[s-1,s,!0];if(a<u&&a>l)return[s,s+1,!0];o=s-1}}return[s,s,!1]}function Qa(r,e,t,n){let i=n?e+t:e-t,[o,s,a]=Vd(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let u=r.DataElement[o].x,c=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,p=r.DataElement[o].y,d=r.DataElement[s].y;if(e>=u&&e<=c)return n?[m,d,!0,a]:[l,p,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=p-(i-u)*r.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=d+(c-i)*r.multiplier/l),[y,f,!1,a]}}}function Fd(r,e,t,n){let i=n?e-t:e+t,[o,s,a]=Ed(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let u=r.DataElement[o].x,c=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,p=r.DataElement[o].y,d=r.DataElement[s].y;if(e>=d&&e<=p)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(p-e)/(p-d),f=u+m*(p-i)/r.multiplier):(y=l+(m-l)*(p-e)/(p-d),f=c-l*(i-d)/r.multiplier),[y,f,!1,a]}}}function vd(r,e){let t=Qa(r,e,0,!1);return t[3]?t[0]:0}function Ha(r,e,t,n){let i=Wo(r,e,t),o=cn(r,e,i),s=cn(r,t,i),a=cn(r,n,i),u=!0,[c,l,m,p]=Qa(r,o,a,u);if(!p)return 0;if(m)return n*r.multiplier/c;{let d=s-l;return Ya(r,d,i)}}function ja(r,e,t,n){let i=Wo(r,e,t),o=cn(r,e,i),s=cn(r,t,i),a=cn(r,n,i),u=!1,[c,l,m,p]=Fd(r,s,a,u);if(!p)return 0;if(m)return n*c/r.multiplier;{let d=o-l;return Ya(r,d,i)}}function Wd(r){let e=Ld.decode(r);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 Za(r,e,t,n){let i=vd(r,cn(r,e,Wo(r,e,t)))/r.multiplier;return n?i:1/i}var Kn=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(Cn);e&&(this._layoutData=Wd(e==null?void 0:e.data))}}};var $a=ae("Raydium_liquidity_instruction");function Ja(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:o,fixedSide:s}=r,a=Buffer.alloc(Fo.span);Fo.encode({instruction:3,baseAmountIn:U(i),quoteAmountIn:U(o),fixedSide:s==="base"?Se:Us},a);let u=[k({pubkey:cr,isWritable:!1}),k({pubkey:new be(e.id)}),k({pubkey:new be(t.authority),isWritable:!1}),k({pubkey:new be(t.openOrders),isWritable:!1}),k({pubkey:new be(t.targetOrders)}),k({pubkey:new be(e.lpMint.address)}),k({pubkey:new be(t.vault.A)}),k({pubkey:new be(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(k({pubkey:Cn})),u.push(k({pubkey:new be(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 be(t.marketEventQueue),isWritable:!1})),new Et({programId:new be(e.programId),keys:u,data:a})}function qo(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:i}=r,o=fe(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(vo.span);vo.encode({instruction:4,amountIn:U(i)},a);let u=[k({pubkey:cr,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.mintLp.address}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return s===5?u.push(k({pubkey:Cn})):(u.push(k({pubkey:o.id})),u.push(k({pubkey:o.id}))),u.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.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:o.marketEventQueue}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks})),new Et({programId:o.programId,keys:u,data:a})}return new Et({programId:o.programId,keys:[]})}function eu({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:o,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:p,marketId:d,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:P,openTime:A,coinAmount:h,pcAmount:T,ammConfigId:I,feeDestinationId:B}){let x=L([_("instruction"),_("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:Dd,isSigner:!1,isWritable:!1},{pubkey:Do.programId,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:I,isSigner:!1,isWritable:!1},{pubkey:B,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:d,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}],N=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:P,openTime:A,coinAmount:h,pcAmount:T},N),{instruction:new Et({keys:R,programId:r,data:N}),instructionType:V.AmmV4CreatePool}}function vk(r){let e=L([_("instruction"),_("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new be(r.id),isWritable:!1}),k({pubkey:new be(r.authority),isWritable:!1}),k({pubkey:new be(r.openOrders),isWritable:!1}),k({pubkey:new be(r.vault.A),isWritable:!1}),k({pubkey:new be(r.vault.B),isWritable:!1}),k({pubkey:new be(r.mintLp.address),isWritable:!1}),k({pubkey:new be(r.marketId),isWritable:!1}),k({pubkey:new be(r.marketEventQueue),isWritable:!1})];return new Et({programId:new be(r.programId),keys:n,data:t})}function Ud({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},i){let o=fe(r),s=Buffer.alloc(_o.span);_o.encode({instruction:9,amountIn:U(t),minAmountOut:U(n)},s);let a=[k({pubkey:cr,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders})];return i===4&&a.push(k({pubkey:o.targetOrders})),a.push(k({pubkey:o.vault.A}),k({pubkey:o.vault.B})),i===5&&a.push(k({pubkey:Cn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1})),new Et({programId:o.programId,keys:a,data:s})}function Gd({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},i){let o=fe(r),s=Buffer.alloc(Vo.span);Vo.encode({instruction:11,maxAmountIn:U(t),amountOut:U(n)},s);let a=[k({pubkey:Do.programId,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return i===5&&a.push(k({pubkey:Cn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Et({programId:o.programId,keys:a,data:s})}function ui(r){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:o,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return Ud(D(M({},a),{amountIn:i,minAmountOut:o}),t);if(s==="out")return Gd(D(M({},a),{maxAmountIn:i,amountOut:o}),t);$a.logWithError("invalid params","params",r)}throw $a.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function Wk({poolKeys:r,userKeys:e,startTime:t}){let n=Buffer.alloc(Eo.span);Eo.encode({instruction:0,nonce:5,startTime:U(t)},n);let i=fe(r),o=[k({pubkey:cr,isWritable:!1}),k({pubkey:Do.programId,isWritable:!1}),k({pubkey:qd,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.authority,isWritable:!1}),k({pubkey:i.openOrders}),k({pubkey:i.mintLp.address}),k({pubkey:i.mintA.address,isWritable:!1}),k({pubkey:i.mintB.address,isWritable:!1}),k({pubkey:i.vault.A,isWritable:!1}),k({pubkey:i.vault.B,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.targetOrders}),k({pubkey:e.lpTokenAccount}),k({pubkey:i.id,isWritable:!1}),k({pubkey:i.marketProgramId,isWritable:!1}),k({pubkey:i.marketId,isWritable:!1}),k({pubkey:e.payer,isSigner:!0})];return new Et({programId:i.programId,keys:o,data:n})}function tu({poolKeys:r}){let e=L([_("instruction"),_("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new be(r.id),isWritable:!1}),k({pubkey:new be(r.authority),isWritable:!1}),k({pubkey:new be(r.openOrders),isWritable:!1}),k({pubkey:new be(r.vault.A),isWritable:!1}),k({pubkey:new be(r.vault.B),isWritable:!1}),k({pubkey:new be(r.mintLp.address),isWritable:!1}),k({pubkey:new be(r.marketId),isWritable:!1}),k({pubkey:new be(r.marketEventQueue),isWritable:!1})];return{instruction:new Et({programId:new be(r.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as Ue,TOKEN_2022_PROGRAM_ID as Jt,ASSOCIATED_TOKEN_PROGRAM_ID as gu}from"@solana/spl-token";import{PublicKey as v,TransactionInstruction as Pt,SystemProgram as Rn,Keypair as jo}from"@solana/web3.js";import wu from"bn.js";import tp from"bn.js";function nu(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function qk(r){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,r,!1),new Uint8Array(e)}function Uk(r){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,r,!1),new Uint8Array(e)}function ci(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Uo(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Go(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function lr(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function ru(r,e){return lr(r,e)?null:Uo(r,e)}function iu(r,e){return lr(r,e)?null:Go(r,e)}var Xd=Buffer.from("amm_config","utf8"),zd=Buffer.from("pool","utf8"),Yd=Buffer.from("pool_vault","utf8"),Qd=Buffer.from("pool_reward_vault","utf8"),ou=Buffer.from("position","utf8"),Hd=Buffer.from("tick_array","utf8"),jd=Buffer.from("operation","utf8"),Zd=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Yk(r,e){return oe([Xd,nu(e)],r)}function su(r,e,t,n){return oe([zd,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Xo(r,e,t){return oe([Yd,e.toBuffer(),t.toBuffer()],r)}function au(r,e,t){return oe([Qd,e.toBuffer(),t.toBuffer()],r)}function ge(r,e,t){return oe([Hd,e.toBuffer(),ci(t)],r)}function mn(r,e,t,n){return oe([ou,e.toBuffer(),ci(t),ci(n)],r)}function ct(r,e){return oe([ou,e.toBuffer()],r)}function li(r){return oe([Buffer.from("metadata","utf8"),Pn.toBuffer(),r.toBuffer()],Pn)}function mr(r){return oe([jd],r)}function lt(r,e){return oe([Zd,e.toBuffer()],r)}import Kt from"bn.js";var me=new Kt(0),at=new Kt(1),Ft=new Kt(-1),ut=new Kt(1).shln(64),mi=new Kt(1).shln(128),zo=ut.sub(at),dr=64,uu=mi.subn(1),Qe=-443636,et=-Qe,Ct=new Kt("4295048016"),Rt=new Kt("79226673521066979257578248091"),cu=16,lu="59543866431248",mu="184467440737095516",du="15793534762490258745",di=new Kt(10).pow(new Kt(6)),$d=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))($d||{}),jk={[500]:10,[3e3]:60,[1e4]:200},Zk={version:6,liquidity:me,tickCurrent:0,observationIndex:0,observationUpdateDuration:0,feeGrowthGlobalX64A:me,feeGrowthGlobalX64B:me,protocolFeesTokenA:me,protocolFeesTokenB:me,swapInAmountTokenA:me,swapOutAmountTokenB:me,swapInAmountTokenB:me,swapOutAmountTokenA:me,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},pu={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:[]},$k=new Kt("18446744073700000000");var Jd=15,le=class{static async getTickArrays(e,t,n,i,o,s,a){let u=[],c=G.getTickArrayStartIndexByTick(i,o),l=G.getInitializedTickArrayInRange(s,a,o,c,Math.floor(Jd/2));for(let d=0;d<l.length;d++){let{publicKey:y}=ge(t,n,l[d]);u.push(y)}let m=(await It(e,u)).map(d=>d!==null?pr.decode(d.data):null),p={};for(let d=0;d<u.length;d++){let y=m[d];y!==null&&(p[y.startTickIndex]=D(M({},y),{address:u[d]}))}return p}static nextInitializedTick(e,t,n,i,o,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,i,o,s);for(;a==null||a.liquidityGross.lten(0);){if(c=G.getNextTickArrayStartIndex(c,o,s),this.checkIsValidStartIndex(c,o))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:p,tickArrayStartTickIndex:d}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,p,d]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,i,o){let s=Math.floor(e/le.tickCount(t)),a=n?G.searchLowBitFromStart(i,o,s-1,1,t):G.searchHightBitFromStart(i,o,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let o;if(i){let a=_e-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a-1}}else{let a=0;for(;a<_e;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a+1}}let{publicKey:s}=ge(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,o,s){let a=G.getTickArrayStartIndexByTick(i,o),u=Math.floor((i-a)/o),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let p=c.ticks[u];if(p.liquidityGross.gtn(0)){l=p;break}u=u-1}else for(u=u+1;u<_e;){let p=c.ticks[u];if(p.liquidityGross.gtn(0)){l=p;break}u=u+1}let{publicKey:m}=ge(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:c.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(G.checkIsOutOfBoundary(e)){if(e>et)return!1;let n=G.getTickArrayStartIndexByTick(Qe,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return _e*e}};import re from"bn.js";import{PublicKey as $t}from"@solana/web3.js";import Ce from"bn.js";var Yo=14,vt=class{static maxTickInTickarrayBitmap(e){return e*_e*dn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let o=n*i;return e<0?{minValue:-o,maxValue:-o+n}:{minValue:o,maxValue:o+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=i?t-le.tickCount(n):t+le.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*_e,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(i){let l=e.shln(1024-c-1),m=ru(1024,l);if(m!==null){let p=(c-m-512)*a;return{isInit:!0,tickIndex:p}}else return{isInit:!1,tickIndex:-o}}else{let l=e.shrn(c),m=iu(1024,l);if(m!==null){let p=(c+m-512)*a;return{isInit:!0,tickIndex:p}}else return{isInit:!1,tickIndex:o-le.tickCount(n)}}}},fr=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=vt.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=vt.maxTickInTickarrayBitmap(e),n=-t;if(et<=t)throw Error(`extensionTickBoundary check error: ${et}, ${t}`);if(n<=Qe)throw Error(`extensionTickBoundary check error: ${n}, ${Qe}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),o=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:G.mergeTickArrayBitmap(i).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let o=le.tickCount(t),s=n?e-o:e+o,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:o,maxValue:s}=vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let u=G.mergeTickArrayBitmap(e).shln(dn-1-a),c=lr(512,u)?null:Uo(512,u);if(c!==null){let l=t-c*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let u=G.mergeTickArrayBitmap(e).shrn(a),c=lr(512,u)?null:Go(512,u);if(c!==null){let l=t+c*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-le.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%vt.maxTickInTickarrayBitmap(t),i=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(i=dn-i),i}};import Lt from"bn.js";var yr=class{static getfeeGrowthInside(e,t,n){let i=new Lt(0),o=new Lt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,o=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),o=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Lt(0),a=new Lt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let u=$.wrappingSubU128($.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),c=$.wrappingSubU128($.wrappingSubU128(e.feeGrowthGlobalX64B,o),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=$.mulDivFloor($.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,ut),u=t.tokenFeesOwedA.add(a),c=$.mulDivFloor($.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,ut),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=$.mulDivFloor($.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,ut),u=t.tokenFeesOwedA.add(a),c=$.mulDivFloor($.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,ut),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let o=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=$.wrappingSubU128(u,c.growthInsideLastX64),m=$.mulDivFloor(l,t.liquidity,ut),p=c.rewardAmountOwed.add(m);o.push(p)}return o}static GetPositionRewards(e,t,n,i){let o=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=$.wrappingSubU128(u,c.growthInsideLastX64),m=$.mulDivFloor(l,t.liquidity,ut),p=c.rewardAmountOwed.add(m);o.push(p)}return o}static getRewardGrowthInside(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Lt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Lt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push($.wrappingSubU128($.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return o}static getRewardGrowthInsideV2(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Lt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Lt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push($.wrappingSubU128($.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:o,epochInfo:s}){var b,g,P,A;let a=Z.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),u=Z.getSqrtPriceX64FromTick(t.tickLower),c=Z.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+i:1-i,m=ce.getAmountsFromLiquidity(a,u,c,n,o),[p,d]=[Ae(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Ae(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[Ae(new Lt(new F(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,s,!0),Ae(new Lt(new F(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:p,amountB:d,amountSlippageA:y,amountSlippageB:f,expirationTime:sn(p.expirationTime,d.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as fu}from"@solana/spl-token";var He=class{static getOutputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintA.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");a.push(l);let{amountCalculated:m,accounts:p,sqrtPriceX64:d,feeAmount:y}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,c,o);return a.push(...p),{expectedAmountOut:m.mul(Ft),remainingAccounts:a,executionPrice:d,feeAmount:y}}static getInputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintB.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=ge(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:p,sqrtPriceX64:d,feeAmount:y}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Ft),c,o);return a.push(...p),{expectedAmountIn:m,remainingAccounts:a,executionPrice:d,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=He.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?fr.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):G.checkTickArrayIsInitialized(G.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=ge(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=ge(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/le.tickCount(e.tickSpacing)),i=t?G.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):G.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:o}=vt.nextInitializedTickArrayStartIndex(G.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=fr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Qe||t>et)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:o}){var a,u,c;let s=[];for(let l=0;l<o.length;l++){let m=o[l],p=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(p===void 0)throw Error("get new reward mint info error");let d=D(M({},m),{perSecond:$.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new $t(p)});if(d.tokenMint.equals($t.default))continue;if(n<=d.openTime.toNumber()||i.eq(me)){s.push(d);continue}let y=new Ce(Math.min(d.endTime.toNumber(),n)),f=y.sub(d.lastUpdateTime),b=$.mulDivFloor(f,d.emissionsPerSecondX64,i),g=d.rewardGrowthGlobalX64.add(b),P=$.mulDivFloor(f,d.emissionsPerSecondX64,ut),A=d.rewardTotalEmissioned.add(P);s.push(D(M({},d),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let o of t){let s=G.getTickArrayStartIndexByTick(o,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=vt.maxTickInTickarrayBitmap(e),n=-t;return t>et&&(t=le.getArrayStartIndex(et,e)+le.tickCount(e)),n<Qe&&(n=le.getArrayStartIndex(Qe,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/le.tickCount(t)*dn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await Tn(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of i)s.accountInfo!==null&&(o[s.pubkey.toString()]=yu.decode(s.accountInfo.data));return o}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},o=[];for(let u of t){let c=G.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=G.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:p}=ge(u.programId,u.id,m);o.push({pubkey:p}),i[p.toString()]=u.id}}let s=await Tn(e,o,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=i[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=pr.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=D(M({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:o=!0}){var a;let s=[];for(let u=0;u<e.length;u++){let c=e[u];c!==null&&(s.find(l=>l.equals(c.state.programId))||s.push(c.state.programId))}if(n){let u=n.tokenAccounts.map(p=>p.accountInfo.mint),c=[];for(let p of u)for(let d of s)c.push(ct(d,p).publicKey);let l=await It(t,c,{batchRequest:i}),m={};for(let p of l){if(p===null)continue;let d=fi.decode(p.data),y=d.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=G._getTickPriceLegacy({poolInfo:b,tick:d.tickLower,baseIn:!0}),P=G._getTickPriceLegacy({poolInfo:b,tick:d.tickUpper,baseIn:!0}),{amountA:A,amountB:h}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,d.liquidity,!1),T=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:d.poolId,nftMint:d.nftMint,priceLower:g.price,priceUpper:P.price,amountA:A,amountB:h,tickLower:d.tickLower,tickUpper:d.tickUpper,liquidity:d.liquidity,feeGrowthInsideLastX64A:d.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:d.feeGrowthInsideLastX64B,tokenFeesOwedA:d.tokenFeesOwedA,tokenFeesOwedB:d.tokenFeesOwedB,rewardInfos:d.rewardInfos.map(x=>D(M({},x),{pendingReward:new Ce(0)})),leverage:T,tokenFeeAmountA:new Ce(0),tokenFeeAmountB:new Ce(0)}];let I=await G.getTickArrayAddressByTick(f.state.programId,d.poolId,d.tickLower,f.state.tickSpacing),B=await G.getTickArrayAddressByTick(f.state.programId,d.poolId,d.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${d.poolId.toString()}-${d.tickLower}`]=I,m[`${f.state.programId.toString()}-${d.poolId.toString()}-${d.tickUpper}`]=B}if(o){let p=Object.values(m),d=await It(t,p,{batchRequest:i}),y={};for(let f=0;f<p.length;f++){let b=d[f];if(b===null)continue;let g=p[f].toString();y[g]=pr.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let P=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,h=y[m[P].toString()],T=y[m[A].toString()],I=h.ticks[G.getTickOffsetInArray(g.tickLower,f.tickSpacing)],B=T.ticks[G.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await yr.GetPositionFees(f,g,I,B),N=await yr.GetPositionRewards(f,g,I,B);g.tokenFeeAmountA=x.gte(new Ce(0))?x:new Ce(0),g.tokenFeeAmountB=R.gte(new Ce(0))?R:new Ce(0);for(let E=0;E<N.length;E++)g.rewardInfos[E].pendingReward=N[E].gte(new Ce(0))?N[E]:new Ce(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:o,slippage:s,priceLimit:a=new F(0)}){var N;let u,c=n.toBase58()===e.mintA.address,[l,m]=c?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new F(0))?u=c?Ct.add(new Ce(1)):Rt.sub(new Ce(1)):u=Z.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Ae(o,l,i,!1),{expectedAmountOut:d,remainingAccounts:y,executionPrice:f,feeAmount:b}=He.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((N=p.fee)!=null?N:me),u),g=Ae(d,m,i,!1),P=Z.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),A=c?P:new F(1).div(P),h=d.mul(new Ce(Math.floor((1-s)*1e10))).div(new Ce(1e10)),T=Ae(h,m,i,!1),I=c?e.currentPrice:new F(1).div(e.currentPrice),B=new F(A).sub(I).abs(),x=I,R=new ve(new F(B).mul(10**15).toFixed(0),new F(x).mul(10**15).toFixed(0));return{realAmountIn:p,amountOut:g,minAmountOut:T,expirationTime:sn(p.expirationTime,g.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:R,fee:b,remainingAccounts:y}}static async computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:o,epochInfo:s}){let a=i.address===e.mintB.address,[u,c]=a?[e.mintA,e.mintB]:[e.mintB,e.mintA],[l,m]=[new de(D(M({},u),{mint:u.address,isToken2022:u.programId===fu.toBase58()})),new de(D(M({},c),{mint:c.address,isToken2022:c.programId===fu.toBase58()}))],{realAmountIn:p,amountOut:d,minAmountOut:y,expirationTime:f,currentPrice:b,executionPrice:g,priceImpact:P,fee:A,remainingAccounts:h}=await He.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new $t(u.address),amountIn:n,slippage:o,epochInfo:s}),T=D(M({},p),{amount:new he(l,p.amount),fee:p.fee===void 0?void 0:new he(l,p.fee)}),I=D(M({},d),{amount:new he(m,d.amount),fee:d.fee===void 0?void 0:new he(m,d.fee)}),B=D(M({},y),{amount:new he(m,y.amount),fee:y.fee===void 0?void 0:new he(m,y.fee)}),x=new Xe({baseToken:l,denominator:new Ce(10).pow(new Ce(20+l.decimals)),quoteToken:m,numerator:b.mul(new F(10**(20+m.decimals))).toFixed(0)}),R=new Xe({baseToken:l,denominator:new Ce(10).pow(new Ce(20+l.decimals)),quoteToken:m,numerator:g.mul(new F(10**(20+m.decimals))).toFixed(0)}),N=new he(l,A);return{realAmountIn:T,amountOut:I,minAmountOut:B,expirationTime:f,currentPrice:x,executionPrice:R,priceImpact:P,fee:N,remainingAccounts:h}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var y,f,b;let o=e[t],s=G.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=G.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),u=Math.max(s,o.priceMin),l=Math.min(a,o.priceMax)-u,m=a-s,p=o.priceMax-o.priceMin,d;return l<=0?d=0:m===l?d=p/l:p===l?d=l/m:d=l/p*(l/m),{feeApr:o.feeApr*d,rewardsApr:[(y=o.rewardApr[0])!=null?y:0*d,(f=o.rewardApr[1])!=null?f:0*d,(b=o.rewardApr[2])!=null?b:0*d],apr:o.apr*d}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:o,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[kn(e.mintA.address).toString()],p=i[kn(e.mintB.address).toString()],d=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!p)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=Z.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),b=Z.getSqrtPriceX64FromTick(s),g=Z.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:h,amountSlippageB:T}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,o,!1,!1,0),I=new F(P.toString()).div(new F(10).pow(d)).mul(m.value).add(new F(A.toString()).div(new F(10).pow(y)).mul(p.value)),B=new F(h.toString()).div(new F(10).pow(d)).mul(m.value).add(new F(T.toString()).div(new F(10).pow(y)).mul(p.value)),x=B.div(I.add(B)).div(B),N=new F(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),E=3600*24*365,Q=e.rewardDefaultInfos.map(W=>{var se,ft;let j=W.mint.decimals,ee=i[W.mint.address];return u<((se=W.startTime)!=null?se:0)||u>((ft=W.endTime)!=null?ft:0)||!W.perSecond||!ee||j===void 0?0:new F(ee.value).mul(new F(W.perSecond).mul(E)).div(new F(10).pow(j)).mul(x).mul(100).toNumber()});return{feeApr:N,rewardsApr:Q,apr:N+Q.reduce((W,j)=>W+j,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:o,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,P;let l=Z.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),m=Z.getSqrtPriceX64FromTick(n),p=Z.getSqrtPriceX64FromTick(i),d=a?1-s:1+s,y=Ae(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new Ce(new F(y.amount.sub((P=y.fee)!=null?P:me).toString()).mul(d).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,p,f,!a):new Ce(0);else if(l.lte(p)){let A=ce.getLiquidityFromTokenAmountA(l,p,f,!a),h=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:h}else b=t?new Ce(0):ce.getLiquidityFromTokenAmountB(m,p,f);return He.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:o,slippage:s,add:a}){var b,g,P,A;let u=Z.getSqrtPriceX64FromTick(n),c=Z.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(Z.priceToSqrtPriceX64(new F(t.price),t.mintA.decimals,t.mintB.decimals),u,c,o,a),[p,d]=[Ae(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Ae(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[Ae(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),Ae(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:o,amountA:p,amountB:d,amountSlippageA:y,amountSlippageB:f,expirationTime:sn(p.expirationTime,d.expirationTime)}}static async fetchComputeClmmInfo({owner:e,connection:t,poolInfo:n}){let i=await t.getAccountInfo(new $t(n.id));if(!i)throw new Error(`pool not found ${n.id}`);let o=pi.decode(i.data),s=lt(e,new $t(n.id)).publicKey,a=await He.fetchExBitmaps({connection:t,exBitmapAddress:[s],batchRequest:!1});return D(M({},o),{id:new $t(n.id),programId:new $t(n.programId),mintA:n.mintA,mintB:n.mintB,ammConfig:D(M({},n.config),{id:new $t(n.config.id),fundOwner:""}),currentPrice:new F(n.price),exBitmapInfo:a[s.toBase58()],startTime:o.startTime.toNumber()})}};function Eh({poolInfo:r,tickLower:e,tickUpper:t,amountA:n,amountB:i,slippage:o,add:s,epochInfo:a,amountHasFee:u}){var A,h,T,I;let[c,l,m,p]=e<t?[e,t,n,i]:[t,e,i,n],d=Z.priceToSqrtPriceX64(new F(r.price),r.mintA.decimals,r.mintB.decimals),y=Z.getSqrtPriceX64FromTick(c),f=Z.getSqrtPriceX64FromTick(l),[b,g]=[Ae(m,(A=r.mintA.extensions)==null?void 0:A.feeConfig,a,!u),Ae(p,(h=r.mintB.extensions)==null?void 0:h.feeConfig,a,!u)],P=ce.getLiquidityFromTokenAmounts(d,y,f,b.amount.sub((T=b.fee)!=null?T:me),g.amount.sub((I=g.fee)!=null?I:me));return ce.getAmountsOutFromLiquidity({poolInfo:r,tickLower:e,tickUpper:t,liquidity:P,slippage:o,add:s,epochInfo:a,amountAddFee:!u})}var $=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),o=i.div(n);return i.mod(n).eq(me)||(o=o.add(at)),o}static mulDivFloor(e,t,n){if(n.eq(me))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(me))throw new Error("division by 0");return e.mul(t).add(n.sub(at)).div(n)}static x64ToDecimal(e,t){return new F(e.toString()).div(F.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(F.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(mi).sub(t).mod(mi)}};function Ee(r,e){return Qo(r.mul(e),64,256)}function ep(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Qo(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var Z=class{static sqrtPriceX64ToPrice(e,t,n){return $.x64ToDecimal(e).pow(2).mul(F.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return $.decimalToX64(e.mul(F.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(me))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(me))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(me))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(me))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(me))return e;let o=t.shln(dr);if(i){let s=o,a=o.add(n.mul(e));return a.gte(s)?$.mulDivCeil(s,e,a):$.mulDivRoundingUp(s,at,s.div(e).add(n))}else{let s=n.mul(e);if(!o.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=o.sub(s);return $.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let o=n.shln(dr);if(i)return e.add(o.div(t));{let s=$.mulDivRoundingUp(o,at,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<Qe||e>et)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=Ee(n,new re("18444899583751176192"))),(t&4)!=0&&(n=Ee(n,new re("18443055278223355904"))),(t&8)!=0&&(n=Ee(n,new re("18439367220385607680"))),(t&16)!=0&&(n=Ee(n,new re("18431993317065453568"))),(t&32)!=0&&(n=Ee(n,new re("18417254355718170624"))),(t&64)!=0&&(n=Ee(n,new re("18387811781193609216"))),(t&128)!=0&&(n=Ee(n,new re("18329067761203558400"))),(t&256)!=0&&(n=Ee(n,new re("18212142134806163456"))),(t&512)!=0&&(n=Ee(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=Ee(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=Ee(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=Ee(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=Ee(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=Ee(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=Ee(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=Ee(n,new re("696457651848324352"))),(t&131072)!=0&&(n=Ee(n,new re("26294789957507116"))),(t&262144)!=0&&(n=Ee(n,new re("37481735321082"))),e>0&&(n=uu.div(n)),n}static getTickFromPrice(e,t,n){return Z.getTickFromSqrtPriceX64(Z.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Rt)||e.lt(Ct))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),i=ep(n,32,128),o=new re("8000000000000000","hex"),s=0,a=new re(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new re(0))&&s<cu;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(o.mul(y)),o=o.shrn(1),s+=1}let c=a.shrn(32),m=i.add(c).mul(new re(lu)),p=Qo(m.sub(new re(mu)),64,128).toNumber(),d=Qo(m.add(new re(du)),64,128).toNumber();return p==d?p:Z.getSqrtPriceX64FromTick(d).lte(e)?d:p}},fn=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=Z.getTickFromSqrtPriceX64(Z.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let o=fn.getTickWithPriceAndTickspacing(e,t,n,i),s=Z.getSqrtPriceX64FromTick(o);return Z.sqrtPriceX64ToPrice(s,n,i)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(me))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(dr),s=t.sub(e);return i?$.mulDivRoundingUp($.mulDivCeil(o,s,t),at,e):$.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(me))throw new Error("sqrtPriceX64A must greater than 0");return i?$.mulDivCeil(n,t.sub(e),ut):$.mulDivFloor(n,t.sub(e),ut)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let o=n.mul(e).mul(t),s=t.sub(e),a=o.div(s);return i?$.mulDivRoundingUp(a,at,zo):a.shrn(dr)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),$.mulDivFloor(n,zo,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,i,!1),a=ce.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,i,o),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,i,o),a=ce.getTokenAmountBFromLiquidity(t,e,i,o);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,i,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,o,s,a){let{amountA:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,i,s),l=o?1+a:1-a,m=new re(new F(u.toString()).mul(l).toFixed(0)),p=new re(new F(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:p}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:o,add:s,epochInfo:a,amountAddFee:u}){var P,A,h,T;let c=Z.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),l=Z.getSqrtPriceX64FromTick(t),m=Z.getSqrtPriceX64FromTick(n),p=s?1+o:1-o,d=ce.getAmountsFromLiquidity(c,l,m,i,s),[y,f]=[Ae(d.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,u),Ae(d.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[Ae(new re(new F(d.amountA.toString()).mul(p).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),Ae(new re(new F(d.amountB.toString()).mul(p).toFixed(0)),(T=e.mintB.extensions)==null?void 0:T.feeConfig,a,u)];return{liquidity:i,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:sn(y.expirationTime,f.expirationTime)}}},pn=class{static swapCompute(e,t,n,i,o,s,a,u,c,l,m,p,d,y){if(p.eq(me))throw new Error("amountSpecified must not be 0");if(y||(y=s?Ct.add(at):Rt.sub(at)),s){if(y.lt(Ct))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(Rt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let f=p.gt(me),b={amountSpecifiedRemaining:p,amountCalculated:me,sqrtPriceX64:m,tick:c>d?Math.min(d+le.tickCount(l)-1,c):d,accounts:[],liquidity:u,feeAmount:new re(0)},g=d,P=n[d],A=0,h=!s&&P.startTickIndex===b.tick;for(;!b.amountSpecifiedRemaining.eq(me)&&!b.sqrtPriceX64.eq(y);){if(A>10)throw Error("liquidity limit");let T={};T.sqrtPriceStartX64=b.sqrtPriceX64;let I=G.nextInitTick(P,b.tick,l,s,h),B=I||null,x=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let N=He.nextInitializedTickArrayStartIndex({tickCurrent:b.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:o},g,s);if(!N.isExist)throw Error("swapCompute LiquidityInsufficient");g=N.nextStartIndex;let{publicKey:E}=ge(e,t,g);x=E,P=n[g],B=G.firstInitializedTick(P,s)}T.tickNext=B.tick,T.initialized=B.liquidityGross.gtn(0),d!==g&&x&&(b.accounts.push(x),d=g),T.tickNext<Qe?T.tickNext=Qe:T.tickNext>et&&(T.tickNext=et),T.sqrtPriceNextX64=Z.getSqrtPriceX64FromTick(T.tickNext);let R;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?R=y:R=T.sqrtPriceNextX64,[b.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=pn.swapStepCompute(b.sqrtPriceX64,R,b.liquidity,b.amountSpecifiedRemaining,a),b.feeAmount=b.feeAmount.add(T.feeAmount),f?(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),b.amountCalculated=b.amountCalculated.sub(T.amountOut)):(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.add(T.amountOut),b.amountCalculated=b.amountCalculated.add(T.amountIn.add(T.feeAmount))),b.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let N=B.liquidityNet;s&&(N=N.mul(Ft)),b.liquidity=ce.addDelta(b.liquidity,N)}h=T.tickNext!=b.tick&&!s&&P.startTickIndex===T.tickNext,b.tick=s?T.tickNext-1:T.tickNext}else if(b.sqrtPriceX64!=T.sqrtPriceStartX64){let N=Z.getTickFromSqrtPriceX64(b.sqrtPriceX64);h=N!=b.tick&&!s&&P.startTickIndex===N,b.tick=N}++A}try{let{nextStartIndex:T,isExist:I}=le.nextInitializedTickArray(b.tick,l,s,i,o);I&&d!==T&&(b.accounts.push(ge(e,t,T).publicKey),d=T)}catch{}return{amountCalculated:b.amountCalculated,feeAmount:b.feeAmount,sqrtPriceX64:b.sqrtPriceX64,liquidity:b.liquidity,tickCurrent:b.tick,accounts:b.accounts}}static swapStepCompute(e,t,n,i,o){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),u=i.gte(me);if(u){let l=$.mulDivFloor(i,di.sub(new re(o.toString())),di);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=Z.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Ft).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=Z.getNextSqrtPriceX64FromOutput(e,n,i.mul(Ft),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(i.mul(Ft))&&(s.amountOut=i.mul(Ft)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=$.mulDivCeil(s.amountIn,new re(o),di.sub(new re(o))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var _e=60,dn=512,G=class{static getTickArrayAddressByTick(e,t,n,i){let o=G.getTickArrayStartIndexByTick(n,i),{publicKey:s}=ge(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=G.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=_e)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=le.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*_e,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*_e,o=Math.floor(t/i)+512,s=Math.abs(o);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*_e:e+t*_e}static mergeTickArrayBitmap(e){let t=new tp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,o){let s=Math.floor(i/(n*_e));return[...G.searchLowBitFromStart(e,t,s-1,o,n),...G.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return G.searchHightBitFromStart(e,t,0,dn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,o){let s=[],a=G.getAllInitializedTickArrayStartIndex(n,i,o);for(let u of a){let{publicKey:c}=ge(e,t,u);s.push({tickArrayStartIndex:u,tickArrayAddress:c})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>G.mergeTickArrayBitmap(c)),a=[];for(;n>=-7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n--,a.length===i)break}let u=le.tickCount(o);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>G.mergeTickArrayBitmap(c)),a=[];for(;n<7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n++,a.length===i)break}let u=le.tickCount(o);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Qe||e>et}static nextInitTick(e,t,n,i,o){if(le.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(o||(a=a+1);a<_e;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=_e-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<_e;){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 i=Z.getSqrtPriceX64FromTick(t),o=Z.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new F(1).div(o),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new F(1).div(t),o=fn.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=Z.getSqrtPriceX64FromTick(o),a=Z.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new F(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=Z.getSqrtPriceX64FromTick(t),o=Z.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new F(1).div(o),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new F(1).div(t),o=fn.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=Z.getSqrtPriceX64FromTick(o),a=Z.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new F(1).div(a)}}};var aT=L([pe(8),_("bump"),Bt("index"),S(""),ze("protocolFeeRate"),ze("tradeFeeRate"),Bt("tickSpacing"),q(w(),8,"")]),np=L([ze("blockTimestamp"),z("sqrtPriceX64"),z("cumulativeTimePriceX64"),q(z(),1,"")]),Ho=L([pe(8),qe("initialized"),S("poolId"),q(np,1e3,"observations"),q(z(),5,"")]),rp=L([_("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),z("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),S("tokenMint"),S("tokenVault"),S("creator"),z("rewardGrowthGlobalX64")]),pi=L([pe(8),_("bump"),S("ammConfig"),S("creator"),S("mintA"),S("mintB"),S("vaultA"),S("vaultB"),S("observationId"),_("mintDecimalsA"),_("mintDecimalsB"),Bt("tickSpacing"),z("liquidity"),z("sqrtPriceX64"),De("tickCurrent"),Bt("observationIndex"),Bt("observationUpdateDuration"),z("feeGrowthGlobalX64A"),z("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),z("swapInAmountTokenA"),z("swapOutAmountTokenB"),z("swapInAmountTokenB"),z("swapOutAmountTokenA"),_("status"),q(_(),7,""),q(rp,3,"rewardInfos"),q(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),q(w(),15*4-3,"padding")]),ip=L([z("growthInsideLastX64"),w("rewardAmountOwed")]),fi=L([pe(8),_("bump"),S("nftMint"),S("poolId"),De("tickLower"),De("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(ip,3,"rewardInfos"),q(w(),8,"")]),uT=L([pe(8),_("bump"),S("poolId"),De("tickLowerIndex"),De("tickUpperIndex"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(z(),3,"rewardGrowthInside"),q(w(),8,"")]),op=L([De("tick"),ga("liquidityNet"),z("liquidityGross"),z("feeGrowthOutsideX64A"),z("feeGrowthOutsideX64B"),q(z(),3,"rewardGrowthsOutsideX64"),q(ze(),13,"")]),pr=L([pe(8),S("poolId"),De("startTickIndex"),q(op,_e,"ticks"),_("initializedTickCount"),q(_(),115,"")]),bu=L([pe(329),q(S(),100,"whitelistMints")]),yu=L([pe(8),S("poolId"),q(q(w(),8),Yo,"positiveTickArrayBitmap"),q(q(w(),8),Yo,"negativeTickArrayBitmap")]);var Au=ae("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],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]},Be=class{static createPoolInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y){let f=L([z("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Rn.programId,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:d,startTime:y},g);let P=Buffer.from([...kt.createPool,...g]);return new Pt({keys:b,programId:e,data:P})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:i,mintA:o,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ye({fromPublicKey:i,programId:n}),[p,d]=[new v(o.address),new v(s.address)],y=[Rn.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Ho.span),space:Ho.span,programId:n})],{publicKey:f}=su(n,a,p,d),{publicKey:b}=Xo(n,f,p),{publicKey:g}=Xo(n,f,d);return y.push(this.createPoolInstruction(n,f,i,a,m.publicKey,p,b,new v(o.programId||Ue),d,g,new v(s.programId||Ue),lt(n,f).publicKey,u,c)),{signers:[],instructions:y,instructionTypes:[V.CreateAccount,V.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P,A,h,T,I,B,x,R,N){let E=L([De("tickLowerIndex"),De("tickUpperIndex"),De("tickArrayLowerStartIndex"),De("tickArrayUpperStartIndex"),z("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),_("optionBaseFlag"),qe("baseFlag")]),Q=[...N?[{pubkey:N,isSigner:!1,isWritable:!0}]:[]],W=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:nt,isSigner:!1,isWritable:!1},{pubkey:Rn.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:gu,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...Q],j=Buffer.alloc(E.span);E.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:T,liquidity:I,amountMaxA:B,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},j);let ee=Buffer.from([...kt.openPosition,...j]);return new Pt({keys:W,programId:e,data:ee})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[p,d]=[new v(e.programId),new v(e.id)],y;if(l)y=new v((await l(1))[0]);else{let x=jo.generate();m.push(x),y=x.publicKey}let f=G.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=G.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(p,d,f),{publicKey:P}=ge(p,d,b),{publicKey:A}=ye(n.wallet,y,Ue),{publicKey:h}=li(y),{publicKey:T}=ct(p,y),{publicKey:I}=mn(p,d,i,o),B=this.openPositionFromLiquidityInstruction(p,n.feePayer,d,n.wallet,y,A,h,I,g,P,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),i,o,f,b,s,a,u,c);return{signers:m,instructions:[B],instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:T,protocolPosition:I}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[p,d]=[new v(e.programId),new v(e.id)],y;if(l)y=new v((await l(1))[0]);else{let x=jo.generate();m.push(x),y=x.publicKey}let f=G.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=G.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(p,d,f),{publicKey:P}=ge(p,d,b),{publicKey:A}=ye(n.wallet,y,Ue),{publicKey:h}=li(y),{publicKey:T}=ct(p,y),{publicKey:I}=mn(p,d,i,o),B=this.openPositionFromBaseInstruction(p,n.feePayer,d,n.wallet,y,A,h,I,g,P,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),i,o,f,b,c,s,a,u,He.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(p,d).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:T,protocolPosition:I},instructions:[B],signers:m,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P,A,h,T,I,B,x,R,N){let E=L([De("tickLowerIndex"),De("tickUpperIndex"),De("tickArrayLowerStartIndex"),De("tickArrayUpperStartIndex"),z("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),_("optionBaseFlag"),qe("baseFlag")]),Q=[...N?[{pubkey:N,isSigner:!1,isWritable:!0}]:[]],W=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:nt,isSigner:!1,isWritable:!1},{pubkey:Rn.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:gu,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...Q],j=Buffer.alloc(E.span);E.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:T,liquidity:new wu(0),amountMaxA:B==="MintA"?x:R,amountMaxB:B==="MintA"?R:x,withMetadata:I==="create",baseFlag:B==="MintA",optionBaseFlag:1},j);let ee=Buffer.from([...kt.openPosition,...j]);return new Pt({keys:W,programId:e,data:ee})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,p=[];if(l)m=new v((await l(1))[0]);else{let x=jo.generate();p.push(x),m=x.publicKey}let[d,y]=[new v(e.programId),new v(e.id)],f=G.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=G.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(d,y,f),{publicKey:P}=ge(d,y,b),{publicKey:A}=ye(n.wallet,m,Ue),{publicKey:h}=li(m),{publicKey:T}=ct(d,m),{publicKey:I}=mn(d,y,i,o),B=this.openPositionFromLiquidityInstruction(d,n.wallet,y,n.wallet,m,A,h,I,g,P,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(t.mintA.address),new v(t.mintB.address),i,o,f,b,s,a,u,c,He.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(d,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:T,protocolPosition:I},instructions:[B],signers:p,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,o){let s=L([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Rn.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...kt.closePosition,...u]);return new Pt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i}){let o=new v(e.programId),{publicKey:s}=ye(n.wallet,i.nftMint,Ue),{publicKey:a}=ct(o,i.nftMint),u=[];return u.push(this.closePositionInstruction(o,n.wallet,i.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P){let A=L([z("liquidity"),w("amountMaxA"),w("amountMaxB"),_("optionBaseFlag"),qe("baseFlag")]),h=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],I=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},I);let B=Buffer.from([...kt.increaseLiquidity,...I]);return new Pt({keys:T,programId:e,data:B})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMaxA:s,amountMaxB:a}){let[u,c]=[new v(e.programId),new v(e.id)],l=G.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=G.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=ge(u,c,l),{publicKey:d}=ge(u,c,m),{publicKey:y}=ye(i.wallet,n.nftMint,Ue),{publicKey:f}=ct(u,n.nftMint),{publicKey:b}=mn(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,i.wallet,y,f,c,b,p,d,i.tokenAccountA,i.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,s,a,He.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(u,c).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:d,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:o,baseAmount:s,otherAmountMax:a}){let[u,c]=[new v(e.programId),new v(e.id)],l=G.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=G.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=ge(u,c,l),{publicKey:d}=ge(u,c,m),{publicKey:y}=ye(i.wallet,n.nftMint,Ue),{publicKey:f}=ct(u,n.nftMint),{publicKey:b}=mn(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:d,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,y,f,c,b,p,d,i.tokenAccountA,i.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,s,a,He.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(u,c).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P){let A=L([z("liquidity"),w("amountMaxA"),w("amountMaxB"),_("optionBaseFlag"),qe("baseFlag")]),h=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],I=Buffer.alloc(A.span);A.encode({liquidity:new wu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},I);let B=Buffer.from([...kt.increaseLiquidity,...I]);return new Pt({keys:T,programId:e,data:B})}static decreaseLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P,A){let h=L([z("liquidity"),w("amountMinA"),w("amountMinB")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],B=Buffer.alloc(h.span);h.encode({liquidity:b,amountMinA:g,amountMinB:P},B);let x=Buffer.from([...kt.decreaseLiquidity,...B]);return new Pt({keys:I,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new v(e.programId),new v(e.id)],m=G.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=G.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=ge(c,l,m),{publicKey:y}=ge(c,l,p),{publicKey:f}=ye(i.wallet,n.nftMint,u),{publicKey:b}=ct(c,n.nftMint),{publicKey:g}=mn(c,l,n.tickLower,n.tickUpper),P=[];for(let h=0;h<e.rewardDefaultInfos.length;h++)P.push({poolRewardVault:new v(t.rewardInfos[h].vault),ownerRewardVault:i.rewardAccounts[h],rewardMint:new v(e.rewardDefaultInfos[h].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,i.wallet,f,b,l,g,d,y,i.tokenAccountA,i.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),P,o,s,a,He.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,p])?lt(c,l).publicKey:void 0)),{address:{tickArrayLower:d,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[V.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g){let P=L([w("amount"),w("otherAmountThreshold"),z("sqrtPriceLimitX64"),qe("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(B=>({pubkey:B,isSigner:!1,isWritable:!0}))],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],T=Buffer.alloc(P.span);P.encode({amount:d,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},T);let I=Buffer.from([...kt.swap,...T]);return new Pt({keys:h,programId:e,data:I})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,inputMint:i,amountIn:o,amountOutMin:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new v(e.programId),new v(e.id)],[m,p]=[new v(t.vault.A),new v(t.vault.B)],[d,y]=[new v(e.mintA.address),new v(e.mintB.address)],f=e.mintA.address===i.toString(),b=[this.swapInstruction(c,n.wallet,l,new v(e.config.id),f?n.tokenAccountA:n.tokenAccountB,f?n.tokenAccountB:n.tokenAccountA,f?m:p,f?p:m,f?d:y,f?y:d,u,m,o,s,a,!0,lt(c,l).publicKey)];return{signers:[],instructions:b,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,o,s,a,u,c,l,m,p){let d=L([w("openTime"),w("endTime"),z("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Rn.programId,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(d.span);d.encode({openTime:U(l),endTime:U(m),emissionsPerSecondX64:p},f);let b=Buffer.from([...kt.initReward,...f]);return new Pt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new v(e.programId),new v(e.id)],a=au(o,s,i.mint).publicKey,u=mr(o).publicKey,c=[this.initRewardInstruction(o,n.wallet,s,u,new v(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,o,s,a,u,c,l,m,p){let d=L([_("rewardIndex"),z("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(d.span);d.encode({rewardIndex:c,emissionsPerSecondX64:p,openTime:U(l),endTime:U(m)},f);let b=Buffer.from([...kt.setRewardEmissions,...f]);return new Pt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new v(e.programId),new v(e.id)],a,u,c;for(let p=0;p<e.rewardDefaultInfos.length;p++)e.rewardDefaultInfos[p].mint.address===i.mint.toString()&&(a=p,u=new v(t.rewardInfos[p].vault),c=new v(t.rewardInfos[p].mint.address));(a===void 0||u===void 0)&&Au.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=mr(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new v(e.config.id),n.tokenAccount,u,c,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,o,s,a){let u=L([_("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...kt.collectReward,...l]);return new Pt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[o,s]=[new v(e.programId),new v(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,u=new v(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&Au.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(o,n.wallet,s,n.tokenAccount,u,i,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[V.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:i,amountOut:o,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new v(e.programId),new v(e.id)],[m,p]=[new v(t.vault.A),new v(t.vault.B)],[d,y]=[new v(e.mintA.address),new v(e.mintB.address)],f=e.mintA.address===i.toString(),b=[this.swapInstruction(c,n.wallet,l,new v(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?p:m,f?m:p,f?d:y,f?y:d,u,m,o,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[V.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as cp}from"@solana/web3.js";import{PublicKey as ap}from"@solana/web3.js";import Pu from"bn.js";var ku=new Pu(25),hu=new Pu(1e4),sp={4:3,5:3};var up=ae("Raydium_liquidity_serum");function Tu({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let o=t.concat(Buffer.from([n]),Buffer.alloc(7));i=ap.createProgramAddressSync(o,r)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:i,nonce:n}}throw up.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}import br from"bn.js";function $o({programId:r}){let{publicKey:e}=oe([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function yn({name:r,programId:e,marketId:t}){let{publicKey:n}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function lp({programId:r,marketId:e}){let{publicKey:t}=oe([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function mp({programId:r}){return oe([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function Iu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:u}){let c=yn({name:"amm_associated_seed",programId:a,marketId:t}),l=yn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:p}=mp({programId:a}),d=yn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=yn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=yn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=lp({programId:a,marketId:t}),g=yn({name:"target_associated_seed",programId:a,marketId:t}),P=yn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=Tu({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:o,quoteDecimals:s,lpDecimals:o,version:r,programId:a,authority:m,nonce:p,baseVault:d,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:cp.default,configId:$o({programId:a})}}var Zo;async function FT({connection:r,poolKeysList:e,config:t}){Zo||(Zo=new Kn({connection:r}),await Zo.initStableModelLayout());let n=e.map(s=>tu({poolKeys:s}));return(await $s(r,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=Js(s,"GetPoolData"),u=new br(Mt(a,"status")),c=Number(Mt(a,"coin_decimals")),l=Number(Mt(a,"pc_decimals")),m=Number(Mt(a,"lp_decimals")),p=new br(Mt(a,"pool_coin_amount")),d=new br(Mt(a,"pool_pc_amount")),y=new br(Mt(a,"pool_lp_supply")),f="0";try{f=Mt(a,"pool_open_time")}catch{}return{status:u,baseDecimals:c,quoteDecimals:l,lpDecimals:m,baseReserve:p,quoteReserve:d,lpSupply:y,startTime:new br(f)}})}import je from"bn.js";var gr=class extends xe{constructor(t){super(t);this.stableLayout=new Kn({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:o}){let s=new je(new F(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=Xa(t[o?"mintB":"mintA"]),[u,c]=[new je(new F(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new je(new F(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new je(new F(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,F.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",o?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",o?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let m=o?"base":"quote";this.logDebug("input side:",m);let p=Se;s.isZero()||(p=m==="base"?Wr(s.mul(c),u):Wr(s.mul(u),c));let d=Wr(s.mul(l),new je(m==="base"?t.mintAmountA:t.mintAmountB).mul(new je(10).pow(new je(t[m==="base"?"mintA":"mintB"].decimals)))),f=new ve(new je(1)).add(i).mul(p).quotient,b=new he(a,p),g=new he(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:d}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,amountInA:i,amountInB:o,fixedSide:s,config:a,txVersion:u,computeBudgetConfig:c}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",o),(i.isZero()||o.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:o.toFixed()});let{account:l}=this.scope,{bypassAssociatedCheck:m,checkCreateATAOwner:p}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},a),[d,y]=[i.token,o.token],f=await l.getCreatedTokenAccount({mint:d.mint,associatedOnly:!1}),b=await l.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1});!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let g=await l.getCreatedTokenAccount({mint:new ot(n.lpMint.address)}),P=[d,y],A=[f,b],h=[i.raw,o.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",s),T==="quote"?(P.reverse(),A.reverse(),h.reverse(),I=s==="a"?"quote":"base"):T==="base"&&(I=s==="a"?"base":"quote");let[B,x]=P,[R,N]=A,[E,Q]=h,W=await this.getAmmPoolKeys(n.id),j=this.createTxBuilder(),Wt=await l.handleTokenAccount({side:"in",amount:E,mint:B.mint,tokenAccount:R,bypassAssociatedCheck:m,checkCreateATAOwner:p}),{tokenAccount:ee}=Wt,se=Te(Wt,["tokenAccount"]);j.addInstruction(se);let Kr=await l.handleTokenAccount({side:"in",amount:Q,mint:x.mint,tokenAccount:N,bypassAssociatedCheck:m,checkCreateATAOwner:p}),{tokenAccount:ft}=Kr,Mn=Te(Kr,["tokenAccount"]);j.addInstruction(Mn);let _n=await l.handleTokenAccount({side:"out",amount:0,mint:new ot(n.lpMint.address),tokenAccount:g,bypassAssociatedCheck:m,checkCreateATAOwner:p}),{tokenAccount:Ii}=_n,xi=Te(_n,["tokenAccount"]);return j.addInstruction(xi),j.addInstruction({instructions:[Ja({poolInfo:n,poolKeys:W,userKeys:{baseTokenAccount:ee,quoteTokenAccount:ft,lpTokenAccount:Ii,owner:this.scope.ownerPubKey},baseAmountIn:E,quoteAmountIn:Q,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5AddLiquidity:V.AmmV4AddLiquidity],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),j.addCustomComputeBudget(c),u===0&&await j.buildV0(),j.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,amountIn:i,config:o,txVersion:s,computeBudgetConfig:a}=t,u=await this.getAmmPoolKeys(n.id),[c,l,m]=[new ot(n.mintA.address),new ot(n.mintB.address),new ot(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,d=await p.getCreatedTokenAccount({mint:m,associatedOnly:!1});d||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let y=await p.getCreatedTokenAccount({mint:c}),f=await p.getCreatedTokenAccount({mint:l}),b=this.createTxBuilder(),{bypassAssociatedCheck:g,checkCreateATAOwner:P}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},o),B=await p.handleTokenAccount({side:"out",amount:0,mint:c,tokenAccount:y,bypassAssociatedCheck:g,checkCreateATAOwner:P}),{tokenAccount:A}=B,h=Te(B,["tokenAccount"]);b.addInstruction(h);let x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:g,checkCreateATAOwner:P}),{tokenAccount:T}=x,I=Te(x,["tokenAccount"]);return b.addInstruction(I),b.addInstruction({instructions:[qo({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:d,baseTokenAccount:A,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity]}),b.addCustomComputeBudget(a),s===0?await b.buildV0():b.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,tokenProgram:m=yi,checkCreateATAOwner:p=!0,getEphemeralSigners:d,txVersion:y}){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 f=this.createTxBuilder();f.addCustomComputeBudget(c);let b={};for(let ee of this.scope.account.tokenAccountRawInfos)(b[ee.accountInfo.mint.toString()]===void 0||ye(this.scope.ownerPubKey,ee.accountInfo.mint,yi).publicKey.equals(ee.pubkey))&&(b[ee.accountInfo.mint.toString()]=ee.pubkey);let g=b[t.lpMint.address];if(g===void 0)throw Error("find lp account error in trade accounts");let P=i.add(a!=null?a:new je(0)),A=t.mintA.address===de.WSOL.mint.toString(),h=t.mintB.address===de.WSOL.mint.toString(),{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:yi,mint:new ot(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!0,checkCreateATAOwner:p});if(f.addInstruction(I||{}),T===void 0)throw new Error("base token account not found");let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:yi,mint:new ot(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(f.addInstruction(x||{}),B===void 0)throw new Error("quote token account not found");if(b[t.mintA.address]=T,b[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let ee=[];for(let Wt of s.rewardInfos){let Kr=Wt.mint.address===de.WSOL.mint.toString();if(b[Wt.mint.address])ee.push(b[Wt.mint.address]);else{let{account:_n,instructionParams:fs}=await this.scope.account.getOrCreateTokenAccount({mint:new ot(Wt.mint.address),tokenProgram:m,owner:this.scope.ownerPubKey,skipCloseAccount:!Kr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});_n||this.logAndCreateError("farm reward account not found:",Wt.mint.address),fs&&f.addInstruction(fs),ee.push(_n)}}let se=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],ft={amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:se,lpAccount:g,rewardAccounts:ee},Mn=At[s.programId],Ii=Mn===6?or(ft):Mn===5?sr(ft):ar(ft),xi={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};f.addInstruction({instructions:[Ii],instructionTypes:[xi[Mn]]})}let R=await this.getAmmPoolKeys(t.id),N=qo({poolInfo:t,poolKeys:R,userKeys:{lpTokenAccount:g,baseTokenAccount:T,quoteTokenAccount:B,owner:this.scope.ownerPubKey},amountIn:P});f.addInstruction({instructions:[N],instructionTypes:[t.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]});let[E,Q]=t.mintA.address===n.mintA.address?[T,B]:[B,T],W=await this.scope.clmm.getClmmPoolKeys(t.id),j=await Be.openPositionFromBaseInstructions(D(M({poolInfo:n,poolKeys:W,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:E,tokenAccountB:Q},withMetadata:"create"},o),{base:u,getEphemeralSigners:d}));return f.addInstruction({instructions:[...j.instructions],signers:j.signers,instructionTypes:[...j.instructionTypes],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),y===0?f.sizeCheckBuildV0():f.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:o,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:p,txVersion:d,feeDestinationId:y,computeBudgetConfig:f}){var Q;let b=c.feePayer||((Q=this.scope.owner)==null?void 0:Q.publicKey),g=c.useSOLBalance&&i.mint.equals(xu),P=c.useSOLBalance&&o.mint.equals(xu),A=this.createTxBuilder(),{account:h,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(T||{});let{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:P?{payer:b,amount:a}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:l,checkCreateATAOwner:m});if(A.addInstruction(B||{}),h===void 0||I===void 0)throw Error("you don't has some token account");let x=Iu({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:o.mint,baseDecimals:i.decimals,quoteDecimals:o.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:N,instructionType:E}=eu(D(M({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:h,userPcVault:I,userLpVault:ye(this.scope.ownerPubKey,x.lpMint,p).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[N],instructionTypes:[E]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:d,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=$o({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return za.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:o,slippage:s}){if(i!==t.mintA.address&&i!==t.mintA.address)throw new Error("toke not match");if(o!==t.mintB.address&&o!==t.mintB.address)throw new Error("toke not match");let{baseReserve:a,quoteReserve:u}=t,c=[a,u],l=i==t.mintA.address?"base":"quote";l==="quote"&&c.reverse();let[m,p]=c,d=t.programId===Ji.toBase58(),y;if(d)y=new F(p.toString()).div(m.toString());else{let x=Za(this.stableLayout.stableModelData,a.toNumber(),u.toNumber(),!1);l==="quote"?y=new F(1e6).div(x*1e6):y=new F(x*1e6).div(1e6)}let f=n,b=new je(0),g=new je(0);if(!f.isZero())if(d){g=zt(f.mul(ku),hu);let x=f.sub(g),R=m.add(x);b=p.mul(x).div(R)}else{g=f.mul(new je(2)).div(new je(1e4));let x=f.sub(g);l==="quote"?b=new je(Ha(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber())):b=new je(ja(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber()))}let P=new je(new F(b.toString()).mul(1-s).toFixed(0)),A=b,h=P,T=new F(b.toString()).div(new F(f.sub(g).toString()).toFixed(0));!f.isZero()&&!b.isZero()&&(T=new F(b.toString()).div(f.sub(g).toString()));let I=y.sub(T).div(y).mul(100);return{amountOut:A,minAmountOut:h,currentPrice:y,executionPrice:T,priceImpact:I,fee:g}}async swap({poolInfo:t,amountIn:n,amountOut:i,inputMint:o,fixedSide:s,txVersion:a,computeBudgetConfig:u}){let c=this.createTxBuilder(),[l,m]=o===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],p=await this.scope.account.getCreatedTokenAccount({mint:new ot(l.address),programId:new ot(l.programId),associatedOnly:!1}),d=await this.scope.account.getCreatedTokenAccount({mint:new ot(m.address),programId:new ot(m.programId),associatedOnly:!1}),h=await this.scope.account.handleTokenAccount({side:"in",amount:n,mint:new ot(l.address),tokenAccount:p,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:y}=h,f=Te(h,["tokenAccount"]);c.addInstruction(f);let T=await this.scope.account.handleTokenAccount({side:"out",amount:0,mint:new ot(m.address),tokenAccount:d,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:b}=T,g=Te(T,["tokenAccount"]);c.addInstruction(g);let P=await this.getAmmPoolKeys(t.id),A=4;return t.pooltype.includes("StablePool")&&(A=5),c.addInstruction({instructions:[ui({version:A,poolKeys:P,userKeys:{tokenAccountIn:y,tokenAccountOut:b,owner:this.scope.ownerPubKey},amountIn:n,amountOut:i,fixedSide:s})],instructionTypes:[A===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),c.addCustomComputeBudget(u),c.versionBuild({txVersion:a})}};import{PublicKey as ue}from"@solana/web3.js";import mt from"bn.js";var wr=class extends xe{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)||ue.default,mint1:i,mint2:o,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,p=this.createTxBuilder(),[d,y,f]=new mt(new ue(i.address).toBuffer()).gt(new mt(new ue(o.address).toBuffer()))?[o,i,new F(1).div(a)]:[i,o,a],b=Z.priceToSqrtPriceX64(f,d.decimals,y.decimals),g=await Be.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:d,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return p.addInstruction(g),p.addCustomComputeBudget(c),p.versionBuild({txVersion:m,extInfo:{address:D(M({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:d,mintB:y,openTime:u.toString(),vault:{A:g.address.mintAVault.toString(),B:g.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:M({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:d,mintB:y,feeRate:s.tradeFeeRate,openTime:u.toString(),programId:t.toString(),price:f.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:[]}},pu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:p,computeBudgetConfig:d,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,P=n.useSOLBalance&&e.mintA.address===te.toString(),A=n.useSOLBalance&&e.mintB.address===te.toString(),[h,T]=s==="MintA"?[a,u]:[u,a],{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:c,checkCreateATAOwner:l});I&&(b=I),f.addInstruction(B||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||T.isZero()?{payer:this.scope.ownerPubKey,amount:T}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let N=t||await this.getClmmPoolKeys(e.id),E=await Be.openPositionFromBaseInstructions({poolInfo:e,poolKeys:N,ownerInfo:D(M({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:p});return f.addInstruction(E),f.addCustomComputeBudget(d),f.versionBuild({txVersion:y,extInfo:E.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:o,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:p,getEphemeralSigners:d}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===te.toBase58(),P=n.useSOLBalance&&e.mintB.address===te.toBase58(),{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(h||{});let{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:c,checkCreateATAOwner:l});T&&(b=T),y.addInstruction(I||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id),x=await Be.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:i,amountMaxB:o,withMetadata:m,getEphemeralSigners:d});return y.addInstruction(x),y.versionBuild({txVersion:p,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,ownerPosition:n,amountMaxA:i,amountMaxB:o,liquidity:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,p=this.createTxBuilder(),d,y,f=a.useSOLBalance&&t.mintA.address===te.toString(),b=a.useSOLBalance&&t.mintB.address===te.toString(),{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(d=g),p.addInstruction(P||{});let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b?{payer:this.scope.ownerPubKey,amount:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),p.addInstruction(h||{}),!d&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getClmmPoolKeys(t.id),I=Be.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:d,tokenAccountB:y},liquidity:s,amountMaxA:i,amountMaxB:o});return p.addInstruction(I),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m,extInfo:{address:I.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:i,baseAmount:o,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,p=this.createTxBuilder(),d,y,f=a.useSOLBalance&&t.mintA.address===te.toString(),b=a.useSOLBalance&&t.mintB.address===te.toString(),{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:i==="MintA"?o:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(d=g),p.addInstruction(P||{});let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),p.addInstruction(h||{}),!d&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getClmmPoolKeys(t.id),I=Be.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:T,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:d,tokenAccountB:y},base:i,baseAmount:o,otherAmountMax:s});return p.addInstruction(I),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m,extInfo:{address:I.address}})}async decreaseLiquidity(e){let{poolInfo:t,ownerPosition:n,ownerInfo:i,amountMinA:o,amountMinB:s,liquidity:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),d=i.useSOLBalance&&t.mintA.address===te.toString(),y=i.useSOLBalance&&t.mintB.address===te.toString(),f,b,{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!d,associatedOnly:d?!1:u,checkCreateATAOwner:c});f=g,P&&p.addInstruction(P);let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:c});b=A,h&&p.addInstruction(h);let T=[];for(let R of t.rewardDefaultInfos){let N=i.useSOLBalance&&R.mint.address===te.toString(),E;if(R.mint.address===t.mintA.address)E=f;else if(R.mint.address===t.mintB.address)E=b;else{let{account:Q,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(R.mint.programId),mint:new ue(R.mint.address),notUseTokenAccount:N,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!N,associatedOnly:N?!1:u,checkCreateATAOwner:c});E=Q,W&&p.addInstruction(W)}T.push(E)}!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=await this.getClmmPoolKeys(t.id),B=await Be.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:T},liquidity:a,amountMinA:o,amountMinB:s});p.addInstruction({instructions:B.instructions,instructionTypes:[V.ClmmDecreasePosition]});let x=M({},B.address);if(i.closePosition){let R=await Be.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});p.addInstruction({endInstructions:R.instructions,endInstructionTypes:R.instructionTypes}),x=M(M({},x),R.address)}return p.addCustomComputeBudget(l),p.versionBuild({txVersion:m,extInfo:{address:x}})}async closePosition({poolInfo:e,ownerPosition:t,txVersion:n}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),o=await this.getClmmPoolKeys(e.id),s=Be.closePositionInstructions({poolInfo:e,poolKeys:o,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:t});return i.addInstruction(s).versionBuild({txVersion:n,extInfo:{address:s.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.address.toString()===te.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(n.mint.address),mint:new ue(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new F(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:i,checkCreateATAOwner:o});p&&u.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),y=Be.initRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ue(n.mint.programId),mint:new ue(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:$.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){for(let l of n)l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let u=this.createTxBuilder(),c={};for(let l of n){let m=t.useSOLBalance&&l.mint.address===te.toString(),p=l.perSecond.mul(l.endTime-l.openTime),{account:d,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(l.mint.programId),mint:new ue(l.mint.address),notUseTokenAccount:!!m,skipCloseAccount:!m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new F(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:m?!1:i,checkCreateATAOwner:o});y&&u.addInstruction(y),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=Be.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{programId:new ue(l.mint.programId),mint:new ue(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:$.decimalToX64(l.perSecond)}});c=M(M({},c),b.address),u.addInstruction(b)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.equals(te),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new F(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:c?!1:i,checkCreateATAOwner:o});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),d=Be.setRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:$.decimalToX64(n.perSecond)}});return u.addInstruction(d),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:d.address}})}async setRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){let u=this.createTxBuilder(),c={};for(let l of n){l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let m=t.useSOLBalance&&l.mint.address===te.toString(),{account:p,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(l.mint.programId),mint:new ue(l.mint.address),notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new F(l.perSecond.sub(l.endTime-l.openTime).toFixed(0)).gte(l.perSecond.sub(l.endTime-l.openTime))?l.perSecond.sub(l.endTime-l.openTime).toFixed(0):l.perSecond.sub(l.endTime-l.openTime).add(1).toFixed(0))}:void 0,associatedOnly:m?!1:i,checkCreateATAOwner:o});d&&u.addInstruction(d),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),f=Be.setRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ue(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:$.decimalToX64(l.perSecond)}});u.addInstruction(f),c=M(M({},c),f.address)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1}){let s=e.rewardDefaultInfos.find(d=>d.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),u=t.useSOLBalance&&n.equals(te),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(s.mint.programId),mint:n,notUseTokenAccount:u,owner:this.scope.ownerPubKey,skipCloseAccount:!u,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:u?!1:i,checkCreateATAOwner:o});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),p=Be.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(p),a.build({address:p.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1}){let s=this.createTxBuilder(),a={};for(let u of n){let c=e.rewardDefaultInfos.find(f=>f.mint.address===u.toString());if(!c){this.logAndCreateError("reward mint error","not found reward mint",u);continue}let l=t.useSOLBalance&&u.equals(te),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(c.mint.programId),mint:u,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:i,checkCreateATAOwner:o});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),p&&s.addInstruction(p);let d=await this.getClmmPoolKeys(e.id),y=Be.collectRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=M(M({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,inputMint:t,amountIn:n,amountOutMin:i,priceLimit:o,ownerInfo:s,remainingAccounts:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,txVersion:l}){let m=this.createTxBuilder(),p=s.useSOLBalance&&e.mintA.address===te.toBase58(),d=s.useSOLBalance&&e.mintB.address===te.toBase58(),y;!o||o.equals(new F(0))?y=t.toString()===e.mintA.address?Ct.add(new mt(1)):Rt.sub(new mt(1)):y=Z.priceToSqrtPriceX64(o,e.mintA.decimals,e.mintB.decimals);let f;if(!f){let{account:P,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:s.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:u,checkCreateATAOwner:c});f=P,A&&m.addInstruction(A)}let b;if(!b){let{account:P,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:s.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:u,checkCreateATAOwner:c});b=P,A&&m.addInstruction(A)}(!f||!b)&&this.logAndCreateError("user do not have token account",this.scope.account.tokenAccountRawInfos);let g=await this.getClmmPoolKeys(e.id);return m.addInstruction(Be.makeSwapBaseInInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},inputMint:new ue(t),amountIn:n,amountOutMin:i,sqrtPriceLimitX64:y,remainingAccounts:a})),m.versionBuild({txVersion:l})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)i?ye(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(c[m.accountInfo.mint.toString()]=m.pubkey):c[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(A=>!A.liquidity.isZero()||A.rewardInfos.find(h=>!h.rewardAmountOwed.isZero())))continue;let p=m,d=n.useSOLBalance&&p.mintA.address===te.toString(),y=n.useSOLBalance&&p.mintB.address===te.toString(),f=c[p.mintA.address];if(!f){let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintA.programId,mint:new ue(p.mintA.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:i,checkCreateATAOwner:o});f=A,h&&l.addInstruction(h)}let b=c[p.mintB.address];if(!b){let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintB.programId,mint:new ue(p.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:i,checkCreateATAOwner:o});b=A,h&&l.addInstruction(h)}c[p.mintA.address]=f,c[p.mintB.address]=b;let g=[];for(let A of p.rewardDefaultInfos){let h=n.useSOLBalance&&A.mint.address===te.toString(),T=c[A.mint.address];if(!T){let{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(A.mint.programId),mint:new ue(A.mint.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,skipCloseAccount:!h,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:h?!1:i});T=I,B&&l.addInstruction(B)}c[A.mint.address]=T,g.push(T)}let P=await this.getClmmPoolKeys(p.id);for(let A of t[m.id]){let h=Be.decreaseLiquidityInstructions({poolInfo:p,poolKeys:P,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new mt(0),amountMinA:new mt(0),amountMinB:new mt(0)});l.addInstruction(h)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(mr(e).publicKey);return t?bu.decode(t.data).whitelistMints.filter(i=>!i.equals(ue.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new mt(1))).map(s=>ct(new ue(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return i.forEach(s=>{if(!s)return;let a=fi.decode(s.data);o.push(a)}),o}async getRpcClmmPoolInfo({poolId:e}){let t=await this.scope.connection.getAccountInfo(new ue(e)),n=pi.decode(t.data),i=Z.sqrtPriceX64ToPrice(n.sqrtPriceX64,n.mintDecimalsA,n.mintDecimalsB).toNumber();return D(M({},n),{currentPrice:i})}};import{PublicKey as Y}from"@solana/web3.js";import{NATIVE_MINT as gi,TOKEN_PROGRAM_ID as en,AccountLayout as Vu}from"@solana/spl-token";var dp=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),pp=Buffer.from("amm_config","utf8"),fp=Buffer.from("pool","utf8"),yp=Buffer.from("pool_lp_mint","utf8"),bp=Buffer.from("pool_vault","utf8"),gp=Buffer.from("observation","utf8");function wp(r){return oe([dp],r)}function Ap(r,e){return oe([pp,hp(e)],r)}function Pp(r,e,t,n){return oe([fp,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function kp(r,e){return oe([yp,e.toBuffer()],r)}function Bu(r,e,t){return oe([bp,e.toBuffer(),t.toBuffer()],r)}function bi(r,e){return oe([gp,e.toBuffer()],r)}function hp(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function Su({programId:r,mintA:e,mintB:t}){let n=Ap(r,0).publicKey,i=wp(r).publicKey,o=Pp(r,n,e,t).publicKey,s=kp(r,o).publicKey,a=Bu(r,o,e).publicKey,u=Bu(r,o,t).publicKey,c=bi(r,o).publicKey;return{poolId:o,configId:n,authority:i,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as Ar}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Jo,TOKEN_2022_PROGRAM_ID as Ku,ASSOCIATED_TOKEN_PROGRAM_ID as Tp}from"@solana/spl-token";var Ip=ae("Raydium_cpmm"),Pr={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]};function Cu(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P,A){let h=L([w("amountMaxA"),w("amountMaxB"),w("openTime")]),T=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Jo,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Tp,isSigner:!1,isWritable:!1},{pubkey:Es,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1}],I=Buffer.alloc(h.span);return h.encode({amountMaxA:g,amountMaxB:P,openTime:A},I),new Ar({keys:T,programId:r,data:Buffer.from([...Pr.initialize,...I])})}function Ru(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y){let f=L([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:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Jo,isSigner:!1,isWritable:!1},{pubkey:Ku,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Ip.debug("cpmm deposit data",{lpAmount:p.toString(),amountMaxA:d.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:p,amountMaxA:d,amountMaxB:y},g),new Ar({keys:b,programId:r,data:Buffer.from([...Pr.deposit,...g])})}function Lu(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y){let f=L([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:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Jo,isSigner:!1,isWritable:!1},{pubkey:Ku,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Vs,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:p,amountMinA:d,amountMinB:y},g),new Ar({keys:b,programId:r,data:Buffer.from([...Pr.withdraw,...g])})}function Ou(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y,f){let b=L([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},P),new Ar({keys:g,programId:r,data:Buffer.from([...Pr.swapBaseInput,...P])})}function Nu(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y,f){let b=L([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},P),new Ar({keys:g,programId:r,data:Buffer.from([...Pr.swapBaseOutput,...P])})}import Ze from"bn.js";var Mu=L([pe(8),_("bump"),qe("disableCreatePool"),Bt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),S("protocolOwner"),S("fundOwner"),q(w(),16)]),_u=L([pe(8),S("configId"),S("poolCreator"),S("vaultA"),S("vaultB"),S("mintLp"),S("mintA"),S("mintB"),S("mintProgramA"),S("mintProgramB"),S("observationId"),_("bump"),_("status"),_("lpDecimals"),_("mintDecimalA"),_("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),q(w(),32)]);var kr=class extends xe{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){let n=await this.scope.connection.getAccountInfo(new Y(e));if(!n)throw new Error(`pool not found: ${e}`);let i=_u.decode(n.data),[o,s]=await this.scope.connection.getMultipleAccountsInfo([i.vaultA,i.vaultB]);if(!o)throw new Error(`pool vaultA info not found: ${i.vaultA.toBase58()}`);if(!s)throw new Error(`pool vaultB info not found: ${i.vaultB.toBase58()}`);let a;if(t){let u=await this.scope.connection.getAccountInfo(i.configId);u&&(a=Mu.decode(u.data))}return D(M({},i),{baseReserve:new Ze(Vu.decode(o.data).amount.toString()).sub(i.protocolFeesMintA).sub(i.fundFeesMintA),quoteReserve:new Ze(Vu.decode(s.data).amount.toString()).sub(i.protocolFeesMintB).sub(i.fundFeesMintB),configInfo:a})}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:i,associatedOnly:o=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=Te(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var Q,W,j;let p=i.feePayer||((Q=this.scope.owner)==null?void 0:Q.publicKey),d=new Ze(new Y(c.mintA.address).toBuffer()).lte(new Ze(new Y(c.mintB.address).toBuffer())),[y,f]=d?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=d?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],P=i.useSOLBalance&&y.address===gi.toBase58(),A=i.useSOLBalance&&f.address===gi.toBase58(),[h,T]=[new Y(y.address),new Y(f.address)],I=this.createTxBuilder(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:h,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:p,amount:b}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:o,checkCreateATAOwner:s});I.addInstruction(x||{});let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:new Y(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:p,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:o,checkCreateATAOwner:s});if(I.addInstruction(N||{}),B===void 0||R===void 0)throw Error("you don't has some token account");let E=Su({programId:e,mintA:h,mintB:T});return I.addInstruction({instructions:[Cu(e,this.scope.ownerPubKey,E.configId,E.authority,E.poolId,h,T,E.lpMint,B,R,ye(this.scope.ownerPubKey,E.lpMint).publicKey,E.vaultA,E.vaultB,t,new Y((W=y.programId)!=null?W:en),new Y((j=f.programId)!=null?j:en),E.observationId,b,g,n)],instructionTypes:[V.CpmmCreatePool]}),I.addCustomComputeBudget(u),I.versionBuild({txVersion:a,extInfo:{address:D(M({},E),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,inputAmount:n,baseIn:i,slippage:o,computeResult:s,computeBudgetConfig:a,config:u,txVersion:c}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),n.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:n.toString()});let{account:l}=this.scope,{bypassAssociatedCheck:m,checkCreateATAOwner:p}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),d=await this.getRpcPoolInfo(t.id),{liquidity:y,inputAmountFee:f,anotherAmount:b}=s||this.computePairAmount({poolInfo:D(M({},t),{mintAmountA:new F(d.baseReserve.toString()).div(10**t.mintA.decimals).toNumber(),mintAmountB:new F(d.quoteReserve.toString()).div(10**t.mintB.decimals).toNumber(),lpAmount:new F(d.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),slippage:o,baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new F(n.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),g=b.amount,P=t.mintA.address===gi.toString(),A=t.mintB.address===gi.toString(),h=this.createTxBuilder(),[T,I]=[new Y(t.mintA.address),new Y(t.mintB.address)],{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?n:g).isZero()?{payer:this.scope.ownerPubKey,amount:i?n:g}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});h.addInstruction(x||{});let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(i?g:n).isZero()?{payer:this.scope.ownerPubKey,amount:i?g:n}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});h.addInstruction(N||{}),!B&&!R&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let E=await l.getCreatedTokenAccount({mint:new Y(t.lpMint.address)}),ee=await l.handleTokenAccount({side:"out",amount:0,mint:new Y(t.lpMint.address),tokenAccount:E,bypassAssociatedCheck:m,checkCreateATAOwner:p}),{tokenAccount:Q}=ee,W=Te(ee,["tokenAccount"]);h.addInstruction(W);let j=await this.getCpmmPoolKeys(t.id);return h.addInstruction({instructions:[Ru(new Y(t.programId),this.scope.ownerPubKey,new Y(j.authority),new Y(t.id),Q,B,R,new Y(j.vault.A),new Y(j.vault.B),T,I,new Y(t.lpMint.address),y,i?f.amount:g,i?g:f.amount)],instructionTypes:[V.CpmmAddLiquidity],lookupTableAddress:j.lookupTableAccount?[j.lookupTableAccount]:[]}),h.addCustomComputeBudget(a),h.versionBuild({txVersion:c})}async withdrawLiquidity(e){var Q,W;let{poolInfo:t,lpAmount:n,slippage:i,computeBudgetConfig:o,txVersion:s}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let a=new ve(new Ze(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[c,l]=[a.mul(n.mul(u.baseReserve).div(u.lpAmount)).quotient,a.mul(n.mul(u.quoteReserve).div(u.lpAmount)).quotient],m=await this.scope.fetchEpochInfo(),[p,d]=[Ae(c,t.mintA.extensions.feeConfig,m,!0),Ae(l,t.mintB.extensions.feeConfig,m,!0)],{account:y}=this.scope,f=this.createTxBuilder(),[b,g]=[new Y(t.mintA.address),new Y(t.mintB.address)],P=b.equals(te),A=g.equals(te),h,T,{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});h=I,B&&f.addInstruction(B);let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});T=x,R&&f.addInstruction(R),(!h||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",y.tokenAccounts);let N=await y.getCreatedTokenAccount({mint:new Y(t.lpMint.address)});N||this.logAndCreateError("cannot found lp token account","tokenAccounts",y.tokenAccounts);let E=await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[Lu(new Y(t.programId),this.scope.ownerPubKey,new Y(E.authority),new Y(t.id),N,h,T,new Y(E.vault.A),new Y(E.vault.B),b,g,new Y(t.lpMint.address),n,c.sub((Q=p.fee)!=null?Q:new Ze(0)),l.sub((W=d.fee)!=null?W:new Ze(0)))],instructionTypes:[V.CpmmWithdrawLiquidity],lookupTableAddress:E.lookupTableAccount?[E.lookupTableAccount]:[]}),f.addCustomComputeBudget(o),f.versionBuild({txVersion:s})}async swap(e){var h,T,x,R,N,E;let{poolInfo:t,baseIn:n,swapResult:i,config:o,computeBudgetConfig:s,txVersion:a}=e,{bypassAssociatedCheck:u,checkCreateATAOwner:c}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},o),l=this.createTxBuilder(),[m,p]=[new Y(t.mintA.address),new Y(t.mintB.address)],d=await this.scope.account.getCreatedTokenAccount({programId:new Y((h=t.mintA.programId)!=null?h:en),mint:m,associatedOnly:!1}),y=await this.scope.account.getCreatedTokenAccount({programId:new Y((T=t.mintB.programId)!=null?T:en),mint:p,associatedOnly:!1}),I=await this.scope.account.handleTokenAccount({side:n?"in":"out",amount:n?i.sourceAmountSwapped:i.destinationAmountSwapped,mint:m,tokenAccount:d,bypassAssociatedCheck:u,checkCreateATAOwner:c}),{tokenAccount:f}=I,b=Te(I,["tokenAccount"]);l.addInstruction(b);let B=await this.scope.account.handleTokenAccount({side:n?"out":"in",amount:n?i.destinationAmountSwapped:i.sourceAmountSwapped,mint:p,tokenAccount:y,bypassAssociatedCheck:u,checkCreateATAOwner:c}),{tokenAccount:g}=B,P=Te(B,["tokenAccount"]);l.addInstruction(P),!f&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let A=await this.getCpmmPoolKeys(t.id);return l.addInstruction({instructions:[n?Ou(new Y(t.programId),this.scope.ownerPubKey,new Y(A.authority),new Y(A.config.id),new Y(t.id),f,g,new Y(A.vault.A),new Y(A.vault.B),new Y((x=t.mintA.programId)!=null?x:en),new Y((R=t.mintB.programId)!=null?R:en),m,p,bi(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):Nu(new Y(t.programId),this.scope.ownerPubKey,new Y(A.authority),new Y(A.config.id),new Y(t.id),g,f,new Y(A.vault.B),new Y(A.vault.A),new Y((N=t.mintB.programId)!=null?N:en),new Y((E=t.mintA.programId)!=null?E:en),p,m,bi(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[n?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut]}),l.addCustomComputeBudget(s),l.versionBuild({txVersion:a})}computePairAmount({poolInfo:e,amount:t,slippage:n,epochInfo:i,baseIn:o}){var P,A,h,T,I,B,x,R;let s=1-Number(n.toSignificant())/100,a=new Ze(new F(t).mul(10**e[o?"mintA":"mintB"].decimals).mul(s).toFixed(0)),u=Ae(a,e[o?"mintA":"mintB"].extensions.feeConfig,i,!1),c=a.sub((P=u.fee)!=null?P:new Ze(0)),[l,m]=[new Ze(new F(e.mintAmountA).mul(10**e.mintA.decimals).toString()),new Ze(new F(e.mintAmountB).mul(10**e.mintB.decimals).toString())],p=new Ze(new F(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,F.ROUND_DOWN));this.logDebug("baseReserve:",l.toString(),"quoteReserve:",m.toString()),this.logDebug("tokenIn:",o?e.mintA.symbol:e.mintB.symbol,"amountIn:",a.toString(),"amountInFee:",(h=(A=u.fee)==null?void 0:A.toString())!=null?h:0,"anotherToken:",o?e.mintB.symbol:e.mintA.symbol,"slippage:",`${n.toSignificant()}%`);let d=o?"base":"quote";this.logDebug("input side:",d);let y=c.mul(p).div(d==="base"?l:m),f={amount:Se,fee:void 0,expirationTime:void 0};c.isZero()||(f=Ae(xp(y,l,m,p)[o?"amountB":"amountA"],e[o?"mintB":"mintA"].extensions.feeConfig,i,!0));let b=new ve(new Ze(1)).add(n),g=Ae(b.mul(f.amount.sub((T=f.fee)!=null?T:new Ze(0))).quotient,e[o?"mintB":"mintA"].extensions.feeConfig,i,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(B=(I=f.fee)==null?void 0:I.toString())!=null?B:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:u,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function xp(r,e,t,n){let i=r.mul(e).div(n);!i.isZero()&&!r.mul(e).mod(n).isZero()&&(i=i.add(new Ze(1)));let o=r.mul(t).div(n);return!o.isZero()&&!r.mul(t).mod(n).isZero()&&(o=o.add(new Ze(1))),{amountA:i,amountB:o}}var hr=class extends xe{constructor(e){super(e)}static getAddLiquidityDefaultPool({addLiquidityPools:e,poolInfosCache:t}){if(e.length===0)return;if(e.length===1||(e.sort((i,o)=>o.version-i.version),e[0].version!==e[1].version))return e[0];let n=e.filter(i=>i.version===e[0].version);return n.sort((i,o)=>this.comparePoolSize(i,o,t)),n[0]}static comparePoolSize(e,t,n){let i=n[e.id],o=n[t.id];return i===void 0?1:o===void 0?-1:e.baseMint===t.baseMint?i.baseReserve.sub(o.baseReserve).gte(Se)?-1:1:i.baseReserve.sub(o.quoteReserve).gte(Se)?-1:1}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(te));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}=e,i=await this.getWSolAccounts(),o=this.createTxBuilder();o.addCustomComputeBudget(e.computeBudgetConfig);let s=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});o.addInstruction(s);let a=U(t);for(let u=0;u<i.length;u++)a.gte(i[u].amount)?(o.addInstruction({instructions:[Vt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),a.sub(i[u].amount)):(o.addInstruction({instructions:[Vt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),Zn({destination:s.addresses.newAccount,source:i[u].publicKey,amount:a,owner:this.scope.ownerPubKey,tokenProgram:n}));return o.build()}async wrapWSol(e,t){let n=await this.getWSolAccounts(),i=this.createTxBuilder(),o=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(o),n.length&&i.addInstruction({instructions:[Zn({destination:n[0].publicKey,source:o.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Vt({tokenAccount:o.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.build()}};import{TOKEN_PROGRAM_ID as Bp}from"@solana/spl-token";import{PublicKey as Sp,Transaction as es,TransactionInstruction as Kp}from"@solana/web3.js";import Eu from"bn.js";var $e=class extends xe{static getPdaPoolId(e,t){return oe([$e.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return oe([$e.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Eu(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:o}){if(n.length===0)return[];let s=n.map(l=>$e.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<$e.VERSION_PROJECT.length;l++)a.push(...s.map(m=>$e.getPdaOwnerId(t,m,i,l).publicKey));let u=await It(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),p=l%n.length,d=s[p],y=a[l],f=u[p],b=u[n.length+l];if(!(f&&b)||f.data.length!==$e.POOL_LAYOUT.span||b.data.length!==$e.OWNER_LAYOUT.span)continue;let g=$e.POOL_LAYOUT.decode(f.data),P=$e.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),h=g.endTime.toNumber(),T=P.tokenInfo.map(x=>x.debtAmount.gt(new Eu(0))).filter(x=>!x).length!==3,I=o>A&&o<h&&g.status===1,B=T&&I;c.push({programId:t,poolId:d,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:P.lpAmount,project:$e.VERSION_PROJECT[m],openTime:A,endTime:h,canClaim:B,canClaimErrorType:T?I?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:P.tokenInfo[R].debtAmount.add(P.tokenInfo[R].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o=[];for(let u of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(de.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(de.WSOL.mint),associatedOnly:u.mintAddress.equals(de.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),o.push(c)}n.addInstruction({instructions:[$e.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:o}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:p,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(de.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(de.WSOL.mint),associatedOnly:m.mintAddress.equals(de.WSOL.mint)?!1:t.associatedOnly});d&&n.addInstruction(d),p&&(o[m.mintAddress.toString()]=p,l.push(p))}n.addInstruction({instructions:[$e.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:i,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return Xr(u,[i,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new es().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new es().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new es().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=L([]),o=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:Bp,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Kp({keys:o,programId:e,data:a})}},dt=$e;dt.CLAIMED_NUM=3,dt.POOL_LAYOUT=L([pe(8),_("bump"),_("status"),w("openTime"),w("endTime"),S("ammId"),q(L([_("mintDecimals"),S("mintAddress"),S("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),$e.CLAIMED_NUM,"tokenInfo"),q(w(),10,"padding")]),dt.OWNER_LAYOUT=L([pe(8),_("bump"),_("version"),S("poolId"),S("owner"),w("lpAmount"),q(L([S("mintAddress"),w("debtAmount"),w("claimedAmount")]),$e.CLAIMED_NUM,"tokenInfo"),q(w(),4,"padding")]),dt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Sp(e)),dt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},dt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as ns}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as qu}from"@solana/spl-token";import Tr from"bn.js";import{TransactionInstruction as Rp,SYSVAR_RENT_PUBKEY as Lp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fu}from"@solana/spl-token";import{createInitializeAccountInstruction as vu}from"@solana/spl-token";import{SystemProgram as bn,Transaction as Wu}from"@solana/web3.js";function Cp(r="accountFlags"){let e=new ei(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ts=L([pe(5),Cp("accountFlags"),S("ownAddress"),w("vaultSignerNonce"),S("baseMint"),S("quoteMint"),S("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),S("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),S("requestQueue"),S("eventQueue"),S("bids"),S("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]);function Op({programId:r,marketInfo:e}){let t=L([_("version"),ze("instruction"),w("baseLotSize"),w("quoteLotSize"),Bt("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:Lp,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}:[]),i=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},i),new Rp({keys:n,programId:r,data:i})}async function Du({connection:r,wallet:e,marketInfo:t}){let n=new Wu,i=await r.getMinimumBalanceForRentExemption(165);n.add(bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:Fu}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:Fu}),vu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),vu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let o=new Wu;return o.add(bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(ts.span),space:ts.span,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(5120+12),space:5120+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(262144+12),space:262144+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),Op({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:[V.CreateAccount,V.CreateAccount,V.InitAccount,V.InitAccount]},{transaction:o,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.InitMarket]}]}var Ln=class extends xe{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:o,txVersion:s,computeBudgetConfig:a}){let u=this.scope.ownerPubKey,c=Ye({fromPublicKey:u,programId:o}),l=Ye({fromPublicKey:u,programId:o}),m=Ye({fromPublicKey:u,programId:o}),p=Ye({fromPublicKey:u,programId:o}),d=Ye({fromPublicKey:u,programId:o}),y=Ye({fromPublicKey:u,programId:qu}),f=Ye({fromPublicKey:u,programId:qu}),b=0,g=new Tr(100);function P(){let N=new Tr(0);for(;;)try{return{vaultOwner:ns.createProgramAddressSync([c.publicKey.toBuffer(),N.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:N}}catch{if(N.iaddn(1),N.gt(new Tr(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:h}=P(),T=new Tr(Math.round(10**e.decimals*n)),I=new Tr(Math.round(n*10**t.decimals*i));if(T.eq(Se))throw Error("lot size is too small");if(I.eq(Se))throw Error("tick size or lot size is too small");let B=await Du({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:c,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:m,bids:p,asks:d,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:h,baseLotSize:T,quoteLotSize:I}}),x=this.createTxBuilder();x.addCustomComputeBudget(a),x.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});let R=[];for await(let N of B.slice(1,B.length)){let E=this.createTxBuilder();E.addCustomComputeBudget(a),E.addInstruction({instructions:N.transaction.instructions,signers:N.signer,instructionTypes:N.instructionTypes});let Q=await E.versionBuild({txVersion:s});R.push(Q)}return x.versionMultiBuild({extraPreBuildData:R,extInfo:{address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:p.publicKey,asks:d.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new ns(e.mint),quoteMin:new ns(t.mint)}},txVersion:s})}};import{PublicKey as xr}from"@solana/web3.js";import{PublicKey as Np,TransactionInstruction as is,SYSVAR_CLOCK_PUBKEY as Mp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as os}from"@solana/spl-token";var rs=L([_("instruction"),ma("amount")]),Ir=L([_("instruction")]);function SB({programId:r,amount:e,instructionKeys:t}){let n=[{pubkey:new Np("11111111111111111111111111111111"),isSigner:!1,isWritable:!1},{pubkey:os,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1},{pubkey:Fi,isSigner:!1,isWritable:!1},...Object.entries(t).map(([o,s])=>({pubkey:s,isSigner:o==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(o)}))],i=Buffer.alloc(rs.span);return rs.encode({instruction:1,amount:Number(e)},i),new is({keys:n,programId:r,data:i})}function wi({programId:r},e){let t=[{pubkey:os,isSigner:!1,isWritable:!1},{pubkey:Fi,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,o])=>({pubkey:o,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(Ir.span);return Ir.encode({instruction:2},n),new is({keys:t,programId:r,data:n})}function ss(r){let{poolConfig:e,userKeys:t,side:n}=r,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,o=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Ir.span);Ir.encode({instruction:2},s);let a=[{pubkey:os,isWritable:!1,isSigner:!1},{pubkey:Mp,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new is({programId:e.programId,keys:a,data:s})}import Uu from"bn.js";var _p={[Qn.IDO_PROGRAM_ID_V1.toString()]:1,[Qn.IDO_PROGRAM_ID_V2.toString()]:2,[Qn.IDO_PROGRAM_ID_V3.toString()]:3,[Qn.IDO_PROGRAM_ID_V4.toString()]:4},On=class extends xe{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:o}){let s=this.createTxBuilder(),a=_p[t.programId];a||this.logAndCreateError("invalid version",a);let u=fe(t),[c,l]=[!new Uu(e.coin).isZero(),!new Uu(e.pc).isZero()],m=u.projectInfo.mint.address.equals(te),{account:p,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:i});!p&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&d&&s.addInstruction(d);let y=u.buyInfo.mint.address.equals(te),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:i});if(!p&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!p||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...c?[wi({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new xr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[wi({programId:new xr(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new xr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[wi({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:p,userIdoInfo:new xr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});let g={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:p,quoteTokenAccount:f,ledgerAccount:new xr(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[ss(D(M({},g),{side:"base"}))]:[],...l?[ss(D(M({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};import{PublicKey as Vp}from"@solana/web3.js";import{MintLayout as Ep,TOKEN_2022_PROGRAM_ID as as,TOKEN_PROGRAM_ID as us}from"@solana/spl-token";var Br=class extends xe{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._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:i="strict"}=t||{},{mintList:o,blacklist:s}=await this.scope.fetchV3TokenList(n),a=await this.scope.fetchJupTokenList(i,n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._tokenMap.set(Tt.address,Tt),this._mintGroup.official.add(Tt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,D(M({},u),{priority:-1}))}),o.forEach(u=>{var c;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,D(M({},u),{type:"raydium",priority:2,programId:(c=u.programId)!=null?c:u.tags.includes("token-2022")?as.toBase58():us.toBase58()})),this._mintGroup.official.add(u.address))}),a.forEach(u=>{var c;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,D(M({},u),{type:"jupiter",priority:1,programId:(c=u.programId)!=null?c:u.tags.includes("token-2022")?as.toBase58():us.toBase58()})),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,D(M({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?as.toBase58():us.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}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Tt;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,D(M({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new Vp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Ep.decode(s.data),u=n.toString().substring(0,6),c={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var Ai=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new gt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.api=o,this._apiCacheTime=u||5*60*1e3,this.logger=ae("Raydium"),this.farm=new ur({scope:this,moduleName:"Raydium_Farm"}),this.account=new $n({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new gr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Br({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new hr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new wr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new kr({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new dt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Ln({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new On({scope:this,moduleName:"Raydium_ido"}),this.availability={};let c=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:c,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Fp({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:o,logRequests:s,urlConfigs:a}=t,u=new Zr({cluster:n,timeout:i,urlConfigs:a,logCount:o,logRequests:s}),c=new Ai(D(M({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error($r);return this._owner.publicKey}setOwner(e){return this._owner=e?new gt(e):void 0,this}get connection(){if(!this._connection)throw new Error(aa);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($r),new Error($r)}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;let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}async fetchJupTokenList(e,t){var o;let n=(o=this.apiData.jupTokenList)==null?void 0:o[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let i=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=D(M({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:i}}),this.apiData.jupTokenList[e].data}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{}}}};import{TOKEN_PROGRAM_ID as ms,TOKEN_2022_PROGRAM_ID as cs}from"@solana/spl-token";import{PublicKey as pt,TransactionInstruction as ds,SystemProgram as Xu}from"@solana/web3.js";import ls from"bn.js";function NS(r,e,t,n,i,o,s,a,u,c,l,m){let p=L([_("instruction"),w("amountIn"),w("amountOut")]),d=[{pubkey:Xu.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new pt(t.programId),isSigner:!1,isWritable:!1},{pubkey:new pt(t.id),isSigner:!1,isWritable:!0},{pubkey:new pt(n.id),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=fe(t);d.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(u)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(u)?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=fe(t);d.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new pt("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=fe(t);d.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(p.span);return p.encode({instruction:4,amountIn:c,amountOut:l},y),new ds({keys:d,programId:r,data:y})}function MS(r,e,t,n,i,o,s,a,u,c){let l=L([_("instruction")]),m=[{pubkey:Xu.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new pt(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new pt(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new pt(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let d=fe(n);m.push({pubkey:d.config.id,isSigner:!1,isWritable:!1},{pubkey:d.id,isSigner:!1,isWritable:!0},{pubkey:d.mintA.address.equals(u)?d.vault.A:d.vault.B,isSigner:!1,isWritable:!0},{pubkey:d.mintA.address.equals(u)?d.vault.B:d.vault.A,isSigner:!1,isWritable:!0},{pubkey:d.id,isSigner:!1,isWritable:!0},...c.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let d=fe(n);m.push({pubkey:d.authority,isSigner:!1,isWritable:!1},{pubkey:d.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:d.id,isSigner:!1,isWritable:!0},{pubkey:new pt("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:d.openOrders,isSigner:!1,isWritable:!0},{pubkey:d.vault.A,isSigner:!1,isWritable:!0},{pubkey:d.vault.B,isSigner:!1,isWritable:!0},{pubkey:d.marketId,isSigner:!1,isWritable:!0},{pubkey:d.marketBids,isSigner:!1,isWritable:!0},{pubkey:d.marketAsks,isSigner:!1,isWritable:!0},{pubkey:d.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:d.id,isSigner:!1,isWritable:!0},{pubkey:d.id,isSigner:!1,isWritable:!0})}else{let d=fe(n);m.push({pubkey:d.authority,isSigner:!1,isWritable:!1},{pubkey:d.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:d.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:d.openOrders,isSigner:!1,isWritable:!0},{pubkey:d.vault.A,isSigner:!1,isWritable:!0},{pubkey:d.vault.B,isSigner:!1,isWritable:!0},{pubkey:d.marketId,isSigner:!1,isWritable:!0},{pubkey:d.marketBids,isSigner:!1,isWritable:!0},{pubkey:d.marketAsks,isSigner:!1,isWritable:!0},{pubkey:d.marketEventQueue,isSigner:!1,isWritable:!0},...d.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:d.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:d.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:d.id,isSigner:!1,isWritable:!0},{pubkey:d.id,isSigner:!1,isWritable:!0}])}let p=Buffer.alloc(l.span);return l.encode({instruction:5},p),new ds({keys:m,programId:r,data:p})}function Gu(r,e,t,n,i,o){if(r.pooltype.includes("StablePool")){let s=fe(e);return[{pubkey:s.programId,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.authority,isSigner:!1,isWritable:!1},{pubkey:s.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:new pt("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:s.openOrders,isSigner:!1,isWritable:!0},{pubkey:s.vault.A,isSigner:!1,isWritable:!0},{pubkey:s.vault.B,isSigner:!1,isWritable:!0},{pubkey:s.marketId,isSigner:!1,isWritable:!0},{pubkey:s.marketBids,isSigner:!1,isWritable:!0},{pubkey:s.marketAsks,isSigner:!1,isWritable:!0},{pubkey:s.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0}]}else if(r.type==="Concentrated"){let s=r,a=fe(e),u=s.mintA.address===t;return[{pubkey:new pt(String(r.programId)),isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a.config.id,isSigner:!1,isWritable:!1},{pubkey:a.id,isSigner:!1,isWritable:!0},{pubkey:u?a.vault.A:a.vault.B,isSigner:!1,isWritable:!0},{pubkey:u?a.vault.B:a.vault.A,isSigner:!1,isWritable:!0},{pubkey:a.id,isSigner:!1,isWritable:!0},...a.mintA.programId.equals(cs)||a.mintB.programId.equals(cs)?[{pubkey:cs,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:u?a.mintA.address:a.mintB.address,isSigner:!1,isWritable:!1},{pubkey:u?a.mintB.address:a.mintA.address,isSigner:!1,isWritable:!1}]:[],...(o!=null?o:[]).map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:lt(new pt(String(r.programId)),new pt(r.id)).publicKey,isSigner:!1,isWritable:!0}]}else{let s=fe(e);return[{pubkey:s.programId,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.authority,isSigner:!1,isWritable:!1},{pubkey:s.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:s.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:s.openOrders,isSigner:!1,isWritable:!0},{pubkey:s.vault.A,isSigner:!1,isWritable:!0},{pubkey:s.vault.B,isSigner:!1,isWritable:!0},{pubkey:s.marketId,isSigner:!1,isWritable:!0},{pubkey:s.marketBids,isSigner:!1,isWritable:!0},{pubkey:s.marketAsks,isSigner:!1,isWritable:!0},{pubkey:s.marketEventQueue,isSigner:!1,isWritable:!0},...s.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:s.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:s.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0}]]}}function vp(r,e,t,n,i,o,s,a,u,c,l,m,p,d){let y=L([_("instruction"),w("amountIn"),w("amountOut")]),f=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1}];f.push(...Gu(a,c,o,t,n,d[0])),f.push(...Gu(u,l,s,n,i,d[1]));let b=Buffer.alloc(y.span);return y.encode({instruction:8,amountIn:m,amountOut:p},b),new ds({keys:f,programId:r,data:b})}async function _S({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var i,o,s,a,u,c;if(n.routeType==="amm")if(n.poolInfo[0].type==="Concentrated"){let l=fe(n.poolKey[0]),m=t.equals(l.mintA.address)?Ct.add(at):Rt.sub(at);return await Be.makeSwapBaseInInstructions({poolInfo:l,poolKeys:l,ownerInfo:{wallet:e.wallet,tokenAccountA:l.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:l.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((o=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?o:new ls(0)),sqrtPriceLimitX64:m,remainingAccounts:n.remainingAccounts[0]})}else{let l=n.poolKey[0];return{signers:[],instructions:[ui({poolKeys:l,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((a=(s=n.minAmountOut.fee)==null?void 0:s.raw)!=null?a:new ls(0)),fixedSide:"in"})],lookupTableAddress:l.lookupTableAccount?[l.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?V.AmmV5SwapBaseIn:V.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let l=n.poolInfo[0],m=n.poolInfo[1],p=n.poolKey[0],d=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[vp(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.minMiddleAmountFee.token.mint.toString(),l,m,p,d,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((c=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?c:new ls(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[p.lookupTableAccount,d.lookupTableAccount].filter(y=>y!==void 0),address:{}}}else throw Error("route type error")}import Yu from"bn.js";var ps=new Yu(1e6);function Wp(r,e,t){return r.mul(e).add(t).sub(new Yu(1)).div(t)}function zu(r,e,t){return r.mul(e).div(t)}var Pi=class{static tradingFee(e,t){return Wp(e,t,ps)}static protocolFee(e,t){return zu(e,t,ps)}static fundFee(e,t){return zu(e,t,ps)}};import Sr from"bn.js";function ki(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Dp(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=ki(r,e);if(n.gt(Nn)){t=t.add(new Sr(1));let i=r.div(t);n=ki(r,t),n.gt(Nn)&&(i=i.add(new Sr(1)))}return[t,e]}var Nn=new Sr(0),hi=class{static swapWithoutFees(e,t,n){let i=t.mul(n),o=t.add(e),[s,a]=Dp(i,o),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}static lpTokensToTradingTokens(e,t,n,i,o){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(o===0)return{tokenAmount0:s,tokenAmount1:a};if(o===1)return ki(e.mul(n),t).gt(Nn)&&s.gt(Nn)&&(s=s.add(new Sr(1))),ki(e.mul(i),t).gt(Nn)&&a.gt(Nn)&&(a=a.add(new Sr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Qu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Qu||{}),Hu=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,i){let o=Pi.tradingFee(e,i),s=e.sub(o),{sourceAmountSwapped:a,destinationAmountSwapped:u}=hi.swapWithoutFees(s,t,n),c=a.add(o);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:o}}};var ju={[Hr.toBase58()]:3},Zu={3:Hr};var qp=L([pe(5),pe(8),S("ownAddress"),w("vaultSignerNonce"),S("baseMint"),S("quoteMint"),S("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),S("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),S("requestQueue"),S("eventQueue"),S("bids"),S("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]),$u={3:qp};import{PublicKey as Ju}from"@solana/web3.js";var Ti=ae("Serum"),ec=class{static getProgramId(e){let t=Zu[e];return t||Ti.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ju[t];return n||Ti.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=$u[e];return t||Ti.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()],i=0,o;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));o=Ju.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:o,nonce:i}}return Ti.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Ju.default,nonce:i}}};var CK=r=>r;export{db as ACCOUNT_TYPE_SIZE,Wb as ALL_PROGRAM_ID,Xd as AMM_CONFIG_SEED,Ol as AMM_STABLE,Ji as AMM_V4,cf as ANAMint,We as API_URLS,Sl as AccountType,aT as AmmConfigLayout,Zr as Api,cu as BIT_PRECISION,zt as BNDivCeil,an as BNLayout,gy as BN_100,wy as BN_1000,Ay as BN_10000,by as BN_FIVE,Us as BN_ONE,nn as BN_TEN,yy as BN_THREE,fy as BN_TWO,Se as BN_ZERO,Yg as BitStructure,la as Blob,Nl as CLMM_PROGRAM_ID,Fi as CLOCK_PROGRAM_ID,Wl as CREATE_CPMM_POOL_AUTH,Dl as CREATE_CPMM_POOL_FEE_ACC,vl as CREATE_CPMM_POOL_PROGRAM,wr as Clmm,Be as ClmmInstrument,hi as ConstantProductCurve,Mu as CpmmConfigInfoLayout,Pi as CpmmFee,_u as CpmmPoolInfoLayout,Wn as Currency,rn as CurrencyAmount,Hu as CurveCalculator,pg as DEV_API_URLS,Fb as DEV_CREATE_CPMM_POOL_AUTH,vb as DEV_CREATE_CPMM_POOL_FEE_ACC,Eb as DEV_CREATE_CPMM_POOL_PROGRAM,Rd as DataElement,lf as ETHMint,Yo as EXTENSION_TICKARRAY_BITMAP_SIZE,Oa as FARM_LOCK_MINT,Na as FARM_LOCK_VAULT,Zi as FARM_PROGRAM_ID_V3,$i as FARM_PROGRAM_ID_V5,In as FARM_PROGRAM_ID_V6,At as FARM_PROGRAM_TO_VERSION,_a as FARM_VERSION_TO_LEDGER_LAYOUT,Ma as FARM_VERSION_TO_STATE_LAYOUT,di as FEE_RATE_DENOMINATOR,ps as FEE_RATE_DENOMINATOR_VALUE,Jd as FETCH_TICKARRAY_COUNT,$d as Fee,ne as Fraction,Qn as IDO_ALL_PROGRAM,_l as IDO_PROGRAM_ID_V1,Vl as IDO_PROGRAM_ID_V2,El as IDO_PROGRAM_ID_V3,Fl as IDO_PROGRAM_ID_V4,Er as INSTRUCTION_PROGRAM_ID,V as InstructionType,eo as JupTokenType,hu as LIQUIDITY_FEES_DENOMINATOR,ku as LIQUIDITY_FEES_NUMERATOR,sp as LIQUIDITY_VERSION_TO_SERUM_VERSION,Tk as LIQUIDITY_VERSION_TO_STATE_LAYOUT,lu as LOG_B_2_X32,mu as LOG_B_P_ERR_MARGIN_LOWER_X64,du as LOG_B_P_ERR_MARGIN_UPPER_X64,Yr as LOOKUP_TABLE_CACHE,Hn as Layout,ce as LiquidityMath,oc as LogLevel,Si as Logger,ts as MARKET_STATE_LAYOUT_V2,qp as MARKET_STATE_LAYOUT_V3,$u as MARKET_VERSION_TO_STATE_LAYOUT,Zs as MAX_BASE64_SIZE,Rt as MAX_SQRT_PRICE_X64,et as MAX_TICK,An as MEMO_PROGRAM_ID,Vs as MEMO_PROGRAM_ID2,Pn as METADATA_PROGRAM_ID,Ct as MIN_SQRT_PRICE_X64,Qe as MIN_TICK,Cn as MODEL_DATA_PUBKEY,ec as Market,$ as MathUtil,zo as MaxU64,uu as MaxUint128,Ft as NEGATIVE_ONE,uf as NRVMint,at as ONE,Ll as OPEN_BOOK_PROGRAM,jd as OPERATION_SEED,Ho as ObservationInfoLayout,np as ObservationLayout,bu as OperationLayout,ao as OptionLayout,gt as Owner,ef as PAIMint,Qd as POOL_REWARD_VAULT_SEED,zd as POOL_SEED,Zd as POOL_TICK_ARRAY_BITMAP_SEED,Yd as POOL_VAULT_SEED,ou as POSITION_SEED,ve as Percent,oa as PoolFetchType,pi as PoolInfoLayout,He as PoolUtils,fi as PositionInfoLayout,ip as PositionRewardInfoLayout,yr as PositionUtils,Xe as Price,uT as ProtocolPositionLayout,mi as Q128,ut as Q64,Jp as RAYMint,nt as RENT_PROGRAM_ID,Ai as Raydium,rp as RewardInfo,Qu as RoundDirection,qi as Rounding,Ml as Router,ju as SERUM_PROGRAMID_TO_VERSION,Hr as SERUM_PROGRAM_ID_V3,Zu as SERUM_VERSION_TO_PROGRAMID,sa as SESSION_KEY,Ne as SOLMint,Tt as SOL_INFO,$P as SPL_MINT_LAYOUT,tf as SRMMint,to as STORAGE_KEY,Es as SYSTEM_PROGRAM_ID,Z as SqrtPriceMath,Kn as StableLayout,uo as Structure,pn as SwapMath,dn as TICK_ARRAY_BITMAP_SIZE,Hd as TICK_ARRAY_SEED,_e as TICK_ARRAY_SIZE,jk as TICK_SPACINGS,Me as TOKEN_WSOL,vt as TickArrayBitmap,yu as TickArrayBitmapExtensionLayout,fr as TickArrayBitmapExtensionUtils,pr as TickArrayLayout,op as TickLayout,fn as TickMath,le as TickQuery,G as TickUtils,de as Token,he as TokenAmount,Qr as TxBuilder,Dn as TxVersion,dr as U64Resolution,$k as U64_IGNORE_RANGE,io as UInt,nf as USDCMint,af as USDHMint,rf as USDTMint,Rl as UTIL1216,co as Union,Ra as Voter,ld as VoterDepositEntry,cd as VoterLockup,Ca as VoterRegistrar,ud as VoterVotingMintConfig,te as WSOLMint,ei as WideBits,_t as WrappedLayout,me as ZERO,vs as _100_PERCENT,k as accountMeta,ty as add,Gr as addComputeBudget,Fo as addLiquidityLayout,Ow as array,wo as associatedLedgerAccountLayout,oo as bits,pe as blob,qe as bool,Lo as calFarmRewardAmount,Wp as ceilDiv,qn as checkLegacyTxSize,Un as checkV0TxSize,Qi as chunkArray,Ir as claimLayout,Vt as closeAccountInstruction,_i as commonSystemAccountMeta,Fa as createAssociatedLedgerAccountInstruction,ae as createLogger,za as createPoolFeeLayout,eu as createPoolV4InstructionV2,hk as createPoolV4Layout,St as createWSolAccountInstructions,kw as cstr,vf as currencyEquals,fl as decimalToFraction,Fm as decodeBool,Zf as div,Wr as divCeil,Je as dwLayout,vm as encodeBool,Ng as endlessRetry,ml as eq,bw as f32,gw as f32be,ww as f64,Aw as f64be,ho as farmAddRewardLayout,EA as farmLedgerLayoutV3_1,er as farmLedgerLayoutV3_2,FA as farmLedgerLayoutV5_1,Sa as farmLedgerLayoutV5_2,Ka as farmLedgerLayoutV6_1,Ea as farmRewardInfoToConfig,Po as farmRewardLayout,ko as farmRewardRestartLayout,ad as farmRewardTimeInfoLayout,xa as farmStateV3Layout,Ba as farmStateV5Layout,Jn as farmStateV6Layout,cP as fetchMultipleFarmInfoAndUpdate,FT as fetchMultipleInfo,pb as fetchMultipleMintInfos,oe as findProgramAddress,_o as fixedSwapInLayout,Vo as fixedSwapOutLayout,zu as floorDiv,Xr as forecastTransactionSize,Wd as formatLayout,Ye as generatePubKey,ye as getATAAddress,Va as getAssociatedAuthority,$o as getAssociatedConfigId,it as getAssociatedLedgerAccount,nr as getAssociatedLedgerPoolAccount,lp as getAssociatedOpenOrders,Iu as getAssociatedPoolKeys,Ap as getCpmmPdaAmmConfigId,Pp as getCpmmPdaPoolId,Su as getCreatePoolKeys,na as getDate,Oo as getDepositEntryIndex,ja as getDxByDyBaseIn,Ha as getDyByDxBaseIn,rb as getEpochInfo,si as getFarmLedgerLayout,md as getFarmStateLayout,mp as getLiquidityAssociatedAuthority,yn as getLiquidityAssociatedId,Eh as getLiquidityFromAmounts,ey as getMax,It as getMultipleAccountsInfo,Tn as getMultipleAccountsInfoWithCustomFlags,Hi as getMultipleLookupTableInfo,Yk as getPdaAmmConfigId,lt as getPdaExBitmapAccount,kp as getPdaLpMint,li as getPdaMetadataKey,bi as getPdaObservationId,mr as getPdaOperationAccount,ct as getPdaPersonalPositionAddress,wp as getPdaPoolAuthority,su as getPdaPoolId,au as getPdaPoolRewardVaulId,Xo as getPdaPoolVaultId,mn as getPdaProtocolPositionAddress,ge as getPdaTickArrayAddress,Bu as getPdaVault,hn as getRecentBlockHash,xo as getRegistrarAddress,Gl as getSessionKey,Za as getStablePrice,Cl as getTime,zy as getTimestamp,Ro as getTokenOwnerRecordAddress,Yb as getTransferAmountFee,Ae as getTransferAmountFeeV2,Ko as getVoterAddress,Co as getVoterWeightRecordAddress,So as getVotingMintAuthority,Bo as getVotingTokenMint,Pd as governanceCreateTokenOwnerRecord,Qg as greedy,ll as gt,jf as gte,ga as i128,qk as i16ToBytes,ci as i32ToBytes,ti as i64,ba as i8,Eo as initPoolLayout,bo as initTokenAccountInstruction,Op as initializeMarket,Rb as intersection,ia as isDateAfter,ra as isDateBefore,yl as isDecimal,Jf as isMeaningfulNumber,ta as isNumber,To as isValidFarmVersion,lr as isZero,fe as jsonInfo2PoolKeys,lP as judgeFarmType,Uo as leadingZeros,iu as leastSignificantBit,Sd as liquidityStateV4Layout,Kd as liquidityStateV5Layout,Qf as lt,Hf as lte,of as mSOLMint,ui as makeAMMSwapInstruction,Ja as makeAddLiquidityInstruction,Mo as makeAddNewRewardInstruction,wi as makeClaimInstruction,ss as makeClaimInstructionV4,Cu as makeCreateCpmmPoolInInstruction,va as makeCreateFarmInstruction,Du as makeCreateMarketInstruction,Wa as makeCreatorWithdrawFarmRewardInstruction,Ru as makeDepositCpmmInInstruction,Da as makeDepositInstructionV3,qa as makeDepositInstructionV5,Ua as makeDepositInstructionV6,SP as makeDepositTokenInstruction,CP as makeDepositWithdrawInstruction,Wk as makeInitPoolInstructionV4,SB as makePurchaseInstruction,No as makeRestartRewardInstruction,tu as makeSimulatePoolInfoInstruction,Ou as makeSwapCpmmBaseInInInstruction,Nu as makeSwapCpmmBaseOutInInstruction,Ud as makeSwapFixedInInstruction,Gd as makeSwapFixedOutInstruction,_S as makeSwapInstruction,Zn as makeTransferInstruction,Lu as makeWithdrawCpmmInInstruction,ar as makeWithdrawInstructionV3,sr as makeWithdrawInstructionV5,or as makeWithdrawInstructionV6,KP as makeWithdrawTokenInstruction,sn as minExpirationTime,Zk as mockCreatePoolInfo,pu as mockV3CreatePoolInfo,Ld as modelDataInfoLayout,ru as mostSignificantBit,Xi as mul,zi as notInnerObject,cw as ns64,yw as ns64be,ma as nu64,rw as nu64be,so as offset,Mb as offsetDateTime,Sw as option,U as parseBigNumberish,tn as parseNumberInfo,Js as parseSimulateLogToJson,Mt as parseSimulateValue,Ia as parseTokenAccountResp,sk as parseTokenInfo,Zt as poolTypeV6,on as printSimulate,S as publicKey,rs as purchaseLayout,id as realFarmStateV3Layout,od as realFarmStateV5Layout,sd as realFarmV6Layout,qs as recursivelyDecimalToFraction,qo as removeLiquidityInstruction,vo as removeLiquidityLayout,NS as route1Instruction,MS as route2Instruction,vp as routeInstruction,Lw as rustEnum,ow as s16,lw as s16be,sw as s24,mw as s24be,De as s32,dw as s32be,aw as s40,pw as s40be,uw as s48,fw as s48be,iw as s8,q as seq,Yp as setLoggerLevel,dl as shakeFractionDecimal,$s as simulateMultipleInstruction,vk as simulatePoolInfoInstruction,hl as simulateTransaction,zs as sleep,kn as solToWSol,ck as solToWSolToken,Yt as splAccountLayout,Xs as splitNumber,sf as stSOLMint,Rw as str,L as struct,$f as sub,Cw as tagged,Ui as tenExponential,pl as toBN,Tl as toBuffer,Gs as toFraction,Yf as toFractionWithDecimals,Py as toPercent,Xa as toToken,uk as toTokenAmount,ak as toTokenInfo,ky as toTokenPrice,hy as toTotalPrice,Ds as toUsdCurrency,Go as trailingZeros,Ei as tryParsePublicKey,z as u128,Bt as u16,nu as u16ToBytes,$g as u16be,Hg as u24,Jg as u24be,ze as u32,Uk as u32ToBytes,ew as u32be,jg as u40,tw as u40be,Zg as u48,nw as u48be,w as u64,_ as u8,Nw as union,CK as unionArr,Pw as unionLayoutDiscriminator,Ob as uniq,dd as updateFarmPoolInfo,jr as updateReqHistory,hw as utf8,Vi as validateAndParsePublicKey,Io as validateFarmRewards,Kw as vec,Wm as vecU8,hd as voterStakeRegistryCreateDepositEntry,kd as voterStakeRegistryCreateVoter,gd as voterStakeRegistryDeposit,wd as voterStakeRegistryUpdateVoterWeightRecord,Ad as voterStakeRegistryWithdraw,lk as wSolToSolToken,Ao as withdrawRewardLayout,Lb as xor,Mw as zeros};
|
|
1
|
+
var tc=Object.defineProperty,nc=Object.defineProperties;var rc=Object.getOwnPropertyDescriptors;var Cr=Object.getOwnPropertySymbols;var bs=Object.prototype.hasOwnProperty,gs=Object.prototype.propertyIsEnumerable;var ys=(r,e,t)=>e in r?tc(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,M=(r,e)=>{for(var t in e||(e={}))bs.call(e,t)&&ys(r,t,e[t]);if(Cr)for(var t of Cr(e))gs.call(e,t)&&ys(r,t,e[t]);return r},D=(r,e)=>nc(r,rc(e));var Te=(r,e)=>{var t={};for(var n in r)bs.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Cr)for(var n of Cr(r))e.indexOf(n)<0&&gs.call(r,n)&&(t[n]=r[n]);return t};import Xl from"axios";import{get as Bi,set as ws}from"lodash";import As from"dayjs";import ic from"dayjs/plugin/utc";As.extend(ic);var oc=(i=>(i[i.Error=0]="Error",i[i.Warning=1]="Warning",i[i.Info=2]="Info",i[i.Debug=3]="Debug",i))(oc||{}),Si=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 As().utc().format("YYYY/MM/DD HH:mm:ss UTC")}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}},Ki={},Ps={};function ae(r){let e=Bi(Ki,r);if(!e){let t=Bi(Ps,r);e=new Si({name:r,logLevel:t}),ws(Ki,r,e)}return e}function Yp(r,e){ws(Ps,r,e);let t=Bi(Ki,r);t&&(t.level=e)}import{PublicKey as wl}from"@solana/web3.js";import Al from"bn.js";import bl from"big.js";import Xt from"bn.js";import Pe from"bn.js";var gn=9e15,Gt=1e9,Ci="0123456789abcdef",Lr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Or="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Ri={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-gn,maxE:gn,crypto:!1},Is,Ot,J=!0,Mr="[DecimalError] ",Ut=Mr+"Invalid argument: ",xs=Mr+"Precision limit exceeded",Bs=Mr+"crypto unavailable",Ss="[object Decimal]",Ge=Math.floor,Oe=Math.pow,sc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,ac=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,uc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ks=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,bt=1e7,H=7,cc=9007199254740991,lc=Lr.length-1,Li=Or.length-1,O={toStringTag:Ss};O.absoluteValue=O.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),X(r)};O.ceil=function(){return X(new this.constructor(this),this.e+1,2)};O.clampedTo=O.clamp=function(r,e){var t,n=this,i=n.constructor;if(r=new i(r),e=new i(e),!r.s||!e.s)return new i(NaN);if(r.gt(e))throw Error(Ut+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new i(n)};O.comparedTo=O.cmp=function(r){var e,t,n,i,o=this,s=o.d,a=(r=new o.constructor(r)).d,u=o.s,c=r.s;if(!s||!a)return!u||!c?NaN:u!==c?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-c:0;if(u!==c)return u;if(o.e!==r.e)return o.e>r.e^u<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===i?0:n>i^u<0?1:-1};O.cosine=O.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+H,n.rounding=1,t=mc(n,Ns(n,t)),n.precision=r,n.rounding=e,X(Ot==2||Ot==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};O.cubeRoot=O.cbrt=function(){var r,e,t,n,i,o,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(J=!1,o=l.s*Oe(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=Fe(l.d),r=l.e,(o=(r-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=Oe(t,1/3),r=Ge((r+1)/3)-(r%3==(r<0?-1:2)),o==1/0?t="5e"+r:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(o.toString()),s=(r=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=we(c.plus(l).times(a),c.plus(u),s+2,1),Fe(a.d).slice(0,s)===(t=Fe(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(X(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(X(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return J=!0,X(n,r,m.rounding,e)};O.decimalPlaces=O.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-Ge(this.e/H))*H,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};O.dividedBy=O.div=function(r){return we(this,new this.constructor(r))};O.dividedToIntegerBy=O.divToInt=function(r){var e=this,t=e.constructor;return X(we(e,new t(r),0,1,1),t.precision,t.rounding)};O.equals=O.eq=function(r){return this.cmp(r)===0};O.floor=function(){return X(new this.constructor(this),this.e+1,3)};O.greaterThan=O.gt=function(r){return this.cmp(r)>0};O.greaterThanOrEqualTo=O.gte=function(r){var e=this.cmp(r);return e==1||e===0};O.hyperbolicCosine=O.cosh=function(){var r,e,t,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(r=Math.ceil(i/3),e=(1/Vr(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),o=wn(s,1,o.times(e),new s(1),!0);for(var u,c=r,l=new s(8);c--;)u=o.times(o),o=a.minus(u.times(l.minus(u.times(l))));return X(o,s.precision=t,s.rounding=n,!0)};O.hyperbolicSine=O.sinh=function(){var r,e,t,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(e=o.precision,t=o.rounding,o.precision=e+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=wn(o,2,i,i,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,i=i.times(1/Vr(5,r)),i=wn(o,2,i,i,!0);for(var s,a=new o(5),u=new o(16),c=new o(20);r--;)s=i.times(i),i=i.times(a.plus(s.times(u.times(s).plus(c))))}return o.precision=e,o.rounding=t,X(i,e,t,!0)};O.hyperbolicTangent=O.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,we(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};O.inverseCosine=O.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,o=t.rounding;return n!==-1?n===0?e.isNeg()?yt(t,i,o):new t(0):new t(NaN):e.isZero()?yt(t,i+4,o).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),r=yt(t,i+4,o).times(.5),t.precision=i,t.rounding=o,r.minus(e))};O.inverseHyperbolicCosine=O.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,J=!1,t=t.times(t).minus(1).sqrt().plus(t),J=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};O.inverseHyperbolicSine=O.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,J=!1,t=t.times(t).plus(1).sqrt().plus(t),J=!0,n.precision=r,n.rounding=e,t.ln())};O.inverseHyperbolicTangent=O.atanh=function(){var r,e,t,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(r=o.precision,e=o.rounding,n=i.sd(),Math.max(n,r)<2*-i.e-1?X(new o(i),r,e,!0):(o.precision=t=n-i.e,i=we(i.plus(1),new o(1).minus(i),t+r,1),o.precision=r+4,o.rounding=1,i=i.ln(),o.precision=r,o.rounding=e,i.times(.5))):new o(NaN)};O.inverseSine=O.asin=function(){var r,e,t,n,i=this,o=i.constructor;return i.isZero()?new o(i):(e=i.abs().cmp(1),t=o.precision,n=o.rounding,e!==-1?e===0?(r=yt(o,t+4,n).times(.5),r.s=i.s,r):new o(NaN):(o.precision=t+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,i.times(2)))};O.inverseTangent=O.atan=function(){var r,e,t,n,i,o,s,a,u,c=this,l=c.constructor,m=l.precision,p=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=Li)return s=yt(l,m+4,p).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=Li)return s=yt(l,m+4,p).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/H+2|0),r=t;r;--r)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(J=!1,e=Math.ceil(a/H),n=1,u=c.times(c),s=new l(c),i=c;r!==-1;)if(i=i.times(u),o=s.minus(i.div(n+=2)),i=i.times(u),s=o.plus(i.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===o.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),J=!0,X(s,l.precision=m,l.rounding=p,!0)};O.isFinite=function(){return!!this.d};O.isInteger=O.isInt=function(){return!!this.d&&Ge(this.e/H)>this.d.length-2};O.isNaN=function(){return!this.s};O.isNegative=O.isNeg=function(){return this.s<0};O.isPositive=O.isPos=function(){return this.s>0};O.isZero=function(){return!!this.d&&this.d[0]===0};O.lessThan=O.lt=function(r){return this.cmp(r)<0};O.lessThanOrEqualTo=O.lte=function(r){return this.cmp(r)<1};O.logarithm=O.log=function(r){var e,t,n,i,o,s,a,u,c=this,l=c.constructor,m=l.precision,p=l.rounding,d=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.eq(10)}if(t=c.d,c.s<0||!t||!t[0]||c.eq(1))return new l(t&&!t[0]?-1/0:c.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)o=!0;else{for(i=t[0];i%10===0;)i/=10;o=i!==1}if(J=!1,a=m+d,s=qt(c,a),n=e?Nr(l,a+10):qt(r,a),u=we(s,n,a,1),Vn(u.d,i=m,p))do if(a+=10,s=qt(c,a),n=e?Nr(l,a+10):qt(r,a),u=we(s,n,a,1),!o){+Fe(u.d).slice(i+1,i+15)+1==1e14&&(u=X(u,m+1,0));break}while(Vn(u.d,i+=10,p));return J=!0,X(u,m,p)};O.minus=O.sub=function(r){var e,t,n,i,o,s,a,u,c,l,m,p,d=this,y=d.constructor;if(r=new y(r),!d.d||!r.d)return!d.s||!r.s?r=new y(NaN):d.d?r.s=-r.s:r=new y(r.d||d.s!==r.s?d:NaN),r;if(d.s!=r.s)return r.s=-r.s,d.plus(r);if(c=d.d,p=r.d,a=y.precision,u=y.rounding,!c[0]||!p[0]){if(p[0])r.s=-r.s;else if(c[0])r=new y(d);else return new y(u===3?-0:0);return J?X(r,a,u):r}if(t=Ge(r.e/H),l=Ge(d.e/H),c=c.slice(),o=l-t,o){for(m=o<0,m?(e=c,o=-o,s=p.length):(e=p,t=l,s=c.length),n=Math.max(Math.ceil(a/H),s)+2,o>n&&(o=n,e.length=1),e.reverse(),n=o;n--;)e.push(0);e.reverse()}else{for(n=c.length,s=p.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=p[n]){m=c[n]<p[n];break}o=0}for(m&&(e=c,c=p,p=e,r.s=-r.s),s=c.length,n=p.length-s;n>0;--n)c[s++]=0;for(n=p.length;n>o;){if(c[--n]<p[n]){for(i=n;i&&c[--i]===0;)c[i]=bt-1;--c[i],c[n]+=bt}c[n]-=p[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(r.d=c,r.e=_r(c,t),J?X(r,a,u):r):new y(u===3?-0:0)};O.modulo=O.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?X(new n(t),n.precision,n.rounding):(J=!1,n.modulo==9?(e=we(t,r.abs(),0,3,1),e.s*=r.s):e=we(t,r,0,n.modulo,1),e=e.times(r),J=!0,t.minus(e))};O.naturalExponential=O.exp=function(){return Oi(this)};O.naturalLogarithm=O.ln=function(){return qt(this)};O.negated=O.neg=function(){var r=new this.constructor(this);return r.s=-r.s,X(r)};O.plus=O.add=function(r){var e,t,n,i,o,s,a,u,c,l,m=this,p=m.constructor;if(r=new p(r),!m.d||!r.d)return!m.s||!r.s?r=new p(NaN):m.d||(r=new p(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(c=m.d,l=r.d,a=p.precision,u=p.rounding,!c[0]||!l[0])return l[0]||(r=new p(m)),J?X(r,a,u):r;if(o=Ge(m.e/H),n=Ge(r.e/H),c=c.slice(),i=o-n,i){for(i<0?(t=c,i=-i,s=l.length):(t=l,n=o,s=c.length),o=Math.ceil(a/H),s=o>s?o+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=c.length,i=l.length,s-i<0&&(i=s,t=l,l=c,c=t),e=0;i;)e=(c[--i]=c[i]+l[i]+e)/bt|0,c[i]%=bt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return r.d=c,r.e=_r(c,n),J?X(r,a,u):r};O.precision=O.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Ut+r);return t.d?(e=Cs(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};O.round=function(){var r=this,e=r.constructor;return X(new e(r),r.e+1,e.rounding)};O.sine=O.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+H,n.rounding=1,t=pc(n,Ns(n,t)),n.precision=r,n.rounding=e,X(Ot>2?t.neg():t,r,e,!0)):new n(NaN)};O.squareRoot=O.sqrt=function(){var r,e,t,n,i,o,s=this,a=s.d,u=s.e,c=s.s,l=s.constructor;if(c!==1||!a||!a[0])return new l(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);for(J=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=Fe(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=Ge((u+1)/2)-(u<0||u%2),c==1/0?e="5e"+u:(e=c.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new l(e)):n=new l(c.toString()),t=(u=l.precision)+3;;)if(o=n,n=o.plus(we(s,o,t+2,1)).times(.5),Fe(o.d).slice(0,t)===(e=Fe(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(X(o,u+1,0),o.times(o).eq(s))){n=o;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(X(n,u+1,1),r=!n.times(n).eq(s));break}return J=!0,X(n,u,l.rounding,r)};O.tangent=O.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=we(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,X(Ot==2||Ot==4?t.neg():t,r,e,!0)):new n(NaN)};O.times=O.mul=function(r){var e,t,n,i,o,s,a,u,c,l=this,m=l.constructor,p=l.d,d=(r=new m(r)).d;if(r.s*=l.s,!p||!p[0]||!d||!d[0])return new m(!r.s||p&&!p[0]&&!d||d&&!d[0]&&!p?NaN:!p||!d?r.s/0:r.s*0);for(t=Ge(l.e/H)+Ge(r.e/H),u=p.length,c=d.length,u<c&&(o=p,p=d,d=o,s=u,u=c,c=s),o=[],s=u+c,n=s;n--;)o.push(0);for(n=c;--n>=0;){for(e=0,i=u+n;i>n;)a=o[i]+d[n]*p[i-n-1]+e,o[i--]=a%bt|0,e=a/bt|0;o[i]=(o[i]+e)%bt|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=_r(o,t),J?X(r,m.precision,m.rounding):r};O.toBinary=function(r,e){return Mi(this,2,r,e)};O.toDecimalPlaces=O.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(et(r,0,Gt),e===void 0?e=n.rounding:et(e,0,8),X(t,r+t.e+1,e))};O.toExponential=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=ht(n,!0):(et(r,0,Gt),e===void 0?e=i.rounding:et(e,0,8),n=X(new i(n),r+1,e),t=ht(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};O.toFixed=function(r,e){var t,n,i=this,o=i.constructor;return r===void 0?t=ht(i):(et(r,0,Gt),e===void 0?e=o.rounding:et(e,0,8),n=X(new o(i),r+i.e+1,e),t=ht(n,!1,r+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};O.toFraction=function(r){var e,t,n,i,o,s,a,u,c,l,m,p,d=this,y=d.d,f=d.constructor;if(!y)return new f(d);if(c=t=new f(1),n=u=new f(0),e=new f(n),o=e.e=Cs(y)-d.e-1,s=o%H,e.d[0]=Oe(10,s<0?H+s:s),r==null)r=o>0?e:c;else{if(a=new f(r),!a.isInt()||a.lt(c))throw Error(Ut+a);r=a.gt(e)?o>0?e:c:a}for(J=!1,a=new f(Fe(y)),l=f.precision,f.precision=o=y.length*H*2;m=we(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(r)!=1;)t=n,n=i,i=c,c=u.plus(m.times(i)),u=i,i=e,e=a.minus(m.times(i)),a=i;return i=we(r.minus(t),n,0,1,1),u=u.plus(i.times(c)),t=t.plus(i.times(n)),u.s=c.s=d.s,p=we(c,n,o,1).minus(d).abs().cmp(we(u,t,o,1).minus(d).abs())<1?[c,n]:[u,t],f.precision=l,J=!0,p};O.toHexadecimal=O.toHex=function(r,e){return Mi(this,16,r,e)};O.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:et(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(J=!1,t=we(t,r,0,e,1).times(r),J=!0,X(t)):(r.s=t.s,t=r),t};O.toNumber=function(){return+this};O.toOctal=function(r,e){return Mi(this,8,r,e)};O.toPower=O.pow=function(r){var e,t,n,i,o,s,a=this,u=a.constructor,c=+(r=new u(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new u(Oe(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,o=u.rounding,r.eq(1))return X(a,n,o);if(e=Ge(r.e/H),e>=r.d.length-1&&(t=c<0?-c:c)<=cc)return i=Rs(u,a,t,n),r.s<0?new u(1).div(i):X(i,n,o);if(s=a.s,s<0){if(e<r.d.length-1)return new u(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Oe(+a,c),e=t==0||!isFinite(t)?Ge(c*(Math.log("0."+Fe(a.d))/Math.LN10+a.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?s/0:0):(J=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),i=Oi(r.times(qt(a,n+t)),n),i.d&&(i=X(i,n+5,1),Vn(i.d,n,o)&&(e=n+10,i=X(Oi(r.times(qt(a,e+t)),e),e+5,1),+Fe(i.d).slice(n+1,n+15)+1==1e14&&(i=X(i,n+1,0)))),i.s=s,J=!0,u.rounding=o,X(i,n,o))};O.toPrecision=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=ht(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(et(r,1,Gt),e===void 0?e=i.rounding:et(e,0,8),n=X(new i(n),r,e),t=ht(n,r<=n.e||n.e<=i.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};O.toSignificantDigits=O.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(et(r,1,Gt),e===void 0?e=n.rounding:et(e,0,8)),X(new n(t),r,e)};O.toString=function(){var r=this,e=r.constructor,t=ht(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};O.truncated=O.trunc=function(){return X(new this.constructor(this),this.e+1,1)};O.valueOf=O.toJSON=function(){var r=this,e=r.constructor,t=ht(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function Fe(r){var e,t,n,i=r.length-1,o="",s=r[0];if(i>0){for(o+=s,e=1;e<i;e++)n=r[e]+"",t=H-n.length,t&&(o+=Dt(t)),o+=n;s=r[e],n=s+"",t=H-n.length,t&&(o+=Dt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function et(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Ut+r)}function Vn(r,e,t,n){var i,o,s,a;for(o=r[0];o>=10;o/=10)--e;return--e<0?(e+=H,i=0):(i=Math.ceil((e+1)/H),e%=H),o=Oe(10,H-e),a=r[i]%o|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==o||t>3&&a+1==o/2)&&(r[i+1]/o/100|0)==Oe(10,e-2)-1||(a==o/2||a==0)&&(r[i+1]/o/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==o||!n&&t>3&&a+1==o/2)&&(r[i+1]/o/1e3|0)==Oe(10,e-3)-1,s}function Rr(r,e,t){for(var n,i=[0],o,s=0,a=r.length;s<a;){for(o=i.length;o--;)i[o]*=e;for(i[0]+=Ci.indexOf(r.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function mc(r,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/Vr(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),r.precision+=t,e=wn(r,1,e.times(i),new r(1));for(var o=t;o--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var we=function(){function r(n,i,o){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*i+a,n[u]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function e(n,i,o,s){var a,u;if(o!=s)u=o>s?1:-1;else for(a=u=0;a<o;a++)if(n[a]!=i[a]){u=n[a]>i[a]?1:-1;break}return u}function t(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,u){var c,l,m,p,d,y,f,b,g,P,A,h,T,I,B,x,R,N,E,Q,W=n.constructor,j=n.s==i.s?1:-1,ee=n.d,se=i.d;if(!ee||!ee[0]||!se||!se[0])return new W(!n.s||!i.s||(ee?se&&ee[0]==se[0]:!se)?NaN:ee&&ee[0]==0||!se?j*0:j/0);for(u?(d=1,l=n.e-i.e):(u=bt,d=H,l=Ge(n.e/d)-Ge(i.e/d)),E=se.length,R=ee.length,g=new W(j),P=g.d=[],m=0;se[m]==(ee[m]||0);m++);if(se[m]>(ee[m]||0)&&l--,o==null?(I=o=W.precision,s=W.rounding):a?I=o+(n.e-i.e)+1:I=o,I<0)P.push(1),y=!0;else{if(I=I/d+2|0,m=0,E==1){for(p=0,se=se[0],I++;(m<R||p)&&I--;m++)B=p*u+(ee[m]||0),P[m]=B/se|0,p=B%se|0;y=p||m<R}else{for(p=u/(se[0]+1)|0,p>1&&(se=r(se,p,u),ee=r(ee,p,u),E=se.length,R=ee.length),x=E,A=ee.slice(0,E),h=A.length;h<E;)A[h++]=0;Q=se.slice(),Q.unshift(0),N=se[0],se[1]>=u/2&&++N;do p=0,c=e(se,A,E,h),c<0?(T=A[0],E!=h&&(T=T*u+(A[1]||0)),p=T/N|0,p>1?(p>=u&&(p=u-1),f=r(se,p,u),b=f.length,h=A.length,c=e(f,A,b,h),c==1&&(p--,t(f,E<b?Q:se,b,u))):(p==0&&(c=p=1),f=se.slice()),b=f.length,b<h&&f.unshift(0),t(A,f,h,u),c==-1&&(h=A.length,c=e(se,A,E,h),c<1&&(p++,t(A,E<h?Q:se,h,u))),h=A.length):c===0&&(p++,A=[0]),P[m++]=p,c&&A[0]?A[h++]=ee[x]||0:(A=[ee[x]],h=1);while((x++<R||A[0]!==void 0)&&I--);y=A[0]!==void 0}P[0]||P.shift()}if(d==1)g.e=l,Is=y;else{for(m=1,p=P[0];p>=10;p/=10)m++;g.e=m+l*d-1,X(g,a?o+g.e+1:o,s,y)}return g}}();function X(r,e,t,n){var i,o,s,a,u,c,l,m,p,d=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(i=1,a=m[0];a>=10;a/=10)i++;if(o=e-i,o<0)o+=H,s=e,l=m[p=0],u=l/Oe(10,i-s-1)%10|0;else if(p=Math.ceil((o+1)/H),a=m.length,p>=a)if(n){for(;a++<=p;)m.push(0);l=u=0,i=1,o%=H,s=o-H+1}else break e;else{for(l=a=m[p],i=1;a>=10;a/=10)i++;o%=H,s=o-H+i,u=s<0?0:l/Oe(10,i-s-1)%10|0}if(n=n||e<0||m[p+1]!==void 0||(s<0?l:l%Oe(10,i-s-1)),c=t<4?(u||n)&&(t==0||t==(r.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(o>0?s>0?l/Oe(10,i-s):0:m[p-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=r.e+1,m[0]=Oe(10,(H-e%H)%H),r.e=-e||0):m[0]=r.e=0,r;if(o==0?(m.length=p,a=1,p--):(m.length=p+1,a=Oe(10,H-o),m[p]=s>0?(l/Oe(10,i-s)%Oe(10,s)|0)*a:0),c)for(;;)if(p==0){for(o=1,s=m[0];s>=10;s/=10)o++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(r.e++,m[0]==bt&&(m[0]=1));break}else{if(m[p]+=a,m[p]!=bt)break;m[p--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return J&&(r.e>d.maxE?(r.d=null,r.e=NaN):r.e<d.minE&&(r.e=0,r.d=[0])),r}function ht(r,e,t){if(!r.isFinite())return Os(r);var n,i=r.e,o=Fe(r.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+Dt(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r.e<0?"e":"e+")+r.e):i<0?(o="0."+Dt(-i-1)+o,t&&(n=t-s)>0&&(o+=Dt(n))):i>=s?(o+=Dt(i+1-s),t&&(n=t-i-1)>0&&(o=o+"."+Dt(n))):((n=i+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+="."),o+=Dt(n))),o}function _r(r,e){var t=r[0];for(e*=H;t>=10;t/=10)e++;return e}function Nr(r,e,t){if(e>lc)throw J=!0,t&&(r.precision=t),Error(xs);return X(new r(Lr),e,1,!0)}function yt(r,e,t){if(e>Li)throw Error(xs);return X(new r(Or),e,t,!0)}function Cs(r){var e=r.length-1,t=e*H+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function Dt(r){for(var e="";r--;)e+="0";return e}function Rs(r,e,t,n){var i,o=new r(1),s=Math.ceil(n/H+4);for(J=!1;;){if(t%2&&(o=o.times(e),hs(o.d,s)&&(i=!0)),t=Ge(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}e=e.times(e),hs(e.d,s)}return J=!0,o}function ks(r){return r.d[r.d.length-1]&1}function Ls(r,e,t){for(var n,i=new r(e[0]),o=0;++o<e.length;)if(n=new r(e[o]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function Oi(r,e){var t,n,i,o,s,a,u,c=0,l=0,m=0,p=r.constructor,d=p.rounding,y=p.precision;if(!r.d||!r.d[0]||r.e>17)return new p(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(J=!1,u=y):u=e,a=new p(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Oe(2,m))/Math.LN10*2+5|0,u+=n,t=o=s=new p(1),p.precision=u;;){if(o=X(o.times(r),u,1),t=t.times(++l),a=s.plus(we(o,t,u,1)),Fe(a.d).slice(0,u)===Fe(s.d).slice(0,u)){for(i=m;i--;)s=X(s.times(s),u,1);if(e==null)if(c<3&&Vn(s.d,u-n,d,c))p.precision=u+=10,t=o=a=new p(1),l=0,c++;else return X(s,p.precision=y,d,J=!0);else return p.precision=y,s}s=a}}function qt(r,e){var t,n,i,o,s,a,u,c,l,m,p,d=1,y=10,f=r,b=f.d,g=f.constructor,P=g.rounding,A=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?(J=!1,l=A):l=e,g.precision=l+=y,t=Fe(b),n=t.charAt(0),Math.abs(o=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=Fe(f.d),n=t.charAt(0),d++;o=f.e,n>1?(f=new g("0."+t),o++):f=new g(n+"."+t.slice(1))}else return c=Nr(g,l+2,A).times(o+""),f=qt(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?X(f,A,P,J=!0):f;for(m=f,u=s=f=we(f.minus(1),f.plus(1),l,1),p=X(f.times(f),l,1),i=3;;){if(s=X(s.times(p),l,1),c=u.plus(we(s,new g(i),l,1)),Fe(c.d).slice(0,l)===Fe(u.d).slice(0,l))if(u=u.times(2),o!==0&&(u=u.plus(Nr(g,l+2,A).times(o+""))),u=we(u,new g(d),l,1),e==null)if(Vn(u.d,l-y,P,a))g.precision=l+=y,c=s=f=we(m.minus(1),m.plus(1),l,1),p=X(f.times(f),l,1),i=a=1;else return X(u,g.precision=A,P,J=!0);else return g.precision=A,u;u=c,i+=2}}function Os(r){return String(r.s*r.s/0)}function Ni(r,e){var t,n,i;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(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%H,t<0&&(n+=H),n<i){for(n&&r.d.push(+e.slice(0,n)),i-=H;n<i;)r.d.push(+e.slice(n,n+=H));e=e.slice(n),n=H-e.length}else n-=i;for(;n--;)e+="0";r.d.push(+e),J&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function dc(r,e){var t,n,i,o,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ks.test(e))return Ni(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(ac.test(e))t=16,e=e.toLowerCase();else if(sc.test(e))t=2;else if(uc.test(e))t=8;else throw Error(Ut+e);for(o=e.search(/p/i),o>0?(u=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),o=e.indexOf("."),s=o>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,o=a-o,i=Rs(n,new n(t),o,o*2)),c=Rr(e,t,bt),l=c.length-1,o=l;c[o]===0;--o)c.pop();return o<0?new n(r.s*0):(r.e=_r(c,l),r.d=c,J=!1,s&&(r=we(r,i,a*4)),u&&(r=r.times(Math.abs(u)<54?Oe(2,u):En.pow(2,u))),J=!0,r)}function pc(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:wn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Vr(5,t)),e=wn(r,2,e,e);for(var i,o=new r(5),s=new r(16),a=new r(20);t--;)i=e.times(e),e=e.times(o.plus(i.times(s.times(i).minus(a))));return e}function wn(r,e,t,n,i){var o,s,a,u,c=1,l=r.precision,m=Math.ceil(l/H);for(J=!1,u=t.times(t),a=new r(n);;){if(s=we(a.times(u),new r(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=we(s.times(u),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(o=m;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,c++}return J=!0,s.d.length=m+1,s}function Vr(r,e){for(var t=r;--e;)t*=r;return t}function Ns(r,e){var t,n=e.s<0,i=yt(r,r.precision,1),o=i.times(.5);if(e=e.abs(),e.lte(o))return Ot=n?4:1,e;if(t=e.divToInt(i),t.isZero())Ot=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(o))return Ot=ks(t)?n?2:3:n?4:1,e;Ot=ks(t)?n?1:4:n?3:2}return e.minus(i).abs()}function Mi(r,e,t,n){var i,o,s,a,u,c,l,m,p,d=r.constructor,y=t!==void 0;if(y?(et(t,1,Gt),n===void 0?n=d.rounding:et(n,0,8)):(t=d.precision,n=d.rounding),!r.isFinite())l=Os(r);else{for(l=ht(r),s=l.indexOf("."),y?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),p=new d(1),p.e=l.length-s,p.d=Rr(ht(p),10,i),p.e=p.d.length),m=Rr(l,10,i),o=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?o--:(r=new d(r),r.d=m,r.e=o,r=we(r,p,t,n,0,i),m=r.d,o=r.e,c=Is),s=m[t],a=i/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,c)for(;++m[--t]>i-1;)m[t]=0,t||(++o,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=Ci.charAt(m[s]);if(y){if(u>1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)l+="0";for(m=Rr(l,i,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=Ci.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)l="0"+l;l="0."+l}else if(++o>u)for(o-=u;o--;)l+="0";else o<u&&(l=l.slice(0,o)+"."+l.slice(o))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function hs(r,e){if(r.length>e)return r.length=e,!0}function fc(r){return new this(r).abs()}function yc(r){return new this(r).acos()}function bc(r){return new this(r).acosh()}function gc(r,e){return new this(r).plus(e)}function wc(r){return new this(r).asin()}function Ac(r){return new this(r).asinh()}function Pc(r){return new this(r).atan()}function kc(r){return new this(r).atanh()}function hc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,i=this.rounding,o=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=yt(this,o,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?yt(this,n,i):new this(0),t.s=r.s):!r.d||e.isZero()?(t=yt(this,o,1).times(.5),t.s=r.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(we(r,e,o,1)),e=yt(this,o,1),this.precision=n,this.rounding=i,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(we(r,e,o,1)),t}function Tc(r){return new this(r).cbrt()}function Ic(r){return X(r=new this(r),r.e+1,2)}function xc(r,e,t){return new this(r).clamp(e,t)}function Bc(r){if(!r||typeof r!="object")throw Error(Mr+"Object expected");var e,t,n,i=r.defaults===!0,o=["precision",1,Gt,"rounding",0,8,"toExpNeg",-gn,0,"toExpPos",0,gn,"maxE",0,gn,"minE",-gn,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],i&&(this[t]=Ri[t]),(n=r[t])!==void 0)if(Ge(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(Ut+t+": "+n);if(t="crypto",i&&(this[t]=Ri[t]),(n=r[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(Bs);else this[t]=!1;else throw Error(Ut+t+": "+n);return this}function Sc(r){return new this(r).cos()}function Kc(r){return new this(r).cosh()}function Ms(r){var e,t,n;function i(o){var s,a,u,c=this;if(!(c instanceof i))return new i(o);if(c.constructor=i,Ts(o)){c.s=o.s,J?!o.d||o.e>i.maxE?(c.e=NaN,c.d=null):o.e<i.minE?(c.e=0,c.d=[0]):(c.e=o.e,c.d=o.d.slice()):(c.e=o.e,c.d=o.d?o.d.slice():o.d);return}if(u=typeof o,u==="number"){if(o===0){c.s=1/o<0?-1:1,c.e=0,c.d=[0];return}if(o<0?(o=-o,c.s=-1):c.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;J?s>i.maxE?(c.e=NaN,c.d=null):s<i.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[o]):(c.e=s,c.d=[o]);return}else if(o*0!==0){o||(c.s=NaN),c.e=NaN,c.d=null;return}return Ni(c,o.toString())}else if(u!=="string")throw Error(Ut+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),c.s=-1):(a===43&&(o=o.slice(1)),c.s=1),Ks.test(o)?Ni(c,o):dc(c,o)}if(i.prototype=O,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Bc,i.clone=Ms,i.isDecimal=Ts,i.abs=fc,i.acos=yc,i.acosh=bc,i.add=gc,i.asin=wc,i.asinh=Ac,i.atan=Pc,i.atanh=kc,i.atan2=hc,i.cbrt=Tc,i.ceil=Ic,i.clamp=xc,i.cos=Sc,i.cosh=Kc,i.div=Cc,i.exp=Rc,i.floor=Lc,i.hypot=Oc,i.ln=Nc,i.log=Mc,i.log10=Vc,i.log2=_c,i.max=Ec,i.min=Fc,i.mod=vc,i.mul=Wc,i.pow=Dc,i.random=qc,i.round=Uc,i.sign=Gc,i.sin=Xc,i.sinh=zc,i.sqrt=Yc,i.sub=Qc,i.sum=Hc,i.tan=jc,i.tanh=Zc,i.trunc=$c,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return i.config(r),i}function Cc(r,e){return new this(r).div(e)}function Rc(r){return new this(r).exp()}function Lc(r){return X(r=new this(r),r.e+1,3)}function Oc(){var r,e,t=new this(0);for(J=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return J=!0,new this(1/0);t=e}return J=!0,t.sqrt()}function Ts(r){return r instanceof En||r&&r.toStringTag===Ss||!1}function Nc(r){return new this(r).ln()}function Mc(r,e){return new this(r).log(e)}function _c(r){return new this(r).log(2)}function Vc(r){return new this(r).log(10)}function Ec(){return Ls(this,arguments,"lt")}function Fc(){return Ls(this,arguments,"gt")}function vc(r,e){return new this(r).mod(e)}function Wc(r,e){return new this(r).mul(e)}function Dc(r,e){return new this(r).pow(e)}function qc(r){var e,t,n,i,o=0,s=new this(1),a=[];if(r===void 0?r=this.precision:et(r,1,Gt),n=Math.ceil(r/H),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));o<n;)i=e[o],i>=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);o<n;)i=e[o]+(e[o+1]<<8)+(e[o+2]<<16)+((e[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(Bs);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],r%=H,n&&r&&(i=Oe(10,H-r),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=H)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<H&&(t-=H-n)}return s.e=t,s.d=a,s}function Uc(r){return X(r=new this(r),r.e+1,this.rounding)}function Gc(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Xc(r){return new this(r).sin()}function zc(r){return new this(r).sinh()}function Yc(r){return new this(r).sqrt()}function Qc(r,e){return new this(r).sub(e)}function Hc(){var r=0,e=arguments,t=new this(e[r]);for(J=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return J=!0,X(t,this.precision,this.rounding)}function jc(r){return new this(r).tan()}function Zc(r){return new this(r).tanh()}function $c(r){return X(r=new this(r),r.e+1,1)}O[Symbol.for("nodejs.util.inspect.custom")]=O.toString;O[Symbol.toStringTag]="Decimal";var En=O.constructor=Ms(Ri);Lr=new En(Lr);Or=new En(Or);var F=En;import{PublicKey as vi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Jc}from"@solana/spl-token";import{PublicKey as Ie,SystemProgram as _s,SYSVAR_RENT_PUBKEY as el}from"@solana/web3.js";function k({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var _i=[k({pubkey:Jc,isWritable:!1}),k({pubkey:_s.programId,isWritable:!1}),k({pubkey:el,isWritable:!1})];function Vi({publicKey:r,transformSol:e}){let t=Ei(r.toString());if(t instanceof Ie)return e&&t.equals(Ne)?te:t;if(e&&t.toString()===Ne.toBase58())return te;if(typeof t=="string"){if(t===Ie.default.toBase58())return Ie.default;try{return new Ie(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Ei(r){try{return new Ie(r)}catch{return r}}var An=new Ie("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Vs=new Ie("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),tt=new Ie("SysvarRent111111111111111111111111111111111"),Fi=new Ie("SysvarC1ock11111111111111111111111111111111"),Pn=new Ie("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Er=new Ie("Sysvar1nstructions1111111111111111111111111"),Es=_s.programId,Jp=new Ie("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ef=new Ie("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),tf=new Ie("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),nf=new Ie("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),rf=new Ie("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),of=new Ie("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),sf=new Ie("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),af=new Ie("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),uf=new Ie("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),cf=new Ie("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),lf=new Ie("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),te=new Ie("So11111111111111111111111111111111111111112"),Ne=Ie.default;function kn(r){return Vi({publicKey:r,transformSol:!0})}import{PublicKey as tl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fs}from"@solana/spl-token";var Tt={chainId:101,address:tl.default.toBase58(),programId:Fs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Me={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Fs.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};var Wi=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:o=!1,isToken2022:s=!1}){if(e===Ne.toBase58()||e instanceof vi&&Ne.equals(e)){this.decimals=Me.decimals,this.symbol=Me.symbol,this.name=Me.name,this.mint=new vi(Me.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=o?vi.default:Vi({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},de=Wi;de.WSOL=new Wi(D(M({},Me),{mint:Me.address}));import vr from"big.js";import il from"bn.js";import ol from"decimal.js-light";import nl from"toformat";var rl=nl,Fn=rl;var Fr=ae("module/fraction"),Di=Fn(vr),vn=Fn(ol),sl={[0]:vn.ROUND_DOWN,[1]:vn.ROUND_HALF_UP,[2]:vn.ROUND_UP},al={[0]:vr.roundDown,[1]:vr.roundHalfUp,[2]:vr.roundUp},ne=class{constructor(e,t=new il(1)){this.numerator=U(e),this.denominator=U(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new ne(this.denominator,this.numerator)}add(e){let t=e instanceof ne?e:new ne(U(e));return this.denominator.eq(t.denominator)?new ne(this.numerator.add(t.numerator),this.denominator):new ne(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof ne?e:new ne(U(e));return this.denominator.eq(t.denominator)?new ne(this.numerator.sub(t.numerator),this.denominator):new ne(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof ne?e:new ne(U(e));return new ne(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof ne?e:new ne(U(e));return new ne(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Fr.logWithError(`${e} is not an integer.`),e<=0&&Fr.logWithError(`${e} is not positive.`),vn.set({precision:e+1,rounding:sl[n]});let i=new vn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Fr.logWithError(`${e} is not an integer.`),e<0&&Fr.logWithError(`${e} is negative.`),Di.DP=e,Di.RM=al[n]||1,new Di(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var ul=ae("Raydium_price"),Xe=class extends ne{constructor(t){let{baseToken:n,quoteToken:i,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=i,this.scalar=new ne(Ui(n.decimals),Ui(i.decimals))}get raw(){return new ne(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Xe({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&ul.logWithError("mul token not equals");let n=super.mul(t);return new Xe({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};var Gi=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Wn=Gi;Wn.SOL=new Gi(Tt);function vf(r,e){return r instanceof de&&e instanceof de?r.equals(e):r instanceof de||e instanceof de?!1:r===e}import cl from"bn.js";var vs=new ne(new cl(100)),ve=class extends ne{toSignificant(e=5,t,n){return this.mul(vs).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(vs).toFixed(e,t,n)}};function Ke(r){if(r instanceof ve)return new ne(r.numerator,r.denominator);if(r instanceof Xe)return r.adjusted;if(r instanceof he)try{return Ke(r.toExact())}catch{return new ne(Se)}if(r instanceof ne)return r;let e=String(r),t=tn(e);return new ne(t.numerator,t.denominator)}function Yf(r){var n;if(r instanceof ve)return{fr:new ne(r.numerator,r.denominator)};if(r instanceof Xe)return{fr:r.adjusted};if(r instanceof he)return{fr:Ke(r.toExact()),decimals:r.token.decimals};if(r instanceof ne)return{fr:r};let e=String(r),t=tn(e);return{fr:new ne(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function Qf(r,e){if(r==null||e==null)return!1;let t=Ke(r),n=Ke(e);return t.sub(n).numerator,t.sub(n).numerator.lt(Se)}function ll(r,e){if(r==null||e==null)return!1;let t=Ke(r),n=Ke(e);return t.sub(n).numerator.gt(Se)}function Hf(r,e){if(r==null||e==null)return!1;let t=Ke(r),n=Ke(e);return t.sub(n).numerator.lte(Se)}function jf(r,e){if(r==null||e==null)return!1;let t=Ke(r),n=Ke(e);return t.sub(n).numerator.gte(Se)}function ml(r,e){if(r==null||e==null)return!1;let t=Ke(r),n=Ke(e);return t.sub(n).numerator.eq(Se)}function Zf(r,e){if(r==null||e==null)return;let t=Ke(r),n=Ke(e);try{return t.div(n)}catch{return t}}function $f(r,e){if(r==null||e==null)return;let t=Ke(r),n=Ke(e);return t.sub(n)}function Jf(r){return r==null?!1:!ml(r,0)}function ey(r,e){return ll(e,r)?e:r}function Xi(r,e){if(r==null||e==null)return;let t=Ke(r),n=Ke(e);return t.mul(n)}function ty(r,e){if(r==null||e==null)return;let t=Ke(r),n=Ke(e);return t.add(n)}var qi=(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))(qi||{}),Se=new Pe(0),Us=new Pe(1),fy=new Pe(2),yy=new Pe(3),by=new Pe(5),nn=new Pe(10),gy=new Pe(100),wy=new Pe(1e3),Ay=new Pe(1e4),Ws=9007199254740991;function U(r){let e=ae("Raydium_parseBigNumberish");if(r instanceof Pe)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new Pe(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Ws||r<=-Ws)&&e.logWithError(`BigNumberish number overflow: ${r}`),new Pe(String(r))):typeof r=="bigint"?new Pe(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new Pe(0))}function Ui(r){return nn.pow(U(r))}function tn(r){var a;if(r===void 0)return{denominator:"1",numerator:"0"};if(r instanceof Pe)return{numerator:r.toString(),denominator:"1"};if(r instanceof ne)return{denominator:r.denominator.toString(),numerator:r.numerator.toString()};let e=String(r),[,t="",n="",i=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],o="1"+"0".repeat(i.length),s=t+(n==="0"?"":n)+i||"0";return{denominator:o,numerator:s,sign:t,int:n,dec:i}}function Wr(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function dl(r){var n;let[,e="",t=""]=(n=r.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function pl(r,e=0){return r instanceof Pe?r:new Pe(dl(Gs(r).mul(nn.pow(new Pe(String(e))))))}function Gs(r){if(r instanceof ve)return new ne(r.numerator,r.denominator);if(r instanceof Xe)return r.adjusted;if(r instanceof he)try{return Gs(r.toExact())}catch{return new ne(Se)}if(r instanceof ne)return r;let e=String(r),t=tn(e);return new ne(t.numerator,t.denominator)}function Py(r,e){let{numerator:t,denominator:n}=tn(r);return new ve(new Pe(t),new Pe(n).mul(e!=null&&e.alreadyDecimaled?new Pe(100):new Pe(1)))}function ky(r){let{token:e,numberPrice:t,decimalDone:n}=r,i=new de({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:o,denominator:s}=tn(t),a=n?new Pe(o).mul(nn.pow(new Pe(e.decimals))):o,u=new Pe(s).mul(nn.pow(new Pe(i.decimals)));return new Xe({baseToken:i,denominator:u.toString(),quoteToken:new de(D(M({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function Ds(r){let e=new Wn({decimals:6,symbol:"usd",name:"usd"}),t=pl(Xi(r,10**e.decimals));return new rn(e,t)}function hy(r,e){return Ds(!e||!r?0:Xi(r,e))}function fl(r){if(r==null)return;let{numerator:e,denominator:t}=tn(r.toString());return new ne(e,t)}function yl(r){return r instanceof F}function qs(r){return yl(r)?fl(r):Array.isArray(r)?r.map(e=>qs(e)):zi(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,qs(t)])):r}var gl=ae("Raydium_amount"),Dr=Fn(bl);function Xs(r,e){let t="0",n="0";if(r.includes(".")){let i=r.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):gl.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var he=class extends ne{constructor(t,n,i=!0,o){let s=new Xt(0),a=nn.pow(new Xt(t.decimals));if(i)s=U(n);else{let u=new Xt(0),c=new Xt(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Xs(n.toString(),t.decimals);u=U(l),c=U(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=ae(o||"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 he(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new he(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Dr.DP=this.token.decimals,new Dr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},rn=class extends ne{constructor(t,n,i=!0,o){let s=new Xt(0),a=nn.pow(new Xt(t.decimals));if(i)s=U(n);else{let u=new Xt(0),c=new Xt(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Xs(n.toString(),t.decimals);u=U(l),c=U(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=ae(o||"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 rn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new rn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.currency.decimals,n,i=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Dr.DP=this.currency.decimals,new Dr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};async function zs(r){new Promise(e=>setTimeout(e,r))}function zy(){return new Date().getTime()}function zi(r){return typeof r=="object"&&r!==null&&![de,he,wl,ne,Al,Xe,ve].some(e=>typeof e=="object"&&r instanceof e)}function fe(r){return typeof r=="string"?Ei(r):Array.isArray(r)?r.map(e=>fe(e)):zi(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,fe(t)])):r}import{PublicKey as Gn,sendAndConfirmTransaction as ji,Transaction as Xn,TransactionMessage as zn,VersionedTransaction as Yn}from"@solana/web3.js";import Kl from"axios";var Dn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(Dn||{}),V={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",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",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"};import{PublicKey as Qs,ComputeBudgetProgram as Ys,Transaction as Ur,TransactionMessage as Pl,Keypair as Hs,VersionedTransaction as js}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as kl}from"@solana/spl-token";var Nt=ae("Raydium_txUtil"),Zs=1644;function Gr(r){let e=[],t=[];return r.microLamports&&(e.push(Ys.setComputeUnitPrice({microLamports:r.microLamports})),t.push(V.SetComputeUnitPrice)),r.units&&(e.push(Ys.setComputeUnitLimit({units:r.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function hn(r){var e,t;try{return((t=await((e=r.getLatestBlockhash)==null?void 0:e.call(r)))==null?void 0:t.blockhash)||(await r.getRecentBlockhash()).blockhash}catch{return(await r.getRecentBlockhash()).blockhash}}function Xr(r,e){r.length<1&&Nt.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Nt.logWithError(`no signers provided:, ${e.toString()}`);let t=new Ur;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Zs}catch{return!1}}async function $s(r,e,t,n=!0){let i=new Qs("RaydiumSimuLateTransaction11111111111111111"),o=[],s=new Ur;s.feePayer=i;for(let c of e)Xr([...s.instructions,c],[i])||(o.push(s),s=new Ur,s.feePayer=i),s.add(c);s.instructions.length>0&&o.push(s);let a=[];try{if(a=await hl(r,o,n),a.find(c=>c.err!==null))throw Error("rpc simulateTransaction error")}catch(c){c instanceof Error&&Nt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:c.message})}let u=[];for(let c of a)if(Nt.debug("simulate result:",c),c.logs){let l=c.logs.filter(m=>m&&m.includes(t));Nt.debug("filteredLog:",u),l.length||Nt.logWithError("simulate log not match keyword","keyword",t),u.push(...l)}return u}function Js(r,e){let t=r.match(/{["\w:,]+}/g);return!t||t.length!==1?Nt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Mt(r,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(r);return!n||n.length!==2?Nt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function oe(r,e){let[t,n]=Qs.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}async function hl(r,e,t){let n=[];if(t){let i=await r.getLatestBlockhash(),o=[];for(let c of e){c.recentBlockhash=i.blockhash,c.lastValidBlockHeight=i.lastValidBlockHeight;let m=c._compile().serialize(),d=c._serialize(m).toString("base64");o.push(d)}let s=o.map(c=>{let l=r._buildArgs([c],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],u=20;for(let c=0;c<Math.ceil(s.length/u);c++)a.push(s.slice(c*u,(c+1)*u));n=await(await Promise.all(a.map(async c=>(await r._rpcBatchRequest(c)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async i=>await(await r.simulateTransaction(i)).value))}catch(i){i instanceof Error&&Nt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:i.message})}return n}function qn({instructions:r,payer:e,signers:t}){return Xr(r,[e,...t])}function Un({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Hs.generate().publicKey.toString()}){let o=new Pl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new js(o).serialize()).toString("base64").length<Zs}catch{return!1}}var qr={time:0,data:void 0};async function rb(r){if(!qr.data||(Date.now()-qr.time)/1e3>30){let e=await r.getEpochInfo();return qr={time:Date.now(),data:e},e}else return qr.data}var Tl=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r);function on(r){let e=[];return r.forEach(t=>{t instanceof Ur&&(t.recentBlockhash||(t.recentBlockhash=kl.toBase58()),t.feePayer||(t.feePayer=Hs.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof js&&(n=Tl(n));let i=n.toString("base64");e.push(i)}),console.log("simulate tx string:",e),e}import{PublicKey as ea,AddressLookupTableAccount as zr}from"@solana/web3.js";import{PublicKey as Il}from"@solana/web3.js";import{getTransferFeeConfig as xl,unpackMint as Bl}from"@solana/spl-token";var Yi=ae("Raydium_accountInfo_util");async function It(r,e,t){let{batchRequest:n,commitment:i="confirmed"}=M({batchRequest:!1},t),o=Qi(e,100),s=new Array(o.length).fill([]);if(n){let a=o.map(l=>{let m=r._buildArgs([l.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:m}}),u=Qi(a,10);s=(await(await Promise.all(u.map(async l=>await r._rpcBatchRequest(l)))).flat()).map(l=>(l.error&&Yi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${l.error.message}`),l.result.value.map(m=>{if(m){let{data:p,executable:d,lamports:y,owner:f,rentEpoch:b}=m;return p.length!==2&&p[1]!=="base64"&&Yi.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:d,lamports:y,owner:new Il(f),rentEpoch:b}}return null})))}else try{s=await Promise.all(o.map(a=>r.getMultipleAccountsInfo(a,i)))}catch(a){a instanceof Error&&Yi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${a.message}`)}return s.flat()}async function Tn(r,e,t){let n=await It(r,e.map(i=>i.pubkey),t);return e.map((i,o)=>D(M({},i),{accountInfo:n[o]}))}var Sl=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(Sl||{}),db=1;async function pb({connection:r,mints:e}){var i,o;if(e.length===0)return{};let t=await Tn(r,e.map(s=>({pubkey:s}))),n={};for(let s of t){let a=Bl(s.pubkey,s.accountInfo,(i=s.accountInfo)==null?void 0:i.owner);n[s.pubkey.toString()]=D(M({},a),{feeConfig:(o=xl(a))!=null?o:void 0})}return n}async function Hi({connection:r,address:e}){let t=await It(r,[...new Set(e.map(i=>i.toString()))].map(i=>new ea(i))),n={};for(let i=0;i<e.length;i++){let o=t[i],s=e[i];if(!o)continue;let a=new zr({key:s,state:zr.deserialize(o.data)});n[s.toString()]=a,Yr[s.toString()]=a}return n}var Yr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new zr({key:new ea("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:zr.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"))})};var Qr=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}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 Kl.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}=Gr(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:i=[],endInstructionTypes:o=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...o),this.lookupTableAddress.push(...s.filter(a=>a!==Gn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(M({},t||{})):this.build(t)}build(e){let t=new Xn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async n=>{var a;let{recentBlockHash:i,skipPreflight:o=!0}=n||{},s=i!=null?i:await hn(this.connection);if(t.recentBlockhash=s,this.signers.length&&t.sign(...this.signers),on([t]),(a=this.owner)!=null&&a.isKeyPair)return{txId:await ji(this.connection,t,this.signers.find(u=>u.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:o}),signedTx:t};if(this.signAllTransactions){let u=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(u[0].serialize(),{skipPreflight:o}),signedTx:u[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),o=t.filter(c=>c.transaction.instructions.length>0),s=[i,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async c=>{var f;let{sequentially:l,onTxUpdate:m,recentBlockHash:p,skipPreflight:d=!0}=c||{},y=p!=null?p:await hn(this.connection);if((f=this.owner)!=null&&f.isKeyPair)return{txIds:await await Promise.all(s.map(async(b,g)=>(b.recentBlockhash=y,await ji(this.connection,b,a[g].find(P=>P.publicKey.equals(this.owner.publicKey))?a[g]:[...a[g],this.owner.signer],{skipPreflight:d})))),signedTxs:s};if(this.signAllTransactions){let b=s.map((P,A)=>(P.recentBlockhash=y,a[A].length&&P.sign(...a[A]),P));on(b);let g=await this.signAllTransactions(b);if(l){let P=0,A=[],h=async()=>{if(!g[P])return;let T=await this.connection.sendRawTransaction(g[P].serialize(),{skipPreflight:d});A.push({txId:T,status:"sent",signedTx:g[P]}),m==null||m([...A]),P++,this.connection.onSignature(T,I=>{let B=A.findIndex(x=>x.txId===T);B>-1&&(A[B].status=I.err?"error":"success"),m==null||m([...A]),I.err||h()},"processed"),this.connection.getSignatureStatus(T)};return await h(),{txIds:A.map(T=>T.txId),signedTxs:g}}else{let P=[];for(let A=0;A<g.length;A+=1){let h=await this.connection.sendRawTransaction(g[A].serialize(),{skipPreflight:d});P.push(h)}return{txIds:P,signedTxs:g}}}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){let p=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i}=p,o=Te(p,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=M(M({},this.cluster==="devnet"?{}:Yr),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let d of a)s[d]===void 0&&u.push(new Gn(d));let c=await Hi({connection:this.connection,address:u});for(let[d,y]of Object.entries(c))s[d]=y;let l=new zn({payerKey:this.feePayer,recentBlockhash:i?Gn.default.toBase58():await hn(this.connection),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s)),m=new Yn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async d=>{var b;let{recentBlockHash:y,skipPreflight:f=!0}=d||{};if(y&&(m.message.recentBlockhash=y),on([m]),(b=this.owner)!=null&&b.isKeyPair){this.signers.find(h=>h.publicKey.equals(this.owner.publicKey))||m.sign([this.owner.signer]);let g=await this.connection.sendTransaction(m,{skipPreflight:f}),{lastValidBlockHeight:P,blockhash:A}=await this.connection.getLatestBlockhash();return await this.connection.confirmTransaction({blockhash:A,lastValidBlockHeight:P,signature:g},"confirmed"),{txId:g,signedTx:m}}if(this.signAllTransactions){let g=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(g[0],{skipPreflight:f}),signedTx:g[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async buildV0MultiTx(e){let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),o=t.filter(c=>c.builder.instructions.length>0),s=[i,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return s.forEach(async(c,l)=>{c.sign(a[l])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async c=>{var y;let{sequentially:l,onTxUpdate:m,recentBlockHash:p,skipPreflight:d=!0}=c||{};if(p&&s.forEach(f=>f.message.recentBlockhash=p),on(s),(y=this.owner)!=null&&y.isKeyPair){let{lastValidBlockHeight:f,blockhash:b}=await this.connection.getLatestBlockhash();return s.forEach((g,P)=>{a[P].find(A=>A.publicKey.equals(this.owner.publicKey))||g.sign([this.owner.signer])}),{txIds:await Promise.all(s.map(async g=>{let P=await this.connection.sendTransaction(g,{skipPreflight:d});return await this.connection.confirmTransaction({blockhash:b,lastValidBlockHeight:f,signature:P},"confirmed"),P})),signedTxs:s}}if(this.signAllTransactions){let f=await this.signAllTransactions(s);if(l){let b=0,g=[],P=async()=>{if(!f[b])return;let A=await this.connection.sendTransaction(f[b],{skipPreflight:d});g.push({txId:A,status:"sent",signedTx:f[b]}),m==null||m([...g]),b++,this.connection.onSignature(A,h=>{let T=g.findIndex(I=>I.txId===A);T>-1&&(g[T].status=h.err?"error":"success"),m==null||m([...g]),h.err||P()},"processed"),this.connection.getSignatureStatus(A)};return P(),{txIds:[],signedTxs:f}}else{let b=[];for(let g=0;g<f.length;g+=1){let P=await this.connection.sendTransaction(f[g],{skipPreflight:d});b.push(P)}return{txIds:b,signedTxs:f}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){let c=e||{},{computeBudgetConfig:t}=c,n=Te(c,["computeBudgetConfig"]),i=t?Gr(t):{instructions:[],instructionTypes:[]},o=this.signers.reduce((l,m)=>D(M({},l),{[m.publicKey.toBase58()]:m}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(l=>{let m=[...u,l],p=t?[...i.instructions,...m]:m,y=[...new Set(m.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>new Gn(f));if(u.length<12&&qn({instructions:p,payer:this.feePayer,signers:y})||qn({instructions:m,payer:this.feePayer,signers:y}))u.push(l);else{if(u.length===0)throw Error("item ins too big");qn({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:y})?s.push(new Xn().add(...i.instructions,...u)):s.push(new Xn().add(...u)),a.push(Array.from(new Set(u.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat())).map(f=>o[f]).filter(f=>f!==void 0)),u=[l]}}),u.length>0){let m=[...new Set(u.map(p=>p.keys.filter(d=>d.isSigner).map(d=>d.pubkey.toString())).flat()).values()].map(p=>o[p]).filter(p=>p!==void 0);qn({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:m.map(p=>p.publicKey)})?s.push(new Xn().add(...i.instructions,...u)):s.push(new Xn().add(...u)),a.push(m)}return s.forEach(l=>l.feePayer=this.feePayer),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async l=>{var b;let{sequentially:m,onTxUpdate:p,recentBlockHash:d,skipPreflight:y=!0}=l||{},f=d!=null?d:await hn(this.connection);if(s.forEach(async(g,P)=>{g.recentBlockhash=f,a[P].length&&g.sign(...a[P])}),on(s),(b=this.owner)!=null&&b.isKeyPair)return{txIds:await Promise.all(s.map(async(g,P)=>await ji(this.connection,g,a[P].find(A=>A.publicKey.equals(this.owner.publicKey))?a[P]:[...a[P],this.owner.signer],{skipPreflight:y}))),signedTxs:s};if(this.signAllTransactions){let g=await this.signAllTransactions(s);if(m){let P=0,A=[],h=async()=>{if(!g[P])return;let T=await this.connection.sendRawTransaction(g[P].serialize(),{skipPreflight:y});A.push({txId:T,status:"sent",signedTx:g[P]}),p==null||p([...A]),P++,this.connection.onSignature(T,I=>{let B=A.findIndex(x=>x.txId===T);B>-1&&(A[B].status=I.err?"error":"success"),p==null||p([...A]),I.err||h()},"processed"),this.connection.getSignatureStatus(T)};return await h(),{txIds:A.map(T=>T.txId),signedTxs:g}}else{let P=[];for(let A=0;A<g.length;A+=1){let h=await this.connection.sendRawTransaction(g[A].serialize(),{skipPreflight:y});P.push(h)}return{txIds:P,signedTxs:g}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:i=[]}=b,o=Te(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=M(M({},this.cluster==="devnet"?{}:Yr),n),a=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let g of a)s[g]===void 0&&u.push(new Gn(g));let c=await Hi({connection:this.connection,address:u});for(let[g,P]of Object.entries(c))s[g]=P;let l=t?Gr(t):{instructions:[],instructionTypes:[]},m=await hn(this.connection),p=this.signers.reduce((g,P)=>D(M({},g),{[P.publicKey.toBase58()]:P}),{}),d=[],y=[],f=[];if(this.allInstructions.forEach(g=>{let P=[...f,g],A=t?[...l.instructions,...P]:P;if(f.length<12&&Un({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s})||Un({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(g);else{if(f.length===0)throw Error("item ins too big");let h={};for(let T of[...new Set(a)])s[T]!==void 0&&(h[T]=s[T]);if(t&&Un({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new zn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));d.push(new Yn(T))}else{let T=new zn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));d.push(new Yn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(T=>p[T]).filter(T=>T!==void 0)),f=[g]}}),f.length>0){let P=[...new Set(f.map(A=>A.keys.filter(h=>h.isSigner).map(h=>h.pubkey.toString())).flat()).values()].map(A=>p[A]).filter(A=>A!==void 0);if(t&&Un({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let A=new zn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));d.push(new Yn(A))}else{let A=new zn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));d.push(new Yn(A))}y.push(P)}return{builder:this,transactions:d,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async g=>{var I;let{sequentially:P,onTxUpdate:A,recentBlockHash:h,skipPreflight:T=!0}=g||{};if(d.map(async(B,x)=>{y[x].length&&B.sign(y[x]),h&&(B.message.recentBlockhash=h)}),on(d),(I=this.owner)!=null&&I.isKeyPair){let{lastValidBlockHeight:B,blockhash:x}=await this.connection.getLatestBlockhash();return d.forEach((R,N)=>{y[N].find(E=>E.publicKey.equals(this.owner.publicKey))||R.sign([this.owner.signer])}),{txIds:await Promise.all(d.map(async R=>{let N=await this.connection.sendTransaction(R,{skipPreflight:T});return await this.connection.confirmTransaction({blockhash:x,lastValidBlockHeight:B,signature:N},"confirmed"),N})),signedTxs:d}}if(this.signAllTransactions){let B=await this.signAllTransactions(d);if(P){let x=0,R=[],N=async()=>{if(!B[x])return;let E=await this.connection.sendTransaction(B[x],{skipPreflight:T});R.push({txId:E,status:"sent",signedTx:B[x]}),A==null||A([...R]),x++,this.connection.onSignature(E,Q=>{let W=R.findIndex(j=>j.txId===E);W>-1&&(R[W].status=Q.err?"error":"success"),A==null||A([...R]),Q.err||N()},"processed"),this.connection.getSignatureStatus(E)};return N(),{txIds:[],signedTxs:B}}else{let x=[];for(let R=0;R<B.length;R+=1){let N=await this.connection.sendTransaction(B[R],{skipPreflight:T});x.push(N)}return{txIds:x,signedTxs:B}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}};var gt=class{constructor(e){this._owner=e}get publicKey(){return gt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return gt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return gt.isKeyPair(this._owner)}get isPublicKey(){return gt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!gt.isKeyPair(e)}};function Qi(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function Rb(r,...e){return r.filter(t=>e.every(n=>n.includes(t)))}function Lb(r,...e){return r.filter(t=>e.every(n=>!n.includes(t)))}function Ob(r){return[...new Set(r)]}var ta=r=>typeof r=="number",na=r=>r?new Date(r):new Date,Cl=r=>na(r).getTime();function ra(r,e,t){let n=ta(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()<=n}function ia(r,e,t){let n=ta(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()>n}function Mb(r,e){let n=Cl(r)+(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 na(n)}import{PublicKey as Re}from"@solana/web3.js";var Zi=new Re("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),$i=new Re("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),In=new Re("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Rl=new Re("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Ll=new Re("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Hr=new Re("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Ji=new Re("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Ol=new Re("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Nl=new Re("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Ml=new Re("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),_l=new Re("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Vl=new Re("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),El=new Re("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Fl=new Re("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),vl=new Re("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Wl=new Re("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Dl=new Re("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Eb=new Re("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Fb=new Re("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),vb=new Re("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Qn={IDO_PROGRAM_ID_V1:_l,IDO_PROGRAM_ID_V2:Vl,IDO_PROGRAM_ID_V3:El,IDO_PROGRAM_ID_V4:Fl},Wb={AMM_V4:Ji,AMM_STABLE:Ol,CLMM_PROGRAM_ID:Nl,FARM_PROGRAM_ID_V3:Zi,FARM_PROGRAM_ID_V5:$i,FARM_PROGRAM_ID_V6:In,OPEN_BOOK_PROGRAM:Ll,SERUM_PROGRAM_ID_V3:Hr,UTIL1216:Rl,Router:Ml,CREATE_CPMM_POOL_PROGRAM:vl,CREATE_CPMM_POOL_AUTH:Wl,CREATE_CPMM_POOL_FEE_ACC:Dl};import{PublicKey as ql}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ul}from"@solana/spl-token";function ye(r,e,t){return oe([r.toBuffer(),(t!=null?t:Ul).toBuffer(),e.toBuffer()],new ql("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Le from"bn.js";var xt=1e4;function Yb(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,o=new Le(i.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===xt){let a=new Le(i.maximumFee.toString());return{amount:r.add(a),fee:a,expirationTime:s}}else{let a=zt(r.mul(new Le(xt)),new Le(xt-i.transferFeeBasisPoints)),u=new Le(i.maximumFee.toString()),c=a.sub(r).gt(u)?r.add(u):a,l=zt(c.mul(new Le(i.transferFeeBasisPoints)),new Le(xt)),m=l.gt(o)?o:l;return{amount:c,fee:m,expirationTime:s}}else{let a=zt(r.mul(new Le(i.transferFeeBasisPoints)),new Le(xt)),u=a.gt(o)?o:a;return{amount:r,fee:u,expirationTime:s}}}function Ae(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=D(M({},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}}),o=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Le(o.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===xt){let u=new Le(o.maximumFee.toString());return{amount:r.add(u),fee:u,expirationTime:a}}else{let u=zt(r.mul(new Le(xt)),new Le(xt-o.transferFeeBasisPoints)),c=new Le(o.maximumFee.toString()),l=u.sub(r).gt(c)?r.add(c):u,m=zt(l.mul(new Le(o.transferFeeBasisPoints)),new Le(xt)),p=m.gt(s)?s:m;return{amount:l,fee:p,expirationTime:a}}else{let u=zt(r.mul(new Le(o.transferFeeBasisPoints)),new Le(xt)),c=u.gt(s)?s:u;return{amount:r,fee:c,expirationTime:a}}}function sn(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function zt(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Le(0))?t.add(new Le(1)):t}var eo=(t=>(t.ALL="all",t.Strict="strict",t))(eo||{}),oa=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(oa||{});var We={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-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://token.jup.ag/{type}",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}",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"},pg=M({},We);var sa="ray_tab_hash",to="ray_req_hash",Gl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(sa);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(sa,r)),r},jr=async n=>{var i=n,{logCount:r=1e3,removeLastLog:e}=i,t=Te(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(to)||"[]").slice(0,r-1);e&&o.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),o.unshift(D(M({},t),{time:Date.now(),session:Gl()}));try{localStorage.setItem(to,JSON.stringify(o))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(o[0].data=a+(a.length>100?"...":"");!s;){o.pop();let u=JSON.stringify(t.data).substring(0,100);o[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(to,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(u=>u())}return jr(D(M({},t),{logCount:r,removeLastLog:!0}))}};var xn=ae("Raydium_Api"),no=new Map;async function Ng(r,e,t=1e3){let n;for(;n==null;)try{xn.debug(`Request ${r} through endlessRetry`),n=await e()}catch(i){xn.error(`Request ${r} failed, retry after ${t} ms`,i),await zs(t)}return n}var Zr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=i||1e3,this.api=Xl.create({baseURL:this.urlConfigs.BASE_HOST||We.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return xn.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(xn.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:u,status:c}=s,{method:l,baseURL:m,url:p}=a;return n&&jr({status:c,url:`${m}${p}`,params:a.params,data:u,logCount:this.logCount}),xn.debug(`${l==null?void 0:l.toUpperCase()} ${m}${p} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:p}=a;return n&&jr({status:c,url:`${m}${p}`,params:a.params,data:s.message,logCount:this.logCount}),xn.error(`${l.toUpperCase()} ${m}${p} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||We.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||We.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await this.api.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,o)=>i+o,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||We.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||We.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||We.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||We.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||We.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:o=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||We.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${o}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||We.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>no.has(s)?(n.push(no.get(s)),!1):!0),o=[];return i.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||We.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),o.forEach(a=>{no.set(a.id,a)})),n.concat(o)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:o="default",order:s="desc",page:a=1}=e,[u,c]=[t&&kn(t).toBase58(),n&&n!=="undefined"?kn(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return console.log(123123555,`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`),(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||We.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||We.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||We.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||We.CHECK_AVAILABILITY)).data}};import{merge as Fp}from"lodash";var $r="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",aa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as go,TOKEN_PROGRAM_ID as jt,AccountLayout as Sn,TOKEN_2022_PROGRAM_ID as td}from"@solana/spl-token";import{PublicKey as oi,SystemProgram as nd}from"@solana/web3.js";var ro=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),xe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ae(t)}createTxBuilder(e){return this.scope.checkOwner(),new Qr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(ro(e))}logInfo(...e){this.logger.info(ro(e))}logAndCreateError(...e){let t=ro(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Hm,createCloseAccountInstruction as jm,createTransferInstruction as Zm,TOKEN_PROGRAM_ID as Bn}from"@solana/spl-token";import{PublicKey as $m,SystemProgram as Jm}from"@solana/web3.js";import ed from"bn.js";import{PublicKey as Ta,Keypair as Xm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as zm}from"@solana/spl-token";import Ym from"bn.js";import{PublicKey as Em}from"@solana/web3.js";import fa,{isBN as ya}from"bn.js";import{bits as zl,BitStructure as Yl,blob as Ql,Blob as Hl,cstr as jl,f32 as Zl,f32be as $l,f64 as Jl,f64be as em,greedy as tm,Layout as nm,ns64 as rm,ns64be as im,nu64 as om,nu64be as sm,offset as am,s16 as um,s16be as cm,s24 as lm,s24be as mm,s32 as dm,s32be as pm,s40 as fm,s40be as ym,s48 as bm,s48be as gm,s8 as wm,seq as Am,struct as zg,Structure as Pm,u16 as km,u16be as hm,u24 as Tm,u24be as Im,u32 as xm,u32be as Bm,u40 as Sm,u40be as Km,u48 as Cm,u48be as Rm,u8 as Lm,UInt as Om,union as Nm,Union as Mm,unionLayoutDiscriminator as _m,utf8 as Vm}from"@solana/buffer-layout";var Hn=nm,ua=Pm,ca=Mm,Yg=Yl,io=Om,la=Hl,Qg=tm,Jr=Lm,Bt=km,Hg=Tm,jn=xm,jg=Sm,Zg=Cm,ma=om,$g=hm,Jg=Im,ew=Bm,tw=Km,nw=Rm,rw=sm,iw=wm,ow=um,sw=lm,De=dm,aw=fm,uw=bm,cw=rm,lw=cm,mw=mm,dw=pm,pw=ym,fw=gm,yw=im,bw=Zl,gw=$l,ww=Jl,Aw=em;var da=Am,pa=Nm,Pw=_m,pe=Ql,kw=jl,hw=Vm,oo=zl,so=am;var an=class extends Hn{constructor(t,n,i){super(t,i);this.blob=pe(t),this.signed=n}decode(t,n=0){let i=new fa(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new fa(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},ei=class extends Hn{constructor(t){super(8,t);this._lower=oo(jn(),!1),this._upper=oo(jn(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),o=this._upper.decode(t,n+this._lower.span);return M(M({},i),o)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function _(r){return new io(1,r)}function ze(r){return new io(4,r)}function w(r){return new an(8,!1,r)}function z(r){return new an(16,!1,r)}function ba(r){return new an(1,!0,r)}function ti(r){return new an(8,!0,r)}function ga(r){return new an(16,!0,r)}var _t=class extends Hn{constructor(t,n,i,o){super(t.span,o);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function S(r){return new _t(pe(32),e=>new Em(e),e=>e.toBuffer(),r)}var ao=class extends Hn{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=Jr()}encode(t,n,i=0){return t==null?this.discriminator.encode(0,n,i):(this.discriminator.encode(1,n,i),this.layout.encode(t,n,i+1)+1)}decode(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return null;if(i===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return 1;if(i===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function Sw(r,e){return new ao(r,e)}function qe(r){return new _t(Jr(),Fm,vm,r)}function Fm(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function vm(r){return r?1:0}function Kw(r,e){let t=jn("length"),n=L([t,q(r,so(t,-t.span),"values")]);return new _t(n,({values:i})=>i,i=>({values:i}),e)}function Cw(r,e,t){let n=L([w("tag"),e.replicate("data")]);function i({tag:o,data:s}){if(!o.eq(r))throw new Error("Invalid tag, expected: "+r.toString("hex")+", got: "+o.toString("hex"));return s}return new _t(n,i,o=>({tag:r,data:o}),t)}function Wm(r){let e=jn("length"),t=L([e,pe(so(e,-e.span),"data")]);return new _t(t,({data:n})=>n,n=>({data:n}),r)}function Rw(r){return new _t(Wm(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),r)}function Lw(r,e){let t=pa(Jr(),e);return r.forEach((n,i)=>t.addVariant(i,n,n.property)),t}function Ow(r,e,t){let n=L([q(r,e,"values")]);return new _t(n,({values:i})=>i,i=>({values:i}),t)}var uo=class extends ua{decode(e,t){return super.decode(e,t)}};function L(r,e,t){return new uo(r,e,t)}var co=class extends ca{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(i=>i.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function Nw(r,e,t){return new co(r,e,t)}var lo=class extends la{decode(e,t){let n=super.decode(e,t);if(!n.every(i=>i===0))throw new Error("nonzero padding bytes");return n}};function Mw(r){return new lo(r)}function q(r,e,t){let n,i=typeof e=="number"?e:ya(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=ya(a)?a.toNumber():a,Reflect.set(o,"count",n)}return Reflect.get(o,s)},set(o,s,a){return s==="count"&&(n=a),Reflect.set(o,s,a)}});return da(r,i,t)}var Yt=L([S("mint"),S("owner"),w("amount"),ze("delegateOption"),S("delegate"),_("state"),ze("isNativeOption"),w("isNative"),w("delegatedAmount"),ze("closeAuthorityOption"),S("closeAuthority")]);function Dm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function mo(r,...e){if(!Dm(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function po(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function wa(r,e){mo(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var ri=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),wt=(r,e)=>r<<32-e|r>>>e;var Dw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function qm(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function fo(r){return typeof r=="string"&&(r=qm(r)),mo(r),r}var ni=class{clone(){return this._cloneInto()}},qw={}.toString;function Aa(r){let e=n=>r().update(fo(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Um(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),u=n?4:0,c=n?0:4;r.setUint32(e+u,s,n),r.setUint32(e+c,a,n)}var Pa=(r,e,t)=>r&e^~r&t,ka=(r,e,t)=>r&e^r&t^e&t,ii=class extends ni{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=ri(this.buffer)}update(e){po(this);let{view:t,buffer:n,blockLen:i}=this;e=fo(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let u=ri(e);for(;i<=o-s;s+=i)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){po(this),wa(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;Um(n,i-8,BigInt(this.length*8),o),this.process(n,0);let a=ri(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,l=this.get();if(c>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<c;m++)a.setUint32(4*m,l[m],o)}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:i,finished:o,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=o,e.destroyed=s,i%t&&e.buffer.set(n),e}};var Gm=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]),Qt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Ht=new Uint32Array(64),yo=class extends ii{constructor(){super(64,32,8,!1),this.A=Qt[0]|0,this.B=Qt[1]|0,this.C=Qt[2]|0,this.D=Qt[3]|0,this.E=Qt[4]|0,this.F=Qt[5]|0,this.G=Qt[6]|0,this.H=Qt[7]|0}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:u}=this;return[e,t,n,i,o,s,a,u]}set(e,t,n,i,o,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=u|0}process(e,t){for(let m=0;m<16;m++,t+=4)Ht[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let p=Ht[m-15],d=Ht[m-2],y=wt(p,7)^wt(p,18)^p>>>3,f=wt(d,17)^wt(d,19)^d>>>10;Ht[m]=f+Ht[m-7]+y+Ht[m-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let p=wt(a,6)^wt(a,11)^wt(a,25),d=l+p+Pa(a,u,c)+Gm[m]+Ht[m]|0,f=(wt(n,2)^wt(n,13)^wt(n,22))+ka(n,i,o)|0;l=c,c=u,u=a,a=s+d|0,s=o,o=i,i=n,n=d+f|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,i,o,s,a,u,c,l)}roundClean(){Ht.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ha=Aa(()=>new yo);var oA=ae("Raydium_Util");function Ia({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:o,account:s}of t.value){let a=Yt.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:o,mint:u,amount:c,isAssociated:ye(r,u,s.owner).publicKey.equals(o),isNative:!1,programId:s.owner}),i.push({pubkey:o,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Ta.default,amount:new Ym(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function Ye({fromPublicKey:r,programId:e=zm}){let t=Xm.generate().publicKey.toBase58().slice(0,32);return{publicKey:Qm(r,t,e),seed:t}}function Qm(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),i=ha(n);return new Ta(i)}function bo(r){let{mint:e,tokenAccount:t,owner:n,programId:i=Bn}=r;return Hm(t,e,n,i)}function Vt(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:o=Bn}=r;return jm(e,t,i,n,o)}async function St(r){let{connection:e,amount:t,commitment:n,payer:i,owner:o,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Yt.span,n),u=U(t).add(new ed(a)),c=Ye({fromPublicKey:i,programId:Bn});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[Jm.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:Yt.span,programId:Bn}),bo({mint:new $m(Me.address),tokenAccount:c.publicKey,owner:o,programId:Bn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[Vt({tokenAccount:c.publicKey,payer:i,owner:o})]}}function Zn({source:r,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:o=Bn}){return Zm(r,e,t,BigInt(String(n)),i,o)}var $n=class extends xe{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._clientOwnedToken=!!(n||i)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}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 ye(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=M(M({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:jt},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:td},i.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=Ia({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),"confirmed"),{tokenAccounts:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=jt,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let o=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of o){let{publicKey:u}=a;if(u&&(!i||i&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new oi(t.tokenProgram||jt),m=this.getAssociatedTokenAccount(n,new oi(l)),p=(a?[]:this.tokenAccountRawInfos).filter(g=>g.accountInfo.mint.equals(n)&&(!o||g.pubkey.equals(m))).sort((g,P)=>g.accountInfo.amount.lt(P.accountInfo.amount)?1:-1);if(i===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let d={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(o){let g=go(s,m,s,n,l);if(c){let P=await this.scope.connection.getAccountInfo(m);if(P===null)(y=d.instructions)==null||y.push(g),d.instructionTypes.push(V.CreateATA);else if(!(P.owner.equals(l)&&Sn.decode(P.data).mint.equals(n)&&Sn.decode(P.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else d.instructions.push(g),d.instructionTypes.push(V.CreateATA);if(n.equals(te)&&i.amount){let P=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(f=i.amount)!=null?f:0,skipCloseAccount:u});d.instructions.push(...P.instructions||[]),d.endInstructions.push(...P.endInstructions||[]),d.instructionTypes.push(...P.instructionTypes||[]),d.endInstructionTypes.push(...P.endInstructionTypes||[]),i.amount&&(d.instructions.push(Zn({source:P.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:jt})),d.instructionTypes.push(V.TransferAmount))}return u||(d.endInstructions.push(Vt({owner:s,payer:i.payer||s,tokenAccount:m,programId:l})),d.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:d}}else if(n.equals(te)){let g=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(b=i.amount)!=null?b:0,skipCloseAccount:u});return d.instructions.push(...g.instructions||[]),d.endInstructions.push(...g.endInstructions||[]),d.signers.push(...g.signers||[]),d.instructionTypes.push(...g.instructionTypes||[]),d.endInstructionTypes.push(...g.endInstructionTypes||[]),{account:g.addresses.newAccount,instructionParams:d}}else{let g=Ye({fromPublicKey:s,programId:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(Sn.span),A=nd.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:g.seed,newAccountPubkey:g.publicKey,lamports:P,space:Sn.span,programId:l});return d.instructions.push(A,bo({mint:n,tokenAccount:g.publicKey,owner:this.scope.ownerPubKey,programId:l})),d.instructionTypes.push(V.CreateAccount),d.instructionTypes.push(V.InitAccount),u||(d.endInstructions.push(Vt({owner:s,payer:i.payer||s,tokenAccount:g.publicKey,programId:l})),d.endInstructionTypes.push(V.CloseAccount)),{account:g.publicKey,instructionParams:d}}}async checkOrCreateAta({mint:t,programId:n=jt,autoUnwrapWSOLToSOL:i}){var u;await this.fetchWalletTokenAccounts();let o=(u=this.scope.account.tokenAccounts.find(({mint:c})=>(c==null?void 0:c.toBase58())===t.toBase58()))==null?void 0:u.publicKey,s=this.scope.ownerPubKey,a={};if(!o){let c=this.getAssociatedTokenAccount(t,n),l=await go(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],o=c}return i&&te.toBase58()===t.toBase58()&&(a.endInstructions=[Vt({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:o,programId:s=jt,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,p=this.getAssociatedTokenAccount(o,s);if(new oi(te).equals(o)){let d=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:i,skipCloseAccount:l});return M({tokenAccount:d.addresses.newAccount},d)}else if(!a||n==="out"&&!p.equals(a)&&!c){let d=[],y=go(this.scope.ownerPubKey,p,this.scope.ownerPubKey,o,s);if(m){let f=await this.scope.connection.getAccountInfo(p);if(f===null)d.push(y);else if(!(f.owner.equals(jt)&&Sn.decode(f.data).mint.equals(o)&&Sn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${o.toString()}, ata: ${p.toString()}`)}else d.push(y);return{tokenAccount:p,instructions:d,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=jt,amount:o,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new oi(te))&&s){let l=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:p}=l,d=Te(l,["tokenAccount"]);u=p,c.addInstruction(d)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:p}=m,d=Te(m,["tokenAccount"]);u=p,c.addInstruction(d)}return M({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as Td}from"@solana/spl-token";import{PublicKey as ke,SystemProgram as Id}from"@solana/web3.js";import{PublicKey as La}from"@solana/web3.js";var wo=L([_("instruction")]),Ao=L([_("instruction")]),rd=L([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),z("accRewardPerShare"),S("rewardVault"),S("rewardMint"),S("rewardSender"),w("rewardType"),q(w(),15,"padding")]),id=L([w("state"),w("nonce"),S("lpVault"),S("rewardVault"),S(),S(),w(),w(),w("totalReward"),z("perShareReward"),w("lastSlot"),w("perSlotReward")]),od=L([w("state"),w("nonce"),S("lpVault"),S("rewardVaultA"),w("totalRewardA"),z("perShareRewardA"),w("perSlotRewardA"),_("option"),S("rewardVaultB"),pe(7),w("totalRewardB"),z("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),S()]),sd=L([w(),w("state"),w("nonce"),w("validRewardTokenNum"),z("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),S("lpMint"),S("lpVault"),q(rd,5,"rewardInfos"),S("creator"),S(),q(w(),32,"padding")]),xa=new Proxy(id,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(M({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(r,e,t)}}),Ba=new Proxy(od,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(M({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(r,e,t)}}),Jn=new Proxy(sd,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(M({},i),{version:6,rewardInfos:i.rewardInfos.map(o=>{var s;return D(M({},o),{rewardType:((s=Object.entries(Zt).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),ad=L([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Po=L([_("instruction"),w("nonce"),q(ad,5,"rewardTimeInfo")]),ko=L([_("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),ho=L([_("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),EA=L([w("state"),S("id"),S("owner"),w("deposited"),q(w(),1,"rewardDebts")]),er=L([w("state"),S("id"),S("owner"),w("deposited"),q(z(),1,"rewardDebts"),w(""),w("voteLockedBalance"),q(w(),15)]),FA=L([w("state"),S("id"),S("owner"),w("deposited"),q(w(),2,"rewardDebts")]),Sa=L([w("state"),S("id"),S("owner"),w("deposited"),q(z(),2,"rewardDebts"),q(w(),17)]),Ka=L([w(),w("state"),S("id"),S("owner"),w("deposited"),q(z(),5,"rewardDebts"),q(w(),16)]),$e=L([_("instruction"),w("amount")]),ud=L([S("mint"),S("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),ba("digitShift"),q(_(),7,"reserved1"),q(w(),7,"reserved2")]),Ca=L([pe(8),S("governanceProgramId"),S("realm"),S("realmGoverningTokenMint"),S("realmAuthority"),q(_(),32,"reserved1"),q(ud,4,"votingMints"),ti("timeOffset"),_("bump"),q(_(),7,"reserved2"),q(w(),11,"reserved3")]),cd=L([ti("startTime"),ti("endTime"),_("kind"),q(_(),15,"reserved")]),ld=L([q(cd,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),_("votingMintConfigIdx"),q(_(),29,"reserved")]),Ra=L([pe(8),S("voterAuthority"),S("registrar"),q(ld,32,"deposits"),_("voterBump"),_("voterWweightRecordBump"),q(_(),94,"reserved")]);var zA=ae("Raydium_farm_config"),Oa=new La("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Na=new La("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Ma={3:xa,5:Ba,6:Jn},_a={3:er,5:Sa,6:Ka},To=r=>[3,5,6].indexOf(r)!==-1,Io=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,o={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=o[e])==null?void 0:s.call(o)},Zt={"Standard SPL":0,"Option tokens":1},At={[Zi.toString()]:3,[$i.toString()]:5,[In.toString()]:6};import{PublicKey as ie,SystemProgram as un,SYSVAR_RENT_PUBKEY as pd,SYSVAR_CLOCK_PUBKEY as rr,TransactionInstruction as Ve}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as fd,TOKEN_PROGRAM_ID as ot,ASSOCIATED_TOKEN_PROGRAM_ID as yd}from"@solana/spl-token";import ai from"bn.js";function xo(r,e,t){return oe([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],r)}function Bo(r,e){return oe([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],r)}function So(r,e){return oe([e.toBuffer()],r)}function Ko(r,e,t){return oe([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],r)}function Co(r,e,t){return oe([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],r)}function Ro(r,e,t,n){return oe([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}import nt from"bn.js";var tr=ae("Raydium.farm.util");function nr({programId:r,poolId:e,mint:t,type:n}){let{publicKey:i}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return i}function rt({programId:r,poolId:e,owner:t,version:n}){let{publicKey:i}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return i}var Va=({programId:r,poolId:e})=>oe([e.toBuffer()],r);function Ea(r){return{isSet:new nt(1),rewardPerSecond:U(r.perSecond),rewardOpenTime:U(r.openTime),rewardEndTime:U(r.endTime),rewardType:U(Zt[r.rewardType])}}function Lo(r){return U(r.endTime).sub(U(r.openTime)).mul(U(r.perSecond))}function si(r){let e=_a[r];return e||tr.logWithError("invalid version",r),e}function md(r){let e=Ma[r];return e||tr.logWithError("invalid version",r),e}function dd(r,e,t,n){if(r.version===3||r.version===5){if(r.lastSlot.gte(new nt(t)))return r;let i=new nt(t).sub(r.lastSlot);r.lastSlot=new nt(t);for(let o of r.rewardInfos){if(e.amount.eq(new nt(0)))continue;let s=o.perSlotReward.mul(i);o.perShareReward=o.perShareReward.add(s.mul(new nt(10).pow(new nt(r.version===3?9:15))).div(e.amount)),o.totalReward=o.totalReward.add(s)}}else if(r.version===6)for(let i of r.rewardInfos){if(i.rewardState.eq(new nt(0)))continue;let o=nt.min(new nt(n),i.rewardEndTime);if(i.rewardOpenTime.gte(o))continue;let a=o.sub(i.rewardLastUpdateTime).mul(i.rewardPerSecond),u=i.totalReward.sub(i.totalRewardEmissioned);u.lt(a)?(a=u,i.rewardLastUpdateTime=i.rewardLastUpdateTime.add(u.div(i.rewardPerSecond))):i.rewardLastUpdateTime=o,!e.amount.eq(new nt(0))&&(i.accRewardPerShare=i.accRewardPerShare.add(a.mul(r.rewardMultiplier).div(e.amount)),i.totalRewardEmissioned=i.totalRewardEmissioned.add(a))}return r}async function cP({connection:r,farmPools:e,owner:t,config:n,chainTime:i}){let o=!1,s=!1,a=new nt(10),u=[];for(let p of e){let d=fe(p);d.version===6?s=!0:o=!0,u.push({pubkey:d.id,version:d.version,key:"state",poolId:d.id},{pubkey:d.lpVault,version:d.version,key:"lpVault",poolId:d.id}),t&&u.push({pubkey:rt({programId:d.programId,poolId:d.id,owner:t,version:p.version}),version:d.version,key:"ledger",poolId:d.id})}let c={},l=await Tn(r,u,n);for(let{pubkey:p,version:d,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(c[g]=M({},c[g]),y==="state"){let P=md(d);(!b||!b.data||b.data.length!==P.span)&&tr.logWithError(`invalid farm state account info, pools.id, ${p}`),c[g].state=P.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Yt.span)&&tr.logWithError(`invalid farm lp vault account info, pools.lpVault, ${p}`),c[g].lpVault=Yt.decode(b.data);else if(y==="ledger"){let P=si(d);b&&b.data&&(b.data.length!==P.span&&tr.logWithError(`invalid farm ledger account info, ledger, ${p}`),c[g].ledger=P.decode(b.data))}}let m=s||o?await r.getSlot():0;for(let p of Object.keys(c))c[p]!==void 0&&(c[p].state=dd(c[p].state,c[p].lpVault,m,i));for(let[p,{state:d,ledger:y}]of Object.entries(c))if(y){let f=d.version===6?d.rewardMultiplier:d.rewardInfos.length===1?a.pow(new nt(9)):a.pow(new nt(15)),b=d.rewardInfos.map((g,P)=>{let A=y.rewardDebts[P];return y.deposited.mul(d.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});c[p].wrapped=D(M({},c[p].wrapped),{pendingRewards:b})}return c}function lP(r,e=Date.now()){if(r.version===6){let t=r.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>ra(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ia(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=r.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 Oo(r,e,t,n){let i=await r.getAccountInfo(e);if(i===null)throw Error("registrar info check error");let s=Ca.decode(i.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await r.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let c=Ra.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return c===-1?{index:s,isInit:!1}:{index:c,isInit:!0}}var bd=ae("Raydium_farm_instruction"),ir={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 Fa(r){let{version:e,id:t,ledger:n,programId:i,owner:o}=r,s={3:9,5:10}[e];s||bd.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(wo.span);wo.encode({instruction:s},a);let u=[k({pubkey:t}),k({pubkey:n}),k({pubkey:o,isWritable:!1}),k({pubkey:un.programId,isWritable:!1}),k({pubkey:pd,isWritable:!1})];return{instruction:new Ve({programId:i,keys:u,data:a}),instructionType:V.FarmV3CreateLedger}}function va(r){var n;let e=Buffer.alloc(Po.span);Po.encode({instruction:0,nonce:new ai(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[..._i,k({pubkey:r.farmId}),k({pubkey:r.farmAuthority,isWritable:!1}),k({pubkey:r.lpVault}),k({pubkey:r.lpMint,isWritable:!1}),k({pubkey:r.lockVault}),k({pubkey:r.lockMint,isWritable:!1}),k({pubkey:(n=r.lockUserAccount)!=null?n:Ne}),k({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let i of r.rewardInfo)t.push(k({pubkey:i.rewardMint,isWritable:!1}),k({pubkey:i.rewardVault}),k({pubkey:i.userRewardToken}));return{instruction:new Ve({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function Wa(r){let e=Buffer.alloc(Ao.span);Ao.encode({instruction:5},e);let t=[k({pubkey:ot,isWritable:!1}),k({pubkey:r.id}),k({pubkey:r.authority,isWritable:!1}),k({pubkey:r.lpVault,isWritable:!1}),k({pubkey:r.rewardVault}),k({pubkey:r.userRewardToken}),k({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ve({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function gd(r,e,t,n,i,o,s,a,u,c,l,m,p){let d=L([_("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Er,isSigner:!1,isWritable:!1}],f=Buffer.alloc(d.span);d.encode({depositEntryIndex:m,amount:p},f);let b=Buffer.from([...ir.voterStakeRegistryDeposit,...f]);return new Ve({keys:y,programId:r,data:b})}function wd(r,e,t,n){let i=L([]),o=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([...ir.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ve({keys:o,programId:r,data:a})}function Ad(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y){let f=L([_("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Er,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:d,amount:y},g);let P=Buffer.from([...ir.voterStakeRegistryWithdraw,...g]);return new Ve({keys:b,programId:r,data:P})}function Pd(r,e,t,n,i,o){let s=L([_("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);return s.encode({ins:23},u),new Ve({keys:a,programId:r,data:u})}function kd(r,e,t,n,i,o,s,a){let u=L([_("voterBump"),_("voterWeightRecordBump")]),c=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Er,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...ir.voterStakeRegistryCreateVoter,...l]);return new Ve({keys:c,programId:r,data:m})}function hd(r,e,t,n,i,o,s,a,u,c,l,m){let p=L([_("depositEntryIndex"),_("kind"),_("option"),w("startTs"),ze("periods"),qe("allowClawback")]),d=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:yd,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({depositEntryIndex:a,kind:u,option:c===void 0?0:1,startTs:c,periods:l,allowClawback:m},y);let f=Buffer.from([...ir.voterStakeRegistryCreateDepositEntry,...y]);return new Ve({keys:d,programId:r,data:f})}async function SP({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:o,owner:s,poolId:a,tokenProgram:u}){let c=xo(n,i,o).publicKey,l=rt({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let p=er.decode(m.data),d=p.deposited.sub(p.voteLockedBalance);if(console.log("amount",d.toString()),d.eq(new ai(0)))throw Error("user do not has new stake amount");let y=Bo(e,a).publicKey,f=So(e,a).publicKey,{publicKey:b,nonce:g}=Ko(n,c,s),P=ye(b,y,u).publicKey,{publicKey:A,nonce:h}=Co(n,c,s),T=Ro(t,i,o,s).publicKey,I=[],B=ye(s,y,u).publicKey;if(await r.getAccountInfo(B)===null&&I.push(fd(s,B,s,y)),await r.getAccountInfo(b)===null){let Q=Pd(t,i,s,o,s,T);I.push(Q,kd(n,c,b,A,s,s,g,h))}let{index:N,isInit:E}=await Oo(r,c,b,y);return E||I.push(hd(n,c,b,P,s,s,y,N,0,void 0,0,!1)),I.push(gd(n,c,b,P,B,s,l,a,y,f,e,N,d),wd(n,c,b,A)),I}async function KP({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:o,owner:s,poolId:a,tokenProgram:u}){let c=xo(n,i,o).publicKey,l=rt({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let p=er.decode(m.data);if(p.voteLockedBalance.eq(new ai(0)))throw Error("user has vote locked balance = 0");let d=Bo(e,a).publicKey,y=So(e,a).publicKey,{publicKey:f}=Ko(n,c,s),b=ye(f,d,u).publicKey,{publicKey:g}=Co(n,c,s),P=Ro(t,i,o,s).publicKey,A=[],{index:h,isInit:T}=await Oo(r,c,f,d);if(!T)throw Error("deposit entry index check error");return A.push(Ad(n,c,f,s,P,g,b,ye(s,d,u).publicKey,l,a,d,y,e,h,p.voteLockedBalance)),A}function No({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let o=Buffer.alloc(ko.span);ko.encode({instruction:3,rewardReopenTime:U(i.openTime),rewardEndTime:U(i.endTime),rewardPerSecond:U(i.perSecond)},o);let s=[k({pubkey:ot,isWritable:!1}),k({pubkey:n.id}),k({pubkey:n.lpVault,isWritable:!1}),k({pubkey:e}),k({pubkey:t}),k({pubkey:r,isWritable:!1,isSigner:!0})];return new Ve({programId:n.programId,keys:s,data:o})}function Mo({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let o=Buffer.alloc(ho.span);ho.encode({instruction:4,isSet:new ai(1),rewardPerSecond:U(i.perSecond),rewardOpenTime:U(i.openTime),rewardEndTime:U(i.endTime),rewardType:U(Zt[i.rewardType])},o);let s=[..._i,k({pubkey:t.id}),k({pubkey:t.authority,isWritable:!1}),k({pubkey:i.mint,isWritable:!1}),k({pubkey:n}),k({pubkey:e}),k({pubkey:r,isWritable:!1,isSigner:!0})];return new Ve({programId:t.programId,keys:s,data:o})}function CP(r){let{farmInfo:e,farmKeys:t,version:n,lpAccount:i,rewardAccounts:o,owner:s,instruction:a,amount:u,deposit:c}=r,[l,m]=[new ie(e.programId),new ie(e.id)],p=rt({programId:l,poolId:m,owner:s,version:n}),d=Buffer.alloc($e.span);$e.encode({instruction:a,amount:u},d);let y=n===6?[k({pubkey:ot,isWritable:!1}),...c?[k({pubkey:un.programId,isWritable:!1})]:[],k({pubkey:m}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:new ie(t.lpVault)}),k({pubkey:p}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i})]:[k({pubkey:m}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:p}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i}),k({pubkey:new ie(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:rr,isWritable:!1}),k({pubkey:ot,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(k({pubkey:o[f]})),y.push(k({pubkey:new ie(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(k({pubkey:new ie(t.rewardInfos[f].vault)})),y.push(k({pubkey:o[f]}));return new Ve({programId:l,keys:y,data:d})}function or(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,u]=[new ie(e.programId),new ie(e.id)],c=rt({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:2,amount:U(s)},l);let m=[k({pubkey:ot,isWritable:!1}),k({pubkey:u}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:new ie(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let p=0;p<t.rewardInfos.length;p++)m.push(k({pubkey:new ie(t.rewardInfos[p].vault)})),m.push(k({pubkey:i[p]}));return new Ve({programId:a,keys:m,data:l})}function sr(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=rt({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:12,amount:U(s)},m);let p=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:rr,isWritable:!1}),k({pubkey:ot,isWritable:!1})];for(let d=1;d<t.rewardInfos.length;d++)p.push(k({pubkey:i[d]})),p.push(k({pubkey:new ie(t.rewardInfos[d].vault)}));if(a)for(let d of a)p.push(k({pubkey:d}));return new Ve({programId:u,keys:p,data:m})}function ar(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=rt({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:U(s)},m);let p=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:rr,isWritable:!1}),k({pubkey:ot,isWritable:!1})];if(a)for(let d of a)p.push(k({pubkey:d}));return new Ve({programId:u,keys:p,data:m})}function Da(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=rt({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:10,amount:U(s)},m);let p=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:rr,isWritable:!1}),k({pubkey:ot,isWritable:!1})];if(a)for(let d of a)p.push(k({pubkey:d}));return new Ve({programId:u,keys:p,data:m})}function qa(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=rt({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:U(s)},m);let p=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:rr,isWritable:!1}),k({pubkey:ot,isWritable:!1})];for(let d=1;d<t.rewardInfos.length;d++)p.push(k({pubkey:i[d]})),p.push(k({pubkey:new ie(t.rewardInfos[d].vault)}));if(a)for(let d of a)p.push(k({pubkey:d}));return new Ve({programId:u,keys:p,data:m})}function Ua(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,u]=[new ie(e.programId),new ie(e.id)],c=rt({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:1,amount:U(s)},l);let m=[k({pubkey:ot,isWritable:!1}),k({pubkey:un.programId,isWritable:!1}),k({pubkey:u}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:new ie(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let p=0;p<t.rewardInfos.length;p++)m.push(k({pubkey:new ie(t.rewardInfos[p].vault)})),m.push(k({pubkey:i[p]}));return new Ve({programId:a,keys:m,data:l})}var ur=class extends xe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ne)){let n=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Lo(D(M({},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:i=In,txVersion:o}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ke(e.lpMint.address),lockInfo:{lockMint:Oa,lockVault:Na},version:6,rewardInfos:t,programId:i},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ye({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(Jn.span);u.addInstruction({instructions:[Id.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:Jn.span,programId:a.programId})]});let{publicKey:p,nonce:d}=Va({programId:new ke(a.programId),poolId:l.publicKey}),y=nr({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let h of a.rewardInfos){h.openTime>=h.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",h.openTime.toString()),isNaN(Zt[h.rewardType])&&this.logAndCreateError("rewardType error",h.rewardType),Number(h.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",h.perSecond),f.push(Ea(h));let{rewardPubKey:T,newInstruction:I}=await this._getUserRewardInfo({rewardInfo:h,payer:c});I&&u.addInstruction(I),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=h.mint.equals(Ne)?new ke(Me.address):h.mint;b.push({rewardMint:B,rewardVault:nr({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:T})}let g=await this.scope.account.getCreatedTokenAccount({mint:a.lockInfo.lockMint});g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:A}=va({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:p,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:d});return u.addInstruction({instructions:[P],instructionTypes:[A]}).versionBuild({txVersion:o,extInfo:{farmId:l.publicKey,farmAuthority:p,lpVault:y,lockUserAccount:g,nonce:d}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var b;let o=At[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=fe((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 u=t||this.scope.ownerPubKey,c=n.mint.equals(Ne)?new ke(Me.address):n.mint,l=a.rewardInfos.findIndex(g=>new ke(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let p=(b=m.vault)!=null?b:Ne,d=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&d.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),d.addInstruction({instructions:[No({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let o=At[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=fe((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 u=t||this.scope.ownerPubKey,c=this.createTxBuilder();for(let m of n){let p=m.mint.equals(Ne)?new ke(Me.address):m.mint,d=a.rewardInfos.findIndex(A=>new ke(A.mint.address).equals(p)),y=s.rewardInfos[d];y||this.logAndCreateError("configuration does not exist","rewardMint",p);let f=(l=y.vault)!=null?l:Ne,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:u});g&&c.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let P=No({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[P],instructionTypes:[V.FarmV6Restart]})}return c.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:o}=e,s=At[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=fe((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder(),l=i.mint.equals(Ne)?new ke(Me.address):i.mint,m=nr({programId:new ke(n.programId),poolId:new ke(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:p,newInstruction:d}=await this._getUserRewardInfo({rewardInfo:i,payer:u});return d&&c.addInstruction(d),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,c.addInstruction({instructions:[Mo({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:o}=e,s=At[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=fe((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of i){let m=l.mint.equals(Ne)?new ke(Me.address):l.mint,p=nr({programId:new ke(n.programId),poolId:new ke(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:d,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),d||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Mo({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:p,rewardInfo:D(M({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[V.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:o,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:p}=n,d=At[p];To(d)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ke(n.programId),new ke(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=rt({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:d}),P=this.createTxBuilder();P.addCustomComputeBudget(l);let A={};for(let W of this.scope.account.tokenAccounts)if(a){let j=ye(this.scope.ownerPubKey,W.mint,W.programId).publicKey;W.publicKey&&j.equals(W.publicKey)&&(A[W.mint.toString()]=W.publicKey)}else A[W.mint.toString()]=W.publicKey;let h=b.lpMint,T=A[h.address];T||this.logAndCreateError("you don't have any lp","lp zero",A);let I=[];for(let W of m){let j=s&&W.mint.address===te.toString(),ee=A[W.mint.address];if(!ee){let{account:se,instructionParams:ft}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new ke(W.mint.address),notUseTokenAccount:j,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!j,associatedOnly:j?!1:a,checkCreateATAOwner:u});ee=se,ft&&P.addInstruction(ft)}A[W.mint.address]=ee,I.push(ee)}let B,x=await this.scope.connection.getAccountInfo(g);if(x&&(B=si(d).decode(x.data)),n.programId!==In.toString()&&!B){let{instruction:W,instructionType:j}=Fa({id:f,programId:y,version:d,ledger:g,owner:this.scope.ownerPubKey});P.addInstruction({instructions:[W],instructionTypes:[j]})}let R=Io({version:d,rewardInfos:m,rewardTokenAccountsPublicKeys:I});R&&this.logAndCreateError(R);let N={amount:U(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:T,rewardAccounts:I,userAuxiliaryLedgers:c==null?void 0:c.map(W=>new ke(W))},E=d===6?Ua(N):d===5?qa(N):Da(N),Q={3:V.FarmV3Deposit,5:V.FarmV5Deposit,6:V.FarmV6Deposit};return P.addInstruction({instructions:[E],instructionTypes:[Q[d]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:o,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:p}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let d=At[n.programId];To(d)||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 R of this.scope.account.tokenAccounts)if(u){let N=ye(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&N.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(o)o.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=rt({programId:new ke(n.programId),poolId:new ke(n.id),owner:this.scope.ownerPubKey,version:d}),N=await this.scope.connection.getAccountInfo(R);N||this.logAndCreateError("no lp data",{farmId:n.id,version:d,ledgerData:N}),si(d).decode(N.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,P=s&&g===te.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ke(g),notUseTokenAccount:P,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:P?!1:u,checkCreateATAOwner:c});A=R,N&&f.addInstruction(N)}b[g.toString()]=A;let h=[];for(let R of p){let N=s&&R.mint.address===te.toString(),E=b[R.mint.address];if(!E){let{account:Q,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new ke(R.mint.address),notUseTokenAccount:N,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:u,checkCreateATAOwner:c});E=Q,W&&f.addInstruction(W)}b[R.mint.address]=E,h.push(E)}let T=Io({version:d,rewardInfos:p,rewardTokenAccountsPublicKeys:h});T&&this.logAndCreateError(T);let I={amount:U(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new ke(R))},B=d===6?or(I):d===5?sr(I):ar(I),x={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[B],instructionTypes:[x[d]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var d;this.scope.checkOwner();let i=fe((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),o=At[e.programId];o!==6&&this.logAndCreateError("invalid farm version",o);let s=e.rewardInfos.findIndex(y=>y.mint.address===Ne.toString()?new ke(Me.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(d=a==null?void 0:a.vault)!=null?d:Ne,c=this.createTxBuilder(),l;if(t.equals(Ne)){let y=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Lo(D(M({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new F(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,c.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),c.addInstruction({instructions:[Td(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:p}=Wa({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[p]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(o){let f=ye(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 d=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>D(M({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:P}=y,A=At[f],h=b.address,T=n&&h===te.toString(),I=m[h];if(!I){let{account:Q,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ke(h),notUseTokenAccount:T,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:T?!1:o,checkCreateATAOwner:s});I=Q,W&&l.addInstruction(W)}m[h.toString()]=I;let B=[];for(let Q of g){let W=n&&Q.mint.address===te.toString(),j=m[Q.mint.address];if(!j){let{account:ee,instructionParams:se}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Q.mint.programId,mint:new ke(Q.mint.address),notUseTokenAccount:W,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!W,associatedOnly:W?!1:o,checkCreateATAOwner:s});j=ee,se&&l.addInstruction(se)}m[Q.mint.address]=j,B.push(j)}let x=d[P],R={amount:Se,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:I,rewardAccounts:B,userAuxiliaryLedgers:a==null?void 0:a.map(Q=>new ke(Q))},N=A===6?or(R):A===5?sr(R):ar(R),E={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};l.addInstruction({instructions:[N],instructionTypes:[E[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as it}from"@solana/web3.js";import{NATIVE_MINT as xu,TOKEN_PROGRAM_ID as yi}from"@solana/spl-token";var $P=L([ze("mintAuthorityOption"),S("mintAuthority"),w("supply"),_("decimals"),_("isInitialized"),ze("freezeAuthorityOption"),S("freezeAuthority")]);import{PublicKey as xd}from"@solana/web3.js";import{MintLayout as Ga,TOKEN_PROGRAM_ID as Bd}from"@solana/spl-token";var sk=async({connection:r,mint:e})=>{let t=await r.getAccountInfo(new xd(e));return!t||t.data.length!==Ga.span?void 0:Ga.decode(t.data)},ak=({mint:r,decimals:e,programId:t=Bd,logoURI:n="",priority:i=3})=>{let o=r.toBase58().substring(0,6);return{address:r.toBase58(),decimals:e,symbol:o,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:o,tags:[],priority:i}},Xa=r=>new de({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),uk=i=>{var o=i,{amount:r,isRaw:e,name:t}=o,n=Te(o,["amount","isRaw","name"]);return new he(new de({mint:n.address,decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};function ck(r){return r.address===Tt.address?Me:r}function lk(r){return r.address===Me.address?Tt:r}import{TOKEN_PROGRAM_ID as cr,ASSOCIATED_TOKEN_PROGRAM_ID as Dd}from"@solana/spl-token";import{PublicKey as be,TransactionInstruction as Et,SystemProgram as Do,SYSVAR_RENT_PUBKEY as qd}from"@solana/web3.js";var _o=L([_("instruction"),w("amountIn"),w("minAmountOut")]),Vo=L([_("instruction"),w("maxAmountIn"),w("amountOut")]),hk=L([_("instruction"),_("nonce")]),Eo=L([_("instruction"),_("nonce"),w("startTime")]),Sd=L([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"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),w("swapBase2QuoteFee"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),w("swapQuote2BaseFee"),S("baseVault"),S("quoteVault"),S("baseMint"),S("quoteMint"),S("lpMint"),S("openOrders"),S("marketId"),S("marketProgramId"),S("targetOrders"),S("withdrawQueue"),S("lpVault"),S("owner"),w("lpReserve"),q(w(),3,"padding")]),Kd=L([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"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),S("baseVault"),S("quoteVault"),S("baseMint"),S("quoteMint"),S("lpMint"),S("modelDataAccount"),S("openOrders"),S("marketId"),S("marketProgramId"),S("targetOrders"),S("owner"),q(w(),64,"padding")]),Fo=L([_("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),vo=L([_("instruction"),w("amountIn")]),Tk={4:Sd,5:Kd},za=L([w("fee")]);import{PublicKey as Cd}from"@solana/web3.js";var Cn=new Cd("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ln=5e4,Rd=L([w("x"),w("y"),w("price")]),Ld=L([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),q(Rd,ln,"DataElement")]);function Od(r,e){return[0,ln-2]}function Nd(r){return[0,ln-2]}function Md(r){return[0,ln-2]}function _d(r,e,t){let[n,i]=Od(e,t),o=n,s=i,a=0,u=e*r.multiplier/t;for(;o<=s;){if(a=Math.floor((s+o)/2),a===0||a>=ln-2)return[a,a,!1];let c=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.DataElement[a+1].y;if(u===c)return[a,a,!0];if(u===l)return[a-1,a-1,!0];if(u===m)return[a+1,a+1,!0];if(u<l)s=a-1;else{if(u>l&&u<c)return[a-1,a,!0];if(u>c&&u<m)return[a,a+1,!0];o=a+1}}return[a,a,!1]}function Wo(r,e,t){let[n,i,o]=_d(r,e,t);if(!o)return 0;if(n===i){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,u=r.DataElement[i].x,c=r.DataElement[i].y,l=t*(u*a-s*c),m=s*l,p=(u-s)*(e*a-s*t)*c,d=m+p;return e*r.multiplier*l/d}}function cn(r,e,t){return e*r.multiplier/t}function Ya(r,e,t){return e*t/r.multiplier}function Vd(r,e){let[t,n]=Nd(e),i=t,o=n,s=0,a=e;for(;i<o;){if(s=Math.floor((o+i)/2),s<=0||s>ln-2)return[s,s,!1];let u=r.DataElement[s].x,c=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<c)o=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function Ed(r,e){let[t,n]=Md(e),i=t,o=n,s=0,a=e;for(;i<=o;){if(s=Math.floor((o+i)/2),s<=0||s>=ln-2)return[s,s,!1];let u=r.DataElement[s].y,c=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<c&&a>u)return[s-1,s,!0];if(a<u&&a>l)return[s,s+1,!0];o=s-1}}return[s,s,!1]}function Qa(r,e,t,n){let i=n?e+t:e-t,[o,s,a]=Vd(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let u=r.DataElement[o].x,c=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,p=r.DataElement[o].y,d=r.DataElement[s].y;if(e>=u&&e<=c)return n?[m,d,!0,a]:[l,p,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=p-(i-u)*r.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=d+(c-i)*r.multiplier/l),[y,f,!1,a]}}}function Fd(r,e,t,n){let i=n?e-t:e+t,[o,s,a]=Ed(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let u=r.DataElement[o].x,c=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,p=r.DataElement[o].y,d=r.DataElement[s].y;if(e>=d&&e<=p)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(p-e)/(p-d),f=u+m*(p-i)/r.multiplier):(y=l+(m-l)*(p-e)/(p-d),f=c-l*(i-d)/r.multiplier),[y,f,!1,a]}}}function vd(r,e){let t=Qa(r,e,0,!1);return t[3]?t[0]:0}function Ha(r,e,t,n){let i=Wo(r,e,t),o=cn(r,e,i),s=cn(r,t,i),a=cn(r,n,i),u=!0,[c,l,m,p]=Qa(r,o,a,u);if(!p)return 0;if(m)return n*r.multiplier/c;{let d=s-l;return Ya(r,d,i)}}function ja(r,e,t,n){let i=Wo(r,e,t),o=cn(r,e,i),s=cn(r,t,i),a=cn(r,n,i),u=!1,[c,l,m,p]=Fd(r,s,a,u);if(!p)return 0;if(m)return n*c/r.multiplier;{let d=o-l;return Ya(r,d,i)}}function Wd(r){let e=Ld.decode(r);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 Za(r,e,t,n){let i=vd(r,cn(r,e,Wo(r,e,t)))/r.multiplier;return n?i:1/i}var Kn=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(Cn);e&&(this._layoutData=Wd(e==null?void 0:e.data))}}};var $a=ae("Raydium_liquidity_instruction");function Ja(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:o,fixedSide:s}=r,a=Buffer.alloc(Fo.span);Fo.encode({instruction:3,baseAmountIn:U(i),quoteAmountIn:U(o),fixedSide:s==="base"?Se:Us},a);let u=[k({pubkey:cr,isWritable:!1}),k({pubkey:new be(e.id)}),k({pubkey:new be(t.authority),isWritable:!1}),k({pubkey:new be(t.openOrders),isWritable:!1}),k({pubkey:new be(t.targetOrders)}),k({pubkey:new be(e.lpMint.address)}),k({pubkey:new be(t.vault.A)}),k({pubkey:new be(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(k({pubkey:Cn})),u.push(k({pubkey:new be(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 be(t.marketEventQueue),isWritable:!1})),new Et({programId:new be(e.programId),keys:u,data:a})}function qo(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:i}=r,o=fe(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(vo.span);vo.encode({instruction:4,amountIn:U(i)},a);let u=[k({pubkey:cr,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.mintLp.address}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return s===5?u.push(k({pubkey:Cn})):(u.push(k({pubkey:o.id})),u.push(k({pubkey:o.id}))),u.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.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:o.marketEventQueue}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks})),new Et({programId:o.programId,keys:u,data:a})}return new Et({programId:o.programId,keys:[]})}function eu({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:o,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:p,marketId:d,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:P,openTime:A,coinAmount:h,pcAmount:T,ammConfigId:I,feeDestinationId:B}){let x=L([_("instruction"),_("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:Dd,isSigner:!1,isWritable:!1},{pubkey:Do.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:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:I,isSigner:!1,isWritable:!1},{pubkey:B,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:d,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}],N=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:P,openTime:A,coinAmount:h,pcAmount:T},N),{instruction:new Et({keys:R,programId:r,data:N}),instructionType:V.AmmV4CreatePool}}function vk(r){let e=L([_("instruction"),_("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new be(r.id),isWritable:!1}),k({pubkey:new be(r.authority),isWritable:!1}),k({pubkey:new be(r.openOrders),isWritable:!1}),k({pubkey:new be(r.vault.A),isWritable:!1}),k({pubkey:new be(r.vault.B),isWritable:!1}),k({pubkey:new be(r.mintLp.address),isWritable:!1}),k({pubkey:new be(r.marketId),isWritable:!1}),k({pubkey:new be(r.marketEventQueue),isWritable:!1})];return new Et({programId:new be(r.programId),keys:n,data:t})}function Ud({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},i){let o=fe(r),s=Buffer.alloc(_o.span);_o.encode({instruction:9,amountIn:U(t),minAmountOut:U(n)},s);let a=[k({pubkey:cr,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders})];return i===4&&a.push(k({pubkey:o.targetOrders})),a.push(k({pubkey:o.vault.A}),k({pubkey:o.vault.B})),i===5&&a.push(k({pubkey:Cn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1})),new Et({programId:o.programId,keys:a,data:s})}function Gd({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},i){let o=fe(r),s=Buffer.alloc(Vo.span);Vo.encode({instruction:11,maxAmountIn:U(t),amountOut:U(n)},s);let a=[k({pubkey:Do.programId,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return i===5&&a.push(k({pubkey:Cn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Et({programId:o.programId,keys:a,data:s})}function ui(r){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:o,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return Ud(D(M({},a),{amountIn:i,minAmountOut:o}),t);if(s==="out")return Gd(D(M({},a),{maxAmountIn:i,amountOut:o}),t);$a.logWithError("invalid params","params",r)}throw $a.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function Wk({poolKeys:r,userKeys:e,startTime:t}){let n=Buffer.alloc(Eo.span);Eo.encode({instruction:0,nonce:5,startTime:U(t)},n);let i=fe(r),o=[k({pubkey:cr,isWritable:!1}),k({pubkey:Do.programId,isWritable:!1}),k({pubkey:qd,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.authority,isWritable:!1}),k({pubkey:i.openOrders}),k({pubkey:i.mintLp.address}),k({pubkey:i.mintA.address,isWritable:!1}),k({pubkey:i.mintB.address,isWritable:!1}),k({pubkey:i.vault.A,isWritable:!1}),k({pubkey:i.vault.B,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.targetOrders}),k({pubkey:e.lpTokenAccount}),k({pubkey:i.id,isWritable:!1}),k({pubkey:i.marketProgramId,isWritable:!1}),k({pubkey:i.marketId,isWritable:!1}),k({pubkey:e.payer,isSigner:!0})];return new Et({programId:i.programId,keys:o,data:n})}function tu({poolKeys:r}){let e=L([_("instruction"),_("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new be(r.id),isWritable:!1}),k({pubkey:new be(r.authority),isWritable:!1}),k({pubkey:new be(r.openOrders),isWritable:!1}),k({pubkey:new be(r.vault.A),isWritable:!1}),k({pubkey:new be(r.vault.B),isWritable:!1}),k({pubkey:new be(r.mintLp.address),isWritable:!1}),k({pubkey:new be(r.marketId),isWritable:!1}),k({pubkey:new be(r.marketEventQueue),isWritable:!1})];return{instruction:new Et({programId:new be(r.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as Ue,TOKEN_2022_PROGRAM_ID as Jt,ASSOCIATED_TOKEN_PROGRAM_ID as gu}from"@solana/spl-token";import{PublicKey as v,TransactionInstruction as Pt,SystemProgram as Rn,Keypair as jo}from"@solana/web3.js";import wu from"bn.js";import tp from"bn.js";function nu(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function qk(r){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,r,!1),new Uint8Array(e)}function Uk(r){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,r,!1),new Uint8Array(e)}function ci(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Uo(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Go(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function lr(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function ru(r,e){return lr(r,e)?null:Uo(r,e)}function iu(r,e){return lr(r,e)?null:Go(r,e)}var Xd=Buffer.from("amm_config","utf8"),zd=Buffer.from("pool","utf8"),Yd=Buffer.from("pool_vault","utf8"),Qd=Buffer.from("pool_reward_vault","utf8"),ou=Buffer.from("position","utf8"),Hd=Buffer.from("tick_array","utf8"),jd=Buffer.from("operation","utf8"),Zd=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Yk(r,e){return oe([Xd,nu(e)],r)}function su(r,e,t,n){return oe([zd,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Xo(r,e,t){return oe([Yd,e.toBuffer(),t.toBuffer()],r)}function au(r,e,t){return oe([Qd,e.toBuffer(),t.toBuffer()],r)}function ge(r,e,t){return oe([Hd,e.toBuffer(),ci(t)],r)}function mn(r,e,t,n){return oe([ou,e.toBuffer(),ci(t),ci(n)],r)}function ct(r,e){return oe([ou,e.toBuffer()],r)}function li(r){return oe([Buffer.from("metadata","utf8"),Pn.toBuffer(),r.toBuffer()],Pn)}function mr(r){return oe([jd],r)}function lt(r,e){return oe([Zd,e.toBuffer()],r)}import Kt from"bn.js";var me=new Kt(0),st=new Kt(1),Ft=new Kt(-1),at=new Kt(1).shln(64),mi=new Kt(1).shln(128),zo=at.sub(st),dr=64,uu=mi.subn(1),Qe=-443636,Je=-Qe,Ct=new Kt("4295048016"),Rt=new Kt("79226673521066979257578248091"),cu=16,lu="59543866431248",mu="184467440737095516",du="15793534762490258745",di=new Kt(10).pow(new Kt(6)),$d=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))($d||{}),jk={[500]:10,[3e3]:60,[1e4]:200},Zk={version:6,liquidity:me,tickCurrent:0,observationIndex:0,observationUpdateDuration:0,feeGrowthGlobalX64A:me,feeGrowthGlobalX64B:me,protocolFeesTokenA:me,protocolFeesTokenB:me,swapInAmountTokenA:me,swapOutAmountTokenB:me,swapInAmountTokenB:me,swapOutAmountTokenA:me,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},pu={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:[]},$k=new Kt("18446744073700000000");var Jd=15,le=class{static async getTickArrays(e,t,n,i,o,s,a){let u=[],c=G.getTickArrayStartIndexByTick(i,o),l=G.getInitializedTickArrayInRange(s,a,o,c,Math.floor(Jd/2));for(let d=0;d<l.length;d++){let{publicKey:y}=ge(t,n,l[d]);u.push(y)}let m=(await It(e,u)).map(d=>d!==null?pr.decode(d.data):null),p={};for(let d=0;d<u.length;d++){let y=m[d];y!==null&&(p[y.startTickIndex]=D(M({},y),{address:u[d]}))}return p}static nextInitializedTick(e,t,n,i,o,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,i,o,s);for(;a==null||a.liquidityGross.lten(0);){if(c=G.getNextTickArrayStartIndex(c,o,s),this.checkIsValidStartIndex(c,o))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:p,tickArrayStartTickIndex:d}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,p,d]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,i,o){let s=Math.floor(e/le.tickCount(t)),a=n?G.searchLowBitFromStart(i,o,s-1,1,t):G.searchHightBitFromStart(i,o,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let o;if(i){let a=_e-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a-1}}else{let a=0;for(;a<_e;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a+1}}let{publicKey:s}=ge(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,o,s){let a=G.getTickArrayStartIndexByTick(i,o),u=Math.floor((i-a)/o),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let p=c.ticks[u];if(p.liquidityGross.gtn(0)){l=p;break}u=u-1}else for(u=u+1;u<_e;){let p=c.ticks[u];if(p.liquidityGross.gtn(0)){l=p;break}u=u+1}let{publicKey:m}=ge(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:c.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(G.checkIsOutOfBoundary(e)){if(e>Je)return!1;let n=G.getTickArrayStartIndexByTick(Qe,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return _e*e}};import re from"bn.js";import{PublicKey as $t}from"@solana/web3.js";import Ce from"bn.js";var Yo=14,vt=class{static maxTickInTickarrayBitmap(e){return e*_e*dn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let o=n*i;return e<0?{minValue:-o,maxValue:-o+n}:{minValue:o,maxValue:o+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=i?t-le.tickCount(n):t+le.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*_e,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(i){let l=e.shln(1024-c-1),m=ru(1024,l);if(m!==null){let p=(c-m-512)*a;return{isInit:!0,tickIndex:p}}else return{isInit:!1,tickIndex:-o}}else{let l=e.shrn(c),m=iu(1024,l);if(m!==null){let p=(c+m-512)*a;return{isInit:!0,tickIndex:p}}else return{isInit:!1,tickIndex:o-le.tickCount(n)}}}},fr=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=vt.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=vt.maxTickInTickarrayBitmap(e),n=-t;if(Je<=t)throw Error(`extensionTickBoundary check error: ${Je}, ${t}`);if(n<=Qe)throw Error(`extensionTickBoundary check error: ${n}, ${Qe}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),o=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:G.mergeTickArrayBitmap(i).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let o=le.tickCount(t),s=n?e-o:e+o,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:o,maxValue:s}=vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let u=G.mergeTickArrayBitmap(e).shln(dn-1-a),c=lr(512,u)?null:Uo(512,u);if(c!==null){let l=t-c*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let u=G.mergeTickArrayBitmap(e).shrn(a),c=lr(512,u)?null:Go(512,u);if(c!==null){let l=t+c*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-le.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%vt.maxTickInTickarrayBitmap(t),i=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(i=dn-i),i}};import Lt from"bn.js";var yr=class{static getfeeGrowthInside(e,t,n){let i=new Lt(0),o=new Lt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,o=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),o=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Lt(0),a=new Lt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let u=$.wrappingSubU128($.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),c=$.wrappingSubU128($.wrappingSubU128(e.feeGrowthGlobalX64B,o),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=$.mulDivFloor($.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,at),u=t.tokenFeesOwedA.add(a),c=$.mulDivFloor($.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,at),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=$.mulDivFloor($.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,at),u=t.tokenFeesOwedA.add(a),c=$.mulDivFloor($.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,at),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let o=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=$.wrappingSubU128(u,c.growthInsideLastX64),m=$.mulDivFloor(l,t.liquidity,at),p=c.rewardAmountOwed.add(m);o.push(p)}return o}static GetPositionRewards(e,t,n,i){let o=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=$.wrappingSubU128(u,c.growthInsideLastX64),m=$.mulDivFloor(l,t.liquidity,at),p=c.rewardAmountOwed.add(m);o.push(p)}return o}static getRewardGrowthInside(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Lt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Lt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push($.wrappingSubU128($.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return o}static getRewardGrowthInsideV2(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Lt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Lt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push($.wrappingSubU128($.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:o,epochInfo:s}){var b,g,P,A;let a=Z.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),u=Z.getSqrtPriceX64FromTick(t.tickLower),c=Z.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+i:1-i,m=ce.getAmountsFromLiquidity(a,u,c,n,o),[p,d]=[Ae(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Ae(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[Ae(new Lt(new F(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,s,!0),Ae(new Lt(new F(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:p,amountB:d,amountSlippageA:y,amountSlippageB:f,expirationTime:sn(p.expirationTime,d.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as fu}from"@solana/spl-token";var He=class{static getOutputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintA.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");a.push(l);let{amountCalculated:m,accounts:p,sqrtPriceX64:d,feeAmount:y}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,c,o);return a.push(...p),{expectedAmountOut:m.mul(Ft),remainingAccounts:a,executionPrice:d,feeAmount:y}}static getInputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintB.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=ge(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:p,sqrtPriceX64:d,feeAmount:y}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Ft),c,o);return a.push(...p),{expectedAmountIn:m,remainingAccounts:a,executionPrice:d,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=He.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?fr.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):G.checkTickArrayIsInitialized(G.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=ge(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=ge(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/le.tickCount(e.tickSpacing)),i=t?G.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):G.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:o}=vt.nextInitializedTickArrayStartIndex(G.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=fr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Qe||t>Je)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:o}){var a,u,c;let s=[];for(let l=0;l<o.length;l++){let m=o[l],p=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(p===void 0)throw Error("get new reward mint info error");let d=D(M({},m),{perSecond:$.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new $t(p)});if(d.tokenMint.equals($t.default))continue;if(n<=d.openTime.toNumber()||i.eq(me)){s.push(d);continue}let y=new Ce(Math.min(d.endTime.toNumber(),n)),f=y.sub(d.lastUpdateTime),b=$.mulDivFloor(f,d.emissionsPerSecondX64,i),g=d.rewardGrowthGlobalX64.add(b),P=$.mulDivFloor(f,d.emissionsPerSecondX64,at),A=d.rewardTotalEmissioned.add(P);s.push(D(M({},d),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let o of t){let s=G.getTickArrayStartIndexByTick(o,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=vt.maxTickInTickarrayBitmap(e),n=-t;return t>Je&&(t=le.getArrayStartIndex(Je,e)+le.tickCount(e)),n<Qe&&(n=le.getArrayStartIndex(Qe,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/le.tickCount(t)*dn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await Tn(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of i)s.accountInfo!==null&&(o[s.pubkey.toString()]=yu.decode(s.accountInfo.data));return o}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},o=[];for(let u of t){let c=G.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=G.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:p}=ge(u.programId,u.id,m);o.push({pubkey:p}),i[p.toString()]=u.id}}let s=await Tn(e,o,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=i[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=pr.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=D(M({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:o=!0}){var a;let s=[];for(let u=0;u<e.length;u++){let c=e[u];c!==null&&(s.find(l=>l.equals(c.state.programId))||s.push(c.state.programId))}if(n){let u=n.tokenAccounts.map(p=>p.accountInfo.mint),c=[];for(let p of u)for(let d of s)c.push(ct(d,p).publicKey);let l=await It(t,c,{batchRequest:i}),m={};for(let p of l){if(p===null)continue;let d=fi.decode(p.data),y=d.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=G._getTickPriceLegacy({poolInfo:b,tick:d.tickLower,baseIn:!0}),P=G._getTickPriceLegacy({poolInfo:b,tick:d.tickUpper,baseIn:!0}),{amountA:A,amountB:h}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,d.liquidity,!1),T=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:d.poolId,nftMint:d.nftMint,priceLower:g.price,priceUpper:P.price,amountA:A,amountB:h,tickLower:d.tickLower,tickUpper:d.tickUpper,liquidity:d.liquidity,feeGrowthInsideLastX64A:d.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:d.feeGrowthInsideLastX64B,tokenFeesOwedA:d.tokenFeesOwedA,tokenFeesOwedB:d.tokenFeesOwedB,rewardInfos:d.rewardInfos.map(x=>D(M({},x),{pendingReward:new Ce(0)})),leverage:T,tokenFeeAmountA:new Ce(0),tokenFeeAmountB:new Ce(0)}];let I=await G.getTickArrayAddressByTick(f.state.programId,d.poolId,d.tickLower,f.state.tickSpacing),B=await G.getTickArrayAddressByTick(f.state.programId,d.poolId,d.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${d.poolId.toString()}-${d.tickLower}`]=I,m[`${f.state.programId.toString()}-${d.poolId.toString()}-${d.tickUpper}`]=B}if(o){let p=Object.values(m),d=await It(t,p,{batchRequest:i}),y={};for(let f=0;f<p.length;f++){let b=d[f];if(b===null)continue;let g=p[f].toString();y[g]=pr.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let P=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,h=y[m[P].toString()],T=y[m[A].toString()],I=h.ticks[G.getTickOffsetInArray(g.tickLower,f.tickSpacing)],B=T.ticks[G.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await yr.GetPositionFees(f,g,I,B),N=await yr.GetPositionRewards(f,g,I,B);g.tokenFeeAmountA=x.gte(new Ce(0))?x:new Ce(0),g.tokenFeeAmountB=R.gte(new Ce(0))?R:new Ce(0);for(let E=0;E<N.length;E++)g.rewardInfos[E].pendingReward=N[E].gte(new Ce(0))?N[E]:new Ce(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:o,slippage:s,priceLimit:a=new F(0)}){var N;let u,c=n.toBase58()===e.mintA.address,[l,m]=c?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new F(0))?u=c?Ct.add(new Ce(1)):Rt.sub(new Ce(1)):u=Z.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Ae(o,l,i,!1),{expectedAmountOut:d,remainingAccounts:y,executionPrice:f,feeAmount:b}=He.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((N=p.fee)!=null?N:me),u),g=Ae(d,m,i,!1),P=Z.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),A=c?P:new F(1).div(P),h=d.mul(new Ce(Math.floor((1-s)*1e10))).div(new Ce(1e10)),T=Ae(h,m,i,!1),I=c?e.currentPrice:new F(1).div(e.currentPrice),B=new F(A).sub(I).abs(),x=I,R=new ve(new F(B).mul(10**15).toFixed(0),new F(x).mul(10**15).toFixed(0));return{realAmountIn:p,amountOut:g,minAmountOut:T,expirationTime:sn(p.expirationTime,g.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:R,fee:b,remainingAccounts:y}}static async computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:o,epochInfo:s}){let a=i.address===e.mintB.address,[u,c]=a?[e.mintA,e.mintB]:[e.mintB,e.mintA],[l,m]=[new de(D(M({},u),{mint:u.address,isToken2022:u.programId===fu.toBase58()})),new de(D(M({},c),{mint:c.address,isToken2022:c.programId===fu.toBase58()}))],{realAmountIn:p,amountOut:d,minAmountOut:y,expirationTime:f,currentPrice:b,executionPrice:g,priceImpact:P,fee:A,remainingAccounts:h}=await He.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new $t(u.address),amountIn:n,slippage:o,epochInfo:s}),T=D(M({},p),{amount:new he(l,p.amount),fee:p.fee===void 0?void 0:new he(l,p.fee)}),I=D(M({},d),{amount:new he(m,d.amount),fee:d.fee===void 0?void 0:new he(m,d.fee)}),B=D(M({},y),{amount:new he(m,y.amount),fee:y.fee===void 0?void 0:new he(m,y.fee)}),x=new Xe({baseToken:l,denominator:new Ce(10).pow(new Ce(20+l.decimals)),quoteToken:m,numerator:b.mul(new F(10**(20+m.decimals))).toFixed(0)}),R=new Xe({baseToken:l,denominator:new Ce(10).pow(new Ce(20+l.decimals)),quoteToken:m,numerator:g.mul(new F(10**(20+m.decimals))).toFixed(0)}),N=new he(l,A);return{realAmountIn:T,amountOut:I,minAmountOut:B,expirationTime:f,currentPrice:x,executionPrice:R,priceImpact:P,fee:N,remainingAccounts:h}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var y,f,b;let o=e[t],s=G.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=G.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),u=Math.max(s,o.priceMin),l=Math.min(a,o.priceMax)-u,m=a-s,p=o.priceMax-o.priceMin,d;return l<=0?d=0:m===l?d=p/l:p===l?d=l/m:d=l/p*(l/m),{feeApr:o.feeApr*d,rewardsApr:[(y=o.rewardApr[0])!=null?y:0*d,(f=o.rewardApr[1])!=null?f:0*d,(b=o.rewardApr[2])!=null?b:0*d],apr:o.apr*d}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:o,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[kn(e.mintA.address).toString()],p=i[kn(e.mintB.address).toString()],d=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!p)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=Z.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),b=Z.getSqrtPriceX64FromTick(s),g=Z.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:h,amountSlippageB:T}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,o,!1,!1,0),I=new F(P.toString()).div(new F(10).pow(d)).mul(m.value).add(new F(A.toString()).div(new F(10).pow(y)).mul(p.value)),B=new F(h.toString()).div(new F(10).pow(d)).mul(m.value).add(new F(T.toString()).div(new F(10).pow(y)).mul(p.value)),x=B.div(I.add(B)).div(B),N=new F(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),E=3600*24*365,Q=e.rewardDefaultInfos.map(W=>{var se,ft;let j=W.mint.decimals,ee=i[W.mint.address];return u<((se=W.startTime)!=null?se:0)||u>((ft=W.endTime)!=null?ft:0)||!W.perSecond||!ee||j===void 0?0:new F(ee.value).mul(new F(W.perSecond).mul(E)).div(new F(10).pow(j)).mul(x).mul(100).toNumber()});return{feeApr:N,rewardsApr:Q,apr:N+Q.reduce((W,j)=>W+j,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:o,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,P;let l=Z.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),m=Z.getSqrtPriceX64FromTick(n),p=Z.getSqrtPriceX64FromTick(i),d=a?1-s:1+s,y=Ae(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new Ce(new F(y.amount.sub((P=y.fee)!=null?P:me).toString()).mul(d).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,p,f,!a):new Ce(0);else if(l.lte(p)){let A=ce.getLiquidityFromTokenAmountA(l,p,f,!a),h=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:h}else b=t?new Ce(0):ce.getLiquidityFromTokenAmountB(m,p,f);return He.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:o,slippage:s,add:a}){var b,g,P,A;let u=Z.getSqrtPriceX64FromTick(n),c=Z.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(Z.priceToSqrtPriceX64(new F(t.price),t.mintA.decimals,t.mintB.decimals),u,c,o,a),[p,d]=[Ae(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Ae(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[Ae(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),Ae(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:o,amountA:p,amountB:d,amountSlippageA:y,amountSlippageB:f,expirationTime:sn(p.expirationTime,d.expirationTime)}}static async fetchComputeClmmInfo({owner:e,connection:t,poolInfo:n}){let i=await t.getAccountInfo(new $t(n.id));if(!i)throw new Error(`pool not found ${n.id}`);let o=pi.decode(i.data),s=lt(e,new $t(n.id)).publicKey,a=await He.fetchExBitmaps({connection:t,exBitmapAddress:[s],batchRequest:!1});return D(M({},o),{id:new $t(n.id),programId:new $t(n.programId),mintA:n.mintA,mintB:n.mintB,ammConfig:D(M({},n.config),{id:new $t(n.config.id),fundOwner:""}),currentPrice:new F(n.price),exBitmapInfo:a[s.toBase58()],startTime:o.startTime.toNumber()})}};function Eh({poolInfo:r,tickLower:e,tickUpper:t,amountA:n,amountB:i,slippage:o,add:s,epochInfo:a,amountHasFee:u}){var A,h,T,I;let[c,l,m,p]=e<t?[e,t,n,i]:[t,e,i,n],d=Z.priceToSqrtPriceX64(new F(r.price),r.mintA.decimals,r.mintB.decimals),y=Z.getSqrtPriceX64FromTick(c),f=Z.getSqrtPriceX64FromTick(l),[b,g]=[Ae(m,(A=r.mintA.extensions)==null?void 0:A.feeConfig,a,!u),Ae(p,(h=r.mintB.extensions)==null?void 0:h.feeConfig,a,!u)],P=ce.getLiquidityFromTokenAmounts(d,y,f,b.amount.sub((T=b.fee)!=null?T:me),g.amount.sub((I=g.fee)!=null?I:me));return ce.getAmountsOutFromLiquidity({poolInfo:r,tickLower:e,tickUpper:t,liquidity:P,slippage:o,add:s,epochInfo:a,amountAddFee:!u})}var $=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),o=i.div(n);return i.mod(n).eq(me)||(o=o.add(st)),o}static mulDivFloor(e,t,n){if(n.eq(me))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(me))throw new Error("division by 0");return e.mul(t).add(n.sub(st)).div(n)}static x64ToDecimal(e,t){return new F(e.toString()).div(F.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(F.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(mi).sub(t).mod(mi)}};function Ee(r,e){return Qo(r.mul(e),64,256)}function ep(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Qo(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var Z=class{static sqrtPriceX64ToPrice(e,t,n){return $.x64ToDecimal(e).pow(2).mul(F.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return $.decimalToX64(e.mul(F.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(me))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(me))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(me))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(me))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(me))return e;let o=t.shln(dr);if(i){let s=o,a=o.add(n.mul(e));return a.gte(s)?$.mulDivCeil(s,e,a):$.mulDivRoundingUp(s,st,s.div(e).add(n))}else{let s=n.mul(e);if(!o.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=o.sub(s);return $.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let o=n.shln(dr);if(i)return e.add(o.div(t));{let s=$.mulDivRoundingUp(o,st,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<Qe||e>Je)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=Ee(n,new re("18444899583751176192"))),(t&4)!=0&&(n=Ee(n,new re("18443055278223355904"))),(t&8)!=0&&(n=Ee(n,new re("18439367220385607680"))),(t&16)!=0&&(n=Ee(n,new re("18431993317065453568"))),(t&32)!=0&&(n=Ee(n,new re("18417254355718170624"))),(t&64)!=0&&(n=Ee(n,new re("18387811781193609216"))),(t&128)!=0&&(n=Ee(n,new re("18329067761203558400"))),(t&256)!=0&&(n=Ee(n,new re("18212142134806163456"))),(t&512)!=0&&(n=Ee(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=Ee(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=Ee(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=Ee(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=Ee(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=Ee(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=Ee(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=Ee(n,new re("696457651848324352"))),(t&131072)!=0&&(n=Ee(n,new re("26294789957507116"))),(t&262144)!=0&&(n=Ee(n,new re("37481735321082"))),e>0&&(n=uu.div(n)),n}static getTickFromPrice(e,t,n){return Z.getTickFromSqrtPriceX64(Z.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Rt)||e.lt(Ct))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),i=ep(n,32,128),o=new re("8000000000000000","hex"),s=0,a=new re(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new re(0))&&s<cu;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(o.mul(y)),o=o.shrn(1),s+=1}let c=a.shrn(32),m=i.add(c).mul(new re(lu)),p=Qo(m.sub(new re(mu)),64,128).toNumber(),d=Qo(m.add(new re(du)),64,128).toNumber();return p==d?p:Z.getSqrtPriceX64FromTick(d).lte(e)?d:p}},fn=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=Z.getTickFromSqrtPriceX64(Z.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let o=fn.getTickWithPriceAndTickspacing(e,t,n,i),s=Z.getSqrtPriceX64FromTick(o);return Z.sqrtPriceX64ToPrice(s,n,i)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(me))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(dr),s=t.sub(e);return i?$.mulDivRoundingUp($.mulDivCeil(o,s,t),st,e):$.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(me))throw new Error("sqrtPriceX64A must greater than 0");return i?$.mulDivCeil(n,t.sub(e),at):$.mulDivFloor(n,t.sub(e),at)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let o=n.mul(e).mul(t),s=t.sub(e),a=o.div(s);return i?$.mulDivRoundingUp(a,st,zo):a.shrn(dr)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),$.mulDivFloor(n,zo,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,i,!1),a=ce.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,i,o),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,i,o),a=ce.getTokenAmountBFromLiquidity(t,e,i,o);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,i,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,o,s,a){let{amountA:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,i,s),l=o?1+a:1-a,m=new re(new F(u.toString()).mul(l).toFixed(0)),p=new re(new F(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:p}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:o,add:s,epochInfo:a,amountAddFee:u}){var P,A,h,T;let c=Z.priceToSqrtPriceX64(new F(e.price),e.mintA.decimals,e.mintB.decimals),l=Z.getSqrtPriceX64FromTick(t),m=Z.getSqrtPriceX64FromTick(n),p=s?1+o:1-o,d=ce.getAmountsFromLiquidity(c,l,m,i,s),[y,f]=[Ae(d.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,u),Ae(d.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[Ae(new re(new F(d.amountA.toString()).mul(p).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),Ae(new re(new F(d.amountB.toString()).mul(p).toFixed(0)),(T=e.mintB.extensions)==null?void 0:T.feeConfig,a,u)];return{liquidity:i,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:sn(y.expirationTime,f.expirationTime)}}},pn=class{static swapCompute(e,t,n,i,o,s,a,u,c,l,m,p,d,y){if(p.eq(me))throw new Error("amountSpecified must not be 0");if(y||(y=s?Ct.add(st):Rt.sub(st)),s){if(y.lt(Ct))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(Rt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let f=p.gt(me),b={amountSpecifiedRemaining:p,amountCalculated:me,sqrtPriceX64:m,tick:c>d?Math.min(d+le.tickCount(l)-1,c):d,accounts:[],liquidity:u,feeAmount:new re(0)},g=d,P=n[d],A=0,h=!s&&P.startTickIndex===b.tick;for(;!b.amountSpecifiedRemaining.eq(me)&&!b.sqrtPriceX64.eq(y);){if(A>10)throw Error("liquidity limit");let T={};T.sqrtPriceStartX64=b.sqrtPriceX64;let I=G.nextInitTick(P,b.tick,l,s,h),B=I||null,x=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let N=He.nextInitializedTickArrayStartIndex({tickCurrent:b.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:o},g,s);if(!N.isExist)throw Error("swapCompute LiquidityInsufficient");g=N.nextStartIndex;let{publicKey:E}=ge(e,t,g);x=E,P=n[g],B=G.firstInitializedTick(P,s)}T.tickNext=B.tick,T.initialized=B.liquidityGross.gtn(0),d!==g&&x&&(b.accounts.push(x),d=g),T.tickNext<Qe?T.tickNext=Qe:T.tickNext>Je&&(T.tickNext=Je),T.sqrtPriceNextX64=Z.getSqrtPriceX64FromTick(T.tickNext);let R;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?R=y:R=T.sqrtPriceNextX64,[b.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=pn.swapStepCompute(b.sqrtPriceX64,R,b.liquidity,b.amountSpecifiedRemaining,a),b.feeAmount=b.feeAmount.add(T.feeAmount),f?(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),b.amountCalculated=b.amountCalculated.sub(T.amountOut)):(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.add(T.amountOut),b.amountCalculated=b.amountCalculated.add(T.amountIn.add(T.feeAmount))),b.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let N=B.liquidityNet;s&&(N=N.mul(Ft)),b.liquidity=ce.addDelta(b.liquidity,N)}h=T.tickNext!=b.tick&&!s&&P.startTickIndex===T.tickNext,b.tick=s?T.tickNext-1:T.tickNext}else if(b.sqrtPriceX64!=T.sqrtPriceStartX64){let N=Z.getTickFromSqrtPriceX64(b.sqrtPriceX64);h=N!=b.tick&&!s&&P.startTickIndex===N,b.tick=N}++A}try{let{nextStartIndex:T,isExist:I}=le.nextInitializedTickArray(b.tick,l,s,i,o);I&&d!==T&&(b.accounts.push(ge(e,t,T).publicKey),d=T)}catch{}return{amountCalculated:b.amountCalculated,feeAmount:b.feeAmount,sqrtPriceX64:b.sqrtPriceX64,liquidity:b.liquidity,tickCurrent:b.tick,accounts:b.accounts}}static swapStepCompute(e,t,n,i,o){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),u=i.gte(me);if(u){let l=$.mulDivFloor(i,di.sub(new re(o.toString())),di);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=Z.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Ft).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=Z.getNextSqrtPriceX64FromOutput(e,n,i.mul(Ft),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(i.mul(Ft))&&(s.amountOut=i.mul(Ft)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=$.mulDivCeil(s.amountIn,new re(o),di.sub(new re(o))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var _e=60,dn=512,G=class{static getTickArrayAddressByTick(e,t,n,i){let o=G.getTickArrayStartIndexByTick(n,i),{publicKey:s}=ge(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=G.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=_e)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=le.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*_e,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*_e,o=Math.floor(t/i)+512,s=Math.abs(o);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*_e:e+t*_e}static mergeTickArrayBitmap(e){let t=new tp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,o){let s=Math.floor(i/(n*_e));return[...G.searchLowBitFromStart(e,t,s-1,o,n),...G.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return G.searchHightBitFromStart(e,t,0,dn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,o){let s=[],a=G.getAllInitializedTickArrayStartIndex(n,i,o);for(let u of a){let{publicKey:c}=ge(e,t,u);s.push({tickArrayStartIndex:u,tickArrayAddress:c})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>G.mergeTickArrayBitmap(c)),a=[];for(;n>=-7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n--,a.length===i)break}let u=le.tickCount(o);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>G.mergeTickArrayBitmap(c)),a=[];for(;n<7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n++,a.length===i)break}let u=le.tickCount(o);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Qe||e>Je}static nextInitTick(e,t,n,i,o){if(le.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(o||(a=a+1);a<_e;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=_e-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<_e;){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 i=Z.getSqrtPriceX64FromTick(t),o=Z.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new F(1).div(o),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new F(1).div(t),o=fn.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=Z.getSqrtPriceX64FromTick(o),a=Z.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new F(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=Z.getSqrtPriceX64FromTick(t),o=Z.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new F(1).div(o),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new F(1).div(t),o=fn.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=Z.getSqrtPriceX64FromTick(o),a=Z.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new F(1).div(a)}}};var aT=L([pe(8),_("bump"),Bt("index"),S(""),ze("protocolFeeRate"),ze("tradeFeeRate"),Bt("tickSpacing"),q(w(),8,"")]),np=L([ze("blockTimestamp"),z("sqrtPriceX64"),z("cumulativeTimePriceX64"),q(z(),1,"")]),Ho=L([pe(8),qe("initialized"),S("poolId"),q(np,1e3,"observations"),q(z(),5,"")]),rp=L([_("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),z("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),S("tokenMint"),S("tokenVault"),S("creator"),z("rewardGrowthGlobalX64")]),pi=L([pe(8),_("bump"),S("ammConfig"),S("creator"),S("mintA"),S("mintB"),S("vaultA"),S("vaultB"),S("observationId"),_("mintDecimalsA"),_("mintDecimalsB"),Bt("tickSpacing"),z("liquidity"),z("sqrtPriceX64"),De("tickCurrent"),Bt("observationIndex"),Bt("observationUpdateDuration"),z("feeGrowthGlobalX64A"),z("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),z("swapInAmountTokenA"),z("swapOutAmountTokenB"),z("swapInAmountTokenB"),z("swapOutAmountTokenA"),_("status"),q(_(),7,""),q(rp,3,"rewardInfos"),q(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),q(w(),15*4-3,"padding")]),ip=L([z("growthInsideLastX64"),w("rewardAmountOwed")]),fi=L([pe(8),_("bump"),S("nftMint"),S("poolId"),De("tickLower"),De("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(ip,3,"rewardInfos"),q(w(),8,"")]),uT=L([pe(8),_("bump"),S("poolId"),De("tickLowerIndex"),De("tickUpperIndex"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(z(),3,"rewardGrowthInside"),q(w(),8,"")]),op=L([De("tick"),ga("liquidityNet"),z("liquidityGross"),z("feeGrowthOutsideX64A"),z("feeGrowthOutsideX64B"),q(z(),3,"rewardGrowthsOutsideX64"),q(ze(),13,"")]),pr=L([pe(8),S("poolId"),De("startTickIndex"),q(op,_e,"ticks"),_("initializedTickCount"),q(_(),115,"")]),bu=L([pe(329),q(S(),100,"whitelistMints")]),yu=L([pe(8),S("poolId"),q(q(w(),8),Yo,"positiveTickArrayBitmap"),q(q(w(),8),Yo,"negativeTickArrayBitmap")]);var Au=ae("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],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]},Be=class{static createPoolInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y){let f=L([z("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Rn.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:d,startTime:y},g);let P=Buffer.from([...kt.createPool,...g]);return new Pt({keys:b,programId:e,data:P})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:i,mintA:o,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ye({fromPublicKey:i,programId:n}),[p,d]=[new v(o.address),new v(s.address)],y=[Rn.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Ho.span),space:Ho.span,programId:n})],{publicKey:f}=su(n,a,p,d),{publicKey:b}=Xo(n,f,p),{publicKey:g}=Xo(n,f,d);return y.push(this.createPoolInstruction(n,f,i,a,m.publicKey,p,b,new v(o.programId||Ue),d,g,new v(s.programId||Ue),lt(n,f).publicKey,u,c)),{signers:[],instructions:y,instructionTypes:[V.CreateAccount,V.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P,A,h,T,I,B,x,R,N){let E=L([De("tickLowerIndex"),De("tickUpperIndex"),De("tickArrayLowerStartIndex"),De("tickArrayUpperStartIndex"),z("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),_("optionBaseFlag"),qe("baseFlag")]),Q=[...N?[{pubkey:N,isSigner:!1,isWritable:!0}]:[]],W=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Rn.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:gu,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...Q],j=Buffer.alloc(E.span);E.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:T,liquidity:I,amountMaxA:B,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},j);let ee=Buffer.from([...kt.openPosition,...j]);return new Pt({keys:W,programId:e,data:ee})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[p,d]=[new v(e.programId),new v(e.id)],y;if(l)y=new v((await l(1))[0]);else{let x=jo.generate();m.push(x),y=x.publicKey}let f=G.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=G.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(p,d,f),{publicKey:P}=ge(p,d,b),{publicKey:A}=ye(n.wallet,y,Ue),{publicKey:h}=li(y),{publicKey:T}=ct(p,y),{publicKey:I}=mn(p,d,i,o),B=this.openPositionFromLiquidityInstruction(p,n.feePayer,d,n.wallet,y,A,h,I,g,P,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),i,o,f,b,s,a,u,c);return{signers:m,instructions:[B],instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:T,protocolPosition:I}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[p,d]=[new v(e.programId),new v(e.id)],y;if(l)y=new v((await l(1))[0]);else{let x=jo.generate();m.push(x),y=x.publicKey}let f=G.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=G.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(p,d,f),{publicKey:P}=ge(p,d,b),{publicKey:A}=ye(n.wallet,y,Ue),{publicKey:h}=li(y),{publicKey:T}=ct(p,y),{publicKey:I}=mn(p,d,i,o),B=this.openPositionFromBaseInstruction(p,n.feePayer,d,n.wallet,y,A,h,I,g,P,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),i,o,f,b,c,s,a,u,He.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(p,d).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:T,protocolPosition:I},instructions:[B],signers:m,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P,A,h,T,I,B,x,R,N){let E=L([De("tickLowerIndex"),De("tickUpperIndex"),De("tickArrayLowerStartIndex"),De("tickArrayUpperStartIndex"),z("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),_("optionBaseFlag"),qe("baseFlag")]),Q=[...N?[{pubkey:N,isSigner:!1,isWritable:!0}]:[]],W=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Rn.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:gu,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...Q],j=Buffer.alloc(E.span);E.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:T,liquidity:new wu(0),amountMaxA:B==="MintA"?x:R,amountMaxB:B==="MintA"?R:x,withMetadata:I==="create",baseFlag:B==="MintA",optionBaseFlag:1},j);let ee=Buffer.from([...kt.openPosition,...j]);return new Pt({keys:W,programId:e,data:ee})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,p=[];if(l)m=new v((await l(1))[0]);else{let x=jo.generate();p.push(x),m=x.publicKey}let[d,y]=[new v(e.programId),new v(e.id)],f=G.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=G.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(d,y,f),{publicKey:P}=ge(d,y,b),{publicKey:A}=ye(n.wallet,m,Ue),{publicKey:h}=li(m),{publicKey:T}=ct(d,m),{publicKey:I}=mn(d,y,i,o),B=this.openPositionFromLiquidityInstruction(d,n.wallet,y,n.wallet,m,A,h,I,g,P,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(t.mintA.address),new v(t.mintB.address),i,o,f,b,s,a,u,c,He.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(d,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:T,protocolPosition:I},instructions:[B],signers:p,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,o){let s=L([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Rn.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...kt.closePosition,...u]);return new Pt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i}){let o=new v(e.programId),{publicKey:s}=ye(n.wallet,i.nftMint,Ue),{publicKey:a}=ct(o,i.nftMint),u=[];return u.push(this.closePositionInstruction(o,n.wallet,i.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P){let A=L([z("liquidity"),w("amountMaxA"),w("amountMaxB"),_("optionBaseFlag"),qe("baseFlag")]),h=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],I=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},I);let B=Buffer.from([...kt.increaseLiquidity,...I]);return new Pt({keys:T,programId:e,data:B})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMaxA:s,amountMaxB:a}){let[u,c]=[new v(e.programId),new v(e.id)],l=G.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=G.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=ge(u,c,l),{publicKey:d}=ge(u,c,m),{publicKey:y}=ye(i.wallet,n.nftMint,Ue),{publicKey:f}=ct(u,n.nftMint),{publicKey:b}=mn(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,i.wallet,y,f,c,b,p,d,i.tokenAccountA,i.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,s,a,He.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(u,c).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:d,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:o,baseAmount:s,otherAmountMax:a}){let[u,c]=[new v(e.programId),new v(e.id)],l=G.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=G.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=ge(u,c,l),{publicKey:d}=ge(u,c,m),{publicKey:y}=ye(i.wallet,n.nftMint,Ue),{publicKey:f}=ct(u,n.nftMint),{publicKey:b}=mn(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:d,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,y,f,c,b,p,d,i.tokenAccountA,i.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,s,a,He.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(u,c).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P){let A=L([z("liquidity"),w("amountMaxA"),w("amountMaxB"),_("optionBaseFlag"),qe("baseFlag")]),h=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],I=Buffer.alloc(A.span);A.encode({liquidity:new wu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},I);let B=Buffer.from([...kt.increaseLiquidity,...I]);return new Pt({keys:T,programId:e,data:B})}static decreaseLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P,A){let h=L([z("liquidity"),w("amountMinA"),w("amountMinB")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],B=Buffer.alloc(h.span);h.encode({liquidity:b,amountMinA:g,amountMinB:P},B);let x=Buffer.from([...kt.decreaseLiquidity,...B]);return new Pt({keys:I,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new v(e.programId),new v(e.id)],m=G.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=G.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=ge(c,l,m),{publicKey:y}=ge(c,l,p),{publicKey:f}=ye(i.wallet,n.nftMint,u),{publicKey:b}=ct(c,n.nftMint),{publicKey:g}=mn(c,l,n.tickLower,n.tickUpper),P=[];for(let h=0;h<e.rewardDefaultInfos.length;h++)P.push({poolRewardVault:new v(t.rewardInfos[h].vault),ownerRewardVault:i.rewardAccounts[h],rewardMint:new v(e.rewardDefaultInfos[h].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,i.wallet,f,b,l,g,d,y,i.tokenAccountA,i.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),P,o,s,a,He.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,p])?lt(c,l).publicKey:void 0)),{address:{tickArrayLower:d,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[V.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g){let P=L([w("amount"),w("otherAmountThreshold"),z("sqrtPriceLimitX64"),qe("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(B=>({pubkey:B,isSigner:!1,isWritable:!0}))],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],T=Buffer.alloc(P.span);P.encode({amount:d,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},T);let I=Buffer.from([...kt.swap,...T]);return new Pt({keys:h,programId:e,data:I})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,inputMint:i,amountIn:o,amountOutMin:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new v(e.programId),new v(e.id)],[m,p]=[new v(t.vault.A),new v(t.vault.B)],[d,y]=[new v(e.mintA.address),new v(e.mintB.address)],f=e.mintA.address===i.toString(),b=[this.swapInstruction(c,n.wallet,l,new v(e.config.id),f?n.tokenAccountA:n.tokenAccountB,f?n.tokenAccountB:n.tokenAccountA,f?m:p,f?p:m,f?d:y,f?y:d,u,m,o,s,a,!0,lt(c,l).publicKey)];return{signers:[],instructions:b,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,o,s,a,u,c,l,m,p){let d=L([w("openTime"),w("endTime"),z("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Rn.programId,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(d.span);d.encode({openTime:U(l),endTime:U(m),emissionsPerSecondX64:p},f);let b=Buffer.from([...kt.initReward,...f]);return new Pt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new v(e.programId),new v(e.id)],a=au(o,s,i.mint).publicKey,u=mr(o).publicKey,c=[this.initRewardInstruction(o,n.wallet,s,u,new v(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,o,s,a,u,c,l,m,p){let d=L([_("rewardIndex"),z("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(d.span);d.encode({rewardIndex:c,emissionsPerSecondX64:p,openTime:U(l),endTime:U(m)},f);let b=Buffer.from([...kt.setRewardEmissions,...f]);return new Pt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new v(e.programId),new v(e.id)],a,u,c;for(let p=0;p<e.rewardDefaultInfos.length;p++)e.rewardDefaultInfos[p].mint.address===i.mint.toString()&&(a=p,u=new v(t.rewardInfos[p].vault),c=new v(t.rewardInfos[p].mint.address));(a===void 0||u===void 0)&&Au.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=mr(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new v(e.config.id),n.tokenAccount,u,c,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,o,s,a){let u=L([_("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...kt.collectReward,...l]);return new Pt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[o,s]=[new v(e.programId),new v(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,u=new v(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&Au.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(o,n.wallet,s,n.tokenAccount,u,i,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[V.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:i,amountOut:o,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new v(e.programId),new v(e.id)],[m,p]=[new v(t.vault.A),new v(t.vault.B)],[d,y]=[new v(e.mintA.address),new v(e.mintB.address)],f=e.mintA.address===i.toString(),b=[this.swapInstruction(c,n.wallet,l,new v(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?p:m,f?m:p,f?d:y,f?y:d,u,m,o,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[V.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as cp}from"@solana/web3.js";import{PublicKey as ap}from"@solana/web3.js";import Pu from"bn.js";var ku=new Pu(25),hu=new Pu(1e4),sp={4:3,5:3};var up=ae("Raydium_liquidity_serum");function Tu({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let o=t.concat(Buffer.from([n]),Buffer.alloc(7));i=ap.createProgramAddressSync(o,r)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:i,nonce:n}}throw up.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}import br from"bn.js";function $o({programId:r}){let{publicKey:e}=oe([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function yn({name:r,programId:e,marketId:t}){let{publicKey:n}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function lp({programId:r,marketId:e}){let{publicKey:t}=oe([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function mp({programId:r}){return oe([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function Iu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:u}){let c=yn({name:"amm_associated_seed",programId:a,marketId:t}),l=yn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:p}=mp({programId:a}),d=yn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=yn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=yn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=lp({programId:a,marketId:t}),g=yn({name:"target_associated_seed",programId:a,marketId:t}),P=yn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=Tu({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:o,quoteDecimals:s,lpDecimals:o,version:r,programId:a,authority:m,nonce:p,baseVault:d,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:cp.default,configId:$o({programId:a})}}var Zo;async function FT({connection:r,poolKeysList:e,config:t}){Zo||(Zo=new Kn({connection:r}),await Zo.initStableModelLayout());let n=e.map(s=>tu({poolKeys:s}));return(await $s(r,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=Js(s,"GetPoolData"),u=new br(Mt(a,"status")),c=Number(Mt(a,"coin_decimals")),l=Number(Mt(a,"pc_decimals")),m=Number(Mt(a,"lp_decimals")),p=new br(Mt(a,"pool_coin_amount")),d=new br(Mt(a,"pool_pc_amount")),y=new br(Mt(a,"pool_lp_supply")),f="0";try{f=Mt(a,"pool_open_time")}catch{}return{status:u,baseDecimals:c,quoteDecimals:l,lpDecimals:m,baseReserve:p,quoteReserve:d,lpSupply:y,startTime:new br(f)}})}import ut from"bn.js";var gr=class extends xe{constructor(t){super(t);this.stableLayout=new Kn({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:o}){let s=new ut(new F(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=Xa(t[o?"mintB":"mintA"]),[u,c]=[new ut(new F(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new ut(new F(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new ut(new F(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,F.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",o?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",o?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=o?"base":"quote";this.logDebug("input side:",m);let p=Se;s.isZero()||(p=m==="base"?Wr(s.mul(c),u):Wr(s.mul(u),c)),this.logDebug("amountRaw:",p.toString(),"lpAmount:",l.toString());let d=Wr(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",d.toString());let f=new ve(new ut(1)).add(i).mul(p).quotient,b=new he(a,p),g=new he(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:d}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,amountInA:i,amountInB:o,fixedSide:s,config:a,txVersion:u,computeBudgetConfig:c}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",o),(i.isZero()||o.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:o.toFixed()});let{account:l}=this.scope,{bypassAssociatedCheck:m,checkCreateATAOwner:p}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},a),[d,y]=[i.token,o.token],f=await l.getCreatedTokenAccount({mint:d.mint,associatedOnly:!1}),b=await l.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1});!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let g=await l.getCreatedTokenAccount({mint:new it(n.lpMint.address)}),P=[d,y],A=[f,b],h=[i.raw,o.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",s),T==="quote"?(P.reverse(),A.reverse(),h.reverse(),I=s==="a"?"quote":"base"):T==="base"&&(I=s==="a"?"base":"quote");let[B,x]=P,[R,N]=A,[E,Q]=h,W=await this.getAmmPoolKeys(n.id),j=this.createTxBuilder(),Wt=await l.handleTokenAccount({side:"in",amount:E,mint:B.mint,tokenAccount:R,bypassAssociatedCheck:m,checkCreateATAOwner:p}),{tokenAccount:ee}=Wt,se=Te(Wt,["tokenAccount"]);j.addInstruction(se);let Kr=await l.handleTokenAccount({side:"in",amount:Q,mint:x.mint,tokenAccount:N,bypassAssociatedCheck:m,checkCreateATAOwner:p}),{tokenAccount:ft}=Kr,Mn=Te(Kr,["tokenAccount"]);j.addInstruction(Mn);let _n=await l.handleTokenAccount({side:"out",amount:0,mint:new it(n.lpMint.address),tokenAccount:g,bypassAssociatedCheck:m,checkCreateATAOwner:p}),{tokenAccount:Ii}=_n,xi=Te(_n,["tokenAccount"]);return j.addInstruction(xi),j.addInstruction({instructions:[Ja({poolInfo:n,poolKeys:W,userKeys:{baseTokenAccount:ee,quoteTokenAccount:ft,lpTokenAccount:Ii,owner:this.scope.ownerPubKey},baseAmountIn:E,quoteAmountIn:Q,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5AddLiquidity:V.AmmV4AddLiquidity],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),j.addCustomComputeBudget(c),u===0&&await j.buildV0(),j.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,amountIn:i,config:o,txVersion:s,computeBudgetConfig:a}=t,u=await this.getAmmPoolKeys(n.id),[c,l,m]=[new it(n.mintA.address),new it(n.mintB.address),new it(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,d=await p.getCreatedTokenAccount({mint:m,associatedOnly:!1});d||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let y=await p.getCreatedTokenAccount({mint:c}),f=await p.getCreatedTokenAccount({mint:l}),b=this.createTxBuilder(),{bypassAssociatedCheck:g,checkCreateATAOwner:P}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},o),B=await p.handleTokenAccount({side:"out",amount:0,mint:c,tokenAccount:y,bypassAssociatedCheck:g,checkCreateATAOwner:P}),{tokenAccount:A}=B,h=Te(B,["tokenAccount"]);b.addInstruction(h);let x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:g,checkCreateATAOwner:P}),{tokenAccount:T}=x,I=Te(x,["tokenAccount"]);return b.addInstruction(I),b.addInstruction({instructions:[qo({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:d,baseTokenAccount:A,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity]}),b.addCustomComputeBudget(a),s===0?await b.buildV0():b.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,tokenProgram:m=yi,checkCreateATAOwner:p=!0,getEphemeralSigners:d,txVersion:y}){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 f=this.createTxBuilder();f.addCustomComputeBudget(c);let b={};for(let ee of this.scope.account.tokenAccountRawInfos)(b[ee.accountInfo.mint.toString()]===void 0||ye(this.scope.ownerPubKey,ee.accountInfo.mint,yi).publicKey.equals(ee.pubkey))&&(b[ee.accountInfo.mint.toString()]=ee.pubkey);let g=b[t.lpMint.address];if(g===void 0)throw Error("find lp account error in trade accounts");let P=i.add(a!=null?a:new ut(0)),A=t.mintA.address===de.WSOL.mint.toString(),h=t.mintB.address===de.WSOL.mint.toString(),{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:yi,mint:new it(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!0,checkCreateATAOwner:p});if(f.addInstruction(I||{}),T===void 0)throw new Error("base token account not found");let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:yi,mint:new it(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(f.addInstruction(x||{}),B===void 0)throw new Error("quote token account not found");if(b[t.mintA.address]=T,b[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let ee=[];for(let Wt of s.rewardInfos){let Kr=Wt.mint.address===de.WSOL.mint.toString();if(b[Wt.mint.address])ee.push(b[Wt.mint.address]);else{let{account:_n,instructionParams:fs}=await this.scope.account.getOrCreateTokenAccount({mint:new it(Wt.mint.address),tokenProgram:m,owner:this.scope.ownerPubKey,skipCloseAccount:!Kr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});_n||this.logAndCreateError("farm reward account not found:",Wt.mint.address),fs&&f.addInstruction(fs),ee.push(_n)}}let se=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],ft={amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:se,lpAccount:g,rewardAccounts:ee},Mn=At[s.programId],Ii=Mn===6?or(ft):Mn===5?sr(ft):ar(ft),xi={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};f.addInstruction({instructions:[Ii],instructionTypes:[xi[Mn]]})}let R=await this.getAmmPoolKeys(t.id),N=qo({poolInfo:t,poolKeys:R,userKeys:{lpTokenAccount:g,baseTokenAccount:T,quoteTokenAccount:B,owner:this.scope.ownerPubKey},amountIn:P});f.addInstruction({instructions:[N],instructionTypes:[t.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]});let[E,Q]=t.mintA.address===n.mintA.address?[T,B]:[B,T],W=await this.scope.clmm.getClmmPoolKeys(t.id),j=await Be.openPositionFromBaseInstructions(D(M({poolInfo:n,poolKeys:W,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:E,tokenAccountB:Q},withMetadata:"create"},o),{base:u,getEphemeralSigners:d}));return f.addInstruction({instructions:[...j.instructions],signers:j.signers,instructionTypes:[...j.instructionTypes],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),y===0?f.sizeCheckBuildV0():f.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:o,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:p,txVersion:d,feeDestinationId:y,computeBudgetConfig:f}){var Q;let b=c.feePayer||((Q=this.scope.owner)==null?void 0:Q.publicKey),g=c.useSOLBalance&&i.mint.equals(xu),P=c.useSOLBalance&&o.mint.equals(xu),A=this.createTxBuilder(),{account:h,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(T||{});let{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:P?{payer:b,amount:a}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:l,checkCreateATAOwner:m});if(A.addInstruction(B||{}),h===void 0||I===void 0)throw Error("you don't has some token account");let x=Iu({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:o.mint,baseDecimals:i.decimals,quoteDecimals:o.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:N,instructionType:E}=eu(D(M({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:h,userPcVault:I,userLpVault:ye(this.scope.ownerPubKey,x.lpMint,p).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[N],instructionTypes:[E]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:d,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=$o({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return za.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:o,slippage:s}){if(i!==t.mintA.address&&i!==t.mintA.address)throw new Error("toke not match");if(o!==t.mintB.address&&o!==t.mintB.address)throw new Error("toke not match");let{baseReserve:a,quoteReserve:u}=t,c=[a,u],l=i==t.mintA.address?"base":"quote";l==="quote"&&c.reverse();let[m,p]=c,d=t.programId===Ji.toBase58(),y;if(d)y=new F(p.toString()).div(m.toString());else{let x=Za(this.stableLayout.stableModelData,a.toNumber(),u.toNumber(),!1);l==="quote"?y=new F(1e6).div(x*1e6):y=new F(x*1e6).div(1e6)}let f=n,b=new ut(0),g=new ut(0);if(!f.isZero())if(d){g=zt(f.mul(ku),hu);let x=f.sub(g),R=m.add(x);b=p.mul(x).div(R)}else{g=f.mul(new ut(2)).div(new ut(1e4));let x=f.sub(g);l==="quote"?b=new ut(Ha(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber())):b=new ut(ja(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber()))}let P=new ut(new F(b.toString()).mul(1-s).toFixed(0)),A=b,h=P,T=new F(b.toString()).div(new F(f.sub(g).toString()).toFixed(0));!f.isZero()&&!b.isZero()&&(T=new F(b.toString()).div(f.sub(g).toString()));let I=y.sub(T).div(y).mul(100);return{amountOut:A,minAmountOut:h,currentPrice:y,executionPrice:T,priceImpact:I,fee:g}}async swap({poolInfo:t,amountIn:n,amountOut:i,inputMint:o,fixedSide:s,txVersion:a,computeBudgetConfig:u}){let c=this.createTxBuilder(),[l,m]=o===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],p=await this.scope.account.getCreatedTokenAccount({mint:new it(l.address),programId:new it(l.programId),associatedOnly:!1}),d=await this.scope.account.getCreatedTokenAccount({mint:new it(m.address),programId:new it(m.programId),associatedOnly:!1}),h=await this.scope.account.handleTokenAccount({side:"in",amount:n,mint:new it(l.address),tokenAccount:p,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:y}=h,f=Te(h,["tokenAccount"]);c.addInstruction(f);let T=await this.scope.account.handleTokenAccount({side:"out",amount:0,mint:new it(m.address),tokenAccount:d,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:b}=T,g=Te(T,["tokenAccount"]);c.addInstruction(g);let P=await this.getAmmPoolKeys(t.id),A=4;return t.pooltype.includes("StablePool")&&(A=5),c.addInstruction({instructions:[ui({version:A,poolKeys:P,userKeys:{tokenAccountIn:y,tokenAccountOut:b,owner:this.scope.ownerPubKey},amountIn:n,amountOut:i,fixedSide:s})],instructionTypes:[A===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),c.addCustomComputeBudget(u),c.versionBuild({txVersion:a})}};import{PublicKey as ue}from"@solana/web3.js";import mt from"bn.js";var wr=class extends xe{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)||ue.default,mint1:i,mint2:o,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,p=this.createTxBuilder(),[d,y,f]=new mt(new ue(i.address).toBuffer()).gt(new mt(new ue(o.address).toBuffer()))?[o,i,new F(1).div(a)]:[i,o,a],b=Z.priceToSqrtPriceX64(f,d.decimals,y.decimals),g=await Be.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:d,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return p.addInstruction(g),p.addCustomComputeBudget(c),p.versionBuild({txVersion:m,extInfo:{address:D(M({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:d,mintB:y,openTime:u.toString(),vault:{A:g.address.mintAVault.toString(),B:g.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:M({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:d,mintB:y,feeRate:s.tradeFeeRate,openTime:u.toString(),programId:t.toString(),price:f.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:[]}},pu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:p,computeBudgetConfig:d,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,P=n.useSOLBalance&&e.mintA.address===te.toString(),A=n.useSOLBalance&&e.mintB.address===te.toString(),[h,T]=s==="MintA"?[a,u]:[u,a],{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:c,checkCreateATAOwner:l});I&&(b=I),f.addInstruction(B||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||T.isZero()?{payer:this.scope.ownerPubKey,amount:T}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let N=t||await this.getClmmPoolKeys(e.id),E=await Be.openPositionFromBaseInstructions({poolInfo:e,poolKeys:N,ownerInfo:D(M({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:p});return f.addInstruction(E),f.addCustomComputeBudget(d),f.versionBuild({txVersion:y,extInfo:E.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:o,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:p,getEphemeralSigners:d}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===te.toBase58(),P=n.useSOLBalance&&e.mintB.address===te.toBase58(),{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(h||{});let{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:c,checkCreateATAOwner:l});T&&(b=T),y.addInstruction(I||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id),x=await Be.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:i,amountMaxB:o,withMetadata:m,getEphemeralSigners:d});return y.addInstruction(x),y.versionBuild({txVersion:p,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,ownerPosition:n,amountMaxA:i,amountMaxB:o,liquidity:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,p=this.createTxBuilder(),d,y,f=a.useSOLBalance&&t.mintA.address===te.toString(),b=a.useSOLBalance&&t.mintB.address===te.toString(),{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(d=g),p.addInstruction(P||{});let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b?{payer:this.scope.ownerPubKey,amount:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),p.addInstruction(h||{}),!d&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getClmmPoolKeys(t.id),I=Be.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:d,tokenAccountB:y},liquidity:s,amountMaxA:i,amountMaxB:o});return p.addInstruction(I),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m,extInfo:{address:I.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:i,baseAmount:o,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,p=this.createTxBuilder(),d,y,f=a.useSOLBalance&&t.mintA.address===te.toString(),b=a.useSOLBalance&&t.mintB.address===te.toString(),{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:i==="MintA"?o:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(d=g),p.addInstruction(P||{});let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),p.addInstruction(h||{}),!d&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getClmmPoolKeys(t.id),I=Be.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:T,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:d,tokenAccountB:y},base:i,baseAmount:o,otherAmountMax:s});return p.addInstruction(I),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m,extInfo:{address:I.address}})}async decreaseLiquidity(e){let{poolInfo:t,ownerPosition:n,ownerInfo:i,amountMinA:o,amountMinB:s,liquidity:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),d=i.useSOLBalance&&t.mintA.address===te.toString(),y=i.useSOLBalance&&t.mintB.address===te.toString(),f,b,{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!d,associatedOnly:d?!1:u,checkCreateATAOwner:c});f=g,P&&p.addInstruction(P);let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:c});b=A,h&&p.addInstruction(h);let T=[];for(let R of t.rewardDefaultInfos){let N=i.useSOLBalance&&R.mint.address===te.toString(),E;if(R.mint.address===t.mintA.address)E=f;else if(R.mint.address===t.mintB.address)E=b;else{let{account:Q,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(R.mint.programId),mint:new ue(R.mint.address),notUseTokenAccount:N,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!N,associatedOnly:N?!1:u,checkCreateATAOwner:c});E=Q,W&&p.addInstruction(W)}T.push(E)}!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=await this.getClmmPoolKeys(t.id),B=await Be.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:T},liquidity:a,amountMinA:o,amountMinB:s});p.addInstruction({instructions:B.instructions,instructionTypes:[V.ClmmDecreasePosition]});let x=M({},B.address);if(i.closePosition){let R=await Be.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});p.addInstruction({endInstructions:R.instructions,endInstructionTypes:R.instructionTypes}),x=M(M({},x),R.address)}return p.addCustomComputeBudget(l),p.versionBuild({txVersion:m,extInfo:{address:x}})}async closePosition({poolInfo:e,ownerPosition:t,txVersion:n}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),o=await this.getClmmPoolKeys(e.id),s=Be.closePositionInstructions({poolInfo:e,poolKeys:o,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:t});return i.addInstruction(s).versionBuild({txVersion:n,extInfo:{address:s.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.address.toString()===te.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(n.mint.address),mint:new ue(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new F(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:i,checkCreateATAOwner:o});p&&u.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),y=Be.initRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ue(n.mint.programId),mint:new ue(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:$.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){for(let l of n)l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let u=this.createTxBuilder(),c={};for(let l of n){let m=t.useSOLBalance&&l.mint.address===te.toString(),p=l.perSecond.mul(l.endTime-l.openTime),{account:d,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(l.mint.programId),mint:new ue(l.mint.address),notUseTokenAccount:!!m,skipCloseAccount:!m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new F(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:m?!1:i,checkCreateATAOwner:o});y&&u.addInstruction(y),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=Be.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{programId:new ue(l.mint.programId),mint:new ue(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:$.decimalToX64(l.perSecond)}});c=M(M({},c),b.address),u.addInstruction(b)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.equals(te),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new F(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:c?!1:i,checkCreateATAOwner:o});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),d=Be.setRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:$.decimalToX64(n.perSecond)}});return u.addInstruction(d),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:d.address}})}async setRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){let u=this.createTxBuilder(),c={};for(let l of n){l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let m=t.useSOLBalance&&l.mint.address===te.toString(),{account:p,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(l.mint.programId),mint:new ue(l.mint.address),notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new F(l.perSecond.sub(l.endTime-l.openTime).toFixed(0)).gte(l.perSecond.sub(l.endTime-l.openTime))?l.perSecond.sub(l.endTime-l.openTime).toFixed(0):l.perSecond.sub(l.endTime-l.openTime).add(1).toFixed(0))}:void 0,associatedOnly:m?!1:i,checkCreateATAOwner:o});d&&u.addInstruction(d),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),f=Be.setRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ue(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:$.decimalToX64(l.perSecond)}});u.addInstruction(f),c=M(M({},c),f.address)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1}){let s=e.rewardDefaultInfos.find(d=>d.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),u=t.useSOLBalance&&n.equals(te),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(s.mint.programId),mint:n,notUseTokenAccount:u,owner:this.scope.ownerPubKey,skipCloseAccount:!u,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:u?!1:i,checkCreateATAOwner:o});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),p=Be.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(p),a.build({address:p.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1}){let s=this.createTxBuilder(),a={};for(let u of n){let c=e.rewardDefaultInfos.find(f=>f.mint.address===u.toString());if(!c){this.logAndCreateError("reward mint error","not found reward mint",u);continue}let l=t.useSOLBalance&&u.equals(te),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(c.mint.programId),mint:u,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:i,checkCreateATAOwner:o});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),p&&s.addInstruction(p);let d=await this.getClmmPoolKeys(e.id),y=Be.collectRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=M(M({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,inputMint:t,amountIn:n,amountOutMin:i,priceLimit:o,ownerInfo:s,remainingAccounts:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,txVersion:l}){let m=this.createTxBuilder(),p=s.useSOLBalance&&e.mintA.address===te.toBase58(),d=s.useSOLBalance&&e.mintB.address===te.toBase58(),y;!o||o.equals(new F(0))?y=t.toString()===e.mintA.address?Ct.add(new mt(1)):Rt.sub(new mt(1)):y=Z.priceToSqrtPriceX64(o,e.mintA.decimals,e.mintB.decimals);let f;if(!f){let{account:P,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:s.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:u,checkCreateATAOwner:c});f=P,A&&m.addInstruction(A)}let b;if(!b){let{account:P,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:s.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:u,checkCreateATAOwner:c});b=P,A&&m.addInstruction(A)}(!f||!b)&&this.logAndCreateError("user do not have token account",this.scope.account.tokenAccountRawInfos);let g=await this.getClmmPoolKeys(e.id);return m.addInstruction(Be.makeSwapBaseInInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},inputMint:new ue(t),amountIn:n,amountOutMin:i,sqrtPriceLimitX64:y,remainingAccounts:a})),m.versionBuild({txVersion:l})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)i?ye(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(c[m.accountInfo.mint.toString()]=m.pubkey):c[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(A=>!A.liquidity.isZero()||A.rewardInfos.find(h=>!h.rewardAmountOwed.isZero())))continue;let p=m,d=n.useSOLBalance&&p.mintA.address===te.toString(),y=n.useSOLBalance&&p.mintB.address===te.toString(),f=c[p.mintA.address];if(!f){let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintA.programId,mint:new ue(p.mintA.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:i,checkCreateATAOwner:o});f=A,h&&l.addInstruction(h)}let b=c[p.mintB.address];if(!b){let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintB.programId,mint:new ue(p.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:i,checkCreateATAOwner:o});b=A,h&&l.addInstruction(h)}c[p.mintA.address]=f,c[p.mintB.address]=b;let g=[];for(let A of p.rewardDefaultInfos){let h=n.useSOLBalance&&A.mint.address===te.toString(),T=c[A.mint.address];if(!T){let{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(A.mint.programId),mint:new ue(A.mint.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,skipCloseAccount:!h,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:h?!1:i});T=I,B&&l.addInstruction(B)}c[A.mint.address]=T,g.push(T)}let P=await this.getClmmPoolKeys(p.id);for(let A of t[m.id]){let h=Be.decreaseLiquidityInstructions({poolInfo:p,poolKeys:P,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new mt(0),amountMinA:new mt(0),amountMinB:new mt(0)});l.addInstruction(h)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(mr(e).publicKey);return t?bu.decode(t.data).whitelistMints.filter(i=>!i.equals(ue.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new mt(1))).map(s=>ct(new ue(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return i.forEach(s=>{if(!s)return;let a=fi.decode(s.data);o.push(a)}),o}async getRpcClmmPoolInfo({poolId:e}){let t=await this.scope.connection.getAccountInfo(new ue(e)),n=pi.decode(t.data),i=Z.sqrtPriceX64ToPrice(n.sqrtPriceX64,n.mintDecimalsA,n.mintDecimalsB).toNumber();return D(M({},n),{currentPrice:i})}};import{PublicKey as Y}from"@solana/web3.js";import{NATIVE_MINT as gi,TOKEN_PROGRAM_ID as en,AccountLayout as Vu}from"@solana/spl-token";var dp=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),pp=Buffer.from("amm_config","utf8"),fp=Buffer.from("pool","utf8"),yp=Buffer.from("pool_lp_mint","utf8"),bp=Buffer.from("pool_vault","utf8"),gp=Buffer.from("observation","utf8");function wp(r){return oe([dp],r)}function Ap(r,e){return oe([pp,hp(e)],r)}function Pp(r,e,t,n){return oe([fp,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function kp(r,e){return oe([yp,e.toBuffer()],r)}function Bu(r,e,t){return oe([bp,e.toBuffer(),t.toBuffer()],r)}function bi(r,e){return oe([gp,e.toBuffer()],r)}function hp(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function Su({programId:r,mintA:e,mintB:t}){let n=Ap(r,0).publicKey,i=wp(r).publicKey,o=Pp(r,n,e,t).publicKey,s=kp(r,o).publicKey,a=Bu(r,o,e).publicKey,u=Bu(r,o,t).publicKey,c=bi(r,o).publicKey;return{poolId:o,configId:n,authority:i,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as Ar}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Jo,TOKEN_2022_PROGRAM_ID as Ku,ASSOCIATED_TOKEN_PROGRAM_ID as Tp}from"@solana/spl-token";var Ip=ae("Raydium_cpmm"),Pr={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]};function Cu(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y,f,b,g,P,A){let h=L([w("amountMaxA"),w("amountMaxB"),w("openTime")]),T=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Jo,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Tp,isSigner:!1,isWritable:!1},{pubkey:Es,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1}],I=Buffer.alloc(h.span);return h.encode({amountMaxA:g,amountMaxB:P,openTime:A},I),new Ar({keys:T,programId:r,data:Buffer.from([...Pr.initialize,...I])})}function Ru(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y){let f=L([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:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Jo,isSigner:!1,isWritable:!1},{pubkey:Ku,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Ip.debug("cpmm deposit data",{lpAmount:p.toString(),amountMaxA:d.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:p,amountMaxA:d,amountMaxB:y},g),new Ar({keys:b,programId:r,data:Buffer.from([...Pr.deposit,...g])})}function Lu(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y){let f=L([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:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Jo,isSigner:!1,isWritable:!1},{pubkey:Ku,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Vs,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:p,amountMinA:d,amountMinB:y},g),new Ar({keys:b,programId:r,data:Buffer.from([...Pr.withdraw,...g])})}function Ou(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y,f){let b=L([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},P),new Ar({keys:g,programId:r,data:Buffer.from([...Pr.swapBaseInput,...P])})}function Nu(r,e,t,n,i,o,s,a,u,c,l,m,p,d,y,f){let b=L([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},P),new Ar({keys:g,programId:r,data:Buffer.from([...Pr.swapBaseOutput,...P])})}import je from"bn.js";var Mu=L([pe(8),_("bump"),qe("disableCreatePool"),Bt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),S("protocolOwner"),S("fundOwner"),q(w(),16)]),_u=L([pe(8),S("configId"),S("poolCreator"),S("vaultA"),S("vaultB"),S("mintLp"),S("mintA"),S("mintB"),S("mintProgramA"),S("mintProgramB"),S("observationId"),_("bump"),_("status"),_("lpDecimals"),_("mintDecimalA"),_("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),q(w(),32)]);var kr=class extends xe{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){let n=await this.scope.connection.getAccountInfo(new Y(e));if(!n)throw new Error(`pool not found: ${e}`);let i=_u.decode(n.data),[o,s]=await this.scope.connection.getMultipleAccountsInfo([i.vaultA,i.vaultB]);if(!o)throw new Error(`pool vaultA info not found: ${i.vaultA.toBase58()}`);if(!s)throw new Error(`pool vaultB info not found: ${i.vaultB.toBase58()}`);let a;if(t){let u=await this.scope.connection.getAccountInfo(i.configId);u&&(a=Mu.decode(u.data))}return D(M({},i),{baseReserve:new je(Vu.decode(o.data).amount.toString()).sub(i.protocolFeesMintA).sub(i.fundFeesMintA),quoteReserve:new je(Vu.decode(s.data).amount.toString()).sub(i.protocolFeesMintB).sub(i.fundFeesMintB),configInfo:a})}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:i,associatedOnly:o=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=Te(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var Q,W,j;let p=i.feePayer||((Q=this.scope.owner)==null?void 0:Q.publicKey),d=new je(new Y(c.mintA.address).toBuffer()).lte(new je(new Y(c.mintB.address).toBuffer())),[y,f]=d?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=d?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],P=i.useSOLBalance&&y.address===gi.toBase58(),A=i.useSOLBalance&&f.address===gi.toBase58(),[h,T]=[new Y(y.address),new Y(f.address)],I=this.createTxBuilder(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:h,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:p,amount:b}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:o,checkCreateATAOwner:s});I.addInstruction(x||{});let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:new Y(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:p,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:o,checkCreateATAOwner:s});if(I.addInstruction(N||{}),B===void 0||R===void 0)throw Error("you don't has some token account");let E=Su({programId:e,mintA:h,mintB:T});return I.addInstruction({instructions:[Cu(e,this.scope.ownerPubKey,E.configId,E.authority,E.poolId,h,T,E.lpMint,B,R,ye(this.scope.ownerPubKey,E.lpMint).publicKey,E.vaultA,E.vaultB,t,new Y((W=y.programId)!=null?W:en),new Y((j=f.programId)!=null?j:en),E.observationId,b,g,n)],instructionTypes:[V.CpmmCreatePool]}),I.addCustomComputeBudget(u),I.versionBuild({txVersion:a,extInfo:{address:D(M({},E),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,inputAmount:n,baseIn:i,slippage:o,computeResult:s,computeBudgetConfig:a,config:u,txVersion:c}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),n.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:n.toString()});let{account:l}=this.scope,{bypassAssociatedCheck:m,checkCreateATAOwner:p}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),d=await this.getRpcPoolInfo(t.id),{liquidity:y,inputAmountFee:f,anotherAmount:b}=s||this.computePairAmount({poolInfo:D(M({},t),{mintAmountA:new F(d.baseReserve.toString()).div(10**t.mintA.decimals).toNumber(),mintAmountB:new F(d.quoteReserve.toString()).div(10**t.mintB.decimals).toNumber(),lpAmount:new F(d.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),slippage:o,baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new F(n.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),g=b.amount,P=t.mintA.address===gi.toString(),A=t.mintB.address===gi.toString(),h=this.createTxBuilder(),[T,I]=[new Y(t.mintA.address),new Y(t.mintB.address)],{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?n:g).isZero()?{payer:this.scope.ownerPubKey,amount:i?n:g}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});h.addInstruction(x||{});let{account:R,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(i?g:n).isZero()?{payer:this.scope.ownerPubKey,amount:i?g:n}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});h.addInstruction(N||{}),!B&&!R&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let E=await l.getCreatedTokenAccount({mint:new Y(t.lpMint.address)}),ee=await l.handleTokenAccount({side:"out",amount:0,mint:new Y(t.lpMint.address),tokenAccount:E,bypassAssociatedCheck:m,checkCreateATAOwner:p}),{tokenAccount:Q}=ee,W=Te(ee,["tokenAccount"]);h.addInstruction(W);let j=await this.getCpmmPoolKeys(t.id);return h.addInstruction({instructions:[Ru(new Y(t.programId),this.scope.ownerPubKey,new Y(j.authority),new Y(t.id),Q,B,R,new Y(j.vault.A),new Y(j.vault.B),T,I,new Y(t.lpMint.address),y,i?f.amount:g,i?g:f.amount)],instructionTypes:[V.CpmmAddLiquidity],lookupTableAddress:j.lookupTableAccount?[j.lookupTableAccount]:[]}),h.addCustomComputeBudget(a),h.versionBuild({txVersion:c})}async withdrawLiquidity(e){var Q,W;let{poolInfo:t,lpAmount:n,slippage:i,computeBudgetConfig:o,txVersion:s}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let a=new ve(new je(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[c,l]=[a.mul(n.mul(u.baseReserve).div(u.lpAmount)).quotient,a.mul(n.mul(u.quoteReserve).div(u.lpAmount)).quotient],m=await this.scope.fetchEpochInfo(),[p,d]=[Ae(c,t.mintA.extensions.feeConfig,m,!0),Ae(l,t.mintB.extensions.feeConfig,m,!0)],{account:y}=this.scope,f=this.createTxBuilder(),[b,g]=[new Y(t.mintA.address),new Y(t.mintB.address)],P=b.equals(te),A=g.equals(te),h,T,{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});h=I,B&&f.addInstruction(B);let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});T=x,R&&f.addInstruction(R),(!h||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",y.tokenAccounts);let N=await y.getCreatedTokenAccount({mint:new Y(t.lpMint.address)});N||this.logAndCreateError("cannot found lp token account","tokenAccounts",y.tokenAccounts);let E=await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[Lu(new Y(t.programId),this.scope.ownerPubKey,new Y(E.authority),new Y(t.id),N,h,T,new Y(E.vault.A),new Y(E.vault.B),b,g,new Y(t.lpMint.address),n,c.sub((Q=p.fee)!=null?Q:new je(0)),l.sub((W=d.fee)!=null?W:new je(0)))],instructionTypes:[V.CpmmWithdrawLiquidity],lookupTableAddress:E.lookupTableAccount?[E.lookupTableAccount]:[]}),f.addCustomComputeBudget(o),f.versionBuild({txVersion:s})}async swap(e){var h,T,x,R,N,E;let{poolInfo:t,baseIn:n,swapResult:i,config:o,computeBudgetConfig:s,txVersion:a}=e,{bypassAssociatedCheck:u,checkCreateATAOwner:c}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},o),l=this.createTxBuilder(),[m,p]=[new Y(t.mintA.address),new Y(t.mintB.address)],d=await this.scope.account.getCreatedTokenAccount({programId:new Y((h=t.mintA.programId)!=null?h:en),mint:m,associatedOnly:!1}),y=await this.scope.account.getCreatedTokenAccount({programId:new Y((T=t.mintB.programId)!=null?T:en),mint:p,associatedOnly:!1}),I=await this.scope.account.handleTokenAccount({side:n?"in":"out",amount:n?i.sourceAmountSwapped:i.destinationAmountSwapped,mint:m,tokenAccount:d,bypassAssociatedCheck:u,checkCreateATAOwner:c}),{tokenAccount:f}=I,b=Te(I,["tokenAccount"]);l.addInstruction(b);let B=await this.scope.account.handleTokenAccount({side:n?"out":"in",amount:n?i.destinationAmountSwapped:i.sourceAmountSwapped,mint:p,tokenAccount:y,bypassAssociatedCheck:u,checkCreateATAOwner:c}),{tokenAccount:g}=B,P=Te(B,["tokenAccount"]);l.addInstruction(P),!f&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let A=await this.getCpmmPoolKeys(t.id);return l.addInstruction({instructions:[n?Ou(new Y(t.programId),this.scope.ownerPubKey,new Y(A.authority),new Y(A.config.id),new Y(t.id),f,g,new Y(A.vault.A),new Y(A.vault.B),new Y((x=t.mintA.programId)!=null?x:en),new Y((R=t.mintB.programId)!=null?R:en),m,p,bi(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):Nu(new Y(t.programId),this.scope.ownerPubKey,new Y(A.authority),new Y(A.config.id),new Y(t.id),g,f,new Y(A.vault.B),new Y(A.vault.A),new Y((N=t.mintB.programId)!=null?N:en),new Y((E=t.mintA.programId)!=null?E:en),p,m,bi(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[n?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut]}),l.addCustomComputeBudget(s),l.versionBuild({txVersion:a})}computePairAmount({poolInfo:e,amount:t,slippage:n,epochInfo:i,baseIn:o}){var P,A,h,T,I,B,x,R;let s=1-Number(n.toSignificant())/100,a=new je(new F(t).mul(10**e[o?"mintA":"mintB"].decimals).mul(s).toFixed(0)),u=Ae(a,e[o?"mintA":"mintB"].extensions.feeConfig,i,!1),c=a.sub((P=u.fee)!=null?P:new je(0)),[l,m]=[new je(new F(e.mintAmountA).mul(10**e.mintA.decimals).toString()),new je(new F(e.mintAmountB).mul(10**e.mintB.decimals).toString())],p=new je(new F(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,F.ROUND_DOWN));this.logDebug("baseReserve:",l.toString(),"quoteReserve:",m.toString()),this.logDebug("tokenIn:",o?e.mintA.symbol:e.mintB.symbol,"amountIn:",a.toString(),"amountInFee:",(h=(A=u.fee)==null?void 0:A.toString())!=null?h:0,"anotherToken:",o?e.mintB.symbol:e.mintA.symbol,"slippage:",`${n.toSignificant()}%`);let d=o?"base":"quote";this.logDebug("input side:",d);let y=c.mul(p).div(d==="base"?l:m),f={amount:Se,fee:void 0,expirationTime:void 0};c.isZero()||(f=Ae(xp(y,l,m,p)[o?"amountB":"amountA"],e[o?"mintB":"mintA"].extensions.feeConfig,i,!0));let b=new ve(new je(1)).add(n),g=Ae(b.mul(f.amount.sub((T=f.fee)!=null?T:new je(0))).quotient,e[o?"mintB":"mintA"].extensions.feeConfig,i,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(B=(I=f.fee)==null?void 0:I.toString())!=null?B:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:u,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function xp(r,e,t,n){let i=r.mul(e).div(n);!i.isZero()&&!r.mul(e).mod(n).isZero()&&(i=i.add(new je(1)));let o=r.mul(t).div(n);return!o.isZero()&&!r.mul(t).mod(n).isZero()&&(o=o.add(new je(1))),{amountA:i,amountB:o}}var hr=class extends xe{constructor(e){super(e)}static getAddLiquidityDefaultPool({addLiquidityPools:e,poolInfosCache:t}){if(e.length===0)return;if(e.length===1||(e.sort((i,o)=>o.version-i.version),e[0].version!==e[1].version))return e[0];let n=e.filter(i=>i.version===e[0].version);return n.sort((i,o)=>this.comparePoolSize(i,o,t)),n[0]}static comparePoolSize(e,t,n){let i=n[e.id],o=n[t.id];return i===void 0?1:o===void 0?-1:e.baseMint===t.baseMint?i.baseReserve.sub(o.baseReserve).gte(Se)?-1:1:i.baseReserve.sub(o.quoteReserve).gte(Se)?-1:1}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(te));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}=e,i=await this.getWSolAccounts(),o=this.createTxBuilder();o.addCustomComputeBudget(e.computeBudgetConfig);let s=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});o.addInstruction(s);let a=U(t);for(let u=0;u<i.length;u++)a.gte(i[u].amount)?(o.addInstruction({instructions:[Vt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),a.sub(i[u].amount)):(o.addInstruction({instructions:[Vt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),Zn({destination:s.addresses.newAccount,source:i[u].publicKey,amount:a,owner:this.scope.ownerPubKey,tokenProgram:n}));return o.build()}async wrapWSol(e,t){let n=await this.getWSolAccounts(),i=this.createTxBuilder(),o=await St({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(o),n.length&&i.addInstruction({instructions:[Zn({destination:n[0].publicKey,source:o.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Vt({tokenAccount:o.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.build()}};import{TOKEN_PROGRAM_ID as Bp}from"@solana/spl-token";import{PublicKey as Sp,Transaction as es,TransactionInstruction as Kp}from"@solana/web3.js";import Eu from"bn.js";var Ze=class extends xe{static getPdaPoolId(e,t){return oe([Ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return oe([Ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Eu(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:o}){if(n.length===0)return[];let s=n.map(l=>Ze.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Ze.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Ze.getPdaOwnerId(t,m,i,l).publicKey));let u=await It(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),p=l%n.length,d=s[p],y=a[l],f=u[p],b=u[n.length+l];if(!(f&&b)||f.data.length!==Ze.POOL_LAYOUT.span||b.data.length!==Ze.OWNER_LAYOUT.span)continue;let g=Ze.POOL_LAYOUT.decode(f.data),P=Ze.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),h=g.endTime.toNumber(),T=P.tokenInfo.map(x=>x.debtAmount.gt(new Eu(0))).filter(x=>!x).length!==3,I=o>A&&o<h&&g.status===1,B=T&&I;c.push({programId:t,poolId:d,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:P.lpAmount,project:Ze.VERSION_PROJECT[m],openTime:A,endTime:h,canClaim:B,canClaimErrorType:T?I?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:P.tokenInfo[R].debtAmount.add(P.tokenInfo[R].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o=[];for(let u of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(de.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(de.WSOL.mint),associatedOnly:u.mintAddress.equals(de.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),o.push(c)}n.addInstruction({instructions:[Ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:o}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:p,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(de.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(de.WSOL.mint),associatedOnly:m.mintAddress.equals(de.WSOL.mint)?!1:t.associatedOnly});d&&n.addInstruction(d),p&&(o[m.mintAddress.toString()]=p,l.push(p))}n.addInstruction({instructions:[Ze.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:i,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return Xr(u,[i,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new es().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new es().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new es().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=L([]),o=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:Bp,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Kp({keys:o,programId:e,data:a})}},dt=Ze;dt.CLAIMED_NUM=3,dt.POOL_LAYOUT=L([pe(8),_("bump"),_("status"),w("openTime"),w("endTime"),S("ammId"),q(L([_("mintDecimals"),S("mintAddress"),S("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),q(w(),10,"padding")]),dt.OWNER_LAYOUT=L([pe(8),_("bump"),_("version"),S("poolId"),S("owner"),w("lpAmount"),q(L([S("mintAddress"),w("debtAmount"),w("claimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),q(w(),4,"padding")]),dt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Sp(e)),dt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},dt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as ns}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as qu}from"@solana/spl-token";import Tr from"bn.js";import{TransactionInstruction as Rp,SYSVAR_RENT_PUBKEY as Lp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fu}from"@solana/spl-token";import{createInitializeAccountInstruction as vu}from"@solana/spl-token";import{SystemProgram as bn,Transaction as Wu}from"@solana/web3.js";function Cp(r="accountFlags"){let e=new ei(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ts=L([pe(5),Cp("accountFlags"),S("ownAddress"),w("vaultSignerNonce"),S("baseMint"),S("quoteMint"),S("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),S("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),S("requestQueue"),S("eventQueue"),S("bids"),S("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]);function Op({programId:r,marketInfo:e}){let t=L([_("version"),ze("instruction"),w("baseLotSize"),w("quoteLotSize"),Bt("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:Lp,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}:[]),i=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},i),new Rp({keys:n,programId:r,data:i})}async function Du({connection:r,wallet:e,marketInfo:t}){let n=new Wu,i=await r.getMinimumBalanceForRentExemption(165);n.add(bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:Fu}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:Fu}),vu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),vu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let o=new Wu;return o.add(bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(ts.span),space:ts.span,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(5120+12),space:5120+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(262144+12),space:262144+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),Op({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:[V.CreateAccount,V.CreateAccount,V.InitAccount,V.InitAccount]},{transaction:o,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.InitMarket]}]}var Ln=class extends xe{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:o,txVersion:s,computeBudgetConfig:a}){let u=this.scope.ownerPubKey,c=Ye({fromPublicKey:u,programId:o}),l=Ye({fromPublicKey:u,programId:o}),m=Ye({fromPublicKey:u,programId:o}),p=Ye({fromPublicKey:u,programId:o}),d=Ye({fromPublicKey:u,programId:o}),y=Ye({fromPublicKey:u,programId:qu}),f=Ye({fromPublicKey:u,programId:qu}),b=0,g=new Tr(100);function P(){let N=new Tr(0);for(;;)try{return{vaultOwner:ns.createProgramAddressSync([c.publicKey.toBuffer(),N.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:N}}catch{if(N.iaddn(1),N.gt(new Tr(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:h}=P(),T=new Tr(Math.round(10**e.decimals*n)),I=new Tr(Math.round(n*10**t.decimals*i));if(T.eq(Se))throw Error("lot size is too small");if(I.eq(Se))throw Error("tick size or lot size is too small");let B=await Du({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:c,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:m,bids:p,asks:d,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:h,baseLotSize:T,quoteLotSize:I}}),x=this.createTxBuilder();x.addCustomComputeBudget(a),x.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});let R=[];for await(let N of B.slice(1,B.length)){let E=this.createTxBuilder();E.addCustomComputeBudget(a),E.addInstruction({instructions:N.transaction.instructions,signers:N.signer,instructionTypes:N.instructionTypes});let Q=await E.versionBuild({txVersion:s});R.push(Q)}return x.versionMultiBuild({extraPreBuildData:R,extInfo:{address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:p.publicKey,asks:d.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new ns(e.mint),quoteMin:new ns(t.mint)}},txVersion:s})}};import{PublicKey as xr}from"@solana/web3.js";import{PublicKey as Np,TransactionInstruction as is,SYSVAR_CLOCK_PUBKEY as Mp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as os}from"@solana/spl-token";var rs=L([_("instruction"),ma("amount")]),Ir=L([_("instruction")]);function SB({programId:r,amount:e,instructionKeys:t}){let n=[{pubkey:new Np("11111111111111111111111111111111"),isSigner:!1,isWritable:!1},{pubkey:os,isSigner:!1,isWritable:!1},{pubkey:tt,isSigner:!1,isWritable:!1},{pubkey:Fi,isSigner:!1,isWritable:!1},...Object.entries(t).map(([o,s])=>({pubkey:s,isSigner:o==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(o)}))],i=Buffer.alloc(rs.span);return rs.encode({instruction:1,amount:Number(e)},i),new is({keys:n,programId:r,data:i})}function wi({programId:r},e){let t=[{pubkey:os,isSigner:!1,isWritable:!1},{pubkey:Fi,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,o])=>({pubkey:o,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(Ir.span);return Ir.encode({instruction:2},n),new is({keys:t,programId:r,data:n})}function ss(r){let{poolConfig:e,userKeys:t,side:n}=r,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,o=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Ir.span);Ir.encode({instruction:2},s);let a=[{pubkey:os,isWritable:!1,isSigner:!1},{pubkey:Mp,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new is({programId:e.programId,keys:a,data:s})}import Uu from"bn.js";var _p={[Qn.IDO_PROGRAM_ID_V1.toString()]:1,[Qn.IDO_PROGRAM_ID_V2.toString()]:2,[Qn.IDO_PROGRAM_ID_V3.toString()]:3,[Qn.IDO_PROGRAM_ID_V4.toString()]:4},On=class extends xe{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:o}){let s=this.createTxBuilder(),a=_p[t.programId];a||this.logAndCreateError("invalid version",a);let u=fe(t),[c,l]=[!new Uu(e.coin).isZero(),!new Uu(e.pc).isZero()],m=u.projectInfo.mint.address.equals(te),{account:p,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:i});!p&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&d&&s.addInstruction(d);let y=u.buyInfo.mint.address.equals(te),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:i});if(!p&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!p||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...c?[wi({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new xr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[wi({programId:new xr(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new xr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[wi({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:p,userIdoInfo:new xr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});let g={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:p,quoteTokenAccount:f,ledgerAccount:new xr(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[ss(D(M({},g),{side:"base"}))]:[],...l?[ss(D(M({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};import{PublicKey as Vp}from"@solana/web3.js";import{MintLayout as Ep,TOKEN_2022_PROGRAM_ID as as,TOKEN_PROGRAM_ID as us}from"@solana/spl-token";var Br=class extends xe{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._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:i="strict"}=t||{},{mintList:o,blacklist:s}=await this.scope.fetchV3TokenList(n),a=await this.scope.fetchJupTokenList(i,n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._tokenMap.set(Tt.address,Tt),this._mintGroup.official.add(Tt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,D(M({},u),{priority:-1}))}),o.forEach(u=>{var c;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,D(M({},u),{type:"raydium",priority:2,programId:(c=u.programId)!=null?c:u.tags.includes("token-2022")?as.toBase58():us.toBase58()})),this._mintGroup.official.add(u.address))}),a.forEach(u=>{var c;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,D(M({},u),{type:"jupiter",priority:1,programId:(c=u.programId)!=null?c:u.tags.includes("token-2022")?as.toBase58():us.toBase58()})),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,D(M({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?as.toBase58():us.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}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Tt;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,D(M({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new Vp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Ep.decode(s.data),u=n.toString().substring(0,6),c={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var Ai=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new gt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.api=o,this._apiCacheTime=u||5*60*1e3,this.logger=ae("Raydium"),this.farm=new ur({scope:this,moduleName:"Raydium_Farm"}),this.account=new $n({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new gr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Br({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new hr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new wr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new kr({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new dt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Ln({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new On({scope:this,moduleName:"Raydium_ido"}),this.availability={};let c=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:c,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Fp({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:o,logRequests:s,urlConfigs:a}=t,u=new Zr({cluster:n,timeout:i,urlConfigs:a,logCount:o,logRequests:s}),c=new Ai(D(M({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error($r);return this._owner.publicKey}setOwner(e){return this._owner=e?new gt(e):void 0,this}get connection(){if(!this._connection)throw new Error(aa);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($r),new Error($r)}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;let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}async fetchJupTokenList(e,t){var o;let n=(o=this.apiData.jupTokenList)==null?void 0:o[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let i=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=D(M({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:i}}),this.apiData.jupTokenList[e].data}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{}}}};import{TOKEN_PROGRAM_ID as ms,TOKEN_2022_PROGRAM_ID as cs}from"@solana/spl-token";import{PublicKey as pt,TransactionInstruction as ds,SystemProgram as Xu}from"@solana/web3.js";import ls from"bn.js";function NS(r,e,t,n,i,o,s,a,u,c,l,m){let p=L([_("instruction"),w("amountIn"),w("amountOut")]),d=[{pubkey:Xu.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new pt(t.programId),isSigner:!1,isWritable:!1},{pubkey:new pt(t.id),isSigner:!1,isWritable:!0},{pubkey:new pt(n.id),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=fe(t);d.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(u)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(u)?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=fe(t);d.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new pt("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=fe(t);d.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(p.span);return p.encode({instruction:4,amountIn:c,amountOut:l},y),new ds({keys:d,programId:r,data:y})}function MS(r,e,t,n,i,o,s,a,u,c){let l=L([_("instruction")]),m=[{pubkey:Xu.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new pt(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new pt(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new pt(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let d=fe(n);m.push({pubkey:d.config.id,isSigner:!1,isWritable:!1},{pubkey:d.id,isSigner:!1,isWritable:!0},{pubkey:d.mintA.address.equals(u)?d.vault.A:d.vault.B,isSigner:!1,isWritable:!0},{pubkey:d.mintA.address.equals(u)?d.vault.B:d.vault.A,isSigner:!1,isWritable:!0},{pubkey:d.id,isSigner:!1,isWritable:!0},...c.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let d=fe(n);m.push({pubkey:d.authority,isSigner:!1,isWritable:!1},{pubkey:d.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:d.id,isSigner:!1,isWritable:!0},{pubkey:new pt("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:d.openOrders,isSigner:!1,isWritable:!0},{pubkey:d.vault.A,isSigner:!1,isWritable:!0},{pubkey:d.vault.B,isSigner:!1,isWritable:!0},{pubkey:d.marketId,isSigner:!1,isWritable:!0},{pubkey:d.marketBids,isSigner:!1,isWritable:!0},{pubkey:d.marketAsks,isSigner:!1,isWritable:!0},{pubkey:d.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:d.id,isSigner:!1,isWritable:!0},{pubkey:d.id,isSigner:!1,isWritable:!0})}else{let d=fe(n);m.push({pubkey:d.authority,isSigner:!1,isWritable:!1},{pubkey:d.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:d.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:d.openOrders,isSigner:!1,isWritable:!0},{pubkey:d.vault.A,isSigner:!1,isWritable:!0},{pubkey:d.vault.B,isSigner:!1,isWritable:!0},{pubkey:d.marketId,isSigner:!1,isWritable:!0},{pubkey:d.marketBids,isSigner:!1,isWritable:!0},{pubkey:d.marketAsks,isSigner:!1,isWritable:!0},{pubkey:d.marketEventQueue,isSigner:!1,isWritable:!0},...d.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:d.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:d.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:d.id,isSigner:!1,isWritable:!0},{pubkey:d.id,isSigner:!1,isWritable:!0}])}let p=Buffer.alloc(l.span);return l.encode({instruction:5},p),new ds({keys:m,programId:r,data:p})}function Gu(r,e,t,n,i,o){if(r.pooltype.includes("StablePool")){let s=fe(e);return[{pubkey:s.programId,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.authority,isSigner:!1,isWritable:!1},{pubkey:s.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:new pt("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:s.openOrders,isSigner:!1,isWritable:!0},{pubkey:s.vault.A,isSigner:!1,isWritable:!0},{pubkey:s.vault.B,isSigner:!1,isWritable:!0},{pubkey:s.marketId,isSigner:!1,isWritable:!0},{pubkey:s.marketBids,isSigner:!1,isWritable:!0},{pubkey:s.marketAsks,isSigner:!1,isWritable:!0},{pubkey:s.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0}]}else if(r.type==="Concentrated"){let s=r,a=fe(e),u=s.mintA.address===t;return[{pubkey:new pt(String(r.programId)),isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a.config.id,isSigner:!1,isWritable:!1},{pubkey:a.id,isSigner:!1,isWritable:!0},{pubkey:u?a.vault.A:a.vault.B,isSigner:!1,isWritable:!0},{pubkey:u?a.vault.B:a.vault.A,isSigner:!1,isWritable:!0},{pubkey:a.id,isSigner:!1,isWritable:!0},...a.mintA.programId.equals(cs)||a.mintB.programId.equals(cs)?[{pubkey:cs,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:u?a.mintA.address:a.mintB.address,isSigner:!1,isWritable:!1},{pubkey:u?a.mintB.address:a.mintA.address,isSigner:!1,isWritable:!1}]:[],...(o!=null?o:[]).map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:lt(new pt(String(r.programId)),new pt(r.id)).publicKey,isSigner:!1,isWritable:!0}]}else{let s=fe(e);return[{pubkey:s.programId,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.authority,isSigner:!1,isWritable:!1},{pubkey:s.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:s.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:s.openOrders,isSigner:!1,isWritable:!0},{pubkey:s.vault.A,isSigner:!1,isWritable:!0},{pubkey:s.vault.B,isSigner:!1,isWritable:!0},{pubkey:s.marketId,isSigner:!1,isWritable:!0},{pubkey:s.marketBids,isSigner:!1,isWritable:!0},{pubkey:s.marketAsks,isSigner:!1,isWritable:!0},{pubkey:s.marketEventQueue,isSigner:!1,isWritable:!0},...s.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:s.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:s.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0}]]}}function vp(r,e,t,n,i,o,s,a,u,c,l,m,p,d){let y=L([_("instruction"),w("amountIn"),w("amountOut")]),f=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1}];f.push(...Gu(a,c,o,t,n,d[0])),f.push(...Gu(u,l,s,n,i,d[1]));let b=Buffer.alloc(y.span);return y.encode({instruction:8,amountIn:m,amountOut:p},b),new ds({keys:f,programId:r,data:b})}async function _S({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var i,o,s,a,u,c;if(n.routeType==="amm")if(n.poolInfo[0].type==="Concentrated"){let l=fe(n.poolKey[0]),m=t.equals(l.mintA.address)?Ct.add(st):Rt.sub(st);return await Be.makeSwapBaseInInstructions({poolInfo:l,poolKeys:l,ownerInfo:{wallet:e.wallet,tokenAccountA:l.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:l.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((o=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?o:new ls(0)),sqrtPriceLimitX64:m,remainingAccounts:n.remainingAccounts[0]})}else{let l=n.poolKey[0];return{signers:[],instructions:[ui({poolKeys:l,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((a=(s=n.minAmountOut.fee)==null?void 0:s.raw)!=null?a:new ls(0)),fixedSide:"in"})],lookupTableAddress:l.lookupTableAccount?[l.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?V.AmmV5SwapBaseIn:V.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let l=n.poolInfo[0],m=n.poolInfo[1],p=n.poolKey[0],d=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[vp(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.minMiddleAmountFee.token.mint.toString(),l,m,p,d,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((c=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?c:new ls(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[p.lookupTableAccount,d.lookupTableAccount].filter(y=>y!==void 0),address:{}}}else throw Error("route type error")}import Yu from"bn.js";var ps=new Yu(1e6);function Wp(r,e,t){return r.mul(e).add(t).sub(new Yu(1)).div(t)}function zu(r,e,t){return r.mul(e).div(t)}var Pi=class{static tradingFee(e,t){return Wp(e,t,ps)}static protocolFee(e,t){return zu(e,t,ps)}static fundFee(e,t){return zu(e,t,ps)}};import Sr from"bn.js";function ki(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Dp(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=ki(r,e);if(n.gt(Nn)){t=t.add(new Sr(1));let i=r.div(t);n=ki(r,t),n.gt(Nn)&&(i=i.add(new Sr(1)))}return[t,e]}var Nn=new Sr(0),hi=class{static swapWithoutFees(e,t,n){let i=t.mul(n),o=t.add(e),[s,a]=Dp(i,o),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}static lpTokensToTradingTokens(e,t,n,i,o){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(o===0)return{tokenAmount0:s,tokenAmount1:a};if(o===1)return ki(e.mul(n),t).gt(Nn)&&s.gt(Nn)&&(s=s.add(new Sr(1))),ki(e.mul(i),t).gt(Nn)&&a.gt(Nn)&&(a=a.add(new Sr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Qu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Qu||{}),Hu=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,i){let o=Pi.tradingFee(e,i),s=e.sub(o),{sourceAmountSwapped:a,destinationAmountSwapped:u}=hi.swapWithoutFees(s,t,n),c=a.add(o);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:o}}};var ju={[Hr.toBase58()]:3},Zu={3:Hr};var qp=L([pe(5),pe(8),S("ownAddress"),w("vaultSignerNonce"),S("baseMint"),S("quoteMint"),S("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),S("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),S("requestQueue"),S("eventQueue"),S("bids"),S("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]),$u={3:qp};import{PublicKey as Ju}from"@solana/web3.js";var Ti=ae("Serum"),ec=class{static getProgramId(e){let t=Zu[e];return t||Ti.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ju[t];return n||Ti.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=$u[e];return t||Ti.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()],i=0,o;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));o=Ju.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:o,nonce:i}}return Ti.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Ju.default,nonce:i}}};var CK=r=>r;export{db as ACCOUNT_TYPE_SIZE,Wb as ALL_PROGRAM_ID,Xd as AMM_CONFIG_SEED,Ol as AMM_STABLE,Ji as AMM_V4,cf as ANAMint,We as API_URLS,Sl as AccountType,aT as AmmConfigLayout,Zr as Api,cu as BIT_PRECISION,zt as BNDivCeil,an as BNLayout,gy as BN_100,wy as BN_1000,Ay as BN_10000,by as BN_FIVE,Us as BN_ONE,nn as BN_TEN,yy as BN_THREE,fy as BN_TWO,Se as BN_ZERO,Yg as BitStructure,la as Blob,Nl as CLMM_PROGRAM_ID,Fi as CLOCK_PROGRAM_ID,Wl as CREATE_CPMM_POOL_AUTH,Dl as CREATE_CPMM_POOL_FEE_ACC,vl as CREATE_CPMM_POOL_PROGRAM,wr as Clmm,Be as ClmmInstrument,hi as ConstantProductCurve,Mu as CpmmConfigInfoLayout,Pi as CpmmFee,_u as CpmmPoolInfoLayout,Wn as Currency,rn as CurrencyAmount,Hu as CurveCalculator,pg as DEV_API_URLS,Fb as DEV_CREATE_CPMM_POOL_AUTH,vb as DEV_CREATE_CPMM_POOL_FEE_ACC,Eb as DEV_CREATE_CPMM_POOL_PROGRAM,Rd as DataElement,lf as ETHMint,Yo as EXTENSION_TICKARRAY_BITMAP_SIZE,Oa as FARM_LOCK_MINT,Na as FARM_LOCK_VAULT,Zi as FARM_PROGRAM_ID_V3,$i as FARM_PROGRAM_ID_V5,In as FARM_PROGRAM_ID_V6,At as FARM_PROGRAM_TO_VERSION,_a as FARM_VERSION_TO_LEDGER_LAYOUT,Ma as FARM_VERSION_TO_STATE_LAYOUT,di as FEE_RATE_DENOMINATOR,ps as FEE_RATE_DENOMINATOR_VALUE,Jd as FETCH_TICKARRAY_COUNT,$d as Fee,ne as Fraction,Qn as IDO_ALL_PROGRAM,_l as IDO_PROGRAM_ID_V1,Vl as IDO_PROGRAM_ID_V2,El as IDO_PROGRAM_ID_V3,Fl as IDO_PROGRAM_ID_V4,Er as INSTRUCTION_PROGRAM_ID,V as InstructionType,eo as JupTokenType,hu as LIQUIDITY_FEES_DENOMINATOR,ku as LIQUIDITY_FEES_NUMERATOR,sp as LIQUIDITY_VERSION_TO_SERUM_VERSION,Tk as LIQUIDITY_VERSION_TO_STATE_LAYOUT,lu as LOG_B_2_X32,mu as LOG_B_P_ERR_MARGIN_LOWER_X64,du as LOG_B_P_ERR_MARGIN_UPPER_X64,Yr as LOOKUP_TABLE_CACHE,Hn as Layout,ce as LiquidityMath,oc as LogLevel,Si as Logger,ts as MARKET_STATE_LAYOUT_V2,qp as MARKET_STATE_LAYOUT_V3,$u as MARKET_VERSION_TO_STATE_LAYOUT,Zs as MAX_BASE64_SIZE,Rt as MAX_SQRT_PRICE_X64,Je as MAX_TICK,An as MEMO_PROGRAM_ID,Vs as MEMO_PROGRAM_ID2,Pn as METADATA_PROGRAM_ID,Ct as MIN_SQRT_PRICE_X64,Qe as MIN_TICK,Cn as MODEL_DATA_PUBKEY,ec as Market,$ as MathUtil,zo as MaxU64,uu as MaxUint128,Ft as NEGATIVE_ONE,uf as NRVMint,st as ONE,Ll as OPEN_BOOK_PROGRAM,jd as OPERATION_SEED,Ho as ObservationInfoLayout,np as ObservationLayout,bu as OperationLayout,ao as OptionLayout,gt as Owner,ef as PAIMint,Qd as POOL_REWARD_VAULT_SEED,zd as POOL_SEED,Zd as POOL_TICK_ARRAY_BITMAP_SEED,Yd as POOL_VAULT_SEED,ou as POSITION_SEED,ve as Percent,oa as PoolFetchType,pi as PoolInfoLayout,He as PoolUtils,fi as PositionInfoLayout,ip as PositionRewardInfoLayout,yr as PositionUtils,Xe as Price,uT as ProtocolPositionLayout,mi as Q128,at as Q64,Jp as RAYMint,tt as RENT_PROGRAM_ID,Ai as Raydium,rp as RewardInfo,Qu as RoundDirection,qi as Rounding,Ml as Router,ju as SERUM_PROGRAMID_TO_VERSION,Hr as SERUM_PROGRAM_ID_V3,Zu as SERUM_VERSION_TO_PROGRAMID,sa as SESSION_KEY,Ne as SOLMint,Tt as SOL_INFO,$P as SPL_MINT_LAYOUT,tf as SRMMint,to as STORAGE_KEY,Es as SYSTEM_PROGRAM_ID,Z as SqrtPriceMath,Kn as StableLayout,uo as Structure,pn as SwapMath,dn as TICK_ARRAY_BITMAP_SIZE,Hd as TICK_ARRAY_SEED,_e as TICK_ARRAY_SIZE,jk as TICK_SPACINGS,Me as TOKEN_WSOL,vt as TickArrayBitmap,yu as TickArrayBitmapExtensionLayout,fr as TickArrayBitmapExtensionUtils,pr as TickArrayLayout,op as TickLayout,fn as TickMath,le as TickQuery,G as TickUtils,de as Token,he as TokenAmount,Qr as TxBuilder,Dn as TxVersion,dr as U64Resolution,$k as U64_IGNORE_RANGE,io as UInt,nf as USDCMint,af as USDHMint,rf as USDTMint,Rl as UTIL1216,co as Union,Ra as Voter,ld as VoterDepositEntry,cd as VoterLockup,Ca as VoterRegistrar,ud as VoterVotingMintConfig,te as WSOLMint,ei as WideBits,_t as WrappedLayout,me as ZERO,vs as _100_PERCENT,k as accountMeta,ty as add,Gr as addComputeBudget,Fo as addLiquidityLayout,Ow as array,wo as associatedLedgerAccountLayout,oo as bits,pe as blob,qe as bool,Lo as calFarmRewardAmount,Wp as ceilDiv,qn as checkLegacyTxSize,Un as checkV0TxSize,Qi as chunkArray,Ir as claimLayout,Vt as closeAccountInstruction,_i as commonSystemAccountMeta,Fa as createAssociatedLedgerAccountInstruction,ae as createLogger,za as createPoolFeeLayout,eu as createPoolV4InstructionV2,hk as createPoolV4Layout,St as createWSolAccountInstructions,kw as cstr,vf as currencyEquals,fl as decimalToFraction,Fm as decodeBool,Zf as div,Wr as divCeil,$e as dwLayout,vm as encodeBool,Ng as endlessRetry,ml as eq,bw as f32,gw as f32be,ww as f64,Aw as f64be,ho as farmAddRewardLayout,EA as farmLedgerLayoutV3_1,er as farmLedgerLayoutV3_2,FA as farmLedgerLayoutV5_1,Sa as farmLedgerLayoutV5_2,Ka as farmLedgerLayoutV6_1,Ea as farmRewardInfoToConfig,Po as farmRewardLayout,ko as farmRewardRestartLayout,ad as farmRewardTimeInfoLayout,xa as farmStateV3Layout,Ba as farmStateV5Layout,Jn as farmStateV6Layout,cP as fetchMultipleFarmInfoAndUpdate,FT as fetchMultipleInfo,pb as fetchMultipleMintInfos,oe as findProgramAddress,_o as fixedSwapInLayout,Vo as fixedSwapOutLayout,zu as floorDiv,Xr as forecastTransactionSize,Wd as formatLayout,Ye as generatePubKey,ye as getATAAddress,Va as getAssociatedAuthority,$o as getAssociatedConfigId,rt as getAssociatedLedgerAccount,nr as getAssociatedLedgerPoolAccount,lp as getAssociatedOpenOrders,Iu as getAssociatedPoolKeys,Ap as getCpmmPdaAmmConfigId,Pp as getCpmmPdaPoolId,Su as getCreatePoolKeys,na as getDate,Oo as getDepositEntryIndex,ja as getDxByDyBaseIn,Ha as getDyByDxBaseIn,rb as getEpochInfo,si as getFarmLedgerLayout,md as getFarmStateLayout,mp as getLiquidityAssociatedAuthority,yn as getLiquidityAssociatedId,Eh as getLiquidityFromAmounts,ey as getMax,It as getMultipleAccountsInfo,Tn as getMultipleAccountsInfoWithCustomFlags,Hi as getMultipleLookupTableInfo,Yk as getPdaAmmConfigId,lt as getPdaExBitmapAccount,kp as getPdaLpMint,li as getPdaMetadataKey,bi as getPdaObservationId,mr as getPdaOperationAccount,ct as getPdaPersonalPositionAddress,wp as getPdaPoolAuthority,su as getPdaPoolId,au as getPdaPoolRewardVaulId,Xo as getPdaPoolVaultId,mn as getPdaProtocolPositionAddress,ge as getPdaTickArrayAddress,Bu as getPdaVault,hn as getRecentBlockHash,xo as getRegistrarAddress,Gl as getSessionKey,Za as getStablePrice,Cl as getTime,zy as getTimestamp,Ro as getTokenOwnerRecordAddress,Yb as getTransferAmountFee,Ae as getTransferAmountFeeV2,Ko as getVoterAddress,Co as getVoterWeightRecordAddress,So as getVotingMintAuthority,Bo as getVotingTokenMint,Pd as governanceCreateTokenOwnerRecord,Qg as greedy,ll as gt,jf as gte,ga as i128,qk as i16ToBytes,ci as i32ToBytes,ti as i64,ba as i8,Eo as initPoolLayout,bo as initTokenAccountInstruction,Op as initializeMarket,Rb as intersection,ia as isDateAfter,ra as isDateBefore,yl as isDecimal,Jf as isMeaningfulNumber,ta as isNumber,To as isValidFarmVersion,lr as isZero,fe as jsonInfo2PoolKeys,lP as judgeFarmType,Uo as leadingZeros,iu as leastSignificantBit,Sd as liquidityStateV4Layout,Kd as liquidityStateV5Layout,Qf as lt,Hf as lte,of as mSOLMint,ui as makeAMMSwapInstruction,Ja as makeAddLiquidityInstruction,Mo as makeAddNewRewardInstruction,wi as makeClaimInstruction,ss as makeClaimInstructionV4,Cu as makeCreateCpmmPoolInInstruction,va as makeCreateFarmInstruction,Du as makeCreateMarketInstruction,Wa as makeCreatorWithdrawFarmRewardInstruction,Ru as makeDepositCpmmInInstruction,Da as makeDepositInstructionV3,qa as makeDepositInstructionV5,Ua as makeDepositInstructionV6,SP as makeDepositTokenInstruction,CP as makeDepositWithdrawInstruction,Wk as makeInitPoolInstructionV4,SB as makePurchaseInstruction,No as makeRestartRewardInstruction,tu as makeSimulatePoolInfoInstruction,Ou as makeSwapCpmmBaseInInInstruction,Nu as makeSwapCpmmBaseOutInInstruction,Ud as makeSwapFixedInInstruction,Gd as makeSwapFixedOutInstruction,_S as makeSwapInstruction,Zn as makeTransferInstruction,Lu as makeWithdrawCpmmInInstruction,ar as makeWithdrawInstructionV3,sr as makeWithdrawInstructionV5,or as makeWithdrawInstructionV6,KP as makeWithdrawTokenInstruction,sn as minExpirationTime,Zk as mockCreatePoolInfo,pu as mockV3CreatePoolInfo,Ld as modelDataInfoLayout,ru as mostSignificantBit,Xi as mul,zi as notInnerObject,cw as ns64,yw as ns64be,ma as nu64,rw as nu64be,so as offset,Mb as offsetDateTime,Sw as option,U as parseBigNumberish,tn as parseNumberInfo,Js as parseSimulateLogToJson,Mt as parseSimulateValue,Ia as parseTokenAccountResp,sk as parseTokenInfo,Zt as poolTypeV6,on as printSimulate,S as publicKey,rs as purchaseLayout,id as realFarmStateV3Layout,od as realFarmStateV5Layout,sd as realFarmV6Layout,qs as recursivelyDecimalToFraction,qo as removeLiquidityInstruction,vo as removeLiquidityLayout,NS as route1Instruction,MS as route2Instruction,vp as routeInstruction,Lw as rustEnum,ow as s16,lw as s16be,sw as s24,mw as s24be,De as s32,dw as s32be,aw as s40,pw as s40be,uw as s48,fw as s48be,iw as s8,q as seq,Yp as setLoggerLevel,dl as shakeFractionDecimal,$s as simulateMultipleInstruction,vk as simulatePoolInfoInstruction,hl as simulateTransaction,zs as sleep,kn as solToWSol,ck as solToWSolToken,Yt as splAccountLayout,Xs as splitNumber,sf as stSOLMint,Rw as str,L as struct,$f as sub,Cw as tagged,Ui as tenExponential,pl as toBN,Tl as toBuffer,Gs as toFraction,Yf as toFractionWithDecimals,Py as toPercent,Xa as toToken,uk as toTokenAmount,ak as toTokenInfo,ky as toTokenPrice,hy as toTotalPrice,Ds as toUsdCurrency,Go as trailingZeros,Ei as tryParsePublicKey,z as u128,Bt as u16,nu as u16ToBytes,$g as u16be,Hg as u24,Jg as u24be,ze as u32,Uk as u32ToBytes,ew as u32be,jg as u40,tw as u40be,Zg as u48,nw as u48be,w as u64,_ as u8,Nw as union,CK as unionArr,Pw as unionLayoutDiscriminator,Ob as uniq,dd as updateFarmPoolInfo,jr as updateReqHistory,hw as utf8,Vi as validateAndParsePublicKey,Io as validateFarmRewards,Kw as vec,Wm as vecU8,hd as voterStakeRegistryCreateDepositEntry,kd as voterStakeRegistryCreateVoter,gd as voterStakeRegistryDeposit,wd as voterStakeRegistryUpdateVoterWeightRecord,Ad as voterStakeRegistryWithdraw,lk as wSolToSolToken,Ao as withdrawRewardLayout,Lb as xor,Mw as zeros};
|
|
2
2
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|