@raydium-io/raydium-sdk-v2 0.1.32-alpha → 0.1.34-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.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/cpmm/cpmm.js +1 -1
- package/lib/raydium/cpmm/cpmm.js.map +1 -1
- package/lib/raydium/cpmm/cpmm.mjs +1 -1
- package/lib/raydium/cpmm/cpmm.mjs.map +1 -1
- package/lib/raydium/farm/farm.js +1 -1
- package/lib/raydium/farm/farm.js.map +1 -1
- package/lib/raydium/farm/farm.mjs +1 -1
- package/lib/raydium/farm/farm.mjs.map +1 -1
- 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/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/package.json +1 -1
- package/src/raydium/cpmm/cpmm.ts +69 -69
- package/src/raydium/farm/farm.ts +19 -4
package/lib/raydium/raydium.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var Cu=Object.defineProperty,Ru=Object.defineProperties;var Lu=Object.getOwnPropertyDescriptors;var xo=Object.getOwnPropertySymbols;var ns=Object.prototype.hasOwnProperty,os=Object.prototype.propertyIsEnumerable;var ts=(r,e,t)=>e in r?Cu(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,C=(r,e)=>{for(var t in e||(e={}))ns.call(e,t)&&ts(r,t,e[t]);if(xo)for(var t of xo(e))os.call(e,t)&&ts(r,t,e[t]);return r},E=(r,e)=>Ru(r,Lu(e));var Ie=(r,e)=>{var t={};for(var n in r)ns.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&xo)for(var n of xo(r))e.indexOf(n)<0&&os.call(r,n)&&(t[n]=r[n]);return t};import{merge as Id}from"lodash";import Gs from"axios";import{get as rs,set as Ou}from"lodash";var Nr=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},is={},Nu={};function se(r){let e=rs(is,r);if(!e){let t=rs(Nu,r);e=new Nr({name:r,logLevel:t}),Ou(is,r,e)}return e}import{PublicKey as Uc}from"@solana/web3.js";import Gc from"bn.js";import Dc from"big.js";import Do from"bn.js";import et from"bn.js";var wn=9e15,Xt=1e9,Mr="0123456789abcdef",Ko="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Co="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",_r={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-wn,maxE:wn,crypto:!1},cs,Mt,ne=!0,Lo="[DecimalError] ",Gt=Lo+"Invalid argument: ",ls=Lo+"Precision limit exceeded",ms=Lo+"crypto unavailable",ds="[object Decimal]",We=Math.floor,Re=Math.pow,Mu=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,_u=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,vu=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ps=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,yt=1e7,ee=7,Vu=9007199254740991,Eu=Ko.length-1,vr=Co.length-1,M={toStringTag:ds};M.absoluteValue=M.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),Q(r)};M.ceil=function(){return Q(new this.constructor(this),this.e+1,2)};M.clampedTo=M.clamp=function(r,e){var t,n=this,o=n.constructor;if(r=new o(r),e=new o(e),!r.s||!e.s)return new o(NaN);if(r.gt(e))throw Error(Gt+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new o(n)};M.comparedTo=M.cmp=function(r){var e,t,n,o,i=this,s=i.d,a=(r=new i.constructor(r)).d,u=i.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(i.e!==r.e)return i.e>r.e^u<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===o?0:n>o^u<0?1:-1};M.cosine=M.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())+ee,n.rounding=1,t=Fu(n,ws(n,t)),n.precision=r,n.rounding=e,Q(Mt==2||Mt==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};M.cubeRoot=M.cbrt=function(){var r,e,t,n,o,i,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ne=!1,i=l.s*Re(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=ve(l.d),r=l.e,(i=(r-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Re(t,1/3),r=We((r+1)/3)-(r%3==(r<0?-1:2)),i==1/0?t="5e"+r:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(r=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=be(c.plus(l).times(a),c.plus(u),s+2,1),ve(a.d).slice(0,s)===(t=ve(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(Q(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(Q(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return ne=!0,Q(n,r,m.rounding,e)};M.decimalPlaces=M.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-We(this.e/ee))*ee,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(r){return be(this,new this.constructor(r))};M.dividedToIntegerBy=M.divToInt=function(r){var e=this,t=e.constructor;return Q(be(e,new t(r),0,1,1),t.precision,t.rounding)};M.equals=M.eq=function(r){return this.cmp(r)===0};M.floor=function(){return Q(new this.constructor(this),this.e+1,3)};M.greaterThan=M.gt=function(r){return this.cmp(r)>0};M.greaterThanOrEqualTo=M.gte=function(r){var e=this.cmp(r);return e==1||e===0};M.hyperbolicCosine=M.cosh=function(){var r,e,t,n,o,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,o=i.d.length,o<32?(r=Math.ceil(o/3),e=(1/No(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),i=An(s,1,i.times(e),new s(1),!0);for(var u,c=r,l=new s(8);c--;)u=i.times(i),i=a.minus(u.times(l.minus(u.times(l))));return Q(i,s.precision=t,s.rounding=n,!0)};M.hyperbolicSine=M.sinh=function(){var r,e,t,n,o=this,i=o.constructor;if(!o.isFinite()||o.isZero())return new i(o);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(o.e,o.sd())+4,i.rounding=1,n=o.d.length,n<3)o=An(i,2,o,o,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,o=o.times(1/No(5,r)),o=An(i,2,o,o,!0);for(var s,a=new i(5),u=new i(16),c=new i(20);r--;)s=o.times(o),o=o.times(a.plus(s.times(u.times(s).plus(c))))}return i.precision=e,i.rounding=t,Q(o,e,t,!0)};M.hyperbolicTangent=M.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,be(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};M.inverseCosine=M.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?ft(t,o,i):new t(0):new t(NaN):e.isZero()?ft(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),r=ft(t,o+4,i).times(.5),t.precision=o,t.rounding=i,r.minus(e))};M.inverseHyperbolicCosine=M.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,ne=!1,t=t.times(t).minus(1).sqrt().plus(t),ne=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};M.inverseHyperbolicSine=M.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,ne=!1,t=t.times(t).plus(1).sqrt().plus(t),ne=!0,n.precision=r,n.rounding=e,t.ln())};M.inverseHyperbolicTangent=M.atanh=function(){var r,e,t,n,o=this,i=o.constructor;return o.isFinite()?o.e>=0?new i(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(r=i.precision,e=i.rounding,n=o.sd(),Math.max(n,r)<2*-o.e-1?Q(new i(o),r,e,!0):(i.precision=t=n-o.e,o=be(o.plus(1),new i(1).minus(o),t+r,1),i.precision=r+4,i.rounding=1,o=o.ln(),i.precision=r,i.rounding=e,o.times(.5))):new i(NaN)};M.inverseSine=M.asin=function(){var r,e,t,n,o=this,i=o.constructor;return o.isZero()?new i(o):(e=o.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(r=ft(i,t+4,n).times(.5),r.s=o.s,r):new i(NaN):(i.precision=t+6,i.rounding=1,o=o.div(new i(1).minus(o.times(o)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,o.times(2)))};M.inverseTangent=M.atan=function(){var r,e,t,n,o,i,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=vr)return s=ft(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=vr)return s=ft(l,m+4,d).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ee+2|0),r=t;r;--r)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(ne=!1,e=Math.ceil(a/ee),n=1,u=c.times(c),s=new l(c),o=c;r!==-1;)if(o=o.times(u),i=s.minus(o.div(n+=2)),o=o.times(u),s=i.plus(o.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===i.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),ne=!0,Q(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&We(this.e/ee)>this.d.length-2};M.isNaN=function(){return!this.s};M.isNegative=M.isNeg=function(){return this.s<0};M.isPositive=M.isPos=function(){return this.s>0};M.isZero=function(){return!!this.d&&this.d[0]===0};M.lessThan=M.lt=function(r){return this.cmp(r)<0};M.lessThanOrEqualTo=M.lte=function(r){return this.cmp(r)<1};M.logarithm=M.log=function(r){var e,t,n,o,i,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding,p=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)i=!0;else{for(o=t[0];o%10===0;)o/=10;i=o!==1}if(ne=!1,a=m+p,s=Ut(c,a),n=e?Ro(l,a+10):Ut(r,a),u=be(s,n,a,1),_n(u.d,o=m,d))do if(a+=10,s=Ut(c,a),n=e?Ro(l,a+10):Ut(r,a),u=be(s,n,a,1),!i){+ve(u.d).slice(o+1,o+15)+1==1e14&&(u=Q(u,m+1,0));break}while(_n(u.d,o+=10,d));return ne=!0,Q(u,m,d)};M.minus=M.sub=function(r){var e,t,n,o,i,s,a,u,c,l,m,d,p=this,y=p.constructor;if(r=new y(r),!p.d||!r.d)return!p.s||!r.s?r=new y(NaN):p.d?r.s=-r.s:r=new y(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(c=p.d,d=r.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])r.s=-r.s;else if(c[0])r=new y(p);else return new y(u===3?-0:0);return ne?Q(r,a,u):r}if(t=We(r.e/ee),l=We(p.e/ee),c=c.slice(),i=l-t,i){for(m=i<0,m?(e=c,i=-i,s=d.length):(e=d,t=l,s=c.length),n=Math.max(Math.ceil(a/ee),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=c.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=d[n]){m=c[n]<d[n];break}i=0}for(m&&(e=c,c=d,d=e,r.s=-r.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>i;){if(c[--n]<d[n]){for(o=n;o&&c[--o]===0;)c[o]=yt-1;--c[o],c[n]+=yt}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(r.d=c,r.e=Oo(c,t),ne?Q(r,a,u):r):new y(u===3?-0:0)};M.modulo=M.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]?Q(new n(t),n.precision,n.rounding):(ne=!1,n.modulo==9?(e=be(t,r.abs(),0,3,1),e.s*=r.s):e=be(t,r,0,n.modulo,1),e=e.times(r),ne=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return Vr(this)};M.naturalLogarithm=M.ln=function(){return Ut(this)};M.negated=M.neg=function(){var r=new this.constructor(this);return r.s=-r.s,Q(r)};M.plus=M.add=function(r){var e,t,n,o,i,s,a,u,c,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(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=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(r=new d(m)),ne?Q(r,a,u):r;if(i=We(m.e/ee),n=We(r.e/ee),c=c.slice(),o=i-n,o){for(o<0?(t=c,o=-o,s=l.length):(t=l,n=i,s=c.length),i=Math.ceil(a/ee),s=i>s?i+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=c.length,o=l.length,s-o<0&&(o=s,t=l,l=c,c=t),e=0;o;)e=(c[--o]=c[o]+l[o]+e)/yt|0,c[o]%=yt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return r.d=c,r.e=Oo(c,n),ne?Q(r,a,u):r};M.precision=M.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Gt+r);return t.d?(e=fs(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var r=this,e=r.constructor;return Q(new e(r),r.e+1,e.rounding)};M.sine=M.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())+ee,n.rounding=1,t=Wu(n,ws(n,t)),n.precision=r,n.rounding=e,Q(Mt>2?t.neg():t,r,e,!0)):new n(NaN)};M.squareRoot=M.sqrt=function(){var r,e,t,n,o,i,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(ne=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=ve(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=We((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(i=n,n=i.plus(be(s,i,t+2,1)).times(.5),ve(i.d).slice(0,t)===(e=ve(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(Q(i,u+1,0),i.times(i).eq(s))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(Q(n,u+1,1),r=!n.times(n).eq(s));break}return ne=!0,Q(n,u,l.rounding,r)};M.tangent=M.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=be(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,Q(Mt==2||Mt==4?t.neg():t,r,e,!0)):new n(NaN)};M.times=M.mul=function(r){var e,t,n,o,i,s,a,u,c,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=We(l.e/ee)+We(r.e/ee),u=d.length,c=p.length,u<c&&(i=d,d=p,p=i,s=u,u=c,c=s),i=[],s=u+c,n=s;n--;)i.push(0);for(n=c;--n>=0;){for(e=0,o=u+n;o>n;)a=i[o]+p[n]*d[o-n-1]+e,i[o--]=a%yt|0,e=a/yt|0;i[o]=(i[o]+e)%yt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),r.d=i,r.e=Oo(i,t),ne?Q(r,m.precision,m.rounding):r};M.toBinary=function(r,e){return Fr(this,2,r,e)};M.toDecimalPlaces=M.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(Je(r,0,Xt),e===void 0?e=n.rounding:Je(e,0,8),Q(t,r+t.e+1,e))};M.toExponential=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Bt(n,!0):(Je(r,0,Xt),e===void 0?e=o.rounding:Je(e,0,8),n=Q(new o(n),r+1,e),t=Bt(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toFixed=function(r,e){var t,n,o=this,i=o.constructor;return r===void 0?t=Bt(o):(Je(r,0,Xt),e===void 0?e=i.rounding:Je(e,0,8),n=Q(new i(o),r+o.e+1,e),t=Bt(n,!1,r+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};M.toFraction=function(r){var e,t,n,o,i,s,a,u,c,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(c=t=new f(1),n=u=new f(0),e=new f(n),i=e.e=fs(y)-p.e-1,s=i%ee,e.d[0]=Re(10,s<0?ee+s:s),r==null)r=i>0?e:c;else{if(a=new f(r),!a.isInt()||a.lt(c))throw Error(Gt+a);r=a.gt(e)?i>0?e:c:a}for(ne=!1,a=new f(ve(y)),l=f.precision,f.precision=i=y.length*ee*2;m=be(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(r)!=1;)t=n,n=o,o=c,c=u.plus(m.times(o)),u=o,o=e,e=a.minus(m.times(o)),a=o;return o=be(r.minus(t),n,0,1,1),u=u.plus(o.times(c)),t=t.plus(o.times(n)),u.s=c.s=p.s,d=be(c,n,i,1).minus(p).abs().cmp(be(u,t,i,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,ne=!0,d};M.toHexadecimal=M.toHex=function(r,e){return Fr(this,16,r,e)};M.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:Je(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]?(ne=!1,t=be(t,r,0,e,1).times(r),ne=!0,Q(t)):(r.s=t.s,t=r),t};M.toNumber=function(){return+this};M.toOctal=function(r,e){return Fr(this,8,r,e)};M.toPower=M.pow=function(r){var e,t,n,o,i,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(Re(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,i=u.rounding,r.eq(1))return Q(a,n,i);if(e=We(r.e/ee),e>=r.d.length-1&&(t=c<0?-c:c)<=Vu)return o=ys(u,a,t,n),r.s<0?new u(1).div(o):Q(o,n,i);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=Re(+a,c),e=t==0||!isFinite(t)?We(c*(Math.log("0."+ve(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):(ne=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),o=Vr(r.times(Ut(a,n+t)),n),o.d&&(o=Q(o,n+5,1),_n(o.d,n,i)&&(e=n+10,o=Q(Vr(r.times(Ut(a,e+t)),e),e+5,1),+ve(o.d).slice(n+1,n+15)+1==1e14&&(o=Q(o,n+1,0)))),o.s=s,ne=!0,u.rounding=i,Q(o,n,i))};M.toPrecision=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Bt(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(Je(r,1,Xt),e===void 0?e=o.rounding:Je(e,0,8),n=Q(new o(n),r,e),t=Bt(n,r<=n.e||n.e<=o.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toSignificantDigits=M.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(Je(r,1,Xt),e===void 0?e=n.rounding:Je(e,0,8)),Q(new n(t),r,e)};M.toString=function(){var r=this,e=r.constructor,t=Bt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};M.truncated=M.trunc=function(){return Q(new this.constructor(this),this.e+1,1)};M.valueOf=M.toJSON=function(){var r=this,e=r.constructor,t=Bt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function ve(r){var e,t,n,o=r.length-1,i="",s=r[0];if(o>0){for(i+=s,e=1;e<o;e++)n=r[e]+"",t=ee-n.length,t&&(i+=qt(t)),i+=n;s=r[e],n=s+"",t=ee-n.length,t&&(i+=qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function Je(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Gt+r)}function _n(r,e,t,n){var o,i,s,a;for(i=r[0];i>=10;i/=10)--e;return--e<0?(e+=ee,o=0):(o=Math.ceil((e+1)/ee),e%=ee),i=Re(10,ee-e),a=r[o]%i|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==i||t>3&&a+1==i/2)&&(r[o+1]/i/100|0)==Re(10,e-2)-1||(a==i/2||a==0)&&(r[o+1]/i/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==i||!n&&t>3&&a+1==i/2)&&(r[o+1]/i/1e3|0)==Re(10,e-3)-1,s}function So(r,e,t){for(var n,o=[0],i,s=0,a=r.length;s<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=Mr.indexOf(r.charAt(s++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function Fu(r,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/No(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),r.precision+=t,e=An(r,1,e.times(o),new r(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var be=function(){function r(n,o,i){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*o+a,n[u]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,o,i,s){var a,u;if(i!=s)u=i>s?1:-1;else for(a=u=0;a<i;a++)if(n[a]!=o[a]){u=n[a]>o[a]?1:-1;break}return u}function t(n,o,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*s+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,s,a,u){var c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I,L,U,F=n.constructor,$=n.s==o.s?1:-1,G=n.d,W=o.d;if(!G||!G[0]||!W||!W[0])return new F(!n.s||!o.s||(G?W&&G[0]==W[0]:!W)?NaN:G&&G[0]==0||!W?$*0:$/0);for(u?(p=1,l=n.e-o.e):(u=yt,p=ee,l=We(n.e/p)-We(o.e/p)),L=W.length,R=G.length,g=new F($),h=g.d=[],m=0;W[m]==(G[m]||0);m++);if(W[m]>(G[m]||0)&&l--,i==null?(T=i=F.precision,s=F.rounding):a?T=i+(n.e-o.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,W=W[0],T++;(m<R||d)&&T--;m++)S=d*u+(G[m]||0),h[m]=S/W|0,d=S%W|0;y=d||m<R}else{for(d=u/(W[0]+1)|0,d>1&&(W=r(W,d,u),G=r(G,d,u),L=W.length,R=G.length),x=L,A=G.slice(0,L),k=A.length;k<L;)A[k++]=0;U=W.slice(),U.unshift(0),I=W[0],W[1]>=u/2&&++I;do d=0,c=e(W,A,L,k),c<0?(B=A[0],L!=k&&(B=B*u+(A[1]||0)),d=B/I|0,d>1?(d>=u&&(d=u-1),f=r(W,d,u),b=f.length,k=A.length,c=e(f,A,b,k),c==1&&(d--,t(f,L<b?U:W,b,u))):(d==0&&(c=d=1),f=W.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,u),c==-1&&(k=A.length,c=e(W,A,L,k),c<1&&(d++,t(A,L<k?U:W,k,u))),k=A.length):c===0&&(d++,A=[0]),h[m++]=d,c&&A[0]?A[k++]=G[x]||0:(A=[G[x]],k=1);while((x++<R||A[0]!==void 0)&&T--);y=A[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,cs=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,Q(g,a?i+g.e+1:i,s,y)}return g}}();function Q(r,e,t,n){var o,i,s,a,u,c,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=ee,s=e,l=m[d=0],u=l/Re(10,o-s-1)%10|0;else if(d=Math.ceil((i+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,o=1,i%=ee,s=i-ee+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=ee,s=i-ee+o,u=s<0?0:l/Re(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Re(10,o-s-1)),c=t<4?(u||n)&&(t==0||t==(r.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(i>0?s>0?l/Re(10,o-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=r.e+1,m[0]=Re(10,(ee-e%ee)%ee),r.e=-e||0):m[0]=r.e=0,r;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Re(10,ee-i),m[d]=s>0?(l/Re(10,o-s)%Re(10,s)|0)*a:0),c)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(r.e++,m[0]==yt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=yt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return ne&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function Bt(r,e,t){if(!r.isFinite())return gs(r);var n,o=r.e,i=ve(r.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+qt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(r.e<0?"e":"e+")+r.e):o<0?(i="0."+qt(-o-1)+i,t&&(n=t-s)>0&&(i+=qt(n))):o>=s?(i+=qt(o+1-s),t&&(n=t-o-1)>0&&(i=i+"."+qt(n))):((n=o+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(i+="."),i+=qt(n))),i}function Oo(r,e){var t=r[0];for(e*=ee;t>=10;t/=10)e++;return e}function Ro(r,e,t){if(e>Eu)throw ne=!0,t&&(r.precision=t),Error(ls);return Q(new r(Ko),e,1,!0)}function ft(r,e,t){if(e>vr)throw Error(ls);return Q(new r(Co),e,t,!0)}function fs(r){var e=r.length-1,t=e*ee+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 qt(r){for(var e="";r--;)e+="0";return e}function ys(r,e,t,n){var o,i=new r(1),s=Math.ceil(n/ee+4);for(ne=!1;;){if(t%2&&(i=i.times(e),as(i.d,s)&&(o=!0)),t=We(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),as(e.d,s)}return ne=!0,i}function ss(r){return r.d[r.d.length-1]&1}function bs(r,e,t){for(var n,o=new r(e[0]),i=0;++i<e.length;)if(n=new r(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function Vr(r,e){var t,n,o,i,s,a,u,c=0,l=0,m=0,d=r.constructor,p=d.rounding,y=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(ne=!1,u=y):u=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Re(2,m))/Math.LN10*2+5|0,u+=n,t=i=s=new d(1),d.precision=u;;){if(i=Q(i.times(r),u,1),t=t.times(++l),a=s.plus(be(i,t,u,1)),ve(a.d).slice(0,u)===ve(s.d).slice(0,u)){for(o=m;o--;)s=Q(s.times(s),u,1);if(e==null)if(c<3&&_n(s.d,u-n,p,c))d.precision=u+=10,t=i=a=new d(1),l=0,c++;else return Q(s,d.precision=y,p,ne=!0);else return d.precision=y,s}s=a}}function Ut(r,e){var t,n,o,i,s,a,u,c,l,m,d,p=1,y=10,f=r,b=f.d,g=f.constructor,h=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?(ne=!1,l=A):l=e,g.precision=l+=y,t=ve(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=ve(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return c=Ro(g,l+2,A).times(i+""),f=Ut(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?Q(f,A,h,ne=!0):f;for(m=f,u=s=f=be(f.minus(1),f.plus(1),l,1),d=Q(f.times(f),l,1),o=3;;){if(s=Q(s.times(d),l,1),c=u.plus(be(s,new g(o),l,1)),ve(c.d).slice(0,l)===ve(u.d).slice(0,l))if(u=u.times(2),i!==0&&(u=u.plus(Ro(g,l+2,A).times(i+""))),u=be(u,new g(p),l,1),e==null)if(_n(u.d,l-y,h,a))g.precision=l+=y,c=s=f=be(m.minus(1),m.plus(1),l,1),d=Q(f.times(f),l,1),o=a=1;else return Q(u,g.precision=A,h,ne=!0);else return g.precision=A,u;u=c,o+=2}}function gs(r){return String(r.s*r.s/0)}function Er(r,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<o){for(n&&r.d.push(+e.slice(0,n)),o-=ee;n<o;)r.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=o;for(;n--;)e+="0";r.d.push(+e),ne&&(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 Du(r,e){var t,n,o,i,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ps.test(e))return Er(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(_u.test(e))t=16,e=e.toLowerCase();else if(Mu.test(e))t=2;else if(vu.test(e))t=8;else throw Error(Gt+e);for(i=e.search(/p/i),i>0?(u=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,o=ys(n,new n(t),i,i*2)),c=So(e,t,yt),l=c.length-1,i=l;c[i]===0;--i)c.pop();return i<0?new n(r.s*0):(r.e=Oo(c,l),r.d=c,ne=!1,s&&(r=be(r,o,a*4)),u&&(r=r.times(Math.abs(u)<54?Re(2,u):vn.pow(2,u))),ne=!0,r)}function Wu(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:An(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/No(5,t)),e=An(r,2,e,e);for(var o,i=new r(5),s=new r(16),a=new r(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(s.times(o).minus(a))));return e}function An(r,e,t,n,o){var i,s,a,u,c=1,l=r.precision,m=Math.ceil(l/ee);for(ne=!1,u=t.times(t),a=new r(n);;){if(s=be(a.times(u),new r(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=be(s.times(u),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,c++}return ne=!0,s.d.length=m+1,s}function No(r,e){for(var t=r;--e;)t*=r;return t}function ws(r,e){var t,n=e.s<0,o=ft(r,r.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return Mt=n?4:1,e;if(t=e.divToInt(o),t.isZero())Mt=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return Mt=ss(t)?n?2:3:n?4:1,e;Mt=ss(t)?n?1:4:n?3:2}return e.minus(o).abs()}function Fr(r,e,t,n){var o,i,s,a,u,c,l,m,d,p=r.constructor,y=t!==void 0;if(y?(Je(t,1,Xt),n===void 0?n=p.rounding:Je(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=gs(r);else{for(l=Bt(r),s=l.indexOf("."),y?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=So(Bt(d),10,o),d.e=d.d.length),m=So(l,10,o),i=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(r=new p(r),r.d=m,r.e=i,r=be(r,d,t,n,0,o),m=r.d,i=r.e,c=cs),s=m[t],a=o/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]>o-1;)m[t]=0,t||(++i,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=Mr.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=So(l,o,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=Mr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>u)for(i-=u;i--;)l+="0";else i<u&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function as(r,e){if(r.length>e)return r.length=e,!0}function qu(r){return new this(r).abs()}function Uu(r){return new this(r).acos()}function Gu(r){return new this(r).acosh()}function Xu(r,e){return new this(r).plus(e)}function zu(r){return new this(r).asin()}function Yu(r){return new this(r).asinh()}function ju(r){return new this(r).atan()}function Qu(r){return new this(r).atanh()}function Hu(r,e){r=new this(r),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=ft(this,i,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?ft(this,n,o):new this(0),t.s=r.s):!r.d||e.isZero()?(t=ft(this,i,1).times(.5),t.s=r.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(be(r,e,i,1)),e=ft(this,i,1),this.precision=n,this.rounding=o,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(be(r,e,i,1)),t}function Zu(r){return new this(r).cbrt()}function Ju(r){return Q(r=new this(r),r.e+1,2)}function $u(r,e,t){return new this(r).clamp(e,t)}function ec(r){if(!r||typeof r!="object")throw Error(Lo+"Object expected");var e,t,n,o=r.defaults===!0,i=["precision",1,Xt,"rounding",0,8,"toExpNeg",-wn,0,"toExpPos",0,wn,"maxE",0,wn,"minE",-wn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=_r[t]),(n=r[t])!==void 0)if(We(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Gt+t+": "+n);if(t="crypto",o&&(this[t]=_r[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(ms);else this[t]=!1;else throw Error(Gt+t+": "+n);return this}function tc(r){return new this(r).cos()}function nc(r){return new this(r).cosh()}function As(r){var e,t,n;function o(i){var s,a,u,c=this;if(!(c instanceof o))return new o(i);if(c.constructor=o,us(i)){c.s=i.s,ne?!i.d||i.e>o.maxE?(c.e=NaN,c.d=null):i.e<o.minE?(c.e=0,c.d=[0]):(c.e=i.e,c.d=i.d.slice()):(c.e=i.e,c.d=i.d?i.d.slice():i.d);return}if(u=typeof i,u==="number"){if(i===0){c.s=1/i<0?-1:1,c.e=0,c.d=[0];return}if(i<0?(i=-i,c.s=-1):c.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;ne?s>o.maxE?(c.e=NaN,c.d=null):s<o.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[i]):(c.e=s,c.d=[i]);return}else if(i*0!==0){i||(c.s=NaN),c.e=NaN,c.d=null;return}return Er(c,i.toString())}else if(u!=="string")throw Error(Gt+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),c.s=-1):(a===43&&(i=i.slice(1)),c.s=1),ps.test(i)?Er(c,i):Du(c,i)}if(o.prototype=M,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=ec,o.clone=As,o.isDecimal=us,o.abs=qu,o.acos=Uu,o.acosh=Gu,o.add=Xu,o.asin=zu,o.asinh=Yu,o.atan=ju,o.atanh=Qu,o.atan2=Hu,o.cbrt=Zu,o.ceil=Ju,o.clamp=$u,o.cos=tc,o.cosh=nc,o.div=oc,o.exp=rc,o.floor=ic,o.hypot=sc,o.ln=ac,o.log=uc,o.log10=lc,o.log2=cc,o.max=mc,o.min=dc,o.mod=pc,o.mul=fc,o.pow=yc,o.random=bc,o.round=gc,o.sign=wc,o.sin=Ac,o.sinh=hc,o.sqrt=Pc,o.sub=kc,o.sum=Tc,o.tan=Ic,o.tanh=Bc,o.trunc=xc,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 o.config(r),o}function oc(r,e){return new this(r).div(e)}function rc(r){return new this(r).exp()}function ic(r){return Q(r=new this(r),r.e+1,3)}function sc(){var r,e,t=new this(0);for(ne=!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 ne=!0,new this(1/0);t=e}return ne=!0,t.sqrt()}function us(r){return r instanceof vn||r&&r.toStringTag===ds||!1}function ac(r){return new this(r).ln()}function uc(r,e){return new this(r).log(e)}function cc(r){return new this(r).log(2)}function lc(r){return new this(r).log(10)}function mc(){return bs(this,arguments,"lt")}function dc(){return bs(this,arguments,"gt")}function pc(r,e){return new this(r).mod(e)}function fc(r,e){return new this(r).mul(e)}function yc(r,e){return new this(r).pow(e)}function bc(r){var e,t,n,o,i=0,s=new this(1),a=[];if(r===void 0?r=this.precision:Je(r,1,Xt),n=Math.ceil(r/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)o=e[i],o>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)o=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(o%1e7),i+=4);i=n/4}else throw Error(ms);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],r%=ee,n&&r&&(o=Re(10,ee-r),a[i]=(n/o|0)*o);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ee)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<ee&&(t-=ee-n)}return s.e=t,s.d=a,s}function gc(r){return Q(r=new this(r),r.e+1,this.rounding)}function wc(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Ac(r){return new this(r).sin()}function hc(r){return new this(r).sinh()}function Pc(r){return new this(r).sqrt()}function kc(r,e){return new this(r).sub(e)}function Tc(){var r=0,e=arguments,t=new this(e[r]);for(ne=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return ne=!0,Q(t,this.precision,this.rounding)}function Ic(r){return new this(r).tan()}function Bc(r){return new this(r).tanh()}function xc(r){return Q(r=new this(r),r.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var vn=M.constructor=As(_r);Ko=new vn(Ko);Co=new vn(Co);var _=vn;import{PublicKey as Gr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Sc}from"@solana/spl-token";import{PublicKey as Ae,SystemProgram as hs,SYSVAR_RENT_PUBKEY as Kc}from"@solana/web3.js";function P({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var Dr=[P({pubkey:Sc,isWritable:!1}),P({pubkey:hs.programId,isWritable:!1}),P({pubkey:Kc,isWritable:!1})];function Wr({publicKey:r,transformSol:e}){let t=qr(r.toString());if(t instanceof Ae)return e&&t.equals(Le)?H:t;if(e&&t.toString()===Le.toBase58())return H;if(typeof t=="string"){if(t===Ae.default.toBase58())return Ae.default;try{return new Ae(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function qr(r){try{return new Ae(r)}catch{return r}}var Mo=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),_o=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),bt=new Ae("SysvarRent111111111111111111111111111111111"),Ps=new Ae("SysvarC1ock11111111111111111111111111111111"),hn=new Ae("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Cc=new Ae("Sysvar1nstructions1111111111111111111111111"),Ur=hs.programId,Od=new Ae("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Nd=new Ae("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Md=new Ae("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),_d=new Ae("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),vd=new Ae("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Vd=new Ae("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Ed=new Ae("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Fd=new Ae("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Dd=new Ae("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Wd=new Ae("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),qd=new Ae("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Ae("So11111111111111111111111111111111111111112"),Le=Ae.default;function nt(r){return Wr({publicKey:r,transformSol:!0})}import{PublicKey as Rc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ks}from"@solana/spl-token";var zt={chainId:101,address:Rc.default.toBase58(),programId:ks.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ve={chainId:101,address:"So11111111111111111111111111111111111111112",programId:ks.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 Xr=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:s=!1}){if(e===Le.toBase58()||e instanceof Gr&&Le.equals(e)){this.decimals=Ve.decimals,this.symbol=Ve.symbol,this.name=Ve.name,this.mint=new Gr(Ve.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?Gr.default:Wr({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},he=Xr;he.WSOL=new Xr(E(C({},Ve),{mint:Ve.address}));import Vo from"big.js";import Nc from"bn.js";import Mc from"decimal.js-light";import Lc from"toformat";var Oc=Lc,Vn=Oc;var vo=se("module/fraction"),zr=Vn(Vo),En=Vn(Mc),_c={[0]:En.ROUND_DOWN,[1]:En.ROUND_HALF_UP,[2]:En.ROUND_UP},vc={[0]:Vo.roundDown,[1]:Vo.roundHalfUp,[2]:Vo.roundUp},de=class{constructor(e,t=new Nc(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new de(this.denominator,this.numerator)}add(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.add(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.sub(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||vo.logWithError(`${e} is not an integer.`),e<=0&&vo.logWithError(`${e} is not positive.`),En.set({precision:e+1,rounding:_c[n]});let o=new En(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||vo.logWithError(`${e} is not an integer.`),e<0&&vo.logWithError(`${e} is negative.`),zr.DP=e,zr.RM=vc[n]||1,new zr(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Ec=se("Raydium_price"),$e=class extends de{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=o,this.scalar=new de(Yr(n.decimals),Yr(o.decimals))}get raw(){return new de(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new $e({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Ec.logWithError("mul token not equals");let n=super.mul(t);return new $e({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};var jr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Eo=jr;Eo.SOL=new jr(zt);import Fc from"bn.js";var Ts=new de(new Fc(100)),je=class extends de{toSignificant(e=5,t,n){return this.mul(Ts).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Ts).toFixed(e,t,n)}};var at=new et(0),Bs=new et(1),Ep=new et(2),Fp=new et(3),Dp=new et(5),Qr=new et(10),Wp=new et(100),qp=new et(1e3),Up=new et(1e4),Is=9007199254740991;function Z(r){let e=se("Raydium_parseBigNumberish");if(r instanceof et)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new et(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Is||r<=-Is)&&e.logWithError(`BigNumberish number overflow: ${r}`),new et(String(r))):typeof r=="bigint"?new et(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new et(0))}function Yr(r){return Qr.pow(Z(r))}function Fo(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var Wc=se("Raydium_amount"),Ss=Vn(Dc);function qc(r,e){let t="0",n="0";if(r.includes(".")){let o=r.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):Wc.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var fe=class extends de{constructor(t,n,o=!0,i){let s=new Do(0),a=Qr.pow(new Do(t.decimals));if(o)s=Z(n);else{let u=new Do(0),c=new Do(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=qc(n.toString(),t.decimals);u=Z(l),c=Z(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=se(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new fe(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new fe(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Ss.DP=this.token.decimals,new Ss(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function xs(r){return typeof r=="object"&&r!==null&&![he,fe,Uc,de,Gc,$e,je].some(e=>typeof e=="object"&&r instanceof e)}function Ee(r){return typeof r=="string"?qr(r):Array.isArray(r)?r.map(e=>Ee(e)):xs(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,Ee(t)])):r}import{PublicKey as Tn,sendAndConfirmTransaction as ti,Transaction as Wn,TransactionMessage as qn,VersionedTransaction as Un,SystemProgram as Jc,LAMPORTS_PER_SOL as $c}from"@solana/web3.js";import el from"axios";var 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 Xc,ComputeBudgetProgram as Ks,Transaction as Rs,TransactionMessage as zc,Keypair as Ls,VersionedTransaction as Hr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Yc}from"@solana/spl-token";var Cs=se("Raydium_txUtil"),Os=1644;function Wo(r){let e=[],t=[];return r.microLamports&&(e.push(Ks.setComputeUnitPrice({microLamports:r.microLamports})),t.push(V.SetComputeUnitPrice)),r.units&&(e.push(Ks.setComputeUnitLimit({units:r.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Pn(r,e){var n,o;let t=e!=null?e:"confirmed";try{return((o=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:o.blockhash)||(await r.getRecentBlockhash(t)).blockhash}catch{return(await r.getRecentBlockhash(t)).blockhash}}function Zr(r,e){r.length<1&&Cs.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Cs.logWithError(`no signers provided:, ${e.toString()}`);let t=new Rs;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Os}catch{return!1}}function le(r,e){let[t,n]=Xc.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}function Fn({instructions:r,payer:e,signers:t}){return Zr(r,[e,...t])}function Dn({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ls.generate().publicKey.toString()}){let i=new zc({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Hr(i).serialize()).toString("base64").length<Os}catch{return!1}}var Ns=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r);function tn(r){let e=[];return r.forEach(t=>{t instanceof Rs&&(t.recentBlockhash||(t.recentBlockhash=Yc.toBase58()),t.feePayer||(t.feePayer=Ls.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof Hr&&(n=Ns(n));let o=n.toString("base64");e.push(o)}),console.log("simulate tx string:",e),e}function Ms(r){let e=r.serialize({requireAllSignatures:!1,verifySignatures:!1});return r instanceof Hr&&(e=Ns(e)),e.toString("base64")}import{PublicKey as vs,AddressLookupTableAccount as qo}from"@solana/web3.js";import{PublicKey as _s}from"@solana/web3.js";import{MINT_SIZE as jc,TOKEN_PROGRAM_ID as Qc,getTransferFeeConfig as Hc,unpackMint as Zc}from"@solana/spl-token";var Jr=se("Raydium_accountInfo_util");async function gt(r,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=$r(e,i),a=new Array(s.length).fill([]);if(n){let u=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),c=$r(u,10);a=(await(await Promise.all(c.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Jr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Jr.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new _s(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(u=>r.getMultipleAccountsInfo(u,o)))}catch(u){u instanceof Error&&Jr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Ne(r,e,t){let n=await gt(r,e.map(o=>o.pubkey),t);return e.map((o,i)=>E(C({},o),{accountInfo:n[i]}))}async function kn({connection:r,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await Ne(r,e.map(u=>({pubkey:nt(u)})),t),o={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<jc){console.log("invalid mint account",u.pubkey.toBase58());continue}let c=Zc(u.pubkey,u.accountInfo,(i=u.accountInfo)==null?void 0:i.owner);o[u.pubkey.toString()]=E(C({},c),{programId:((s=u.accountInfo)==null?void 0:s.owner)||Qc,feeConfig:(a=Hc(c))!=null?a:void 0})}return o[_s.default.toBase58()]=o[H.toBase58()],o}async function ei({connection:r,address:e}){let t=await gt(r,[...new Set(e.map(o=>o.toString()))].map(o=>new vs(o))),n={};for(let o=0;o<e.length;o++){let i=t[o],s=e[o];if(!i)continue;let a=new qo({key:s,state:qo.deserialize(i.data)});n[s.toString()]=a,Uo[s.toString()]=a}return n}var Uo={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new qo({key:new vs("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:qo.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 tl=new Tn("3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT"),Go=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.enableJito=!!e.enableJito,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await el.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}=Wo(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)}}addJitoInstruction(e){let{fee:t,bundle:n}=e||{};if(!this.owner)return;let o=Jc.transfer({fromPubkey:this.owner.publicKey,toPubkey:tl,lamports:t?t*$c:1e4});n?this.instructions.unshift(o):this.instructions.push(o)}async sendTxToJito(e){if(!this.api)return;let t=e.map(o=>Ms(o));return(await this.api.sendTxToJito(t)).result}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Tn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;this.enableJito&&this.addJitoInstruction();let t=new Wn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var c;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=o||{},u=i!=null?i:await Pn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),tn([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await ti(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return this.enableJito&&this.sendTxToJito(l),{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Pn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let A=await ti(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));tn(g);let h=await this.signAllTransactions(g);if(m){let A=0,k=[],B=async()=>{if(!h[A])return;this.enableJito&&this.sendTxToJito([h[A]]);let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[A]}),d==null||d([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});A.push(B)}return this.enableJito&&this.sendTxToJito(h),{txIds:A,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var p;let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o}=d,i=Ie(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:Uo),t);this.enableJito&&this.addJitoInstruction();let a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of a)s[y]===void 0&&u.push(new Tn(y));let c=await ei({connection:this.connection,address:u});for(let[y,f]of Object.entries(c))s[y]=f;let l=new qn({payerKey:this.feePayer,recentBlockhash:o?Tn.default.toBase58():await Pn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s));((p=this.owner)==null?void 0:p.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new Un(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var h;let{recentBlockHash:f,skipPreflight:b=!0,sendAndConfirm:g}=y||{};if(f&&(m.message.recentBlockhash=f),tn([m]),(h=this.owner)!=null&&h.isKeyPair){let A=await this.connection.sendTransaction(m,{skipPreflight:b});if(g){let{lastValidBlockHeight:k,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:k,signature:A},"confirmed")}return{txId:A,signedTx:m}}if(this.signAllTransactions){let A=await this.signAllTransactions([m]);return this.enableJito&&this.sendTxToJito(A),{txId:await this.connection.sendTransaction(A[0],{skipPreflight:b}),signedTx:A[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),tn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:A,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:A,signature:h},"confirmed"),b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,h=[],A=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});this.enableJito&&this.sendTxToJito([b[g]]),h.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(k,B=>{let T=h.findIndex(S=>S.txId===k);T>-1&&(h[T].status=B.err?"error":"success"),d==null||d([...h]),B.err||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let A=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(A)}return this.enableJito&&this.sendTxToJito(b),{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let c=e||{},{computeBudgetConfig:t}=c,n=Ie(c,["computeBudgetConfig"]),o=t?Wo(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>E(C({},m),{[d.publicKey.toBase58()]:d}),{});this.enableJito&&this.addJitoInstruction({bundle:!0});let s=[],a=[],u=[];if(this.allInstructions.forEach(m=>{let d=[...u,m],p=t?[...o.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Tn(b));if(u.length<12&&Fn({instructions:p,payer:this.feePayer,signers:f})||Fn({instructions:d,payer:this.feePayer,signers:f}))u.push(m);else{if(u.length===0)throw Error("item ins too big");Fn({instructions:t?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:f})?s.push(new Wn().add(...o.instructions,...u)):s.push(new Wn().add(...u)),a.push(Array.from(new Set(u.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),u=[m]}}),u.length>0){let d=[...new Set(u.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);Fn({instructions:t?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Wn().add(...o.instructions,...u)):s.push(new Wn().add(...u)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Pn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,A)=>{h.recentBlockhash=b,a[A].length&&h.sign(...a[A])}),tn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let A of s){let k=await ti(this.connection,A,this.signers.find(B=>B.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(k)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let A=0,k=[],B=async()=>{if(!h[A])return;let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[A]}),p==null||p([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});A.push(B)}return{txIds:A,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:o=[]}=b,i=Ie(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]);this.enableJito&&this.addJitoInstruction();let s=C(C({},this.cluster==="devnet"?{}:Uo),n),a=Array.from(new Set([...this.lookupTableAddress,...o])),u=[];for(let h of a)s[h]===void 0&&u.push(new Tn(h));let c=await ei({connection:this.connection,address:u});for(let[h,A]of Object.entries(c))s[h]=A;let l=t?Wo(t):{instructions:[],instructionTypes:[]},m=await Pn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,A)=>E(C({},h),{[A.publicKey.toBase58()]:A}),{});this.enableJito&&this.addJitoInstruction({bundle:!0});let p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let A=[...f,h],k=t?[...l.instructions,...A]:A;if(f.length<12&&Dn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Dn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let B={};for(let T of[...new Set(a)])s[T]!==void 0&&(B[T]=s[T]);if(t&&Dn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(T))}else{let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[h]}}),f.length>0){let A=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&Dn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}else{let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(A=>A.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:A,onTxUpdate:k,recentBlockHash:B,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),B&&(x.message.recentBlockhash=B)}),tn(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let x=[];for(let R of p){let I=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:U}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:U,lastValidBlockHeight:L,signature:I},"confirmed"),x.push(I)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(A){let R=0,I=[],L=async()=>{if(!x[R])return;let U=await this.connection.sendTransaction(x[R],{skipPreflight:T});I.push({txId:U,status:"sent",signedTx:x[R]}),k==null||k([...I]),R++,this.connection.onSignature(U,F=>{let $=I.findIndex(G=>G.txId===U);$>-1&&(I[$].status=F.err?"error":"success"),k==null||k([...I]),F.err||L()},"processed"),this.connection.getSignatureStatus(U)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let I=0;I<x.length;I+=1){let L=await this.connection.sendTransaction(x[I],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var wt=class{constructor(e){this._owner=e}get publicKey(){return wt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return wt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return wt.isKeyPair(this._owner)}get isPublicKey(){return wt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!wt.isKeyPair(e)}};function $r(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}import{PublicKey as ue}from"@solana/web3.js";var Vs=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Es=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Xn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),ey=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),ty=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),ni=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Fs=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),ny=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Ds=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Ws=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),oy=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),ry=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),nl=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),ol=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),rl=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),il=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),qs=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),iy=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),sy=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),sl=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),al=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),ul=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),zn={IDO_PROGRAM_ID_V1:nl,IDO_PROGRAM_ID_V2:ol,IDO_PROGRAM_ID_V3:rl,IDO_PROGRAM_ID_V4:il};var ay={SERUM_MARKET:ue.default,OPENBOOK_MARKET:new ue("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ue.default,FarmV3:new ue("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ue("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ue("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ue("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ue("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ue("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:sl,CREATE_CPMM_POOL_AUTH:al,CREATE_CPMM_POOL_FEE_ACC:ul,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as cl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ll}from"@solana/spl-token";function Pe(r,e,t){return le([r.toBuffer(),(t!=null?t:ll).toBuffer(),e.toBuffer()],new cl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import At from"bn.js";var Yn=1e4;function we(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let o=E(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,s=new At(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Yn){let u=new At(i.maximumFee.toString());return{amount:r.add(u),fee:u,expirationTime:a}}else{let u=jn(r.mul(new At(Yn)),new At(Yn-i.transferFeeBasisPoints)),c=new At(i.maximumFee.toString()),l=u.sub(r).gt(c)?r.add(c):u,m=jn(l.mul(new At(i.transferFeeBasisPoints)),new At(Yn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=jn(r.mul(new At(i.transferFeeBasisPoints)),new At(Yn)),c=u.gt(s)?s:u;return{amount:r,fee:c,expirationTime:a}}}function xt(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function jn(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new At(0))?t.add(new At(1)):t}var Ce={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",SEND_TRANSACTION:"/send-transaction",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",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},Ny=C({},Ce);var Us="ray_tab_hash",oi="ray_req_hash",ml=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(Us);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(Us,r)),r},Xo=async n=>{var o=n,{logCount:r=1e3,removeLastLog:e}=o,t=Ie(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(oi)||"[]").slice(0,r-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(E(C({},t),{time:Date.now(),session:ml()}));try{localStorage.setItem(oi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let u=JSON.stringify(t.data).substring(0,100);i[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(oi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(u=>u())}return Xo(E(C({},t),{logCount:r,removeLastLog:!0}))}};var zo=se("Raydium_Api"),ri=new Map;var Yo=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=Gs.create({baseURL:this.urlConfigs.BASE_HOST||Ce.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return zo.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(zo.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:d}=a;return n&&Xo({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),zo.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:d}=a;return n&&Xo({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),zo.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ce.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ce.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Gs.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ce.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ce.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ce.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||Ce.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ce.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ce.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ce.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>ri.has(s)?(n.push(ri.get(s)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ce.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{ri.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:s="desc",page:a=1}=e,[u,c]=[t&&nt(t).toBase58(),n&&n!=="undefined"?nt(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ce.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ce.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ce.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ce.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ce.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ce.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ce.JITO})).data}};var jo="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Xs="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as yi,TOKEN_PROGRAM_ID as Qt,AccountLayout as xn,TOKEN_2022_PROGRAM_ID as Wl}from"@solana/spl-token";import{PublicKey as nr,SystemProgram as ql}from"@solana/web3.js";var ii=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),ke=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=se(t)}createTxBuilder(e){return this.scope.checkOwner(),new Go({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,enableJito:this.scope.enableJito,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(ii(e))}logInfo(...e){this.logger.info(ii(e))}logAndCreateError(...e){let t=ii(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as _l,createCloseAccountInstruction as vl,createTransferInstruction as Vl,TOKEN_PROGRAM_ID as Bn}from"@solana/spl-token";import{PublicKey as El,SystemProgram as Fl}from"@solana/web3.js";import Dl from"bn.js";import{PublicKey as ia,Keypair as Ll}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ol}from"@solana/spl-token";import Nl from"bn.js";import{PublicKey as Il}from"@solana/web3.js";import Hs,{isBN as Zs}from"bn.js";import{bits as pl,BitStructure as pb,blob as fl,Blob as fb,cstr as yb,f32 as bb,f32be as gb,f64 as wb,f64be as Ab,greedy as hb,Layout as yl,ns64 as Pb,ns64be as kb,nu64 as bl,nu64be as Tb,offset as Ib,s16 as Bb,s16be as xb,s24 as Sb,s24be as Kb,s32 as gl,s32be as Cb,s40 as Rb,s40be as Lb,s48 as Ob,s48be as Nb,s8 as Mb,seq as wl,struct as _b,Structure as Al,u16 as hl,u16be as vb,u24 as Vb,u24be as Eb,u32 as Pl,u32be as Fb,u40 as Db,u40be as Wb,u48 as qb,u48be as Ub,u8 as kl,UInt as Tl,union as Gb,Union as Xb,unionLayoutDiscriminator as zb,utf8 as Yb}from"@solana/buffer-layout";var Qo=yl,zs=Al;var si=Tl;var Ys=kl,St=hl;var ai=Pl;var js=bl;var Fe=gl;var Qs=wl;var pe=fl;var ui=pl;var nn=class extends Qo{constructor(t,n,o){super(t,o);this.blob=pe(t),this.signed=n}decode(t,n=0){let o=new Hs(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new Hs(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Ho=class extends Qo{constructor(t){super(8,t);this._lower=ui(ai(),!1),this._upper=ui(ai(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function D(r){return new si(1,r)}function Qe(r){return new si(4,r)}function w(r){return new nn(8,!1,r)}function Y(r){return new nn(16,!1,r)}function Js(r){return new nn(1,!0,r)}function Jo(r){return new nn(8,!0,r)}function $s(r){return new nn(16,!0,r)}var Zo=class extends Qo{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(r){return new Zo(pe(32),e=>new Il(e),e=>e.toBuffer(),r)}function qe(r){return new Zo(Ys(),Bl,xl,r)}function Bl(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function xl(r){return r?1:0}var ci=class extends zs{decode(e,t){return super.decode(e,t)}};function v(r,e,t){return new ci(r,e,t)}function X(r,e,t){let n,o=typeof e=="number"?e:Zs(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Zs(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,s)},set(i,s,a){return s==="count"&&(n=a),Reflect.set(i,s,a)}});return Qs(r,o,t)}var In=v([K("mint"),K("owner"),w("amount"),Qe("delegateOption"),K("delegate"),D("state"),Qe("isNativeOption"),w("isNative"),w("delegatedAmount"),Qe("closeAuthorityOption"),K("closeAuthority")]);function Sl(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function li(r,...e){if(!Sl(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 mi(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 ea(r,e){li(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var er=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),ht=(r,e)=>r<<32-e|r>>>e;var ug=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Kl(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function di(r){return typeof r=="string"&&(r=Kl(r)),li(r),r}var $o=class{clone(){return this._cloneInto()}},cg={}.toString;function ta(r){let e=n=>r().update(di(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Cl(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),u=n?4:0,c=n?0:4;r.setUint32(e+u,s,n),r.setUint32(e+c,a,n)}var na=(r,e,t)=>r&e^~r&t,oa=(r,e,t)=>r&e^r&t^e&t,tr=class extends $o{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=er(this.buffer)}update(e){mi(this);let{view:t,buffer:n,blockLen:o}=this;e=di(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let u=er(e);for(;o<=i-s;s+=o)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){mi(this),ea(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;Cl(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=er(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],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var Rl=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]),Yt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),jt=new Uint32Array(64),pi=class extends tr{constructor(){super(64,32,8,!1),this.A=Yt[0]|0,this.B=Yt[1]|0,this.C=Yt[2]|0,this.D=Yt[3]|0,this.E=Yt[4]|0,this.F=Yt[5]|0,this.G=Yt[6]|0,this.H=Yt[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:u}=this;return[e,t,n,o,i,s,a,u]}set(e,t,n,o,i,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|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)jt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=jt[m-15],p=jt[m-2],y=ht(d,7)^ht(d,18)^d>>>3,f=ht(p,17)^ht(p,19)^p>>>10;jt[m]=f+jt[m-7]+y+jt[m-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=ht(a,6)^ht(a,11)^ht(a,25),p=l+d+na(a,u,c)+Rl[m]+jt[m]|0,f=(ht(n,2)^ht(n,13)^ht(n,22))+oa(n,o,i)|0;l=c,c=u,u=a,a=s+p|0,s=i,i=o,o=n,n=p+f|0}n=n+this.A|0,o=o+this.B|0,i=i+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,o,i,s,a,u,c,l)}roundClean(){jt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ra=ta(()=>new pi);var xg=se("Raydium_Util");function sa({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:s}of t.value){let a=In.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:i,mint:u,amount:c,isAssociated:Pe(r,u,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),o.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:ia.default,amount:new Nl(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function Ue({fromPublicKey:r,programId:e=Ol}){let t=Ll.generate().publicKey.toBase58().slice(0,32);return{publicKey:Ml(r,t,e),seed:t}}function Ml(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),o=ra(n);return new ia(o)}function fi(r){let{mint:e,tokenAccount:t,owner:n,programId:o=Bn}=r;return _l(t,e,n,o)}function Kt(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Bn}=r;return vl(e,t,o,n,i)}async function _t(r){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(In.span,n),u=Z(t).add(new Dl(a)),c=Ue({fromPublicKey:o,programId:Bn});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[Fl.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:In.span,programId:Bn}),fi({mint:new El(Ve.address),tokenAccount:c.publicKey,owner:i,programId:Bn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[Kt({tokenAccount:c.publicKey,payer:o,owner:i})]}}function Qn({source:r,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Bn}){return Vl(r,e,t,BigInt(String(n)),o,i)}var Hn=class extends ke{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._clientOwnedToken=!!(n||o)}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 Pe(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 o=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Qt},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Wl},o.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=sa({owner:this.scope.ownerPubKey,solAccountResp:i,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}),t==null?void 0:t.commitment),{tokenAccounts:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=Qt,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:u}=a;if(u&&(!o||o&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new nr(t.tokenProgram||Qt),m=this.getAssociatedTokenAccount(n,new nr(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,A)=>h.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(o===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=yi(s,m,s,n,l);if(c){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(V.CreateATA);else if(!(A.owner.equals(l)&&xn.decode(A.data).mint.equals(n)&&xn.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(V.CreateATA);if(n.equals(H)&&o.amount){let A=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(f=o.amount)!=null?f:0,skipCloseAccount:u});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),o.amount&&(p.instructions.push(Qn({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:Qt})),p.instructionTypes.push(V.TransferAmount))}return u||(p.endInstructions.push(Kt({owner:s,payer:o.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:p}}else{let h=Ue({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(xn.span),k=ql.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:A+Number((g=(b=o.amount)==null?void 0:b.toString())!=null?g:0),space:xn.span,programId:l});return p.instructions.push(k,fi({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(V.CreateAccount),p.instructionTypes.push(V.InitAccount),u||(p.endInstructions.push(Kt({owner:s,payer:o.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=Qt,autoUnwrapWSOLToSOL:o}){var u;await this.fetchWalletTokenAccounts();let i=(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(!i){let c=this.getAssociatedTokenAccount(t,n),l=await yi(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],i=c}return o&&H.toBase58()===t.toBase58()&&(a.endInstructions=[Kt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:s=Qt,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new nr(H).equals(i)){let p=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:o,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=yi(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(Qt)&&xn.decode(f.data).mint.equals(i)&&xn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=Qt,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new nr(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=l,p=Ie(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=m,p=Ie(m,["tokenAccount"]);u=d,c.addInstruction(p)}return C({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as im}from"@solana/spl-token";import{PublicKey as ge,SystemProgram as sm}from"@solana/web3.js";import{PublicKey as ca}from"@solana/web3.js";var bi=v([D("instruction")]),gi=v([D("instruction")]),Ul=v([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Y("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),Gl=v([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),Y("perShareReward"),w("lastSlot"),w("perSlotReward")]),Xl=v([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),Y("perShareRewardA"),w("perSlotRewardA"),D("option"),K("rewardVaultB"),pe(7),w("totalRewardB"),Y("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),zl=v([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Y("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(Ul,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Yl=new Proxy(Gl,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(r,e,t)}}),jl=new Proxy(Xl,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(r,e,t)}}),or=new Proxy(zl,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var s;return E(C({},i),{rewardType:((s=Object.entries(Ht).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),Ql=v([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),wi=v([D("instruction"),w("nonce"),X(Ql,5,"rewardTimeInfo")]),Ai=v([D("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),hi=v([D("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),rw=v([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),Pi=v([w("state"),K("id"),K("owner"),w("deposited"),X(Y(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),iw=v([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),aa=v([w("state"),K("id"),K("owner"),w("deposited"),X(Y(),2,"rewardDebts"),X(w(),17)]),ua=v([w(),w("state"),K("id"),K("owner"),w("deposited"),X(Y(),5,"rewardDebts"),X(w(),16)]),ot=v([D("instruction"),w("amount")]),Hl=v([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Js("digitShift"),X(D(),7,"reserved1"),X(w(),7,"reserved2")]),Zl=v([pe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(D(),32,"reserved1"),X(Hl,4,"votingMints"),Jo("timeOffset"),D("bump"),X(D(),7,"reserved2"),X(w(),11,"reserved3")]),Jl=v([Jo("startTime"),Jo("endTime"),D("kind"),X(D(),15,"reserved")]),$l=v([X(Jl,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),D("votingMintConfigIdx"),X(D(),29,"reserved")]),em=v([pe(8),K("voterAuthority"),K("registrar"),X($l,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),X(D(),94,"reserved")]);var pw=se("Raydium_farm_config"),la=new ca("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ma=new ca("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var da={3:Pi,5:aa,6:ua},ki=r=>[3,5,6].indexOf(r)!==-1,Ti=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(s=i[e])==null?void 0:s.call(i)},Ht={"Standard SPL":0,"Option tokens":1},ut={[Vs.toString()]:3,[Es.toString()]:5,[Xn.toString()]:6};import{PublicKey as me,SystemProgram as ya,SYSVAR_RENT_PUBKEY as om,SYSVAR_CLOCK_PUBKEY as rr,TransactionInstruction as Pt}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Gw,TOKEN_PROGRAM_ID as Zt,ASSOCIATED_TOKEN_PROGRAM_ID as Xw}from"@solana/spl-token";import ba from"bn.js";import tm from"bn.js";var nm=se("Raydium.farm.util");function Zn({programId:r,poolId:e,mint:t,type:n}){let{publicKey:o}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return o}function ct({programId:r,poolId:e,owner:t,version:n}){let{publicKey:o}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return o}var pa=({programId:r,poolId:e})=>le([e.toBuffer()],r);function fa(r){return{isSet:new tm(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(Ht[r.rewardType])}}function Ii(r){return Z(r.endTime).sub(Z(r.openTime)).mul(Z(r.perSecond))}function Jn(r){let e=da[r];return e||nm.logWithError("invalid version",r),e}var rm=se("Raydium_farm_instruction"),rA={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 ir(r){let{version:e,id:t,ledger:n,programId:o,owner:i}=r,s={3:9,5:10}[e];s||rm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(bi.span);bi.encode({instruction:s},a);let u=[P({pubkey:t}),P({pubkey:n}),P({pubkey:i,isWritable:!1}),P({pubkey:ya.programId,isWritable:!1}),P({pubkey:om,isWritable:!1})];return{instruction:new Pt({programId:o,keys:u,data:a}),instructionType:V.FarmV3CreateLedger}}function ga(r){var n;let e=Buffer.alloc(wi.span);wi.encode({instruction:0,nonce:new ba(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...Dr,P({pubkey:r.farmId}),P({pubkey:r.farmAuthority,isWritable:!1}),P({pubkey:r.lpVault}),P({pubkey:r.lpMint,isWritable:!1}),P({pubkey:r.lockVault}),P({pubkey:r.lockMint,isWritable:!1}),P({pubkey:(n=r.lockUserAccount)!=null?n:Le}),P({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let o of r.rewardInfo)t.push(P({pubkey:o.rewardMint,isWritable:!1}),P({pubkey:o.rewardVault}),P({pubkey:o.userRewardToken}));return{instruction:new Pt({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function wa(r){let e=Buffer.alloc(gi.span);gi.encode({instruction:5},e);let t=[P({pubkey:Zt,isWritable:!1}),P({pubkey:r.id}),P({pubkey:r.authority,isWritable:!1}),P({pubkey:r.lpVault,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}),P({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Pt({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function Bi({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(Ai.span);Ai.encode({instruction:3,rewardReopenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardPerSecond:Z(o.perSecond)},i);let s=[P({pubkey:Zt,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:r,isWritable:!1,isSigner:!0})];return new Pt({programId:n.programId,keys:s,data:i})}function xi({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(hi.span);hi.encode({instruction:4,isSet:new ba(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(Ht[o.rewardType])},i);let s=[...Dr,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:o.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:r,isWritable:!1,isSigner:!0})];return new Pt({programId:t.programId,keys:s,data:i})}function $n(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(ot.span);ot.encode({instruction:2,amount:Z(s)},l);let m=[P({pubkey:Zt,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:o[d]}));return new Pt({programId:a,keys:m,data:l})}function eo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(ot.span);ot.encode({instruction:12,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:rr,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:o[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function to(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(ot.span);ot.encode({instruction:11,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:rr,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function Aa(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(ot.span);ot.encode({instruction:10,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:rr,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function ha(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(ot.span);ot.encode({instruction:11,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:rr,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:o[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function Pa(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(ot.span);ot.encode({instruction:1,amount:Z(s)},l);let m=[P({pubkey:Zt,isWritable:!1}),P({pubkey:ya.programId,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:o[d]}));return new Pt({programId:a,keys:m,data:l})}var no=class extends ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Le)){let n=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Ii(E(C({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Xn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ge(e.lpMint.address),lockInfo:{lockMint:la,lockVault:ma},version:6,rewardInfos:t,programId:o},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ue({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(or.span);u.addInstruction({instructions:[sm.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:or.span,programId:a.programId})]});let{publicKey:d,nonce:p}=pa({programId:new ge(a.programId),poolId:l.publicKey}),y=Zn({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(Ht[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(fa(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:c});S&&u.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Le)?new ge(Ve.address):B.mint;b.push({rewardMint:x,rewardVault:Zn({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new ge(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&u.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=ga({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return u.addInstruction({instructions:[A],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o}){var b;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((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(Le)?new ge(Ve.address):n.mint,l=a.rewardInfos.findIndex(g=>new ge(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let d=(b=m.vault)!=null?b:Le,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Bi({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o}){var l;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((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 d=m.mint.equals(Le)?new ge(Ve.address):m.mint,p=a.rewardInfos.findIndex(A=>new ge(A.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Le,{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 h=Bi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[h],instructionTypes:[V.FarmV6Restart]})}return c.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder(),l=o.mint.equals(Le)?new ge(Ve.address):o.mint,m=Zn({programId:new ge(n.programId),poolId:new ge(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:o,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,c.addInstruction({instructions:[xi({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:o})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of o){let m=l.mint.equals(Le)?new ge(Ve.address):l.mint,d=Zn({programId:new ge(n.programId),poolId:new ge(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=xi({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:E(C({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[V.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,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:d}=n,p=ut[d];ki(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ge(n.programId),new ge(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=ct({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let A={};for(let F of this.scope.account.tokenAccounts)if(a){let $=Pe(this.scope.ownerPubKey,F.mint,F.programId).publicKey;F.publicKey&&$.equals(F.publicKey)&&(A[F.mint.toString()]=F.publicKey)}else A[F.mint.toString()]=F.publicKey;let k=b.lpMint,B=A[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let F of m){let $=s&&F.mint.address===H.toString(),G=A[F.mint.address];if(!G){let{account:W,instructionParams:Ye}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:F.mint.programId,mint:new ge(F.mint.address),notUseTokenAccount:$,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!$,associatedOnly:$?!1:a,checkCreateATAOwner:u});G=W,Ye&&h.addInstruction(Ye)}A[F.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Jn(p).decode(x.data)),n.programId!==Xn.toString()&&!S){let{instruction:F,instructionType:$}=ir({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[F],instructionTypes:[$]})}let R=Ti({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:c==null?void 0:c.map(F=>new ge(F))},L=p===6?Pa(I):p===5?ha(I):Aa(I),U={3:V.FarmV3Deposit,5:V.FarmV5Deposit,6:V.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[U[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=ut[n.programId];ki(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(u){let I=Pe(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&I.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=ct({programId:new ge(n.programId),poolId:new ge(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);I||this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I}),Jn(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,h=s&&g===H.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ge(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:u,checkCreateATAOwner:c});A=R,I&&f.addInstruction(I)}b[g.toString()]=A;let k=[];for(let R of d){let I=s&&R.mint.address===H.toString(),L=b[R.mint.address];if(!L){let{account:U,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new ge(R.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:u,checkCreateATAOwner:c});L=U,F&&f.addInstruction(F)}b[R.mint.address]=L,k.push(L)}let B=Ti({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new ge(R))},S=p===6?$n(T):p===5?eo(T):to(T),x={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let o=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Le.toString()?new ge(Ve.address):t),a=o.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Le,c=this.createTxBuilder(),l;if(t.equals(Le)){let y=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Ii(E(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new _(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:[im(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:d}=wa({programId:o.programId,id:o.id,authority:o.authority,lpVault:o.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=Pe(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>E(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,A=ut[f],k=b.address,B=n&&k===H.toString(),T=m[k];if(!T){let{account:U,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ge(k),notUseTokenAccount:B,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=U,F&&l.addInstruction(F)}m[k.toString()]=T;let S=[];for(let U of g){let F=n&&U.mint.address===H.toString(),$=m[U.mint.address];if(!$){let{account:G,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:U.mint.programId,mint:new ge(U.mint.address),notUseTokenAccount:F,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!F,associatedOnly:F?!1:i,checkCreateATAOwner:s});$=G,W&&l.addInstruction(W)}m[U.mint.address]=$,S.push($)}let x=p[h],R={amount:at,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(U=>new ge(U))},I=A===6?$n(R):A===5?eo(R):to(R),L={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[L[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as Xe}from"@solana/web3.js";import{AccountLayout as qm,NATIVE_MINT as tu,TOKEN_PROGRAM_ID as Rn}from"@solana/spl-token";var SA=v([Qe("mintAuthorityOption"),K("mintAuthority"),w("supply"),D("decimals"),D("isInitialized"),Qe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as LA}from"@solana/web3.js";import{MintLayout as NA,TOKEN_PROGRAM_ID as _A}from"@solana/spl-token";var sr=r=>new he({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),oo=o=>{var i=o,{amount:r,isRaw:e,name:t}=i,n=Ie(i,["amount","isRaw","name"]);return new fe(new he({mint:nt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};var He=o=>{var i=o,{address:r,programId:e,decimals:t}=i,n=Ie(i,["address","programId","decimals"]);return C({chainId:101,address:nt(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Jt=r=>r?E(C({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:E(C({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(C({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as io,ASSOCIATED_TOKEN_PROGRAM_ID as hm}from"@solana/spl-token";import{PublicKey as Ct,TransactionInstruction as Kn,SystemProgram as Pm,SYSVAR_RENT_PUBKEY as sh}from"@solana/web3.js";var Si=v([D("instruction"),w("amountIn"),w("minAmountOut")]),Ki=v([D("instruction"),w("maxAmountIn"),w("amountOut")]),ZA=v([D("instruction"),D("nonce")]),am=v([D("instruction"),D("nonce"),w("startTime")]),ar=v([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),w("lpReserve"),X(w(),3,"padding")]),JA=v([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(w(),64,"padding")]),Ci=v([D("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Ri=v([D("instruction"),w("amountIn")]);var ka=v([w("fee")]);import{PublicKey as um}from"@solana/web3.js";var Sn=new um("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),rn=5e4,cm=v([w("x"),w("y"),w("price")]),lm=v([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(cm,rn,"DataElement")]);function mm(r,e){return[0,rn-2]}function dm(r){return[0,rn-2]}function pm(r){return[0,rn-2]}function fm(r,e,t){let[n,o]=mm(e,t),i=n,s=o,a=0,u=e*r.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=rn-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];i=a+1}}return[a,a,!1]}function Li(r,e,t){let[n,o,i]=fm(r,e,t);if(!i)return 0;if(n===o){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[o].x,c=r.DataElement[o].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*r.multiplier*l/p}}function on(r,e,t){return e*r.multiplier/t}function Ta(r,e,t){return e*t/r.multiplier}function ym(r,e){let[t,n]=dm(e),o=t,i=n,s=0,a=e;for(;o<i;){if(s=Math.floor((i+o)/2),s<=0||s>rn-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)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 bm(r,e){let[t,n]=pm(e),o=t,i=n,s=0,a=e;for(;o<=i;){if(s=Math.floor((i+o)/2),s<=0||s>=rn-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)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 Ia(r,e,t,n){let o=n?e+t:e-t,[i,s,a]=ym(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let u=r.DataElement[i].x,c=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=u&&e<=c)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=d-(o-u)*r.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-o)*r.multiplier/l),[y,f,!1,a]}}}function gm(r,e,t,n){let o=n?e-t:e+t,[i,s,a]=bm(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let u=r.DataElement[i].x,c=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=u+m*(d-o)/r.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(o-p)/r.multiplier),[y,f,!1,a]}}}function wm(r,e){let t=Ia(r,e,0,!1);return t[3]?t[0]:0}function Ba(r,e,t,n){let o=Li(r,e,t),i=on(r,e,o),s=on(r,t,o),a=on(r,n,o),u=!0,[c,l,m,d]=Ia(r,i,a,u);if(!d)return 0;if(m)return n*r.multiplier/c;{let p=s-l;return Ta(r,p,o)}}function xa(r,e,t,n){let o=Li(r,e,t),i=on(r,e,o),s=on(r,t,o),a=on(r,n,o),u=!1,[c,l,m,d]=gm(r,s,a,u);if(!d)return 0;if(m)return n*c/r.multiplier;{let p=i-l;return Ta(r,p,o)}}function Am(r){let e=lm.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 Sa(r,e,t,n){let o=wm(r,on(r,e,Li(r,e,t)))/r.multiplier;return n?o:1/o}var ro=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(Sn);e&&(this._layoutData=Am(e==null?void 0:e.data))}}};var Ka=se("Raydium_liquidity_instruction");function Ca(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:s}=r,a=Buffer.alloc(Ci.span);Ci.encode({instruction:3,baseAmountIn:Z(o),quoteAmountIn:Z(i),fixedSide:s==="base"?at:Bs},a);let u=[P({pubkey:io,isWritable:!1}),P({pubkey:new Ct(e.id)}),P({pubkey:new Ct(t.authority),isWritable:!1}),P({pubkey:new Ct(t.openOrders),isWritable:!1}),P({pubkey:new Ct(t.targetOrders)}),P({pubkey:new Ct(e.lpMint.address)}),P({pubkey:new Ct(t.vault.A)}),P({pubkey:new Ct(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(P({pubkey:Sn})),u.push(P({pubkey:new Ct(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new Ct(t.marketEventQueue),isWritable:!1})),new Kn({programId:new Ct(e.programId),keys:u,data:a})}function Oi(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:o}=r,i=Ee(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Ri.span);Ri.encode({instruction:4,amountIn:Z(o)},a);let u=[P({pubkey:io,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.mintLp.address}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return s===5?u.push(P({pubkey:Sn})):(u.push(P({pubkey:i.id})),u.push(P({pubkey:i.id}))),u.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks})),new Kn({programId:i.programId,keys:u,data:a})}return new Kn({programId:i.programId,keys:[]})}function Ra({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:A,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=v([D("instruction"),D("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:io,isSigner:!1,isWritable:!1},{pubkey:hm,isSigner:!1,isWritable:!1},{pubkey:Pm.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:A,coinAmount:k,pcAmount:B},I),{instruction:new Kn({keys:R,programId:r,data:I}),instructionType:V.AmmV4CreatePool}}function km({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},o){let i=Ee(r),s=Buffer.alloc(Si.span);Si.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[P({pubkey:io,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders})];return o===4&&a.push(P({pubkey:i.targetOrders})),a.push(P({pubkey:i.vault.A}),P({pubkey:i.vault.B})),o===5&&a.push(P({pubkey:Sn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new Kn({programId:i.programId,keys:a,data:s})}function Tm({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},o){let i=Ee(r),s=Buffer.alloc(Ki.span);Ki.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[P({pubkey:io,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return o===5&&a.push(P({pubkey:Sn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Kn({programId:i.programId,keys:a,data:s})}function ur(r){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return km(E(C({},a),{amountIn:o,minAmountOut:i}),t);if(s==="out")return Tm(E(C({},a),{maxAmountIn:o,amountOut:i}),t);Ka.logWithError("invalid params","params",r)}throw Ka.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{TOKEN_PROGRAM_ID as De,TOKEN_2022_PROGRAM_ID as $t,ASSOCIATED_TOKEN_PROGRAM_ID as Ya}from"@solana/spl-token";import{PublicKey as q,TransactionInstruction as Tt,SystemProgram as Cn,Keypair as Wi}from"@solana/web3.js";import ja from"bn.js";import Om from"bn.js";function cr(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Ni(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Mi(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function so(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function La(r,e){return so(r,e)?null:Ni(r,e)}function Oa(r,e){return so(r,e)?null:Mi(r,e)}var hh=Buffer.from("amm_config","utf8"),Im=Buffer.from("pool","utf8"),Bm=Buffer.from("pool_vault","utf8"),xm=Buffer.from("pool_reward_vault","utf8"),Na=Buffer.from("position","utf8"),Sm=Buffer.from("tick_array","utf8"),Km=Buffer.from("operation","utf8"),Cm=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Ma(r,e,t,n){return le([Im,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function _i(r,e,t){return le([Bm,e.toBuffer(),t.toBuffer()],r)}function _a(r,e,t){return le([xm,e.toBuffer(),t.toBuffer()],r)}function ye(r,e,t){return le([Sm,e.toBuffer(),cr(t)],r)}function sn(r,e,t,n){return le([Na,e.toBuffer(),cr(t),cr(n)],r)}function lt(r,e){return le([Na,e.toBuffer()],r)}function lr(r){return le([Buffer.from("metadata","utf8"),hn.toBuffer(),r.toBuffer()],hn)}function ao(r){return le([Km],r)}function rt(r,e){return le([Cm,e.toBuffer()],r)}import mt from"bn.js";var Be=new mt(0),it=new mt(1),vt=new mt(-1),st=new mt(1).shln(64),mr=new mt(1).shln(128),vi=st.sub(it),uo=64,va=mr.subn(1),Ge=-443636,Ze=-Ge,Rt=new mt("4295048016"),Lt=new mt("79226673521066979257578248091"),dr=new mt("4295048017"),pr=new mt("79226673521066979257578248090"),Va=16,Ea="59543866431248",Fa="184467440737095516",Da="15793534762490258745",fr=new mt(10).pow(new mt(6));var Wa={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:[]},Th=new mt("18446744073700000000");var Rm=15,ae=class{static async getTickArrays(e,t,n,o,i,s,a){let u=[],c=j.getTickArrayStartIndexByTick(o,i),l=j.getInitializedTickArrayInRange(s,a,i,c,Math.floor(Rm/2));for(let p=0;p<l.length;p++){let{publicKey:y}=ye(t,n,l[p]);u.push(y)}let m=(await gt(e,u)).map(p=>p!==null?co.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=E(C({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,o,i,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,o,i,s);for(;a==null||a.liquidityGross.lten(0);){if(c=j.getNextTickArrayStartIndex(c,i,s),this.checkIsValidStartIndex(c,i))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,o,i){let s=Math.floor(e/ae.tickCount(t)),a=n?j.searchLowBitFromStart(o,i,s-1,1,t):j.searchHightBitFromStart(o,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let i;if(o){let a=Oe-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a-1}}else{let a=0;for(;a<Oe;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a+1}}let{publicKey:s}=ye(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,s){let a=j.getTickArrayStartIndexByTick(o,i),u=Math.floor((o-a)/i),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u-1}else for(u=u+1;u<Oe;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=ye(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(j.checkIsOutOfBoundary(e)){if(e>Ze)return!1;let n=j.getTickArrayStartIndexByTick(Ge,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Oe*e}};import re from"bn.js";import{PublicKey as kt}from"@solana/web3.js";import xe from"bn.js";var Vi=14,Vt=class{static maxTickInTickarrayBitmap(e){return e*Oe*an}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let i=n*o;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!ae.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=o?t-ae.tickCount(n):t+ae.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Oe,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(o){let l=e.shln(1024-c-1),m=La(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(c),m=Oa(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-ae.tickCount(n)}}}},lo=class{static getBitmapOffset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Vt.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;if(Ze<=t)throw Error(`extensionTickBoundary check error: ${Ze}, ${t}`);if(n<=Ge)throw Error(`extensionTickBoundary check error: ${n}, ${Ge}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=ae.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:s}=Vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let u=j.mergeTickArrayBitmap(e).shln(an-1-a),c=so(512,u)?null:Ni(512,u);if(c!==null){let l=t-c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let u=j.mergeTickArrayBitmap(e).shrn(a),c=so(512,u)?null:Mi(512,u);if(c!==null){let l=t+c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-ae.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Vt.maxTickInTickarrayBitmap(t),o=Math.floor(n/ae.tickCount(t));return e<0&&n!=0&&(o=an-o),o}};import Ot from"bn.js";var mo=class{static getfeeGrowthInside(e,t,n){let o=new Ot(0),i=new Ot(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Ot(0),a=new Ot(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=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),c=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new Ot(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),u))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new Ot(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),u))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:s}){var b,g,h,A;let a=oe.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),u=oe.getSqrtPriceX64FromTick(t.tickLower),c=oe.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=ce.getAmountsFromLiquidity(a,u,c,n,i),[d,p]=[we(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),we(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[we(new Ot(new _(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),we(new Ot(new _(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as qa}from"@solana/spl-token";var Se=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,s=!1){let a=n.toBase58()===e.mintA.address,u=[],{isExist:c,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!c||l===void 0||!m)throw new Error("Invalid tick array");u.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=un.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,i,s);return u.push(...y),{allTrade:d,expectedAmountOut:p.mul(vt),remainingAccounts:u,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){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}=ye(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=un.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(vt),c,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Se.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?lo.checkTickArrayIsInit(ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=ye(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=ye(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/ae.tickCount(e.tickSpacing)),o=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=Vt.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=lo.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Ge||t>Ze)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,u,c;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(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(d===void 0)throw Error("get new reward mint info error");let p=E(C({},m),{perSecond:te.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new kt(d)});if(p.tokenMint.equals(kt.default))continue;if(n<=p.openTime.toNumber()||o.eq(Be)){s.push(p);continue}let y=new xe(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=te.mulDivFloor(f,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),h=te.mulDivFloor(f,p.emissionsPerSecondX64,st),A=p.rewardTotalEmissioned.add(h);s.push(E(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let s=j.getTickArrayStartIndexByTick(i,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;return t>Ze&&(t=ae.getArrayStartIndex(Ze,e)+ae.tickCount(e)),n<Ge&&(n=ae.getArrayStartIndex(Ge,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/ae.tickCount(t)*an}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await Ne(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of o)s.accountInfo!==null&&(i[s.pubkey.toString()]=Ga.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let u of t){let c=j.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=j.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=ye(u.programId,u.id,m);i.push({pubkey:d}),o[d.toString()]=u.id}}let s=await Ne(e,i,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=o[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=co.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=E(C({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!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(d=>d.accountInfo.mint),c=[];for(let d of u)for(let p of s)c.push(lt(p,d).publicKey);let l=await gt(t,c,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=yr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA:A,amountB:k,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>E(C({},x),{pendingReward:new xe(0)})),leverage:B,tokenFeeAmountA:new xe(0),tokenFeeAmountB:new xe(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await gt(t,d,{batchRequest:o}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=co.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[A].toString()],T=k.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await mo.GetPositionFees(f,g,T,S),I=await mo.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new xe(0))?x:new xe(0),g.tokenFeeAmountB=R.gte(new xe(0))?R:new xe(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new xe(0))?I[L]:new xe(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:s,priceLimit:a=new _(0),catchLiquidityInsufficient:u=!1}){var U;let c,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new _(0))?c=l?Rt.add(new xe(1)):Lt.sub(new xe(1)):c=oe.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=we(i,m,o,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Se.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((U=p.fee)!=null?U:Be),c,u),A=we(f,d,o,!1),k=oe.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new _(1).div(k),T=f.mul(new xe(Math.floor((1-s)*1e10))).div(new xe(1e10)),S=we(T,d,o,!1),x=l?e.currentPrice:new _(1).div(e.currentPrice),R=new _(B).sub(x).abs(),I=x,L=new je(new _(R).mul(10**15).toFixed(0),new _(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:xt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let u=o.address===e.mintB.address,[c,l]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new he(E(C({},c),{mint:c.address,isToken2022:c.programId===qa.toBase58()})),new he(E(C({},l),{mint:l.address,isToken2022:l.programId===qa.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:A,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Se.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new kt(c.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=E(C({},y),{amount:new fe(m,y.amount),fee:y.fee===void 0?void 0:new fe(m,y.fee)}),R=E(C({},f),{amount:new fe(d,f.amount),fee:f.fee===void 0?void 0:new fe(d,f.fee)}),I=E(C({},b),{amount:new fe(d,b.amount),fee:b.fee===void 0?void 0:new fe(d,b.fee)}),L=new $e({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:h.mul(new _(10**(20+d.decimals))).toFixed(0)}),U=new $e({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:A.mul(new _(10**(20+d.decimals))).toFixed(0)}),F=new fe(m,B);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:I,expirationTime:g,currentPrice:L,executionPrice:U,priceImpact:k,fee:F,remainingAccounts:T,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var y,f,b;let i=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),u=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-u,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[nt(e.mintA.address).toString()],d=o[nt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=oe.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),b=oe.getSqrtPriceX64FromTick(s),g=oe.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new _(h.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(A.toString()).div(new _(10).pow(y)).mul(d.value)),S=new _(k.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(B.toString()).div(new _(10).pow(y)).mul(d.value)),x=new _(1).div(T.add(S)),I=new _(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),L=3600*24*365,U=e.rewardDefaultInfos.map(F=>{var W,Ye;let $=F.mint.decimals,G=o[F.mint.address];return u<((W=F.startTime)!=null?W:0)||u>((Ye=F.endTime)!=null?Ye:0)||!F.perSecond||!G||$===void 0?0:new _(G.value).mul(new _(F.perSecond).mul(L)).div(new _(10).pow($)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:U,apr:I+U.reduce((F,$)=>F+$,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,h;let l=oe.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),m=oe.getSqrtPriceX64FromTick(n),d=oe.getSqrtPriceX64FromTick(o),p=a?1-s:1+s,y=we(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new xe(new _(y.amount.sub((h=y.fee)!=null?h:Be).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new xe(0);else if(l.lte(d)){let A=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new xe(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Se.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:o,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:s,add:a}){var b,g,h,A;let u=oe.getSqrtPriceX64FromTick(n),c=oe.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(oe.priceToSqrtPriceX64(new _(t.price),t.mintA.decimals,t.mintB.decimals),u,c,i,a),[d,p]=[we(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),we(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[we(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),we(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(u=>!n[u.id]).map(u=>new kt(u.id));(await gt(e,o)).forEach((u,c)=>{!u||(n[o[c].toBase58()]=cn.decode(u.data))});let s=t.map(u=>rt(new kt(u.programId),new kt(u.id)).publicKey),a=await Se.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((u,c)=>E(C({},u),{[c.id]:E(C({},n[c.id]),{id:new kt(c.id),version:6,programId:new kt(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:E(C({},c.config),{id:new kt(c.config.id),fundOwner:""}),currentPrice:new _(c.price),exBitmapInfo:a[rt(new kt(c.programId),new kt(c.id)).publicKey.toBase58()],startTime:n[c.id].startTime.toNumber()})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};var Ei={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Ua(r){return E(C({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:Ei,week:Ei,month:Ei,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:E(C({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var te=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(Be)||(i=i.add(it)),i}static mulDivFloor(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).add(n.sub(it)).div(n)}static x64ToDecimal(e,t){return new _(e.toString()).div(_.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(_.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(mr).sub(t).mod(mr)}};function Me(r,e){return Fi(r.mul(e),64,256)}function Lm(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Fi(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var oe=class{static sqrtPriceX64ToPrice(e,t,n){return te.x64ToDecimal(e).pow(2).mul(_.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return te.decimalToX64(e.mul(_.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(Be))return e;let i=t.shln(uo);if(o){let s=i,a=i.add(n.mul(e));return a.gte(s)?te.mulDivCeil(s,e,a):te.mulDivRoundingUp(s,it,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return te.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(uo);if(o)return e.add(i.div(t));{let s=te.mulDivRoundingUp(i,it,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<Ge||e>Ze)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=Me(n,new re("18444899583751176192"))),(t&4)!=0&&(n=Me(n,new re("18443055278223355904"))),(t&8)!=0&&(n=Me(n,new re("18439367220385607680"))),(t&16)!=0&&(n=Me(n,new re("18431993317065453568"))),(t&32)!=0&&(n=Me(n,new re("18417254355718170624"))),(t&64)!=0&&(n=Me(n,new re("18387811781193609216"))),(t&128)!=0&&(n=Me(n,new re("18329067761203558400"))),(t&256)!=0&&(n=Me(n,new re("18212142134806163456"))),(t&512)!=0&&(n=Me(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=Me(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=Me(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=Me(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=Me(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=Me(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=Me(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=Me(n,new re("696457651848324352"))),(t&131072)!=0&&(n=Me(n,new re("26294789957507116"))),(t&262144)!=0&&(n=Me(n,new re("37481735321082"))),e>0&&(n=va.div(n)),n}static getTickFromPrice(e,t,n){return oe.getTickFromSqrtPriceX64(oe.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Lt)||e.lt(Rt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),o=Lm(n,32,128),i=new re("8000000000000000","hex"),s=0,a=new re(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new re(0))&&s<Va;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let c=a.shrn(32),m=o.add(c).mul(new re(Ea)),d=Fi(m.sub(new re(Fa)),64,128).toNumber(),p=Fi(m.add(new re(Da)),64,128).toNumber();return d==p?d:oe.getSqrtPriceX64FromTick(p).lte(e)?p:d}},ln=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=oe.getTickFromSqrtPriceX64(oe.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let i=ln.getTickWithPriceAndTickspacing(e,t,n,o),s=oe.getSqrtPriceX64FromTick(i);return oe.sqrtPriceX64ToPrice(s,n,o)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Be))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(uo),s=t.sub(e);return o?te.mulDivRoundingUp(te.mulDivCeil(i,s,t),it,e):te.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Be))throw new Error("sqrtPriceX64A must greater than 0");return o?te.mulDivCeil(n,t.sub(e),st):te.mulDivFloor(n,t.sub(e),st)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return o?te.mulDivRoundingUp(a,it,vi):a.shrn(uo)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),te.mulDivFloor(n,vi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,o,!1),a=ce.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,o,i),a=ce.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,s,a){let{amountA:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,o,s),l=i?1+a:1-a,m=new re(new _(u.toString()).mul(l).toFixed(0)),d=new re(new _(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:i,add:s,epochInfo:a,amountAddFee:u}){var h,A,k,B;let c=oe.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),l=oe.getSqrtPriceX64FromTick(t),m=oe.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(c,l,m,o,s),[y,f]=[we(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),we(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[we(new re(new _(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,u),we(new re(new _(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,u)];return{liquidity:o,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:xt(y.expirationTime,f.expirationTime)}}},un=class{static swapCompute(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f=!1){if(d.eq(Be))throw new Error("amountSpecified must not be 0");if(y||(y=s?Rt.add(it):Lt.sub(it)),s){if(y.lt(Rt))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(Lt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(Be),g={amountSpecifiedRemaining:d,amountCalculated:Be,sqrtPriceX64:m,tick:c>p?Math.min(p+ae.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new re(0)},h=p,A=n[p],k=0,B=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Be)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(A,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Se.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},h,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=L.nextStartIndex;let{publicKey:U}=ye(e,t,h);R=U,A=n[h];try{x=j.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<Ge?T.tickNext=Ge:T.tickNext>Ze&&(T.tickNext=Ze),T.sqrtPriceNextX64=oe.getSqrtPriceX64FromTick(T.tickNext);let I;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?I=y:I=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=un.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=x.liquidityNet;s&&(L=L.mul(vt)),g.liquidity=ce.addDelta(g.liquidity,L)}B=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=oe.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&A.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=ae.nextInitializedTickArray(g.tick,l,s,o,i);S&&p!==T&&(g.accounts.push(ye(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Be,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,i){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),u=o.gte(Be);if(u){let l=te.mulDivFloor(o,fr.sub(new re(i.toString())),fr);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=oe.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(vt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=oe.getNextSqrtPriceX64FromOutput(e,n,o.mul(vt),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(o.mul(vt))&&(s.amountOut=o.mul(vt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=o.sub(s.amountIn):s.feeAmount=te.mulDivCeil(s.amountIn,new re(i),fr.sub(new re(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Oe=60,an=512,j=class{static getTickArrayAddressByTick(e,t,n,o){let i=j.getTickArrayStartIndexByTick(n,o),{publicKey:s}=ye(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=Oe)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=ae.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*ae.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Oe,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*Oe,i=Math.floor(t/o)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Oe:e+t*Oe}static mergeTickArrayBitmap(e){let t=new Om(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,i){let s=Math.floor(o/(n*Oe));return[...j.searchLowBitFromStart(e,t,s-1,i,n),...j.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,an,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,o,i);for(let u of a){let{publicKey:c}=ye(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,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>j.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===o)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>j.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===o)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Ge||e>Ze}static nextInitTick(e,t,n,o,i){if(ae.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<Oe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Oe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Oe;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=oe.getSqrtPriceX64FromTick(t),i=oe.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new _(1).div(t),i=ln.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=oe.getSqrtPriceX64FromTick(i),a=oe.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=oe.getSqrtPriceX64FromTick(t),i=oe.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new _(1).div(t),i=ln.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=oe.getSqrtPriceX64FromTick(i),a=oe.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}};var Xa=v([pe(8),D("bump"),St("index"),K(""),Qe("protocolFeeRate"),Qe("tradeFeeRate"),St("tickSpacing"),X(w(),8,"")]),Nm=v([Qe("blockTimestamp"),Y("sqrtPriceX64"),Y("cumulativeTimePriceX64"),X(Y(),1,"")]),Di=v([pe(8),qe("initialized"),K("poolId"),X(Nm,1e3,"observations"),X(Y(),5,"")]),Mm=v([D("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Y("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Y("rewardGrowthGlobalX64")]),cn=v([pe(8),D("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),St("tickSpacing"),Y("liquidity"),Y("sqrtPriceX64"),Fe("tickCurrent"),St("observationIndex"),St("observationUpdateDuration"),Y("feeGrowthGlobalX64A"),Y("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Y("swapInAmountTokenA"),Y("swapOutAmountTokenB"),Y("swapInAmountTokenB"),Y("swapOutAmountTokenA"),D("status"),X(D(),7,""),X(Mm,3,"rewardInfos"),X(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),X(w(),15*4-3,"padding")]),_m=v([Y("growthInsideLastX64"),w("rewardAmountOwed")]),yr=v([pe(8),D("bump"),K("nftMint"),K("poolId"),Fe("tickLower"),Fe("tickUpper"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(_m,3,"rewardInfos"),X(w(),8,"")]),LP=v([pe(8),D("bump"),K("poolId"),Fe("tickLowerIndex"),Fe("tickUpperIndex"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Y(),3,"rewardGrowthInside"),X(w(),8,"")]),vm=v([Fe("tick"),$s("liquidityNet"),Y("liquidityGross"),Y("feeGrowthOutsideX64A"),Y("feeGrowthOutsideX64B"),X(Y(),3,"rewardGrowthsOutsideX64"),X(Qe(),13,"")]),co=v([pe(8),K("poolId"),Fe("startTickIndex"),X(vm,Oe,"ticks"),D("initializedTickCount"),X(D(),115,"")]),za=v([pe(329),X(K(),100,"whitelistMints")]),Ga=v([pe(8),K("poolId"),X(X(w(),8),Vi,"positiveTickArrayBitmap"),X(X(w(),8),Vi,"negativeTickArrayBitmap")]);var Qa=se("Raydium_Clmm"),It={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]},Te=class{static createPoolInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y){let f=v([Y("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Cn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...It.createPool,...g]);return new Tt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:o,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ue({fromPublicKey:o,programId:n}),[d,p]=[new q(i.address),new q(s.address)],y=[Cn.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Di.span),space:Di.span,programId:n})],{publicKey:f}=Ma(n,a,d,p),{publicKey:b}=_i(n,f,d),{publicKey:g}=_i(n,f,p);return y.push(this.createPoolInstruction(n,f,o,a,m.publicKey,d,b,new q(i.programId||De),p,g,new q(s.programId||De),rt(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,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I){let L=v([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),D("optionBaseFlag"),qe("baseFlag")]),U=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,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:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:Cn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Ya,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...U],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},$);let G=Buffer.from([...It.openPosition,...$]);return new Tt({keys:F,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new q(e.programId),new q(e.id)],y;if(l)y=new q((await l(1))[0]);else{let x=Wi.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=ye(d,p,f),{publicKey:h}=ye(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=lr(y),{publicKey:B}=lt(d,y),{publicKey:T}=sn(d,p,o,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),o,i,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new q(e.programId),new q(e.id)],y;if(l)y=new q((await l(1))[0]);else{let x=Wi.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=ye(d,p,f),{publicKey:h}=ye(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=lr(y),{publicKey:B}=lt(d,y),{publicKey:T}=sn(d,p,o,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),o,i,f,b,c,s,a,u,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?rt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I){let L=v([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),D("optionBaseFlag"),qe("baseFlag")]),U=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,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:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:Cn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Ya,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...U],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new ja(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},$);let G=Buffer.from([...It.openPosition,...$]);return new Tt({keys:F,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new q((await l(1))[0]);else{let x=Wi.generate();d.push(x),m=x.publicKey}let[p,y]=[new q(e.programId),new q(e.id)],f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=ye(p,y,f),{publicKey:h}=ye(p,y,b),{publicKey:A}=Pe(n.wallet,m,De),{publicKey:k}=lr(m),{publicKey:B}=lt(p,m),{publicKey:T}=sn(p,y,o,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(t.mintA.address),new q(t.mintB.address),o,i,f,b,s,a,u,c,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?rt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i){let s=v([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Cn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...It.closePosition,...u]);return new Tt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o}){let i=new q(e.programId),{publicKey:s}=Pe(n.wallet,o.nftMint,De),{publicKey:a}=lt(i,o.nftMint),u=[];return u.push(this.closePositionInstruction(i,n.wallet,o.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=v([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),D("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,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:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:s,amountMaxB:a}){let[u,c]=[new q(e.programId),new q(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=ye(u,c,l),{publicKey:p}=ye(u,c,m),{publicKey:y}=Pe(o.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=sn(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,o.wallet,y,f,c,b,d,p,o.tokenAccountA,o.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?rt(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,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:o,base:i,baseAmount:s,otherAmountMax:a}){let[u,c]=[new q(e.programId),new q(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=ye(u,c,l),{publicKey:p}=ye(u,c,m),{publicKey:y}=Pe(o.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=sn(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,o.wallet,y,f,c,b,d,p,o.tokenAccountA,o.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?rt(u,c).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=v([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),D("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,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:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:new ja(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=v([Y("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...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()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,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:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:Mo,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...It.decreaseLiquidity,...S]);return new Tt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new q(e.programId),new q(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=ye(c,l,m),{publicKey:y}=ye(c,l,d),{publicKey:f}=Pe(o.wallet,n.nftMint,u),{publicKey:b}=lt(c,n.nftMint),{publicKey:g}=sn(c,l,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new q(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new q(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),h,i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?rt(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[V.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f,b,g){let h=v([w("amount"),w("otherAmountThreshold"),Y("sqrtPriceLimitX64"),qe("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:Mo,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...It.swap,...B]);return new Tt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new q(e.programId),new q(e.id)],[d,p]=[new q(t.vault.A),new q(t.vault.B)],[y,f]=[new q(e.mintA.address),new q(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new q(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,rt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,s,a,u,c,l,m,d){let p=v([w("openTime"),w("endTime"),Y("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Cn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...It.initReward,...f]);return new Tt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new q(e.programId),new q(e.id)],a=_a(i,s,o.mint).publicKey,u=ao(i).publicKey,c=[this.initRewardInstruction(i,n.wallet,s,u,new q(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,s,a,u,c,l,m,d){let p=v([D("rewardIndex"),Y("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,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(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...It.setRewardEmissions,...f]);return new Tt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new q(e.programId),new q(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,u=new q(t.rewardInfos[d].vault),c=new q(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&Qa.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=ao(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new q(e.config.id),n.tokenAccount,u,c,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,s,a){let u=v([D("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:Mo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...It.collectReward,...l]);return new Tt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,s]=[new q(e.programId),new q(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,u=new q(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&Qa.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,u,o,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:o,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new q(e.programId),new q(e.id)],[m,d]=[new q(t.vault.A),new q(t.vault.B)],[p,y]=[new q(e.mintA.address),new q(e.mintB.address)],f=e.mintA.address===o.toString(),b=[this.swapInstruction(c,n.wallet,l,new q(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,u,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[V.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as Fm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Dm}from"@solana/spl-token";import{PublicKey as Vm}from"@solana/web3.js";import Ha from"bn.js";var Za=new Ha(25),Ja=new Ha(1e4);var Em=se("Raydium_liquidity_serum");function $a({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=Vm.createProgramAddressSync(i,r)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw Em.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 pk from"bn.js";function br({programId:r}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function mn({name:r,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function Wm({programId:r,marketId:e}){let{publicKey:t}=le([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function Ui({programId:r}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function eu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:u}){let c=mn({name:"amm_associated_seed",programId:a,marketId:t}),l=mn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Ui({programId:a}),p=mn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=mn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=mn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Wm({programId:a,marketId:t}),g=mn({name:"target_associated_seed",programId:a,marketId:t}),h=mn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=$a({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:Fm.default,configId:br({programId:a})}}var qi={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},gr=r=>{let e={},t=Dm.toBase58();return Object.keys(r).map(n=>{let o=r[n],[i,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:He({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:He({address:s,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new _(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new _(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new _(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:qi,week:qi,month:qi,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:br({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:He({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())})}}),e};import tt from"bn.js";var po=class extends ke{constructor(t){super(t);this.stableLayout=new ro({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let s=new tt(new _(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=sr(t[i?"mintB":"mintA"]),[u,c]=[new tt(new _(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new tt(new _(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new tt(new _(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=at;s.isZero()||(d=m==="base"?Fo(s.mul(c),u):Fo(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Fo(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let f=new je(new tt(1)).add(o).mul(d).quotient,b=new fe(a,d),g=new fe(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:s,fixedSide:a,config:u,txVersion:c,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new Xe(n.lpMint.address)}),A=[y,f],k=[b,g],B=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(A.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=A,[I,L]=k,[U,F]=B,$=o!=null?o:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Nt=await m.handleTokenAccount({side:"in",amount:U,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:W}=Nt,Ye=Ie(Nt,["tokenAccount"]);G.addInstruction(Ye);let gn=await m.handleTokenAccount({side:"in",amount:F,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:yn}=gn,en=Ie(gn,["tokenAccount"]);G.addInstruction(en);let Bo=await m.handleTokenAccount({side:"out",amount:0,mint:new Xe(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Dt}=Bo,bn=Ie(Bo,["tokenAccount"]);return G.addInstruction(bn),G.addInstruction({instructions:[Ca({poolInfo:n,poolKeys:$,userKeys:{baseTokenAccount:W,quoteTokenAccount:yn,lpTokenAccount:Dt,owner:this.scope.ownerPubKey},baseAmountIn:U,quoteAmountIn:F,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5AddLiquidity:V.AmmV4AddLiquidity],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),c===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,amountIn:i,config:s,txVersion:a,computeBudgetConfig:u}=t,c=o!=null?o:await this.getAmmPoolKeys(n.id),[l,m,d]=[new Xe(n.mintA.address),new Xe(n.mintB.address),new Xe(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:A}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:k}=x,B=Ie(x,["tokenAccount"]);g.addInstruction(B);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:T}=R,S=Ie(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[Oi({poolInfo:n,poolKeys:c,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(u),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Rn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(c);let g={};for(let W of this.scope.account.tokenAccountRawInfos)(g[W.accountInfo.mint.toString()]===void 0||Pe(this.scope.ownerPubKey,W.accountInfo.mint,Rn).publicKey.equals(W.pubkey))&&(g[W.accountInfo.mint.toString()]=W.pubkey);let h=g[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let A=o.add(a!=null?a:new tt(0)),k=t.mintA.address===he.WSOL.mint.toString(),B=t.mintB.address===he.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Xe(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Xe(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let W=ut[s.programId],Ye=ct({programId:new Xe(s.programId),poolId:new Xe(s.id),owner:this.scope.ownerPubKey,version:W}),yn,en=await this.scope.connection.getAccountInfo(Ye);if(en&&(yn=Jn(W).decode(en.data)),W!==6&&!yn){let{instruction:Wt,instructionType:Or}=ir({id:new Xe(s.id),programId:new Xe(s.programId),version:W,ledger:Ye,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Wt],instructionTypes:[Or]})}let Dt=[];for(let Wt of s.rewardInfos){let Or=Wt.mint.address===he.WSOL.mint.toString();if(g[Wt.mint.address])Dt.push(g[Wt.mint.address]);else{let{account:$i,instructionParams:es}=await this.scope.account.getOrCreateTokenAccount({mint:new Xe(Wt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Or,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});$i||this.logAndCreateError("farm reward account not found:",Wt.mint.address),es&&b.addInstruction(es),Dt.push($i)}}let bn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Nt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:bn,lpAccount:h,rewardAccounts:Dt},gn=ut[s.programId],Bo=gn===6?$n(Nt):gn===5?eo(Nt):to(Nt),Ku={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};b.addInstruction({instructions:[Bo],instructionTypes:[Ku[gn]]})}let I=await this.getAmmPoolKeys(t.id),L=Oi({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[U,F]=t.mintA.address===n.mintA.address?[T,x]:[x,T],$=await this.scope.clmm.getClmmPoolKeys(t.id),G=await Te.openPositionFromBaseInstructions(E(C({poolInfo:n,poolKeys:$,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:U,tokenAccountB:F},withMetadata:"create"},i),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var U;let b=c.feePayer||((U=this.scope.owner)==null?void 0:U.publicKey),g=c.useSOLBalance&&o.mint.equals(tu),h=c.useSOLBalance&&i.mint.equals(tu),A=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=eu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId: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:I,instructionType:L}=Ra(E(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:Pe(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[I],instructionTypes:[L]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=br({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return ka.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:s}){let[a,u]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:c,quoteReserve:l}=t,m=[c,l],d=a==t.mintA.address?"base":"quote";d==="quote"&&m.reverse();let[p,y]=m,f=t.version===4,b;if(f)b=new _(y.toString()).div(p.toString());else{let I=Sa(this.stableLayout.stableModelData,c.toNumber(),l.toNumber(),!1);d==="quote"?b=new _(1e6).div(I*1e6):b=new _(I*1e6).div(1e6)}let g=n,h=new tt(0),A=new tt(0);if(!g.isZero())if(f){A=jn(g.mul(Za),Ja);let I=g.sub(A),L=p.add(I);h=y.mul(I).div(L)}else{A=g.mul(new tt(2)).div(new tt(1e4));let I=g.sub(A);d==="quote"?h=new tt(Ba(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber())):h=new tt(xa(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber()))}let k=new tt(new _(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new _(h.toString()).div(new _(g.sub(A).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new _(h.toString()).div(g.sub(A).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:A}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:s,fixedSide:a,txVersion:u,config:c,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=c||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===H.toBase58(),h=y&&b.address===H.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Xe(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Xe(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d});m.addInstruction(T||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:h,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[ur({version:x,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[x===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await Ne(this.scope.connection,t.map(l=>({pubkey:new Xe(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=ar.decode(m.accountInfo.data);i[String(t[l])]=E(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},u=await Ne(this.scope.connection,s.map(l=>({pubkey:new Xe(l)})),n);for(let l=0;l<s.length;l++){let m=u[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new tt(qm.decode(m.data).amount.toString())}let c={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);c[l]=E(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new _(p.toString()).div(new _(10).pow(m.quoteDecimal.toString())).div(new _(d.toString()).div(new _(10).pow(m.baseDecimal.toString())))})}return c}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=gr({[t]:n}),i=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as ie}from"@solana/web3.js";import dt from"bn.js";import{AccountLayout as nu,TOKEN_PROGRAM_ID as ou}from"@solana/spl-token";var fo=class extends ke{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var h;let{programId:t,owner:n=((h=this.scope.owner)==null?void 0:h.publicKey)||ie.default,mint1:o,mint2:i,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new dt(new ie(o.address).toBuffer()).gt(new dt(new ie(i.address).toBuffer()))?[i,o,new _(1).div(a)]:[o,i,a],b=oe.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Te.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(c),d.versionBuild({txVersion:m,extInfo:{address:E(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,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:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,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:[]}},Wa),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,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,h=n.useSOLBalance&&e.mintA.address===H.toString(),A=n.useSOLBalance&&e.mintB.address===H.toString(),[k,B]=s==="MintA"?[a,u]:[u,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}: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",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let I=t||await this.getClmmPoolKeys(e.id),L=await Te.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:E(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){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===H.toBase58(),h=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(T||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await Te.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=u.useSOLBalance&&t.mintA.address===H.toString(),g=u.useSOLBalance&&t.mintB.address===H.toString(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(A||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=Te.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===H.toString(),b=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(o==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(h||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(o==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=Te.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:o,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===H.toString(),f=i.useSOLBalance&&t.mintB.address===H.toString(),b,g,{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:l});b=h,A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===H.toString(),U;if(I.mint.address===t.mintA.address)U=b;else if(I.mint.address===t.mintB.address)U=g;else{let{account:F,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(I.mint.programId),mint:new ie(I.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:c,checkCreateATAOwner:l});U=F,$&&p.addInstruction($)}T.push(U)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await Te.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:u,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[V.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let I=await Te.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),R=C(C({},R),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Te.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:o,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!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()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(n.mint.address),mint:new ie(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new _(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:o,checkCreateATAOwner:i});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Te.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ie(n.mint.programId),mint:new ie(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let c=this.createTxBuilder(),l={};for(let m of o){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&c.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Te.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ie(m.mint.programId),mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),c.addInstruction(g)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!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(H),{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 dt(new _(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:o,checkCreateATAOwner:i});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Te.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){let c=this.createTxBuilder(),l={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===H.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Te.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});c.addInstruction(b),l=C(C({},l),b.address)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),u=t.useSOLBalance&&n.equals(H),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(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:o,checkCreateATAOwner:i});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Te.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!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(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(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:o,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Te.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=u.useSOLBalance&&e.mintA.address===H.toBase58(),b=u.useSOLBalance&&e.mintB.address===H.toBase58(),g;!s||s.equals(new _(0))?g=y?Rt.add(new dt(1)):Lt.sub(new dt(1)):g=oe.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?o:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let A;if(!A){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?0:o}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=B,T&&p.addInstruction(T)}(!h||!A)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:A,mintAUseSOLBalance:f,mintBUseSOLBalance:b,associatedOnly:l});let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(Te.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:A},inputMint:new ie(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:c})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)o?Pe(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(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===H.toString(),y=n.useSOLBalance&&d.mintB.address===H.toString(),f=c[d.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ie(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f=A,k&&l.addInstruction(k)}let b=c[d.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ie(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:o,checkCreateATAOwner:i});b=A,k&&l.addInstruction(k)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===H.toString(),B=c[A.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(A.mint.programId),mint:new ie(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:o});B=T,S&&l.addInstruction(S)}c[A.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let k=Te.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new dt(0),amountMinA:new dt(0),amountMinB:new dt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(ao(e).publicKey);return t?za.decode(t.data).whitelistMints.filter(o=>!o.equals(ie.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new dt(1))).map(s=>lt(new ie(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(s=>{if(!s)return;let a=yr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Ne(this.scope.connection,e.map(i=>({pubkey:new ie(i)})),t),o={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=cn.decode(s.accountInfo.data),u=oe.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=E(C({},a),{currentPrice:u,programId:s.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].ammConfig.toBase58())),o=await Ne(this.scope.connection,Array.from(n).map(u=>({pubkey:new ie(u)}))),i={};o.forEach(u=>{!u.accountInfo||(i[u.pubkey.toBase58()]=Xa.decode(u.accountInfo.data))});let s=await Se.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var m,d,p,y;let[c,l]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:He({address:c,decimals:e[u].mintDecimalsA,programId:t[c].programId.toBase58()||ou.toBase58(),extensions:{feeConfig:(m=t[c])!=null&&m.feeConfig?Jt((d=t[c])==null?void 0:d.feeConfig):void 0}}),mintB:He({address:l,decimals:e[u].mintDecimalsB,programId:t[l].programId.toBase58()||ou.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Jt((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[u].currentPrice,config:E(C({},i[e[u].ammConfig.toBase58()]),{id:e[u].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Se.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ie(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await Ne(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=Ua(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number(nu.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number(nu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let c=E(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:u.config});return{poolInfo:u,poolKeys:c,computePoolInfo:i[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as xr,TOKEN_PROGRAM_ID as Et,AccountLayout as od}from"@solana/spl-token";import iu from"bn.js";var Gi=new iu(1e6);function Um(r,e,t){return r.mul(e).add(t).sub(new iu(1)).div(t)}function ru(r,e,t){return r.mul(e).div(t)}var wr=class{static tradingFee(e,t){return Um(e,t,Gi)}static protocolFee(e,t){return ru(e,t,Gi)}static fundFee(e,t){return ru(e,t,Gi)}};import yo from"bn.js";function Ar(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Gm(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=Ar(r,e);return n.gt(Ln)&&(t=t.add(new yo(1)),e=r.div(t),n=Ar(r,t),n.gt(Ln)&&(e=e.add(new yo(1)))),[t,e]}var Ln=new yo(0),hr=class{static swapWithoutFees(e,t,n){let o=t.mul(n),i=t.add(e),[s,a]=Gm(o,i),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,o,i){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Ar(e.mul(n),t).gt(Ln)&&s.gt(Ln)&&(s=s.add(new yo(1))),Ar(e.mul(o),t).gt(Ln)&&a.gt(Ln)&&(a=a.add(new yo(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Pr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,o){let i=wr.tradingFee(e,o),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:u}=hr.swapWithoutFees(s,t,n),c=a.add(i);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:i}}};var Xm=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),zm=Buffer.from("amm_config","utf8"),Ym=Buffer.from("pool","utf8"),jm=Buffer.from("pool_lp_mint","utf8"),Qm=Buffer.from("pool_vault","utf8"),Hm=Buffer.from("observation","utf8");function On(r){return le([Xm],r)}function Zm(r,e){return le([zm,ed(e)],r)}function Jm(r,e,t,n){return le([Ym,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function $m(r,e){return le([jm,e.toBuffer()],r)}function su(r,e,t){return le([Qm,e.toBuffer(),t.toBuffer()],r)}function kr(r,e){return le([Hm,e.toBuffer()],r)}function ed(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function au({programId:r,mintA:e,mintB:t}){let n=Zm(r,0).publicKey,o=On(r).publicKey,i=Jm(r,n,e,t).publicKey,s=$m(r,i).publicKey,a=su(r,i,e).publicKey,u=su(r,i,t).publicKey,c=kr(r,i).publicKey;return{poolId:i,configId:n,authority:o,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as bo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Xi,TOKEN_2022_PROGRAM_ID as uu,ASSOCIATED_TOKEN_PROGRAM_ID as td}from"@solana/spl-token";var nd=se("Raydium_cpmm"),go={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,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=v([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!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:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Xi,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:td,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:A},T),new bo({keys:B,programId:r,data:Buffer.from([...go.initialize,...T])})}function lu(r,e,t,n,o,i,s,a,u,c,l,m,d,p,y){let f=v([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Xi,isSigner:!1,isWritable:!1},{pubkey:uu,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 nd.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new bo({keys:b,programId:r,data:Buffer.from([...go.deposit,...g])})}function mu(r,e,t,n,o,i,s,a,u,c,l,m,d,p,y){let f=v([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Xi,isSigner:!1,isWritable:!1},{pubkey:uu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:_o,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new bo({keys:b,programId:r,data:Buffer.from([...go.withdraw,...g])})}function Tr(r,e,t,n,o,i,s,a,u,c,l,m,d,p,y,f){let b=v([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey: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:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new bo({keys:g,programId:r,data:Buffer.from([...go.swapBaseInput,...h])})}function Ir(r,e,t,n,o,i,s,a,u,c,l,m,d,p,y,f){let b=v([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey: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:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new bo({keys:g,programId:r,data:Buffer.from([...go.swapBaseOutput,...h])})}import _e from"bn.js";var du=v([pe(8),D("bump"),qe("disableCreatePool"),St("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),Br=v([pe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var wo=class extends ke{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Ne(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),o={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Br.decode(d.accountInfo.data);o[String(e[m])]=E(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await Ne(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=du.decode(y.data)}}let u={},c=await Ne(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=c[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new _e(od.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=E(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:u[d.vaultA.toString()],vaultBAmount:u[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new _(y.toString()).div(new _(10).pow(d.mintDecimalB)).div(new _(p.toString()).div(new _(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var u,c,l,m;let i=e[o],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return E(C({},n),{[o]:E(C({},i),{id:new z(o),configInfo:i.configInfo,version:7,authority:On(i.programId).publicKey,mintA:He({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[s])!=null&&u.feeConfig?Jt((c=t[s])==null?void 0:c.feeConfig):void 0}}),mintB:He({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Jt((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await kn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=He({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Jt(n[t.mintA.toBase58()].feeConfig):void 0}}),i=He({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Jt(n[t.mintB.toBase58()].feeConfig):void 0}}),s=He({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Et.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},u={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new _(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new _(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:On(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:o,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=Ie(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var U,F,$;let d=o.feePayer||((U=this.scope.owner)==null?void 0:U.publicKey),p=new _e(new z(c.mintA.address).toBuffer()).lte(new _e(new z(c.mintB.address).toBuffer())),[y,f]=p?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=p?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],h=o.useSOLBalance&&y.address===xr.toBase58(),A=o.useSOLBalance&&f.address===xr.toBase58(),[k,B]=[new z(y.address),new z(f.address)],T=this.createTxBuilder(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:d,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:i,checkCreateATAOwner:s});T.addInstruction(x||{});let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new z(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:d,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:i,checkCreateATAOwner:s});if(T.addInstruction(I||{}),S===void 0||R===void 0)throw Error("you don't has some token account");let L=au({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[cu(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,Pe(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new z((F=y.programId)!=null?F:Et),new z(($=f.programId)!=null?$:Et),L.observationId,b,g,n)],instructionTypes:[V.CpmmCreatePool]}),T.addCustomComputeBudget(u),T.versionBuild({txVersion:a,extInfo:{address:E(C({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:u,config:c,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:E(C({},t),{lpAmount:new _(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new je(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new _(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,A=t.mintA.address===xr.toString(),k=t.mintB.address===xr.toString(),B=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(i?o:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:h}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{});let{account:I,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let U=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Ye=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:U,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:F}=Ye,$=Ie(Ye,["tokenAccount"]);B.addInstruction($);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),W=new je(new _e(1)).sub(s);return B.addInstruction({instructions:[lu(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),F,x,I,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:W.mul(f).quotient,i?b.amount:h,i?h:b.amount)],instructionTypes:[V.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(u),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var F,$;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new je(new _e(1)).sub(i),c=await this.getRpcPoolInfo(t.id),[l,m]=[u.mul(o.mul(c.baseReserve).div(c.lpAmount)).quotient,u.mul(o.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[we(l,t.mintA.extensions.feeConfig,d,!0),we(m,t.mintB.extensions.feeConfig,d,!0)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new z(t.mintA.address),new z(t.mintB.address)],A=g.equals(H),k=h.equals(H),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,I&&b.addInstruction(I),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let U=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[mu(new z(t.programId),this.scope.ownerPubKey,new z(U.authority),new z(t.id),L,B,T,new z(U.vault.A),new z(U.vault.B),g,h,new z(t.lpMint.address),o,l.sub((F=p.fee)!=null?F:new _e(0)),m.sub(($=y.fee)!=null?$:new _e(0)))],instructionTypes:[V.CpmmWithdrawLiquidity],lookupTableAddress:U.lookupTableAccount?[U.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var S,x,R,I,L,U;let{poolInfo:t,poolKeys:n,baseIn:o,swapResult:i,slippage:s=0,config:a,computeBudgetConfig:u,txVersion:c}=e,{bypassAssociatedCheck:l,checkCreateATAOwner:m,associatedOnly:d}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},a),p=this.createTxBuilder(),[y,f]=[new z(t.mintA.address),new z(t.mintB.address)];i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new _e((1-s)*1e4)).div(new _e(1e4));let b=t.mintA.address===H.toBase58(),g=t.mintB.address===H.toBase58(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new z((S=t.mintA.programId)!=null?S:Et),owner:this.scope.ownerPubKey,createInfo:b||!o?{payer:this.scope.ownerPubKey,amount:o?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new z((x=t.mintB.programId)!=null?x:Et),owner:this.scope.ownerPubKey,createInfo:g||o?{payer:this.scope.ownerPubKey,amount:o?0:i.sourceAmountSwapped}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:d,checkCreateATAOwner:m});B&&p.addInstruction(B),(!h||!k)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:d});let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return p.addInstruction({instructions:[o?Tr(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),h,k,new z(T.vault.A),new z(T.vault.B),new z((R=t.mintA.programId)!=null?R:Et),new z((I=t.mintB.programId)!=null?I:Et),y,f,kr(new z(t.programId),new z(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):Ir(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),k,h,new z(T.vault.B),new z(T.vault.A),new z((L=t.mintB.programId)!=null?L:Et),new z((U=t.mintA.programId)!=null?U:Et),f,y,kr(new z(t.programId),new z(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[o?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut]}),p.addCustomComputeBudget(u),p.versionBuild({txVersion:c})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let i=n.toString()===e.mintB.address,s=Pr.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new _(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),u=s.destinationAmountSwapped.mul(new _e((1-o)*1e4)).div(new _e(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:u,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:s,baseIn:a}){var h,A,k,B,T,S,x,R;let u=1-Number(i.toSignificant())/100,c=new _e(new _(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=we(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((h=l.fee)!=null?h:new _e(0)),d=new _e(new _(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.toString(),"amountInFee:",(k=(A=l.fee)==null?void 0:A.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:at,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=rd(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=we(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new je(new _e(1)).add(i),g=we(b.mul(f.amount.sub((B=f.fee)!=null?B:new _e(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function rd(r,e,t,n){let o=r.mul(e).div(n);!o.isZero()&&!r.mul(e).mod(n).isZero()&&(o=o.add(new _e(1)));let i=r.mul(t).div(n);return!i.isZero()&&!r.mul(t).mod(n).isZero()&&(i=i.add(new _e(1))),{amountA:o,amountB:i}}import{PublicKey as pn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ke,TOKEN_2022_PROGRAM_ID as Yi,createTransferInstruction as wu}from"@solana/spl-token";import Cr from"bn.js";import{TOKEN_PROGRAM_ID as id,TOKEN_2022_PROGRAM_ID as sd,ASSOCIATED_TOKEN_PROGRAM_ID as ad}from"@solana/spl-token";import{PublicKey as J,TransactionInstruction as ud,SystemProgram as cd}from"@solana/web3.js";import dn from"bn.js";function ld(r,e,t,n,o,i,s,a,u,c,l,m,d,p,y){var T;let f=[],b=[P({pubkey:id,isWritable:!1}),P({pubkey:sd,isWritable:!1}),P({pubkey:ad,isWritable:!1}),P({pubkey:cd.programId,isWritable:!1}),P({pubkey:e,isSigner:!0})];b.push(P({pubkey:t})),b.push(P({pubkey:o}));let g=[u,c],h=[l,m],A=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=A[S]===x.mintA.address;if(b.push(P({pubkey:new J(x.programId),isWritable:!1})),S===g.length-1?b.push(P({pubkey:o})):b.push(P({pubkey:n})),b.push(P({pubkey:new J(A[S])})),b.push(P({pubkey:new J(A[S+1])})),x.version===6){let I=h[S];b.push(P({pubkey:new J(I.config.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(R?I.vault.A:I.vault.B)})),b.push(P({pubkey:new J(R?I.vault.B:I.vault.A)})),b.push(P({pubkey:new J(x.observationId)})),b.push(P({pubkey:_o})),b.push(P({pubkey:rt(new J(x.programId),new J(x.id)).publicKey})),f.push(md(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(P({pubkey:new J(L)}))}else if(x.version===5){let I=h[S];b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.authority),isWritable:!1})),b.push(P({pubkey:new J(I.marketProgramId)})),b.push(P({pubkey:new J(I.marketAuthority)})),b.push(P({pubkey:Ds,isWritable:!1})),b.push(P({pubkey:new J(I.openOrders)})),b.push(P({pubkey:new J(I.vault.A)})),b.push(P({pubkey:new J(I.vault.B)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.marketId)})),b.push(P({pubkey:new J(I.marketBids)})),b.push(P({pubkey:new J(I.marketAsks)})),b.push(P({pubkey:new J(I.marketEventQueue)})),b.push(P({pubkey:new J(I.marketBaseVault)})),b.push(P({pubkey:new J(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],L=x.status!==1;b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.authority),isWritable:!1})),b.push(P({pubkey:new J(L?I.id:I.marketProgramId)})),b.push(P({pubkey:new J(L?I.id:I.marketAuthority)})),b.push(P({pubkey:new J(L?I.id:I.openOrders)})),b.push(P({pubkey:new J(I.vault.A)})),b.push(P({pubkey:new J(I.vault.B)})),b.push(P({pubkey:new J(L?I.id:I.marketId)})),b.push(P({pubkey:new J(L?I.id:I.marketBids)})),b.push(P({pubkey:new J(L?I.id:I.marketAsks)})),b.push(P({pubkey:new J(L?I.id:I.marketEventQueue)})),b.push(P({pubkey:new J(L?I.id:I.marketBaseVault)})),b.push(P({pubkey:new J(L?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(P({pubkey:new J(I.authority)})),b.push(P({pubkey:new J(I.config.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(R?I.vault.A:I.vault.B)})),b.push(P({pubkey:new J(R?I.vault.B:I.vault.A)})),b.push(P({pubkey:new J(x.observationId)}))}else throw Error("pool type error")}let k=v([D("insId"),w("amountIn"),w("amountOut"),X(Y(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new ud({keys:b,programId:r,data:B})}function md(r,e){if(r)if(e){let t=new dn(r).div(new dn(25));return t.gt(dr)?t:dr}else{let t=new dn(r).mul(new dn(25));return t.lt(pr)?t:pr}else return e?dr:pr}function pu({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,s,a,u,c,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ee(m),p=t.equals(d.mintA.address)?Rt.add(it):Lt.sub(it);return Te.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new dn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[d?Tr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,m.vaultA,m.vaultB,m.mintProgramA,m.mintProgramA,new J(m.mintA.address),new J(m.mintB.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw):Ir(m.programId,e.wallet,m.authority,m.configId,m.id,e.destinationToken,e.sourceToken,m.vaultB,m.vaultA,m.mintProgramB,m.mintProgramA,new J(m.mintB.address),new J(m.mintA.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[ur({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new dn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?V.AmmV5SwapBaseIn:V.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[ld(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(c=n.minAmountOut.fee)==null?void 0:c.raw)!=null?l:new dn(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var fu={[ni.toBase58()]:3},yu={3:ni};var zi=v([pe(5),pe(8),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]),bu={3:zi};import{PublicKey as gu}from"@solana/web3.js";var Sr=se("Serum"),Kr=class{static getProgramId(e){let t=yu[e];return t||Sr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=fu[t];return n||Sr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=bu[e];return t||Sr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let s=n.concat(Buffer.from([o]),Buffer.alloc(7));i=gu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:i,nonce:o}}return Sr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:gu.default,nonce:o}}};var Ft=new Cr(0),Ao=class extends ke{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(H));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let u=Z(t);for(let c=0;c<i.length;c++)u.gte(i[c].amount)?(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(i[c].amount)):(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),Qn({destination:a.addresses.newAccount,source:i[c].publicKey,amount:u,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:o})}async wrapWSol(e,t,n){let o=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),o.length&&i.addInstruction({instructions:[Qn({destination:o[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Kt({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),u=e.amountIn,c=e.amountOut,l=u.amount.token.mint.equals(H),m=c.amount.token.mint.equals(H),d=u.amount.token.mint,p=c.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Yi:Ke,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b=this.scope.account.getAssociatedTokenAccount(p,c.amount.token.isToken2022?Yi:Ke);m&&a.addInstruction({endInstructions:[Kt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ke})],endInstructionTypes:[V.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?Yi:Ke)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=pu({routeProgram:i,inputMint:d,swapInfo:E(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[wu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]}),k.addInstruction(A);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[wu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:o,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:o,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=Fs,clmm:n=Ws,cpmm:o=qs}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:ar.offsetOf("baseMint"),length:64}}),s=v([K("baseMint"),K("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),u=v([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:cn.span}],dataSlice:{offset:cn.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Br.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===pn.default.toString()?H:e,t=t.toString()===pn.default.toString()?H:t;let s={},a={},u={},c=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),u[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&i[y.id.toString()]===void 0?u[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&i[f.id.toString()]===void 0?u[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:c,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=gr(i),a={};Object.values(s).forEach(f=>{o.delete(f.mintA.address),a[f.mintA.address]={address:new pn(f.mintA.address),programId:Ke,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(f.mintB.address),a[f.mintB.address]={address:new pn(f.mintB.address),programId:Ke,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(u).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Ke)?(o.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),f.mintProgramB.equals(Ke)?(o.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let c=await kn({connection:this.scope.connection,mints:Array.from(o).map(f=>new pn(f))});a=C(C({},a),c);let l=this.scope.cpmm.toComputePoolInfos({pools:u,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>E(C({},f),{[b]:E(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:s,slippage:a,chainTime:u,epochInfo:c,feeConfig:l}){var g,h,A,k,B,T,S,x,R;let m=l===void 0?new Cr(0):e.raw.mul(new Cr(l.feeBps.toNumber())).div(new Cr(1e4)),d=e.raw.sub(m),p=new fe(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=E(C({},t),{address:nt(t.address).toString()}),b=[];for(let I of n)try{b.push(E(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",I.version,I.id.toString(),L.message)}this.logDebug("direct done");for(let[I,L]of Object.entries(o)){let U={chainId:101,address:I,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},F=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:U,amountIn:p})}}catch(W){this.logDebug("route in error",G.version,G.id.toString(),W.message);return}}).sort((G,W)=>{var en,Dt,bn,Nt;let Ye=G===void 0?Ft:G.data.amountOut.amount.raw.sub((Dt=(en=G.data.amountOut.fee)==null?void 0:en.raw)!=null?Dt:Ft),yn=W===void 0?Ft:W.data.amountOut.amount.raw.sub((Nt=(bn=W.data.amountOut.fee)==null?void 0:bn.raw)!=null?Nt:Ft);return Ye.lt(yn)?1:-1})[0];if(F===void 0)continue;let $=new fe(sr(U),F.data.amountOut.amount.raw.sub((h=(g=F.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Ft));for(let G of L.out)try{let W=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:$});b.push(E(C({},W),{allTrade:!!(F.data.allTrade&&W.allTrade),amountIn:F.data.amountIn,amountOut:W.amountOut,minAmountOut:W.minAmountOut,currentPrice:void 0,executionPrice:new _(new $e({baseToken:F.data.amountIn.amount.token,denominator:F.data.amountIn.amount.raw,quoteToken:W.amountOut.amount.token,numerator:W.amountOut.amount.raw.sub((k=(A=W.amountOut.fee)==null?void 0:A.raw)!=null?k:Ft)}).toFixed()),priceImpact:new _(F.data.priceImpact.add(W.priceImpact).toFixed()),fee:[F.data.fee[0],W.fee[0]],routeType:"route",poolInfoList:[F.pool,G],remainingAccounts:[F.data.remainingAccounts[0],W.remainingAccounts[0]],minMiddleAmountFee:(B=W.amountOut.fee)!=null&&B.raw?new fe(F.data.amountOut.amount.token,((S=(T=F.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Ft).add((R=(x=W.amountOut.fee)==null?void 0:x.raw)!=null?R:Ft)):void 0,middleToken:F.data.amountOut.amount.token,poolReady:F.data.poolReady&&W.poolReady,poolType:[F.data.poolType,W.poolType],feeConfig:y,expirationTime:xt(F.data.expirationTime,W.expirationTime)}))}catch(W){this.logDebug("route out error",G.version,G.id.toString(),W.message)}}return b.filter(I=>I.allTrade).sort((I,L)=>I.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Ft)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:s,outputToken:a,amountIn:u}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:A}=Se.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new _(y.toFixed()),executionPrice:new _(f.toFixed()),priceImpact:new _(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:xt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:s});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:oo(E(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:oo(E(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new fe(u.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:c,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:oo(E(C({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:oo(E(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new fe(u.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(c=>c.version===6&&!t[c.id.toString()]).map(c=>c.id.toString()));if(o.size>0){let c=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(c).forEach(l=>{t[l]=c[l]})}if(new Set(e.filter(c=>c.version===4&&!n[c.id.toString()]).map(c=>c.id.toString())).size>0){let c=this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(c).forEach(l=>{n[l]=c[l]})}let s=new Set(e.filter(c=>c.version===4).map(c=>c.marketId)),a={};s.size>0&&(await Ne(this.scope.connection,Array.from(s).map(l=>({pubkey:new pn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=zi.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Kr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let u=[];return e.forEach(c=>{if(c.version===6){let l=t[c.id.toString()],m={programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:E(C({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};u.push(m)}else if(c.version===4){let l=n[c.id.toString()],m=C({programId:c.programId,id:c.id,mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Ui({programId:new pn(c.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:c.lpMint},a[c.marketId]);u.push(m)}else c.version===7&&u.push({programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),authority:On(c.programId).publicKey.toBase58(),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},mintLp:He({address:c.mintLp.toBase58(),programId:Ke.toBase58(),decimals:c.lpDecimals}),config:E(C({id:c.configId.toBase58()},c.configInfo),{protocolFeeRate:c.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:c.configInfo.tradeFeeRate.toNumber(),fundFeeRate:c.configInfo.fundFeeRate.toNumber(),createPoolFee:c.configInfo.createPoolFee.toString()})})}),u}};import{TOKEN_PROGRAM_ID as dd}from"@solana/spl-token";import{PublicKey as pd,Transaction as ji,TransactionInstruction as fd}from"@solana/web3.js";import Au from"bn.js";var ze=class extends ke{static getPdaPoolId(e,t){return le([ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return le([ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Au(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){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,o,l).publicKey));let u=await gt(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=u[d],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),h=ze.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new Au(0))).filter(x=>!x).length!==3,T=i>A&&i<k&&g.status===1,S=B&&T;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:ze.VERSION_PROJECT[m],openTime:A,endTime:k,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i=[];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(he.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!u.mintAddress.equals(he.WSOL.mint),associatedOnly:u.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(c)}n.addInstruction({instructions:[ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(he.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!m.mintAddress.equals(he.WSOL.mint),associatedOnly:m.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[ze.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:o,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return Zr(u,[o,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ji().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ji().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ji().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=v([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:dd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new fd({keys:i,programId:e,data:a})}},pt=ze;pt.CLAIMED_NUM=3,pt.POOL_LAYOUT=v([pe(8),D("bump"),D("status"),w("openTime"),w("endTime"),K("ammId"),X(v([D("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),pt.OWNER_LAYOUT=v([pe(8),D("bump"),D("version"),K("poolId"),K("owner"),w("lpAmount"),X(v([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new pd(e)),pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as ho}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Iu}from"@solana/spl-token";import Po from"bn.js";import{TransactionInstruction as bd,SYSVAR_RENT_PUBKEY as gd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hu}from"@solana/spl-token";import{createInitializeAccountInstruction as Pu}from"@solana/spl-token";import{SystemProgram as fn,Transaction as ku}from"@solana/web3.js";function yd(r="accountFlags"){let e=new Ho(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 Qi=v([pe(5),yd("accountFlags"),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]);function wd({programId:r,marketInfo:e}){let t=v([D("version"),Qe("instruction"),w("baseLotSize"),w("quoteLotSize"),St("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:gd,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new bd({keys:n,programId:r,data:o})}async function Tu({connection:r,wallet:e,marketInfo:t}){let n=new ku,o=await r.getMinimumBalanceForRentExemption(165);n.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:hu}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:hu}),Pu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Pu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new ku;return i.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(Qi.span),space:Qi.span,programId:t.programId}),fn.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}),fn.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}),fn.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}),fn.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}),wd({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:i,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.InitMarket]}]}var Nn=class extends ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,txVersion:s,computeBudgetConfig:a}){let u=this.scope.ownerPubKey,c=Ue({fromPublicKey:u,programId:i}),l=Ue({fromPublicKey:u,programId:i}),m=Ue({fromPublicKey:u,programId:i}),d=Ue({fromPublicKey:u,programId:i}),p=Ue({fromPublicKey:u,programId:i}),y=Ue({fromPublicKey:u,programId:Iu}),f=Ue({fromPublicKey:u,programId:Iu}),b=0,g=new Po(100);function h(){let R=new Po(0);for(;;)try{return{vaultOwner:ho.createProgramAddressSync([c.publicKey.toBuffer(),R.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:R}}catch{if(R.iaddn(1),R.gt(new Po(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:k}=h(),B=new Po(Math.round(10**e.decimals*n)),T=new Po(Math.round(n*10**t.decimals*o));if(B.eq(at))throw Error("lot size is too small");if(T.eq(at))throw Error("tick size or lot size is too small");let S=await Tu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:c,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:k,baseLotSize:B,quoteLotSize:T}}),x=this.createTxBuilder();x.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let R of S.slice(1,S.length))x.addInstruction({instructions:R.transaction.instructions,signers:R.signer,instructionTypes:R.instructionTypes});return s===0?x.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new ho(e.mint),quoteMin:new ho(t.mint)}}):x.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new ho(e.mint),quoteMin:new ho(t.mint)}})}};import{PublicKey as To}from"@solana/web3.js";import{TransactionInstruction as Bu,SYSVAR_CLOCK_PUBKEY as hd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as xu}from"@solana/spl-token";var Ad=v([D("instruction"),js("amount")]),ko=v([D("instruction")]);function Rr({programId:r},e){let t=[{pubkey:xu,isSigner:!1,isWritable:!1},{pubkey:Ps,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(ko.span);return ko.encode({instruction:2},n),new Bu({keys:t,programId:r,data:n})}function Hi(r){let{poolConfig:e,userKeys:t,side:n}=r,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(ko.span);ko.encode({instruction:2},s);let a=[{pubkey:xu,isWritable:!1,isSigner:!1},{pubkey:hd,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Bu({programId:e.programId,keys:a,data:s})}import Su from"bn.js";var Pd={[zn.IDO_PROGRAM_ID_V1.toString()]:1,[zn.IDO_PROGRAM_ID_V2.toString()]:2,[zn.IDO_PROGRAM_ID_V3.toString()]:3,[zn.IDO_PROGRAM_ID_V4.toString()]:4},Mn=class extends ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i}){let s=this.createTxBuilder(),a=Pd[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ee(t),[c,l]=[!new Su(e.coin).isZero(),!new Su(e.pc).isZero()],m=u.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=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:o});!d&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&p&&s.addInstruction(p);let y=u.buyInfo.mint.address.equals(H),{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:o});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...c?[Rr({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new To(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Rr({programId:new To(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new To(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Rr({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new To(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});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:d,quoteTokenAccount:f,ledgerAccount:new To(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[Hi(E(C({},g),{side:"base"}))]:[],...l?[Hi(E(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as kd}from"@solana/web3.js";import{MintLayout as Td,TOKEN_2022_PROGRAM_ID as Zi,TOKEN_PROGRAM_ID as Ji}from"@solana/spl-token";var Io=class extends ke{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(o,n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(zt.address,zt),this._mintGroup.official.add(zt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,E(C({},c),{priority:-1}))}),i.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?Zi.toBase58():Ji.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?Zi.toBase58():Ji.toBase58()})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?Zi.toBase58():Ji.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return zt;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new kd(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Td.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 Lr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:c="confirmed",enableJitoRpc:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new wt(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=c,this.enableJito=!!l,this.api=i,this._apiCacheTime=u||5*60*1e3,this.logger=se("Raydium"),this.farm=new no({scope:this,moduleName:"Raydium_Farm"}),this.account=new Hn({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new po({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Io({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Ao({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new fo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new wo({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Nn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Mn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let m=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:m,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Id({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:s,urlConfigs:a}=t,u=new Yo({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:s}),c=new Lr(E(C({},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(jo);return this._owner.publicKey}setOwner(e){return this._owner=e?new wt(e):void 0,this}get connection(){if(!this._connection)throw new Error(Xs);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(jo),new Error(jo)}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 i;let n=(i=this.apiData.jupTokenList)==null?void 0:i[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let o=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=E(C({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:o}}),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{}}}};export{Lr as Raydium};
|
|
1
|
+
var Cu=Object.defineProperty,Ru=Object.defineProperties;var Lu=Object.getOwnPropertyDescriptors;var So=Object.getOwnPropertySymbols;var ns=Object.prototype.hasOwnProperty,os=Object.prototype.propertyIsEnumerable;var ts=(r,e,t)=>e in r?Cu(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,C=(r,e)=>{for(var t in e||(e={}))ns.call(e,t)&&ts(r,t,e[t]);if(So)for(var t of So(e))os.call(e,t)&&ts(r,t,e[t]);return r},E=(r,e)=>Ru(r,Lu(e));var Ie=(r,e)=>{var t={};for(var n in r)ns.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&So)for(var n of So(r))e.indexOf(n)<0&&os.call(r,n)&&(t[n]=r[n]);return t};import{merge as Id}from"lodash";import Gs from"axios";import{get as rs,set as Ou}from"lodash";var Nr=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},is={},Nu={};function se(r){let e=rs(is,r);if(!e){let t=rs(Nu,r);e=new Nr({name:r,logLevel:t}),Ou(is,r,e)}return e}import{PublicKey as Uc}from"@solana/web3.js";import Gc from"bn.js";import Dc from"big.js";import Wo from"bn.js";import et from"bn.js";var wn=9e15,Xt=1e9,Mr="0123456789abcdef",Co="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Ro="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",_r={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-wn,maxE:wn,crypto:!1},cs,Mt,ne=!0,Oo="[DecimalError] ",Gt=Oo+"Invalid argument: ",ls=Oo+"Precision limit exceeded",ms=Oo+"crypto unavailable",ds="[object Decimal]",We=Math.floor,Re=Math.pow,Mu=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,_u=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,vu=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ps=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,yt=1e7,ee=7,Vu=9007199254740991,Eu=Co.length-1,vr=Ro.length-1,M={toStringTag:ds};M.absoluteValue=M.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),Q(r)};M.ceil=function(){return Q(new this.constructor(this),this.e+1,2)};M.clampedTo=M.clamp=function(r,e){var t,n=this,o=n.constructor;if(r=new o(r),e=new o(e),!r.s||!e.s)return new o(NaN);if(r.gt(e))throw Error(Gt+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new o(n)};M.comparedTo=M.cmp=function(r){var e,t,n,o,i=this,s=i.d,a=(r=new i.constructor(r)).d,u=i.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(i.e!==r.e)return i.e>r.e^u<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===o?0:n>o^u<0?1:-1};M.cosine=M.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())+ee,n.rounding=1,t=Fu(n,ws(n,t)),n.precision=r,n.rounding=e,Q(Mt==2||Mt==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};M.cubeRoot=M.cbrt=function(){var r,e,t,n,o,i,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ne=!1,i=l.s*Re(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=ve(l.d),r=l.e,(i=(r-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Re(t,1/3),r=We((r+1)/3)-(r%3==(r<0?-1:2)),i==1/0?t="5e"+r:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(r=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=ge(c.plus(l).times(a),c.plus(u),s+2,1),ve(a.d).slice(0,s)===(t=ve(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(Q(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(Q(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return ne=!0,Q(n,r,m.rounding,e)};M.decimalPlaces=M.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-We(this.e/ee))*ee,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(r){return ge(this,new this.constructor(r))};M.dividedToIntegerBy=M.divToInt=function(r){var e=this,t=e.constructor;return Q(ge(e,new t(r),0,1,1),t.precision,t.rounding)};M.equals=M.eq=function(r){return this.cmp(r)===0};M.floor=function(){return Q(new this.constructor(this),this.e+1,3)};M.greaterThan=M.gt=function(r){return this.cmp(r)>0};M.greaterThanOrEqualTo=M.gte=function(r){var e=this.cmp(r);return e==1||e===0};M.hyperbolicCosine=M.cosh=function(){var r,e,t,n,o,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,o=i.d.length,o<32?(r=Math.ceil(o/3),e=(1/Mo(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),i=An(s,1,i.times(e),new s(1),!0);for(var u,c=r,l=new s(8);c--;)u=i.times(i),i=a.minus(u.times(l.minus(u.times(l))));return Q(i,s.precision=t,s.rounding=n,!0)};M.hyperbolicSine=M.sinh=function(){var r,e,t,n,o=this,i=o.constructor;if(!o.isFinite()||o.isZero())return new i(o);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(o.e,o.sd())+4,i.rounding=1,n=o.d.length,n<3)o=An(i,2,o,o,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,o=o.times(1/Mo(5,r)),o=An(i,2,o,o,!0);for(var s,a=new i(5),u=new i(16),c=new i(20);r--;)s=o.times(o),o=o.times(a.plus(s.times(u.times(s).plus(c))))}return i.precision=e,i.rounding=t,Q(o,e,t,!0)};M.hyperbolicTangent=M.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,ge(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};M.inverseCosine=M.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?ft(t,o,i):new t(0):new t(NaN):e.isZero()?ft(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),r=ft(t,o+4,i).times(.5),t.precision=o,t.rounding=i,r.minus(e))};M.inverseHyperbolicCosine=M.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,ne=!1,t=t.times(t).minus(1).sqrt().plus(t),ne=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};M.inverseHyperbolicSine=M.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,ne=!1,t=t.times(t).plus(1).sqrt().plus(t),ne=!0,n.precision=r,n.rounding=e,t.ln())};M.inverseHyperbolicTangent=M.atanh=function(){var r,e,t,n,o=this,i=o.constructor;return o.isFinite()?o.e>=0?new i(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(r=i.precision,e=i.rounding,n=o.sd(),Math.max(n,r)<2*-o.e-1?Q(new i(o),r,e,!0):(i.precision=t=n-o.e,o=ge(o.plus(1),new i(1).minus(o),t+r,1),i.precision=r+4,i.rounding=1,o=o.ln(),i.precision=r,i.rounding=e,o.times(.5))):new i(NaN)};M.inverseSine=M.asin=function(){var r,e,t,n,o=this,i=o.constructor;return o.isZero()?new i(o):(e=o.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(r=ft(i,t+4,n).times(.5),r.s=o.s,r):new i(NaN):(i.precision=t+6,i.rounding=1,o=o.div(new i(1).minus(o.times(o)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,o.times(2)))};M.inverseTangent=M.atan=function(){var r,e,t,n,o,i,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=vr)return s=ft(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=vr)return s=ft(l,m+4,d).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ee+2|0),r=t;r;--r)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(ne=!1,e=Math.ceil(a/ee),n=1,u=c.times(c),s=new l(c),o=c;r!==-1;)if(o=o.times(u),i=s.minus(o.div(n+=2)),o=o.times(u),s=i.plus(o.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===i.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),ne=!0,Q(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&We(this.e/ee)>this.d.length-2};M.isNaN=function(){return!this.s};M.isNegative=M.isNeg=function(){return this.s<0};M.isPositive=M.isPos=function(){return this.s>0};M.isZero=function(){return!!this.d&&this.d[0]===0};M.lessThan=M.lt=function(r){return this.cmp(r)<0};M.lessThanOrEqualTo=M.lte=function(r){return this.cmp(r)<1};M.logarithm=M.log=function(r){var e,t,n,o,i,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding,p=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)i=!0;else{for(o=t[0];o%10===0;)o/=10;i=o!==1}if(ne=!1,a=m+p,s=Ut(c,a),n=e?Lo(l,a+10):Ut(r,a),u=ge(s,n,a,1),_n(u.d,o=m,d))do if(a+=10,s=Ut(c,a),n=e?Lo(l,a+10):Ut(r,a),u=ge(s,n,a,1),!i){+ve(u.d).slice(o+1,o+15)+1==1e14&&(u=Q(u,m+1,0));break}while(_n(u.d,o+=10,d));return ne=!0,Q(u,m,d)};M.minus=M.sub=function(r){var e,t,n,o,i,s,a,u,c,l,m,d,p=this,y=p.constructor;if(r=new y(r),!p.d||!r.d)return!p.s||!r.s?r=new y(NaN):p.d?r.s=-r.s:r=new y(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(c=p.d,d=r.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])r.s=-r.s;else if(c[0])r=new y(p);else return new y(u===3?-0:0);return ne?Q(r,a,u):r}if(t=We(r.e/ee),l=We(p.e/ee),c=c.slice(),i=l-t,i){for(m=i<0,m?(e=c,i=-i,s=d.length):(e=d,t=l,s=c.length),n=Math.max(Math.ceil(a/ee),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=c.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=d[n]){m=c[n]<d[n];break}i=0}for(m&&(e=c,c=d,d=e,r.s=-r.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>i;){if(c[--n]<d[n]){for(o=n;o&&c[--o]===0;)c[o]=yt-1;--c[o],c[n]+=yt}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(r.d=c,r.e=No(c,t),ne?Q(r,a,u):r):new y(u===3?-0:0)};M.modulo=M.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]?Q(new n(t),n.precision,n.rounding):(ne=!1,n.modulo==9?(e=ge(t,r.abs(),0,3,1),e.s*=r.s):e=ge(t,r,0,n.modulo,1),e=e.times(r),ne=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return Vr(this)};M.naturalLogarithm=M.ln=function(){return Ut(this)};M.negated=M.neg=function(){var r=new this.constructor(this);return r.s=-r.s,Q(r)};M.plus=M.add=function(r){var e,t,n,o,i,s,a,u,c,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(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=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(r=new d(m)),ne?Q(r,a,u):r;if(i=We(m.e/ee),n=We(r.e/ee),c=c.slice(),o=i-n,o){for(o<0?(t=c,o=-o,s=l.length):(t=l,n=i,s=c.length),i=Math.ceil(a/ee),s=i>s?i+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=c.length,o=l.length,s-o<0&&(o=s,t=l,l=c,c=t),e=0;o;)e=(c[--o]=c[o]+l[o]+e)/yt|0,c[o]%=yt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return r.d=c,r.e=No(c,n),ne?Q(r,a,u):r};M.precision=M.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Gt+r);return t.d?(e=fs(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var r=this,e=r.constructor;return Q(new e(r),r.e+1,e.rounding)};M.sine=M.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())+ee,n.rounding=1,t=Wu(n,ws(n,t)),n.precision=r,n.rounding=e,Q(Mt>2?t.neg():t,r,e,!0)):new n(NaN)};M.squareRoot=M.sqrt=function(){var r,e,t,n,o,i,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(ne=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=ve(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=We((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(i=n,n=i.plus(ge(s,i,t+2,1)).times(.5),ve(i.d).slice(0,t)===(e=ve(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(Q(i,u+1,0),i.times(i).eq(s))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(Q(n,u+1,1),r=!n.times(n).eq(s));break}return ne=!0,Q(n,u,l.rounding,r)};M.tangent=M.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=ge(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,Q(Mt==2||Mt==4?t.neg():t,r,e,!0)):new n(NaN)};M.times=M.mul=function(r){var e,t,n,o,i,s,a,u,c,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=We(l.e/ee)+We(r.e/ee),u=d.length,c=p.length,u<c&&(i=d,d=p,p=i,s=u,u=c,c=s),i=[],s=u+c,n=s;n--;)i.push(0);for(n=c;--n>=0;){for(e=0,o=u+n;o>n;)a=i[o]+p[n]*d[o-n-1]+e,i[o--]=a%yt|0,e=a/yt|0;i[o]=(i[o]+e)%yt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),r.d=i,r.e=No(i,t),ne?Q(r,m.precision,m.rounding):r};M.toBinary=function(r,e){return Fr(this,2,r,e)};M.toDecimalPlaces=M.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(Je(r,0,Xt),e===void 0?e=n.rounding:Je(e,0,8),Q(t,r+t.e+1,e))};M.toExponential=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Bt(n,!0):(Je(r,0,Xt),e===void 0?e=o.rounding:Je(e,0,8),n=Q(new o(n),r+1,e),t=Bt(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toFixed=function(r,e){var t,n,o=this,i=o.constructor;return r===void 0?t=Bt(o):(Je(r,0,Xt),e===void 0?e=i.rounding:Je(e,0,8),n=Q(new i(o),r+o.e+1,e),t=Bt(n,!1,r+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};M.toFraction=function(r){var e,t,n,o,i,s,a,u,c,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(c=t=new f(1),n=u=new f(0),e=new f(n),i=e.e=fs(y)-p.e-1,s=i%ee,e.d[0]=Re(10,s<0?ee+s:s),r==null)r=i>0?e:c;else{if(a=new f(r),!a.isInt()||a.lt(c))throw Error(Gt+a);r=a.gt(e)?i>0?e:c:a}for(ne=!1,a=new f(ve(y)),l=f.precision,f.precision=i=y.length*ee*2;m=ge(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(r)!=1;)t=n,n=o,o=c,c=u.plus(m.times(o)),u=o,o=e,e=a.minus(m.times(o)),a=o;return o=ge(r.minus(t),n,0,1,1),u=u.plus(o.times(c)),t=t.plus(o.times(n)),u.s=c.s=p.s,d=ge(c,n,i,1).minus(p).abs().cmp(ge(u,t,i,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,ne=!0,d};M.toHexadecimal=M.toHex=function(r,e){return Fr(this,16,r,e)};M.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:Je(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]?(ne=!1,t=ge(t,r,0,e,1).times(r),ne=!0,Q(t)):(r.s=t.s,t=r),t};M.toNumber=function(){return+this};M.toOctal=function(r,e){return Fr(this,8,r,e)};M.toPower=M.pow=function(r){var e,t,n,o,i,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(Re(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,i=u.rounding,r.eq(1))return Q(a,n,i);if(e=We(r.e/ee),e>=r.d.length-1&&(t=c<0?-c:c)<=Vu)return o=ys(u,a,t,n),r.s<0?new u(1).div(o):Q(o,n,i);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=Re(+a,c),e=t==0||!isFinite(t)?We(c*(Math.log("0."+ve(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):(ne=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),o=Vr(r.times(Ut(a,n+t)),n),o.d&&(o=Q(o,n+5,1),_n(o.d,n,i)&&(e=n+10,o=Q(Vr(r.times(Ut(a,e+t)),e),e+5,1),+ve(o.d).slice(n+1,n+15)+1==1e14&&(o=Q(o,n+1,0)))),o.s=s,ne=!0,u.rounding=i,Q(o,n,i))};M.toPrecision=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Bt(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(Je(r,1,Xt),e===void 0?e=o.rounding:Je(e,0,8),n=Q(new o(n),r,e),t=Bt(n,r<=n.e||n.e<=o.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toSignificantDigits=M.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(Je(r,1,Xt),e===void 0?e=n.rounding:Je(e,0,8)),Q(new n(t),r,e)};M.toString=function(){var r=this,e=r.constructor,t=Bt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};M.truncated=M.trunc=function(){return Q(new this.constructor(this),this.e+1,1)};M.valueOf=M.toJSON=function(){var r=this,e=r.constructor,t=Bt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function ve(r){var e,t,n,o=r.length-1,i="",s=r[0];if(o>0){for(i+=s,e=1;e<o;e++)n=r[e]+"",t=ee-n.length,t&&(i+=qt(t)),i+=n;s=r[e],n=s+"",t=ee-n.length,t&&(i+=qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function Je(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Gt+r)}function _n(r,e,t,n){var o,i,s,a;for(i=r[0];i>=10;i/=10)--e;return--e<0?(e+=ee,o=0):(o=Math.ceil((e+1)/ee),e%=ee),i=Re(10,ee-e),a=r[o]%i|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==i||t>3&&a+1==i/2)&&(r[o+1]/i/100|0)==Re(10,e-2)-1||(a==i/2||a==0)&&(r[o+1]/i/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==i||!n&&t>3&&a+1==i/2)&&(r[o+1]/i/1e3|0)==Re(10,e-3)-1,s}function Ko(r,e,t){for(var n,o=[0],i,s=0,a=r.length;s<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=Mr.indexOf(r.charAt(s++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function Fu(r,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/Mo(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),r.precision+=t,e=An(r,1,e.times(o),new r(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var ge=function(){function r(n,o,i){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*o+a,n[u]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,o,i,s){var a,u;if(i!=s)u=i>s?1:-1;else for(a=u=0;a<i;a++)if(n[a]!=o[a]){u=n[a]>o[a]?1:-1;break}return u}function t(n,o,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*s+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,s,a,u){var c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I,L,q,F=n.constructor,$=n.s==o.s?1:-1,G=n.d,W=o.d;if(!G||!G[0]||!W||!W[0])return new F(!n.s||!o.s||(G?W&&G[0]==W[0]:!W)?NaN:G&&G[0]==0||!W?$*0:$/0);for(u?(p=1,l=n.e-o.e):(u=yt,p=ee,l=We(n.e/p)-We(o.e/p)),L=W.length,R=G.length,g=new F($),h=g.d=[],m=0;W[m]==(G[m]||0);m++);if(W[m]>(G[m]||0)&&l--,i==null?(T=i=F.precision,s=F.rounding):a?T=i+(n.e-o.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,W=W[0],T++;(m<R||d)&&T--;m++)S=d*u+(G[m]||0),h[m]=S/W|0,d=S%W|0;y=d||m<R}else{for(d=u/(W[0]+1)|0,d>1&&(W=r(W,d,u),G=r(G,d,u),L=W.length,R=G.length),x=L,A=G.slice(0,L),k=A.length;k<L;)A[k++]=0;q=W.slice(),q.unshift(0),I=W[0],W[1]>=u/2&&++I;do d=0,c=e(W,A,L,k),c<0?(B=A[0],L!=k&&(B=B*u+(A[1]||0)),d=B/I|0,d>1?(d>=u&&(d=u-1),f=r(W,d,u),b=f.length,k=A.length,c=e(f,A,b,k),c==1&&(d--,t(f,L<b?q:W,b,u))):(d==0&&(c=d=1),f=W.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,u),c==-1&&(k=A.length,c=e(W,A,L,k),c<1&&(d++,t(A,L<k?q:W,k,u))),k=A.length):c===0&&(d++,A=[0]),h[m++]=d,c&&A[0]?A[k++]=G[x]||0:(A=[G[x]],k=1);while((x++<R||A[0]!==void 0)&&T--);y=A[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,cs=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,Q(g,a?i+g.e+1:i,s,y)}return g}}();function Q(r,e,t,n){var o,i,s,a,u,c,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=ee,s=e,l=m[d=0],u=l/Re(10,o-s-1)%10|0;else if(d=Math.ceil((i+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,o=1,i%=ee,s=i-ee+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=ee,s=i-ee+o,u=s<0?0:l/Re(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Re(10,o-s-1)),c=t<4?(u||n)&&(t==0||t==(r.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(i>0?s>0?l/Re(10,o-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=r.e+1,m[0]=Re(10,(ee-e%ee)%ee),r.e=-e||0):m[0]=r.e=0,r;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Re(10,ee-i),m[d]=s>0?(l/Re(10,o-s)%Re(10,s)|0)*a:0),c)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(r.e++,m[0]==yt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=yt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return ne&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function Bt(r,e,t){if(!r.isFinite())return gs(r);var n,o=r.e,i=ve(r.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+qt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(r.e<0?"e":"e+")+r.e):o<0?(i="0."+qt(-o-1)+i,t&&(n=t-s)>0&&(i+=qt(n))):o>=s?(i+=qt(o+1-s),t&&(n=t-o-1)>0&&(i=i+"."+qt(n))):((n=o+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(i+="."),i+=qt(n))),i}function No(r,e){var t=r[0];for(e*=ee;t>=10;t/=10)e++;return e}function Lo(r,e,t){if(e>Eu)throw ne=!0,t&&(r.precision=t),Error(ls);return Q(new r(Co),e,1,!0)}function ft(r,e,t){if(e>vr)throw Error(ls);return Q(new r(Ro),e,t,!0)}function fs(r){var e=r.length-1,t=e*ee+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 qt(r){for(var e="";r--;)e+="0";return e}function ys(r,e,t,n){var o,i=new r(1),s=Math.ceil(n/ee+4);for(ne=!1;;){if(t%2&&(i=i.times(e),as(i.d,s)&&(o=!0)),t=We(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),as(e.d,s)}return ne=!0,i}function ss(r){return r.d[r.d.length-1]&1}function bs(r,e,t){for(var n,o=new r(e[0]),i=0;++i<e.length;)if(n=new r(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function Vr(r,e){var t,n,o,i,s,a,u,c=0,l=0,m=0,d=r.constructor,p=d.rounding,y=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(ne=!1,u=y):u=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Re(2,m))/Math.LN10*2+5|0,u+=n,t=i=s=new d(1),d.precision=u;;){if(i=Q(i.times(r),u,1),t=t.times(++l),a=s.plus(ge(i,t,u,1)),ve(a.d).slice(0,u)===ve(s.d).slice(0,u)){for(o=m;o--;)s=Q(s.times(s),u,1);if(e==null)if(c<3&&_n(s.d,u-n,p,c))d.precision=u+=10,t=i=a=new d(1),l=0,c++;else return Q(s,d.precision=y,p,ne=!0);else return d.precision=y,s}s=a}}function Ut(r,e){var t,n,o,i,s,a,u,c,l,m,d,p=1,y=10,f=r,b=f.d,g=f.constructor,h=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?(ne=!1,l=A):l=e,g.precision=l+=y,t=ve(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=ve(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return c=Lo(g,l+2,A).times(i+""),f=Ut(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?Q(f,A,h,ne=!0):f;for(m=f,u=s=f=ge(f.minus(1),f.plus(1),l,1),d=Q(f.times(f),l,1),o=3;;){if(s=Q(s.times(d),l,1),c=u.plus(ge(s,new g(o),l,1)),ve(c.d).slice(0,l)===ve(u.d).slice(0,l))if(u=u.times(2),i!==0&&(u=u.plus(Lo(g,l+2,A).times(i+""))),u=ge(u,new g(p),l,1),e==null)if(_n(u.d,l-y,h,a))g.precision=l+=y,c=s=f=ge(m.minus(1),m.plus(1),l,1),d=Q(f.times(f),l,1),o=a=1;else return Q(u,g.precision=A,h,ne=!0);else return g.precision=A,u;u=c,o+=2}}function gs(r){return String(r.s*r.s/0)}function Er(r,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<o){for(n&&r.d.push(+e.slice(0,n)),o-=ee;n<o;)r.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=o;for(;n--;)e+="0";r.d.push(+e),ne&&(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 Du(r,e){var t,n,o,i,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ps.test(e))return Er(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(_u.test(e))t=16,e=e.toLowerCase();else if(Mu.test(e))t=2;else if(vu.test(e))t=8;else throw Error(Gt+e);for(i=e.search(/p/i),i>0?(u=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,o=ys(n,new n(t),i,i*2)),c=Ko(e,t,yt),l=c.length-1,i=l;c[i]===0;--i)c.pop();return i<0?new n(r.s*0):(r.e=No(c,l),r.d=c,ne=!1,s&&(r=ge(r,o,a*4)),u&&(r=r.times(Math.abs(u)<54?Re(2,u):vn.pow(2,u))),ne=!0,r)}function Wu(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:An(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Mo(5,t)),e=An(r,2,e,e);for(var o,i=new r(5),s=new r(16),a=new r(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(s.times(o).minus(a))));return e}function An(r,e,t,n,o){var i,s,a,u,c=1,l=r.precision,m=Math.ceil(l/ee);for(ne=!1,u=t.times(t),a=new r(n);;){if(s=ge(a.times(u),new r(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=ge(s.times(u),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,c++}return ne=!0,s.d.length=m+1,s}function Mo(r,e){for(var t=r;--e;)t*=r;return t}function ws(r,e){var t,n=e.s<0,o=ft(r,r.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return Mt=n?4:1,e;if(t=e.divToInt(o),t.isZero())Mt=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return Mt=ss(t)?n?2:3:n?4:1,e;Mt=ss(t)?n?1:4:n?3:2}return e.minus(o).abs()}function Fr(r,e,t,n){var o,i,s,a,u,c,l,m,d,p=r.constructor,y=t!==void 0;if(y?(Je(t,1,Xt),n===void 0?n=p.rounding:Je(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=gs(r);else{for(l=Bt(r),s=l.indexOf("."),y?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Ko(Bt(d),10,o),d.e=d.d.length),m=Ko(l,10,o),i=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(r=new p(r),r.d=m,r.e=i,r=ge(r,d,t,n,0,o),m=r.d,i=r.e,c=cs),s=m[t],a=o/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]>o-1;)m[t]=0,t||(++i,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=Mr.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=Ko(l,o,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=Mr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>u)for(i-=u;i--;)l+="0";else i<u&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function as(r,e){if(r.length>e)return r.length=e,!0}function qu(r){return new this(r).abs()}function Uu(r){return new this(r).acos()}function Gu(r){return new this(r).acosh()}function Xu(r,e){return new this(r).plus(e)}function zu(r){return new this(r).asin()}function Yu(r){return new this(r).asinh()}function ju(r){return new this(r).atan()}function Qu(r){return new this(r).atanh()}function Hu(r,e){r=new this(r),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=ft(this,i,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?ft(this,n,o):new this(0),t.s=r.s):!r.d||e.isZero()?(t=ft(this,i,1).times(.5),t.s=r.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(ge(r,e,i,1)),e=ft(this,i,1),this.precision=n,this.rounding=o,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(ge(r,e,i,1)),t}function Zu(r){return new this(r).cbrt()}function Ju(r){return Q(r=new this(r),r.e+1,2)}function $u(r,e,t){return new this(r).clamp(e,t)}function ec(r){if(!r||typeof r!="object")throw Error(Oo+"Object expected");var e,t,n,o=r.defaults===!0,i=["precision",1,Xt,"rounding",0,8,"toExpNeg",-wn,0,"toExpPos",0,wn,"maxE",0,wn,"minE",-wn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=_r[t]),(n=r[t])!==void 0)if(We(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Gt+t+": "+n);if(t="crypto",o&&(this[t]=_r[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(ms);else this[t]=!1;else throw Error(Gt+t+": "+n);return this}function tc(r){return new this(r).cos()}function nc(r){return new this(r).cosh()}function As(r){var e,t,n;function o(i){var s,a,u,c=this;if(!(c instanceof o))return new o(i);if(c.constructor=o,us(i)){c.s=i.s,ne?!i.d||i.e>o.maxE?(c.e=NaN,c.d=null):i.e<o.minE?(c.e=0,c.d=[0]):(c.e=i.e,c.d=i.d.slice()):(c.e=i.e,c.d=i.d?i.d.slice():i.d);return}if(u=typeof i,u==="number"){if(i===0){c.s=1/i<0?-1:1,c.e=0,c.d=[0];return}if(i<0?(i=-i,c.s=-1):c.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;ne?s>o.maxE?(c.e=NaN,c.d=null):s<o.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[i]):(c.e=s,c.d=[i]);return}else if(i*0!==0){i||(c.s=NaN),c.e=NaN,c.d=null;return}return Er(c,i.toString())}else if(u!=="string")throw Error(Gt+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),c.s=-1):(a===43&&(i=i.slice(1)),c.s=1),ps.test(i)?Er(c,i):Du(c,i)}if(o.prototype=M,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=ec,o.clone=As,o.isDecimal=us,o.abs=qu,o.acos=Uu,o.acosh=Gu,o.add=Xu,o.asin=zu,o.asinh=Yu,o.atan=ju,o.atanh=Qu,o.atan2=Hu,o.cbrt=Zu,o.ceil=Ju,o.clamp=$u,o.cos=tc,o.cosh=nc,o.div=oc,o.exp=rc,o.floor=ic,o.hypot=sc,o.ln=ac,o.log=uc,o.log10=lc,o.log2=cc,o.max=mc,o.min=dc,o.mod=pc,o.mul=fc,o.pow=yc,o.random=bc,o.round=gc,o.sign=wc,o.sin=Ac,o.sinh=hc,o.sqrt=Pc,o.sub=kc,o.sum=Tc,o.tan=Ic,o.tanh=Bc,o.trunc=xc,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 o.config(r),o}function oc(r,e){return new this(r).div(e)}function rc(r){return new this(r).exp()}function ic(r){return Q(r=new this(r),r.e+1,3)}function sc(){var r,e,t=new this(0);for(ne=!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 ne=!0,new this(1/0);t=e}return ne=!0,t.sqrt()}function us(r){return r instanceof vn||r&&r.toStringTag===ds||!1}function ac(r){return new this(r).ln()}function uc(r,e){return new this(r).log(e)}function cc(r){return new this(r).log(2)}function lc(r){return new this(r).log(10)}function mc(){return bs(this,arguments,"lt")}function dc(){return bs(this,arguments,"gt")}function pc(r,e){return new this(r).mod(e)}function fc(r,e){return new this(r).mul(e)}function yc(r,e){return new this(r).pow(e)}function bc(r){var e,t,n,o,i=0,s=new this(1),a=[];if(r===void 0?r=this.precision:Je(r,1,Xt),n=Math.ceil(r/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)o=e[i],o>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)o=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(o%1e7),i+=4);i=n/4}else throw Error(ms);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],r%=ee,n&&r&&(o=Re(10,ee-r),a[i]=(n/o|0)*o);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ee)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<ee&&(t-=ee-n)}return s.e=t,s.d=a,s}function gc(r){return Q(r=new this(r),r.e+1,this.rounding)}function wc(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Ac(r){return new this(r).sin()}function hc(r){return new this(r).sinh()}function Pc(r){return new this(r).sqrt()}function kc(r,e){return new this(r).sub(e)}function Tc(){var r=0,e=arguments,t=new this(e[r]);for(ne=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return ne=!0,Q(t,this.precision,this.rounding)}function Ic(r){return new this(r).tan()}function Bc(r){return new this(r).tanh()}function xc(r){return Q(r=new this(r),r.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var vn=M.constructor=As(_r);Co=new vn(Co);Ro=new vn(Ro);var _=vn;import{PublicKey as Gr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Sc}from"@solana/spl-token";import{PublicKey as Ae,SystemProgram as hs,SYSVAR_RENT_PUBKEY as Kc}from"@solana/web3.js";function P({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var Dr=[P({pubkey:Sc,isWritable:!1}),P({pubkey:hs.programId,isWritable:!1}),P({pubkey:Kc,isWritable:!1})];function Wr({publicKey:r,transformSol:e}){let t=qr(r.toString());if(t instanceof Ae)return e&&t.equals(Le)?H:t;if(e&&t.toString()===Le.toBase58())return H;if(typeof t=="string"){if(t===Ae.default.toBase58())return Ae.default;try{return new Ae(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function qr(r){try{return new Ae(r)}catch{return r}}var _o=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),vo=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),bt=new Ae("SysvarRent111111111111111111111111111111111"),Ps=new Ae("SysvarC1ock11111111111111111111111111111111"),hn=new Ae("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Cc=new Ae("Sysvar1nstructions1111111111111111111111111"),Ur=hs.programId,Od=new Ae("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Nd=new Ae("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Md=new Ae("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),_d=new Ae("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),vd=new Ae("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Vd=new Ae("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Ed=new Ae("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Fd=new Ae("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Dd=new Ae("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Wd=new Ae("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),qd=new Ae("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Ae("So11111111111111111111111111111111111111112"),Le=Ae.default;function nt(r){return Wr({publicKey:r,transformSol:!0})}import{PublicKey as Rc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ks}from"@solana/spl-token";var zt={chainId:101,address:Rc.default.toBase58(),programId:ks.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ve={chainId:101,address:"So11111111111111111111111111111111111111112",programId:ks.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 Xr=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:s=!1}){if(e===Le.toBase58()||e instanceof Gr&&Le.equals(e)){this.decimals=Ve.decimals,this.symbol=Ve.symbol,this.name=Ve.name,this.mint=new Gr(Ve.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?Gr.default:Wr({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},he=Xr;he.WSOL=new Xr(E(C({},Ve),{mint:Ve.address}));import Eo from"big.js";import Nc from"bn.js";import Mc from"decimal.js-light";import Lc from"toformat";var Oc=Lc,Vn=Oc;var Vo=se("module/fraction"),zr=Vn(Eo),En=Vn(Mc),_c={[0]:En.ROUND_DOWN,[1]:En.ROUND_HALF_UP,[2]:En.ROUND_UP},vc={[0]:Eo.roundDown,[1]:Eo.roundHalfUp,[2]:Eo.roundUp},de=class{constructor(e,t=new Nc(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new de(this.denominator,this.numerator)}add(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.add(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.sub(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Vo.logWithError(`${e} is not an integer.`),e<=0&&Vo.logWithError(`${e} is not positive.`),En.set({precision:e+1,rounding:_c[n]});let o=new En(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Vo.logWithError(`${e} is not an integer.`),e<0&&Vo.logWithError(`${e} is negative.`),zr.DP=e,zr.RM=vc[n]||1,new zr(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Ec=se("Raydium_price"),$e=class extends de{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=o,this.scalar=new de(Yr(n.decimals),Yr(o.decimals))}get raw(){return new de(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new $e({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Ec.logWithError("mul token not equals");let n=super.mul(t);return new $e({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};var jr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Fo=jr;Fo.SOL=new jr(zt);import Fc from"bn.js";var Ts=new de(new Fc(100)),je=class extends de{toSignificant(e=5,t,n){return this.mul(Ts).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Ts).toFixed(e,t,n)}};var at=new et(0),Bs=new et(1),Ep=new et(2),Fp=new et(3),Dp=new et(5),Qr=new et(10),Wp=new et(100),qp=new et(1e3),Up=new et(1e4),Is=9007199254740991;function Z(r){let e=se("Raydium_parseBigNumberish");if(r instanceof et)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new et(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Is||r<=-Is)&&e.logWithError(`BigNumberish number overflow: ${r}`),new et(String(r))):typeof r=="bigint"?new et(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new et(0))}function Yr(r){return Qr.pow(Z(r))}function Do(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var Wc=se("Raydium_amount"),Ss=Vn(Dc);function qc(r,e){let t="0",n="0";if(r.includes(".")){let o=r.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):Wc.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var ye=class extends de{constructor(t,n,o=!0,i){let s=new Wo(0),a=Qr.pow(new Wo(t.decimals));if(o)s=Z(n);else{let u=new Wo(0),c=new Wo(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=qc(n.toString(),t.decimals);u=Z(l),c=Z(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=se(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new ye(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ye(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Ss.DP=this.token.decimals,new Ss(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function xs(r){return typeof r=="object"&&r!==null&&![he,ye,Uc,de,Gc,$e,je].some(e=>typeof e=="object"&&r instanceof e)}function Ee(r){return typeof r=="string"?qr(r):Array.isArray(r)?r.map(e=>Ee(e)):xs(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,Ee(t)])):r}import{PublicKey as Tn,sendAndConfirmTransaction as ti,Transaction as Wn,TransactionMessage as qn,VersionedTransaction as Un,SystemProgram as Jc,LAMPORTS_PER_SOL as $c}from"@solana/web3.js";import el from"axios";var 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 Xc,ComputeBudgetProgram as Ks,Transaction as Rs,TransactionMessage as zc,Keypair as Ls,VersionedTransaction as Hr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Yc}from"@solana/spl-token";var Cs=se("Raydium_txUtil"),Os=1644;function qo(r){let e=[],t=[];return r.microLamports&&(e.push(Ks.setComputeUnitPrice({microLamports:r.microLamports})),t.push(V.SetComputeUnitPrice)),r.units&&(e.push(Ks.setComputeUnitLimit({units:r.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Pn(r,e){var n,o;let t=e!=null?e:"confirmed";try{return((o=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:o.blockhash)||(await r.getRecentBlockhash(t)).blockhash}catch{return(await r.getRecentBlockhash(t)).blockhash}}function Zr(r,e){r.length<1&&Cs.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Cs.logWithError(`no signers provided:, ${e.toString()}`);let t=new Rs;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Os}catch{return!1}}function le(r,e){let[t,n]=Xc.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}function Fn({instructions:r,payer:e,signers:t}){return Zr(r,[e,...t])}function Dn({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ls.generate().publicKey.toString()}){let i=new zc({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Hr(i).serialize()).toString("base64").length<Os}catch{return!1}}var Ns=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r);function tn(r){let e=[];return r.forEach(t=>{t instanceof Rs&&(t.recentBlockhash||(t.recentBlockhash=Yc.toBase58()),t.feePayer||(t.feePayer=Ls.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof Hr&&(n=Ns(n));let o=n.toString("base64");e.push(o)}),console.log("simulate tx string:",e),e}function Ms(r){let e=r.serialize({requireAllSignatures:!1,verifySignatures:!1});return r instanceof Hr&&(e=Ns(e)),e.toString("base64")}import{PublicKey as vs,AddressLookupTableAccount as Uo}from"@solana/web3.js";import{PublicKey as _s}from"@solana/web3.js";import{MINT_SIZE as jc,TOKEN_PROGRAM_ID as Qc,getTransferFeeConfig as Hc,unpackMint as Zc}from"@solana/spl-token";var Jr=se("Raydium_accountInfo_util");async function gt(r,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=$r(e,i),a=new Array(s.length).fill([]);if(n){let u=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),c=$r(u,10);a=(await(await Promise.all(c.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Jr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Jr.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new _s(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(u=>r.getMultipleAccountsInfo(u,o)))}catch(u){u instanceof Error&&Jr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Ne(r,e,t){let n=await gt(r,e.map(o=>o.pubkey),t);return e.map((o,i)=>E(C({},o),{accountInfo:n[i]}))}async function kn({connection:r,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await Ne(r,e.map(u=>({pubkey:nt(u)})),t),o={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<jc){console.log("invalid mint account",u.pubkey.toBase58());continue}let c=Zc(u.pubkey,u.accountInfo,(i=u.accountInfo)==null?void 0:i.owner);o[u.pubkey.toString()]=E(C({},c),{programId:((s=u.accountInfo)==null?void 0:s.owner)||Qc,feeConfig:(a=Hc(c))!=null?a:void 0})}return o[_s.default.toBase58()]=o[H.toBase58()],o}async function ei({connection:r,address:e}){let t=await gt(r,[...new Set(e.map(o=>o.toString()))].map(o=>new vs(o))),n={};for(let o=0;o<e.length;o++){let i=t[o],s=e[o];if(!i)continue;let a=new Uo({key:s,state:Uo.deserialize(i.data)});n[s.toString()]=a,Go[s.toString()]=a}return n}var Go={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new Uo({key:new vs("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:Uo.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 tl=new Tn("3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT"),Xo=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.enableJito=!!e.enableJito,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await el.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}=qo(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)}}addJitoInstruction(e){let{fee:t,bundle:n}=e||{};if(!this.owner)return;let o=Jc.transfer({fromPubkey:this.owner.publicKey,toPubkey:tl,lamports:t?t*$c:1e4});n?this.instructions.unshift(o):this.instructions.push(o)}async sendTxToJito(e){if(!this.api)return;let t=e.map(o=>Ms(o));return(await this.api.sendTxToJito(t)).result}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Tn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;this.enableJito&&this.addJitoInstruction();let t=new Wn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var c;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=o||{},u=i!=null?i:await Pn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),tn([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await ti(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return this.enableJito&&this.sendTxToJito(l),{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Pn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let A=await ti(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));tn(g);let h=await this.signAllTransactions(g);if(m){let A=0,k=[],B=async()=>{if(!h[A])return;this.enableJito&&this.sendTxToJito([h[A]]);let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[A]}),d==null||d([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});A.push(B)}return this.enableJito&&this.sendTxToJito(h),{txIds:A,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var p;let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o}=d,i=Ie(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:Go),t);this.enableJito&&this.addJitoInstruction();let a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of a)s[y]===void 0&&u.push(new Tn(y));let c=await ei({connection:this.connection,address:u});for(let[y,f]of Object.entries(c))s[y]=f;let l=new qn({payerKey:this.feePayer,recentBlockhash:o?Tn.default.toBase58():await Pn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s));((p=this.owner)==null?void 0:p.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new Un(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var h;let{recentBlockHash:f,skipPreflight:b=!0,sendAndConfirm:g}=y||{};if(f&&(m.message.recentBlockhash=f),tn([m]),(h=this.owner)!=null&&h.isKeyPair){let A=await this.connection.sendTransaction(m,{skipPreflight:b});if(g){let{lastValidBlockHeight:k,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:k,signature:A},"confirmed")}return{txId:A,signedTx:m}}if(this.signAllTransactions){let A=await this.signAllTransactions([m]);return this.enableJito&&this.sendTxToJito(A),{txId:await this.connection.sendTransaction(A[0],{skipPreflight:b}),signedTx:A[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),tn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:A,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:A,signature:h},"confirmed"),b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,h=[],A=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});this.enableJito&&this.sendTxToJito([b[g]]),h.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(k,B=>{let T=h.findIndex(S=>S.txId===k);T>-1&&(h[T].status=B.err?"error":"success"),d==null||d([...h]),B.err||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let A=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(A)}return this.enableJito&&this.sendTxToJito(b),{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let c=e||{},{computeBudgetConfig:t}=c,n=Ie(c,["computeBudgetConfig"]),o=t?qo(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>E(C({},m),{[d.publicKey.toBase58()]:d}),{});this.enableJito&&this.addJitoInstruction({bundle:!0});let s=[],a=[],u=[];if(this.allInstructions.forEach(m=>{let d=[...u,m],p=t?[...o.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Tn(b));if(u.length<12&&Fn({instructions:p,payer:this.feePayer,signers:f})||Fn({instructions:d,payer:this.feePayer,signers:f}))u.push(m);else{if(u.length===0)throw Error("item ins too big");Fn({instructions:t?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:f})?s.push(new Wn().add(...o.instructions,...u)):s.push(new Wn().add(...u)),a.push(Array.from(new Set(u.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),u=[m]}}),u.length>0){let d=[...new Set(u.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);Fn({instructions:t?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Wn().add(...o.instructions,...u)):s.push(new Wn().add(...u)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Pn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,A)=>{h.recentBlockhash=b,a[A].length&&h.sign(...a[A])}),tn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let A of s){let k=await ti(this.connection,A,this.signers.find(B=>B.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(k)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let A=0,k=[],B=async()=>{if(!h[A])return;let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[A]}),p==null||p([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});A.push(B)}return{txIds:A,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:o=[]}=b,i=Ie(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]);this.enableJito&&this.addJitoInstruction();let s=C(C({},this.cluster==="devnet"?{}:Go),n),a=Array.from(new Set([...this.lookupTableAddress,...o])),u=[];for(let h of a)s[h]===void 0&&u.push(new Tn(h));let c=await ei({connection:this.connection,address:u});for(let[h,A]of Object.entries(c))s[h]=A;let l=t?qo(t):{instructions:[],instructionTypes:[]},m=await Pn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,A)=>E(C({},h),{[A.publicKey.toBase58()]:A}),{});this.enableJito&&this.addJitoInstruction({bundle:!0});let p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let A=[...f,h],k=t?[...l.instructions,...A]:A;if(f.length<12&&Dn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Dn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let B={};for(let T of[...new Set(a)])s[T]!==void 0&&(B[T]=s[T]);if(t&&Dn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(T))}else{let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[h]}}),f.length>0){let A=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&Dn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}else{let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(A=>A.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:A,onTxUpdate:k,recentBlockHash:B,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),B&&(x.message.recentBlockhash=B)}),tn(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let x=[];for(let R of p){let I=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:q}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:q,lastValidBlockHeight:L,signature:I},"confirmed"),x.push(I)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(A){let R=0,I=[],L=async()=>{if(!x[R])return;let q=await this.connection.sendTransaction(x[R],{skipPreflight:T});I.push({txId:q,status:"sent",signedTx:x[R]}),k==null||k([...I]),R++,this.connection.onSignature(q,F=>{let $=I.findIndex(G=>G.txId===q);$>-1&&(I[$].status=F.err?"error":"success"),k==null||k([...I]),F.err||L()},"processed"),this.connection.getSignatureStatus(q)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let I=0;I<x.length;I+=1){let L=await this.connection.sendTransaction(x[I],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var wt=class{constructor(e){this._owner=e}get publicKey(){return wt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return wt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return wt.isKeyPair(this._owner)}get isPublicKey(){return wt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!wt.isKeyPair(e)}};function $r(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}import{PublicKey as ue}from"@solana/web3.js";var Vs=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Es=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Xn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),ey=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),ty=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),ni=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Fs=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),ny=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Ds=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Ws=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),oy=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),ry=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),nl=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),ol=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),rl=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),il=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),qs=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),iy=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),sy=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),sl=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),al=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),ul=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),zn={IDO_PROGRAM_ID_V1:nl,IDO_PROGRAM_ID_V2:ol,IDO_PROGRAM_ID_V3:rl,IDO_PROGRAM_ID_V4:il};var ay={SERUM_MARKET:ue.default,OPENBOOK_MARKET:new ue("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ue.default,FarmV3:new ue("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ue("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ue("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ue("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ue("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ue("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:sl,CREATE_CPMM_POOL_AUTH:al,CREATE_CPMM_POOL_FEE_ACC:ul,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as cl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ll}from"@solana/spl-token";function Pe(r,e,t){return le([r.toBuffer(),(t!=null?t:ll).toBuffer(),e.toBuffer()],new cl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import At from"bn.js";var Yn=1e4;function we(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let o=E(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,s=new At(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Yn){let u=new At(i.maximumFee.toString());return{amount:r.add(u),fee:u,expirationTime:a}}else{let u=jn(r.mul(new At(Yn)),new At(Yn-i.transferFeeBasisPoints)),c=new At(i.maximumFee.toString()),l=u.sub(r).gt(c)?r.add(c):u,m=jn(l.mul(new At(i.transferFeeBasisPoints)),new At(Yn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=jn(r.mul(new At(i.transferFeeBasisPoints)),new At(Yn)),c=u.gt(s)?s:u;return{amount:r,fee:c,expirationTime:a}}}function xt(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function jn(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new At(0))?t.add(new At(1)):t}var Ce={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",SEND_TRANSACTION:"/send-transaction",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",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},Ny=C({},Ce);var Us="ray_tab_hash",oi="ray_req_hash",ml=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(Us);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(Us,r)),r},zo=async n=>{var o=n,{logCount:r=1e3,removeLastLog:e}=o,t=Ie(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(oi)||"[]").slice(0,r-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(E(C({},t),{time:Date.now(),session:ml()}));try{localStorage.setItem(oi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let u=JSON.stringify(t.data).substring(0,100);i[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(oi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(u=>u())}return zo(E(C({},t),{logCount:r,removeLastLog:!0}))}};var Yo=se("Raydium_Api"),ri=new Map;var jo=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=Gs.create({baseURL:this.urlConfigs.BASE_HOST||Ce.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return Yo.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(Yo.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:d}=a;return n&&zo({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),Yo.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:d}=a;return n&&zo({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Yo.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ce.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ce.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Gs.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ce.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ce.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ce.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||Ce.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ce.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ce.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ce.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>ri.has(s)?(n.push(ri.get(s)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ce.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{ri.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:s="desc",page:a=1}=e,[u,c]=[t&&nt(t).toBase58(),n&&n!=="undefined"?nt(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ce.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ce.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ce.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ce.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ce.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ce.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ce.JITO})).data}};var Qo="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Xs="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as yi,TOKEN_PROGRAM_ID as Qt,AccountLayout as xn,TOKEN_2022_PROGRAM_ID as Wl}from"@solana/spl-token";import{PublicKey as or,SystemProgram as ql}from"@solana/web3.js";var ii=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),ke=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=se(t)}createTxBuilder(e){return this.scope.checkOwner(),new Xo({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,enableJito:this.scope.enableJito,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(ii(e))}logInfo(...e){this.logger.info(ii(e))}logAndCreateError(...e){let t=ii(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as _l,createCloseAccountInstruction as vl,createTransferInstruction as Vl,TOKEN_PROGRAM_ID as Bn}from"@solana/spl-token";import{PublicKey as El,SystemProgram as Fl}from"@solana/web3.js";import Dl from"bn.js";import{PublicKey as ia,Keypair as Ll}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ol}from"@solana/spl-token";import Nl from"bn.js";import{PublicKey as Il}from"@solana/web3.js";import Hs,{isBN as Zs}from"bn.js";import{bits as pl,BitStructure as pb,blob as fl,Blob as fb,cstr as yb,f32 as bb,f32be as gb,f64 as wb,f64be as Ab,greedy as hb,Layout as yl,ns64 as Pb,ns64be as kb,nu64 as bl,nu64be as Tb,offset as Ib,s16 as Bb,s16be as xb,s24 as Sb,s24be as Kb,s32 as gl,s32be as Cb,s40 as Rb,s40be as Lb,s48 as Ob,s48be as Nb,s8 as Mb,seq as wl,struct as _b,Structure as Al,u16 as hl,u16be as vb,u24 as Vb,u24be as Eb,u32 as Pl,u32be as Fb,u40 as Db,u40be as Wb,u48 as qb,u48be as Ub,u8 as kl,UInt as Tl,union as Gb,Union as Xb,unionLayoutDiscriminator as zb,utf8 as Yb}from"@solana/buffer-layout";var Ho=yl,zs=Al;var si=Tl;var Ys=kl,St=hl;var ai=Pl;var js=bl;var Fe=gl;var Qs=wl;var pe=fl;var ui=pl;var nn=class extends Ho{constructor(t,n,o){super(t,o);this.blob=pe(t),this.signed=n}decode(t,n=0){let o=new Hs(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new Hs(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Zo=class extends Ho{constructor(t){super(8,t);this._lower=ui(ai(),!1),this._upper=ui(ai(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function D(r){return new si(1,r)}function Qe(r){return new si(4,r)}function w(r){return new nn(8,!1,r)}function Y(r){return new nn(16,!1,r)}function Js(r){return new nn(1,!0,r)}function $o(r){return new nn(8,!0,r)}function $s(r){return new nn(16,!0,r)}var Jo=class extends Ho{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(r){return new Jo(pe(32),e=>new Il(e),e=>e.toBuffer(),r)}function qe(r){return new Jo(Ys(),Bl,xl,r)}function Bl(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function xl(r){return r?1:0}var ci=class extends zs{decode(e,t){return super.decode(e,t)}};function v(r,e,t){return new ci(r,e,t)}function X(r,e,t){let n,o=typeof e=="number"?e:Zs(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Zs(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,s)},set(i,s,a){return s==="count"&&(n=a),Reflect.set(i,s,a)}});return Qs(r,o,t)}var In=v([K("mint"),K("owner"),w("amount"),Qe("delegateOption"),K("delegate"),D("state"),Qe("isNativeOption"),w("isNative"),w("delegatedAmount"),Qe("closeAuthorityOption"),K("closeAuthority")]);function Sl(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function li(r,...e){if(!Sl(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 mi(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 ea(r,e){li(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var tr=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),ht=(r,e)=>r<<32-e|r>>>e;var ug=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Kl(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function di(r){return typeof r=="string"&&(r=Kl(r)),li(r),r}var er=class{clone(){return this._cloneInto()}},cg={}.toString;function ta(r){let e=n=>r().update(di(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Cl(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),u=n?4:0,c=n?0:4;r.setUint32(e+u,s,n),r.setUint32(e+c,a,n)}var na=(r,e,t)=>r&e^~r&t,oa=(r,e,t)=>r&e^r&t^e&t,nr=class extends er{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=tr(this.buffer)}update(e){mi(this);let{view:t,buffer:n,blockLen:o}=this;e=di(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let u=tr(e);for(;o<=i-s;s+=o)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){mi(this),ea(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;Cl(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=tr(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],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var Rl=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]),Yt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),jt=new Uint32Array(64),pi=class extends nr{constructor(){super(64,32,8,!1),this.A=Yt[0]|0,this.B=Yt[1]|0,this.C=Yt[2]|0,this.D=Yt[3]|0,this.E=Yt[4]|0,this.F=Yt[5]|0,this.G=Yt[6]|0,this.H=Yt[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:u}=this;return[e,t,n,o,i,s,a,u]}set(e,t,n,o,i,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|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)jt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=jt[m-15],p=jt[m-2],y=ht(d,7)^ht(d,18)^d>>>3,f=ht(p,17)^ht(p,19)^p>>>10;jt[m]=f+jt[m-7]+y+jt[m-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=ht(a,6)^ht(a,11)^ht(a,25),p=l+d+na(a,u,c)+Rl[m]+jt[m]|0,f=(ht(n,2)^ht(n,13)^ht(n,22))+oa(n,o,i)|0;l=c,c=u,u=a,a=s+p|0,s=i,i=o,o=n,n=p+f|0}n=n+this.A|0,o=o+this.B|0,i=i+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,o,i,s,a,u,c,l)}roundClean(){jt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ra=ta(()=>new pi);var xg=se("Raydium_Util");function sa({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:s}of t.value){let a=In.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:i,mint:u,amount:c,isAssociated:Pe(r,u,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),o.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:ia.default,amount:new Nl(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function Ue({fromPublicKey:r,programId:e=Ol}){let t=Ll.generate().publicKey.toBase58().slice(0,32);return{publicKey:Ml(r,t,e),seed:t}}function Ml(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),o=ra(n);return new ia(o)}function fi(r){let{mint:e,tokenAccount:t,owner:n,programId:o=Bn}=r;return _l(t,e,n,o)}function Kt(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Bn}=r;return vl(e,t,o,n,i)}async function _t(r){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(In.span,n),u=Z(t).add(new Dl(a)),c=Ue({fromPublicKey:o,programId:Bn});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[Fl.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:In.span,programId:Bn}),fi({mint:new El(Ve.address),tokenAccount:c.publicKey,owner:i,programId:Bn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[Kt({tokenAccount:c.publicKey,payer:o,owner:i})]}}function Qn({source:r,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Bn}){return Vl(r,e,t,BigInt(String(n)),o,i)}var Hn=class extends ke{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._clientOwnedToken=!!(n||o)}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 Pe(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 o=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Qt},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Wl},o.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=sa({owner:this.scope.ownerPubKey,solAccountResp:i,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}),t==null?void 0:t.commitment),{tokenAccounts:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=Qt,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:u}=a;if(u&&(!o||o&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new or(t.tokenProgram||Qt),m=this.getAssociatedTokenAccount(n,new or(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,A)=>h.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(o===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=yi(s,m,s,n,l);if(c){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(V.CreateATA);else if(!(A.owner.equals(l)&&xn.decode(A.data).mint.equals(n)&&xn.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(V.CreateATA);if(n.equals(H)&&o.amount){let A=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(f=o.amount)!=null?f:0,skipCloseAccount:u});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),o.amount&&(p.instructions.push(Qn({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:Qt})),p.instructionTypes.push(V.TransferAmount))}return u||(p.endInstructions.push(Kt({owner:s,payer:o.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:p}}else{let h=Ue({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(xn.span),k=ql.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:A+Number((g=(b=o.amount)==null?void 0:b.toString())!=null?g:0),space:xn.span,programId:l});return p.instructions.push(k,fi({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(V.CreateAccount),p.instructionTypes.push(V.InitAccount),u||(p.endInstructions.push(Kt({owner:s,payer:o.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=Qt,autoUnwrapWSOLToSOL:o}){var u;await this.fetchWalletTokenAccounts();let i=(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(!i){let c=this.getAssociatedTokenAccount(t,n),l=await yi(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],i=c}return o&&H.toBase58()===t.toBase58()&&(a.endInstructions=[Kt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:s=Qt,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new or(H).equals(i)){let p=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:o,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=yi(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(Qt)&&xn.decode(f.data).mint.equals(i)&&xn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=Qt,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new or(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=l,p=Ie(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=m,p=Ie(m,["tokenAccount"]);u=d,c.addInstruction(p)}return C({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as im}from"@solana/spl-token";import{PublicKey as fe,SystemProgram as sm}from"@solana/web3.js";import{PublicKey as ca}from"@solana/web3.js";var bi=v([D("instruction")]),gi=v([D("instruction")]),Ul=v([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Y("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),Gl=v([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),Y("perShareReward"),w("lastSlot"),w("perSlotReward")]),Xl=v([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),Y("perShareRewardA"),w("perSlotRewardA"),D("option"),K("rewardVaultB"),pe(7),w("totalRewardB"),Y("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),zl=v([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Y("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(Ul,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Yl=new Proxy(Gl,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(r,e,t)}}),jl=new Proxy(Xl,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(r,e,t)}}),rr=new Proxy(zl,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var s;return E(C({},i),{rewardType:((s=Object.entries(Ht).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),Ql=v([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),wi=v([D("instruction"),w("nonce"),X(Ql,5,"rewardTimeInfo")]),Ai=v([D("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),hi=v([D("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),rw=v([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),Pi=v([w("state"),K("id"),K("owner"),w("deposited"),X(Y(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),iw=v([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),aa=v([w("state"),K("id"),K("owner"),w("deposited"),X(Y(),2,"rewardDebts"),X(w(),17)]),ua=v([w(),w("state"),K("id"),K("owner"),w("deposited"),X(Y(),5,"rewardDebts"),X(w(),16)]),ot=v([D("instruction"),w("amount")]),Hl=v([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Js("digitShift"),X(D(),7,"reserved1"),X(w(),7,"reserved2")]),Zl=v([pe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(D(),32,"reserved1"),X(Hl,4,"votingMints"),$o("timeOffset"),D("bump"),X(D(),7,"reserved2"),X(w(),11,"reserved3")]),Jl=v([$o("startTime"),$o("endTime"),D("kind"),X(D(),15,"reserved")]),$l=v([X(Jl,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),D("votingMintConfigIdx"),X(D(),29,"reserved")]),em=v([pe(8),K("voterAuthority"),K("registrar"),X($l,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),X(D(),94,"reserved")]);var pw=se("Raydium_farm_config"),la=new ca("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ma=new ca("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var da={3:Pi,5:aa,6:ua},ki=r=>[3,5,6].indexOf(r)!==-1,Ti=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(s=i[e])==null?void 0:s.call(i)},Ht={"Standard SPL":0,"Option tokens":1},ut={[Vs.toString()]:3,[Es.toString()]:5,[Xn.toString()]:6};import{PublicKey as me,SystemProgram as ya,SYSVAR_RENT_PUBKEY as om,SYSVAR_CLOCK_PUBKEY as ir,TransactionInstruction as Pt}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Gw,TOKEN_PROGRAM_ID as Zt,ASSOCIATED_TOKEN_PROGRAM_ID as Xw}from"@solana/spl-token";import ba from"bn.js";import tm from"bn.js";var nm=se("Raydium.farm.util");function Zn({programId:r,poolId:e,mint:t,type:n}){let{publicKey:o}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return o}function ct({programId:r,poolId:e,owner:t,version:n}){let{publicKey:o}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return o}var pa=({programId:r,poolId:e})=>le([e.toBuffer()],r);function fa(r){return{isSet:new tm(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(Ht[r.rewardType])}}function Ii(r){return Z(r.endTime).sub(Z(r.openTime)).mul(Z(r.perSecond))}function Jn(r){let e=da[r];return e||nm.logWithError("invalid version",r),e}var rm=se("Raydium_farm_instruction"),rA={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 $n(r){let{version:e,id:t,ledger:n,programId:o,owner:i}=r,s={3:9,5:10}[e];s||rm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(bi.span);bi.encode({instruction:s},a);let u=[P({pubkey:t}),P({pubkey:n}),P({pubkey:i,isWritable:!1}),P({pubkey:ya.programId,isWritable:!1}),P({pubkey:om,isWritable:!1})];return{instruction:new Pt({programId:o,keys:u,data:a}),instructionType:V.FarmV3CreateLedger}}function ga(r){var n;let e=Buffer.alloc(wi.span);wi.encode({instruction:0,nonce:new ba(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...Dr,P({pubkey:r.farmId}),P({pubkey:r.farmAuthority,isWritable:!1}),P({pubkey:r.lpVault}),P({pubkey:r.lpMint,isWritable:!1}),P({pubkey:r.lockVault}),P({pubkey:r.lockMint,isWritable:!1}),P({pubkey:(n=r.lockUserAccount)!=null?n:Le}),P({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let o of r.rewardInfo)t.push(P({pubkey:o.rewardMint,isWritable:!1}),P({pubkey:o.rewardVault}),P({pubkey:o.userRewardToken}));return{instruction:new Pt({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function wa(r){let e=Buffer.alloc(gi.span);gi.encode({instruction:5},e);let t=[P({pubkey:Zt,isWritable:!1}),P({pubkey:r.id}),P({pubkey:r.authority,isWritable:!1}),P({pubkey:r.lpVault,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}),P({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Pt({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function Bi({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(Ai.span);Ai.encode({instruction:3,rewardReopenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardPerSecond:Z(o.perSecond)},i);let s=[P({pubkey:Zt,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:r,isWritable:!1,isSigner:!0})];return new Pt({programId:n.programId,keys:s,data:i})}function xi({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(hi.span);hi.encode({instruction:4,isSet:new ba(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(Ht[o.rewardType])},i);let s=[...Dr,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:o.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:r,isWritable:!1,isSigner:!0})];return new Pt({programId:t.programId,keys:s,data:i})}function eo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(ot.span);ot.encode({instruction:2,amount:Z(s)},l);let m=[P({pubkey:Zt,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:o[d]}));return new Pt({programId:a,keys:m,data:l})}function to(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(ot.span);ot.encode({instruction:12,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:ir,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:o[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function no(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(ot.span);ot.encode({instruction:11,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:ir,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function Aa(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(ot.span);ot.encode({instruction:10,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:ir,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function ha(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(ot.span);ot.encode({instruction:11,amount:Z(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:ir,isWritable:!1}),P({pubkey:Zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:o[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function Pa(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(ot.span);ot.encode({instruction:1,amount:Z(s)},l);let m=[P({pubkey:Zt,isWritable:!1}),P({pubkey:ya.programId,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:o[d]}));return new Pt({programId:a,keys:m,data:l})}var oo=class extends ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Le)){let n=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Ii(E(C({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Xn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new fe(e.lpMint.address),lockInfo:{lockMint:la,lockVault:ma},version:6,rewardInfos:t,programId:o},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ue({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(rr.span);u.addInstruction({instructions:[sm.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:rr.span,programId:a.programId})]});let{publicKey:d,nonce:p}=pa({programId:new fe(a.programId),poolId:l.publicKey}),y=Zn({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(Ht[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(fa(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:c});S&&u.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Le)?new fe(Ve.address):B.mint;b.push({rewardMint:x,rewardVault:Zn({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new fe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&u.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=ga({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return u.addInstruction({instructions:[A],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o}){var b;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((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(Le)?new fe(Ve.address):n.mint,l=a.rewardInfos.findIndex(g=>new fe(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let d=(b=m.vault)!=null?b:Le,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Bi({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o}){var l;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((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 d=m.mint.equals(Le)?new fe(Ve.address):m.mint,p=a.rewardInfos.findIndex(A=>new fe(A.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Le,{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 h=Bi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[h],instructionTypes:[V.FarmV6Restart]})}return c.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder(),l=o.mint.equals(Le)?new fe(Ve.address):o.mint,m=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:o,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,c.addInstruction({instructions:[xi({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:o})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of o){let m=l.mint.equals(Le)?new fe(Ve.address):l.mint,d=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=xi({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:E(C({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[V.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,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:d}=n,p=ut[d];ki(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new fe(n.programId),new fe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=ct({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let A={};for(let F of this.scope.account.tokenAccounts)if(a){let $=Pe(this.scope.ownerPubKey,F.mint,F.programId).publicKey;F.publicKey&&$.equals(F.publicKey)&&(A[F.mint.toString()]=F.publicKey)}else A[F.mint.toString()]=F.publicKey;let k=b.lpMint,B=A[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let F of m){let $=s&&F.mint.address===H.toString(),G=A[F.mint.address];if(!G){let{account:W,instructionParams:Ye}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:F.mint.programId,mint:new fe(F.mint.address),notUseTokenAccount:$,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!$,associatedOnly:$?!1:a,checkCreateATAOwner:u});G=W,Ye&&h.addInstruction(Ye)}A[F.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Jn(p).decode(x.data)),n.programId!==Xn.toString()&&!S){let{instruction:F,instructionType:$}=$n({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[F],instructionTypes:[$]})}let R=Ti({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:c==null?void 0:c.map(F=>new fe(F))},L=p===6?Pa(I):p===5?ha(I):Aa(I),q={3:V.FarmV3Deposit,5:V.FarmV5Deposit,6:V.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[q[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=ut[n.programId];ki(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(u){let I=Pe(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&I.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=ct({programId:new fe(n.programId),poolId:new fe(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);if(I)Jn(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:q}=$n({id:new fe(y.id),programId:new fe(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[q]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I})}let g=y.lpMint.address,h=s&&g===H.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new fe(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:u,checkCreateATAOwner:c});A=R,I&&f.addInstruction(I)}b[g.toString()]=A;let k=[];for(let R of d){let I=s&&R.mint.address===H.toString(),L=b[R.mint.address];if(!L){let{account:q,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new fe(R.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:u,checkCreateATAOwner:c});L=q,F&&f.addInstruction(F)}b[R.mint.address]=L,k.push(L)}let B=Ti({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new fe(R))},S=p===6?eo(T):p===5?to(T):no(T),x={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let o=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Le.toString()?new fe(Ve.address):t),a=o.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Le,c=this.createTxBuilder(),l;if(t.equals(Le)){let y=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Ii(E(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new _(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:[im(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:d}=wa({programId:o.programId,id:o.id,authority:o.authority,lpVault:o.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=Pe(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>E(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,A=ut[f],k=b.address,B=n&&k===H.toString(),T=m[k];if(!T){let{account:q,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new fe(k),notUseTokenAccount:B,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=q,F&&l.addInstruction(F)}m[k.toString()]=T;let S=[];for(let q of g){let F=n&&q.mint.address===H.toString(),$=m[q.mint.address];if(!$){let{account:G,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:q.mint.programId,mint:new fe(q.mint.address),notUseTokenAccount:F,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!F,associatedOnly:F?!1:i,checkCreateATAOwner:s});$=G,W&&l.addInstruction(W)}m[q.mint.address]=$,S.push($)}let x=p[h],R={amount:at,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(q=>new fe(q))},I=A===6?eo(R):A===5?to(R):no(R),L={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[L[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as Xe}from"@solana/web3.js";import{AccountLayout as qm,NATIVE_MINT as tu,TOKEN_PROGRAM_ID as Rn}from"@solana/spl-token";var SA=v([Qe("mintAuthorityOption"),K("mintAuthority"),w("supply"),D("decimals"),D("isInitialized"),Qe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as LA}from"@solana/web3.js";import{MintLayout as NA,TOKEN_PROGRAM_ID as _A}from"@solana/spl-token";var sr=r=>new he({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),ro=o=>{var i=o,{amount:r,isRaw:e,name:t}=i,n=Ie(i,["amount","isRaw","name"]);return new ye(new he({mint:nt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};var He=o=>{var i=o,{address:r,programId:e,decimals:t}=i,n=Ie(i,["address","programId","decimals"]);return C({chainId:101,address:nt(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Jt=r=>r?E(C({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:E(C({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(C({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as so,ASSOCIATED_TOKEN_PROGRAM_ID as hm}from"@solana/spl-token";import{PublicKey as Ct,TransactionInstruction as Kn,SystemProgram as Pm,SYSVAR_RENT_PUBKEY as sh}from"@solana/web3.js";var Si=v([D("instruction"),w("amountIn"),w("minAmountOut")]),Ki=v([D("instruction"),w("maxAmountIn"),w("amountOut")]),ZA=v([D("instruction"),D("nonce")]),am=v([D("instruction"),D("nonce"),w("startTime")]),ar=v([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),w("lpReserve"),X(w(),3,"padding")]),JA=v([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(w(),64,"padding")]),Ci=v([D("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Ri=v([D("instruction"),w("amountIn")]);var ka=v([w("fee")]);import{PublicKey as um}from"@solana/web3.js";var Sn=new um("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),rn=5e4,cm=v([w("x"),w("y"),w("price")]),lm=v([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(cm,rn,"DataElement")]);function mm(r,e){return[0,rn-2]}function dm(r){return[0,rn-2]}function pm(r){return[0,rn-2]}function fm(r,e,t){let[n,o]=mm(e,t),i=n,s=o,a=0,u=e*r.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=rn-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];i=a+1}}return[a,a,!1]}function Li(r,e,t){let[n,o,i]=fm(r,e,t);if(!i)return 0;if(n===o){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[o].x,c=r.DataElement[o].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*r.multiplier*l/p}}function on(r,e,t){return e*r.multiplier/t}function Ta(r,e,t){return e*t/r.multiplier}function ym(r,e){let[t,n]=dm(e),o=t,i=n,s=0,a=e;for(;o<i;){if(s=Math.floor((i+o)/2),s<=0||s>rn-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)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 bm(r,e){let[t,n]=pm(e),o=t,i=n,s=0,a=e;for(;o<=i;){if(s=Math.floor((i+o)/2),s<=0||s>=rn-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)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 Ia(r,e,t,n){let o=n?e+t:e-t,[i,s,a]=ym(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let u=r.DataElement[i].x,c=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=u&&e<=c)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=d-(o-u)*r.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-o)*r.multiplier/l),[y,f,!1,a]}}}function gm(r,e,t,n){let o=n?e-t:e+t,[i,s,a]=bm(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let u=r.DataElement[i].x,c=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=u+m*(d-o)/r.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(o-p)/r.multiplier),[y,f,!1,a]}}}function wm(r,e){let t=Ia(r,e,0,!1);return t[3]?t[0]:0}function Ba(r,e,t,n){let o=Li(r,e,t),i=on(r,e,o),s=on(r,t,o),a=on(r,n,o),u=!0,[c,l,m,d]=Ia(r,i,a,u);if(!d)return 0;if(m)return n*r.multiplier/c;{let p=s-l;return Ta(r,p,o)}}function xa(r,e,t,n){let o=Li(r,e,t),i=on(r,e,o),s=on(r,t,o),a=on(r,n,o),u=!1,[c,l,m,d]=gm(r,s,a,u);if(!d)return 0;if(m)return n*c/r.multiplier;{let p=i-l;return Ta(r,p,o)}}function Am(r){let e=lm.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 Sa(r,e,t,n){let o=wm(r,on(r,e,Li(r,e,t)))/r.multiplier;return n?o:1/o}var io=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(Sn);e&&(this._layoutData=Am(e==null?void 0:e.data))}}};var Ka=se("Raydium_liquidity_instruction");function Ca(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:s}=r,a=Buffer.alloc(Ci.span);Ci.encode({instruction:3,baseAmountIn:Z(o),quoteAmountIn:Z(i),fixedSide:s==="base"?at:Bs},a);let u=[P({pubkey:so,isWritable:!1}),P({pubkey:new Ct(e.id)}),P({pubkey:new Ct(t.authority),isWritable:!1}),P({pubkey:new Ct(t.openOrders),isWritable:!1}),P({pubkey:new Ct(t.targetOrders)}),P({pubkey:new Ct(e.lpMint.address)}),P({pubkey:new Ct(t.vault.A)}),P({pubkey:new Ct(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(P({pubkey:Sn})),u.push(P({pubkey:new Ct(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new Ct(t.marketEventQueue),isWritable:!1})),new Kn({programId:new Ct(e.programId),keys:u,data:a})}function Oi(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:o}=r,i=Ee(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Ri.span);Ri.encode({instruction:4,amountIn:Z(o)},a);let u=[P({pubkey:so,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.mintLp.address}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return s===5?u.push(P({pubkey:Sn})):(u.push(P({pubkey:i.id})),u.push(P({pubkey:i.id}))),u.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks})),new Kn({programId:i.programId,keys:u,data:a})}return new Kn({programId:i.programId,keys:[]})}function Ra({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:A,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=v([D("instruction"),D("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:so,isSigner:!1,isWritable:!1},{pubkey:hm,isSigner:!1,isWritable:!1},{pubkey:Pm.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:A,coinAmount:k,pcAmount:B},I),{instruction:new Kn({keys:R,programId:r,data:I}),instructionType:V.AmmV4CreatePool}}function km({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},o){let i=Ee(r),s=Buffer.alloc(Si.span);Si.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[P({pubkey:so,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders})];return o===4&&a.push(P({pubkey:i.targetOrders})),a.push(P({pubkey:i.vault.A}),P({pubkey:i.vault.B})),o===5&&a.push(P({pubkey:Sn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new Kn({programId:i.programId,keys:a,data:s})}function Tm({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},o){let i=Ee(r),s=Buffer.alloc(Ki.span);Ki.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[P({pubkey:so,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return o===5&&a.push(P({pubkey:Sn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Kn({programId:i.programId,keys:a,data:s})}function ur(r){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return km(E(C({},a),{amountIn:o,minAmountOut:i}),t);if(s==="out")return Tm(E(C({},a),{maxAmountIn:o,amountOut:i}),t);Ka.logWithError("invalid params","params",r)}throw Ka.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{TOKEN_PROGRAM_ID as De,TOKEN_2022_PROGRAM_ID as $t,ASSOCIATED_TOKEN_PROGRAM_ID as Ya}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as Tt,SystemProgram as Cn,Keypair as Wi}from"@solana/web3.js";import ja from"bn.js";import Om from"bn.js";function cr(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Ni(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Mi(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function ao(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function La(r,e){return ao(r,e)?null:Ni(r,e)}function Oa(r,e){return ao(r,e)?null:Mi(r,e)}var hh=Buffer.from("amm_config","utf8"),Im=Buffer.from("pool","utf8"),Bm=Buffer.from("pool_vault","utf8"),xm=Buffer.from("pool_reward_vault","utf8"),Na=Buffer.from("position","utf8"),Sm=Buffer.from("tick_array","utf8"),Km=Buffer.from("operation","utf8"),Cm=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Ma(r,e,t,n){return le([Im,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function _i(r,e,t){return le([Bm,e.toBuffer(),t.toBuffer()],r)}function _a(r,e,t){return le([xm,e.toBuffer(),t.toBuffer()],r)}function be(r,e,t){return le([Sm,e.toBuffer(),cr(t)],r)}function sn(r,e,t,n){return le([Na,e.toBuffer(),cr(t),cr(n)],r)}function lt(r,e){return le([Na,e.toBuffer()],r)}function lr(r){return le([Buffer.from("metadata","utf8"),hn.toBuffer(),r.toBuffer()],hn)}function uo(r){return le([Km],r)}function rt(r,e){return le([Cm,e.toBuffer()],r)}import mt from"bn.js";var Be=new mt(0),it=new mt(1),vt=new mt(-1),st=new mt(1).shln(64),mr=new mt(1).shln(128),vi=st.sub(it),co=64,va=mr.subn(1),Ge=-443636,Ze=-Ge,Rt=new mt("4295048016"),Lt=new mt("79226673521066979257578248091"),dr=new mt("4295048017"),pr=new mt("79226673521066979257578248090"),Va=16,Ea="59543866431248",Fa="184467440737095516",Da="15793534762490258745",fr=new mt(10).pow(new mt(6));var Wa={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:[]},Th=new mt("18446744073700000000");var Rm=15,ae=class{static async getTickArrays(e,t,n,o,i,s,a){let u=[],c=j.getTickArrayStartIndexByTick(o,i),l=j.getInitializedTickArrayInRange(s,a,i,c,Math.floor(Rm/2));for(let p=0;p<l.length;p++){let{publicKey:y}=be(t,n,l[p]);u.push(y)}let m=(await gt(e,u)).map(p=>p!==null?lo.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=E(C({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,o,i,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,o,i,s);for(;a==null||a.liquidityGross.lten(0);){if(c=j.getNextTickArrayStartIndex(c,i,s),this.checkIsValidStartIndex(c,i))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,o,i){let s=Math.floor(e/ae.tickCount(t)),a=n?j.searchLowBitFromStart(o,i,s-1,1,t):j.searchHightBitFromStart(o,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let i;if(o){let a=Oe-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a-1}}else{let a=0;for(;a<Oe;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a+1}}let{publicKey:s}=be(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,s){let a=j.getTickArrayStartIndexByTick(o,i),u=Math.floor((o-a)/i),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u-1}else for(u=u+1;u<Oe;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=be(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(j.checkIsOutOfBoundary(e)){if(e>Ze)return!1;let n=j.getTickArrayStartIndexByTick(Ge,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Oe*e}};import re from"bn.js";import{PublicKey as kt}from"@solana/web3.js";import xe from"bn.js";var Vi=14,Vt=class{static maxTickInTickarrayBitmap(e){return e*Oe*an}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let i=n*o;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!ae.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=o?t-ae.tickCount(n):t+ae.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Oe,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(o){let l=e.shln(1024-c-1),m=La(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(c),m=Oa(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-ae.tickCount(n)}}}},mo=class{static getBitmapOffset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Vt.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;if(Ze<=t)throw Error(`extensionTickBoundary check error: ${Ze}, ${t}`);if(n<=Ge)throw Error(`extensionTickBoundary check error: ${n}, ${Ge}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=ae.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:s}=Vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let u=j.mergeTickArrayBitmap(e).shln(an-1-a),c=ao(512,u)?null:Ni(512,u);if(c!==null){let l=t-c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let u=j.mergeTickArrayBitmap(e).shrn(a),c=ao(512,u)?null:Mi(512,u);if(c!==null){let l=t+c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-ae.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Vt.maxTickInTickarrayBitmap(t),o=Math.floor(n/ae.tickCount(t));return e<0&&n!=0&&(o=an-o),o}};import Ot from"bn.js";var po=class{static getfeeGrowthInside(e,t,n){let o=new Ot(0),i=new Ot(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Ot(0),a=new Ot(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=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),c=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new Ot(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),u))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new Ot(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),u))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:s}){var b,g,h,A;let a=oe.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),u=oe.getSqrtPriceX64FromTick(t.tickLower),c=oe.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=ce.getAmountsFromLiquidity(a,u,c,n,i),[d,p]=[we(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),we(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[we(new Ot(new _(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),we(new Ot(new _(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as qa}from"@solana/spl-token";var Se=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,s=!1){let a=n.toBase58()===e.mintA.address,u=[],{isExist:c,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!c||l===void 0||!m)throw new Error("Invalid tick array");u.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=un.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,i,s);return u.push(...y),{allTrade:d,expectedAmountOut:p.mul(vt),remainingAccounts:u,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){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}=be(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=un.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(vt),c,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Se.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?mo.checkTickArrayIsInit(ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=be(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=be(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/ae.tickCount(e.tickSpacing)),o=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=Vt.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=mo.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Ge||t>Ze)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,u,c;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(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(d===void 0)throw Error("get new reward mint info error");let p=E(C({},m),{perSecond:te.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new kt(d)});if(p.tokenMint.equals(kt.default))continue;if(n<=p.openTime.toNumber()||o.eq(Be)){s.push(p);continue}let y=new xe(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=te.mulDivFloor(f,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),h=te.mulDivFloor(f,p.emissionsPerSecondX64,st),A=p.rewardTotalEmissioned.add(h);s.push(E(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let s=j.getTickArrayStartIndexByTick(i,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;return t>Ze&&(t=ae.getArrayStartIndex(Ze,e)+ae.tickCount(e)),n<Ge&&(n=ae.getArrayStartIndex(Ge,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/ae.tickCount(t)*an}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await Ne(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of o)s.accountInfo!==null&&(i[s.pubkey.toString()]=Ga.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let u of t){let c=j.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=j.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=be(u.programId,u.id,m);i.push({pubkey:d}),o[d.toString()]=u.id}}let s=await Ne(e,i,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=o[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=lo.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=E(C({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!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(d=>d.accountInfo.mint),c=[];for(let d of u)for(let p of s)c.push(lt(p,d).publicKey);let l=await gt(t,c,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=yr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA:A,amountB:k,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>E(C({},x),{pendingReward:new xe(0)})),leverage:B,tokenFeeAmountA:new xe(0),tokenFeeAmountB:new xe(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await gt(t,d,{batchRequest:o}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=lo.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[A].toString()],T=k.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await po.GetPositionFees(f,g,T,S),I=await po.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new xe(0))?x:new xe(0),g.tokenFeeAmountB=R.gte(new xe(0))?R:new xe(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new xe(0))?I[L]:new xe(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:s,priceLimit:a=new _(0),catchLiquidityInsufficient:u=!1}){var q;let c,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new _(0))?c=l?Rt.add(new xe(1)):Lt.sub(new xe(1)):c=oe.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=we(i,m,o,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Se.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((q=p.fee)!=null?q:Be),c,u),A=we(f,d,o,!1),k=oe.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new _(1).div(k),T=f.mul(new xe(Math.floor((1-s)*1e10))).div(new xe(1e10)),S=we(T,d,o,!1),x=l?e.currentPrice:new _(1).div(e.currentPrice),R=new _(B).sub(x).abs(),I=x,L=new je(new _(R).mul(10**15).toFixed(0),new _(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:xt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let u=o.address===e.mintB.address,[c,l]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new he(E(C({},c),{mint:c.address,isToken2022:c.programId===qa.toBase58()})),new he(E(C({},l),{mint:l.address,isToken2022:l.programId===qa.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:A,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Se.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new kt(c.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=E(C({},y),{amount:new ye(m,y.amount),fee:y.fee===void 0?void 0:new ye(m,y.fee)}),R=E(C({},f),{amount:new ye(d,f.amount),fee:f.fee===void 0?void 0:new ye(d,f.fee)}),I=E(C({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),L=new $e({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:h.mul(new _(10**(20+d.decimals))).toFixed(0)}),q=new $e({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:A.mul(new _(10**(20+d.decimals))).toFixed(0)}),F=new ye(m,B);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:I,expirationTime:g,currentPrice:L,executionPrice:q,priceImpact:k,fee:F,remainingAccounts:T,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var y,f,b;let i=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),u=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-u,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[nt(e.mintA.address).toString()],d=o[nt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=oe.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),b=oe.getSqrtPriceX64FromTick(s),g=oe.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new _(h.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(A.toString()).div(new _(10).pow(y)).mul(d.value)),S=new _(k.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(B.toString()).div(new _(10).pow(y)).mul(d.value)),x=new _(1).div(T.add(S)),I=new _(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),L=3600*24*365,q=e.rewardDefaultInfos.map(F=>{var W,Ye;let $=F.mint.decimals,G=o[F.mint.address];return u<((W=F.startTime)!=null?W:0)||u>((Ye=F.endTime)!=null?Ye:0)||!F.perSecond||!G||$===void 0?0:new _(G.value).mul(new _(F.perSecond).mul(L)).div(new _(10).pow($)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:q,apr:I+q.reduce((F,$)=>F+$,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,h;let l=oe.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),m=oe.getSqrtPriceX64FromTick(n),d=oe.getSqrtPriceX64FromTick(o),p=a?1-s:1+s,y=we(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new xe(new _(y.amount.sub((h=y.fee)!=null?h:Be).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new xe(0);else if(l.lte(d)){let A=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new xe(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Se.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:o,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:s,add:a}){var b,g,h,A;let u=oe.getSqrtPriceX64FromTick(n),c=oe.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(oe.priceToSqrtPriceX64(new _(t.price),t.mintA.decimals,t.mintB.decimals),u,c,i,a),[d,p]=[we(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),we(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[we(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),we(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(u=>!n[u.id]).map(u=>new kt(u.id));(await gt(e,o)).forEach((u,c)=>{!u||(n[o[c].toBase58()]=cn.decode(u.data))});let s=t.map(u=>rt(new kt(u.programId),new kt(u.id)).publicKey),a=await Se.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((u,c)=>E(C({},u),{[c.id]:E(C({},n[c.id]),{id:new kt(c.id),version:6,programId:new kt(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:E(C({},c.config),{id:new kt(c.config.id),fundOwner:""}),currentPrice:new _(c.price),exBitmapInfo:a[rt(new kt(c.programId),new kt(c.id)).publicKey.toBase58()],startTime:n[c.id].startTime.toNumber()})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};var Ei={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Ua(r){return E(C({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:Ei,week:Ei,month:Ei,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:E(C({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var te=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(Be)||(i=i.add(it)),i}static mulDivFloor(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).add(n.sub(it)).div(n)}static x64ToDecimal(e,t){return new _(e.toString()).div(_.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(_.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(mr).sub(t).mod(mr)}};function Me(r,e){return Fi(r.mul(e),64,256)}function Lm(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Fi(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var oe=class{static sqrtPriceX64ToPrice(e,t,n){return te.x64ToDecimal(e).pow(2).mul(_.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return te.decimalToX64(e.mul(_.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(Be))return e;let i=t.shln(co);if(o){let s=i,a=i.add(n.mul(e));return a.gte(s)?te.mulDivCeil(s,e,a):te.mulDivRoundingUp(s,it,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return te.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(co);if(o)return e.add(i.div(t));{let s=te.mulDivRoundingUp(i,it,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<Ge||e>Ze)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=Me(n,new re("18444899583751176192"))),(t&4)!=0&&(n=Me(n,new re("18443055278223355904"))),(t&8)!=0&&(n=Me(n,new re("18439367220385607680"))),(t&16)!=0&&(n=Me(n,new re("18431993317065453568"))),(t&32)!=0&&(n=Me(n,new re("18417254355718170624"))),(t&64)!=0&&(n=Me(n,new re("18387811781193609216"))),(t&128)!=0&&(n=Me(n,new re("18329067761203558400"))),(t&256)!=0&&(n=Me(n,new re("18212142134806163456"))),(t&512)!=0&&(n=Me(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=Me(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=Me(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=Me(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=Me(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=Me(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=Me(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=Me(n,new re("696457651848324352"))),(t&131072)!=0&&(n=Me(n,new re("26294789957507116"))),(t&262144)!=0&&(n=Me(n,new re("37481735321082"))),e>0&&(n=va.div(n)),n}static getTickFromPrice(e,t,n){return oe.getTickFromSqrtPriceX64(oe.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Lt)||e.lt(Rt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),o=Lm(n,32,128),i=new re("8000000000000000","hex"),s=0,a=new re(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new re(0))&&s<Va;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let c=a.shrn(32),m=o.add(c).mul(new re(Ea)),d=Fi(m.sub(new re(Fa)),64,128).toNumber(),p=Fi(m.add(new re(Da)),64,128).toNumber();return d==p?d:oe.getSqrtPriceX64FromTick(p).lte(e)?p:d}},ln=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=oe.getTickFromSqrtPriceX64(oe.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let i=ln.getTickWithPriceAndTickspacing(e,t,n,o),s=oe.getSqrtPriceX64FromTick(i);return oe.sqrtPriceX64ToPrice(s,n,o)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Be))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(co),s=t.sub(e);return o?te.mulDivRoundingUp(te.mulDivCeil(i,s,t),it,e):te.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Be))throw new Error("sqrtPriceX64A must greater than 0");return o?te.mulDivCeil(n,t.sub(e),st):te.mulDivFloor(n,t.sub(e),st)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return o?te.mulDivRoundingUp(a,it,vi):a.shrn(co)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),te.mulDivFloor(n,vi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,o,!1),a=ce.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,o,i),a=ce.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,s,a){let{amountA:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,o,s),l=i?1+a:1-a,m=new re(new _(u.toString()).mul(l).toFixed(0)),d=new re(new _(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:i,add:s,epochInfo:a,amountAddFee:u}){var h,A,k,B;let c=oe.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),l=oe.getSqrtPriceX64FromTick(t),m=oe.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(c,l,m,o,s),[y,f]=[we(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),we(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[we(new re(new _(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,u),we(new re(new _(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,u)];return{liquidity:o,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:xt(y.expirationTime,f.expirationTime)}}},un=class{static swapCompute(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f=!1){if(d.eq(Be))throw new Error("amountSpecified must not be 0");if(y||(y=s?Rt.add(it):Lt.sub(it)),s){if(y.lt(Rt))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(Lt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(Be),g={amountSpecifiedRemaining:d,amountCalculated:Be,sqrtPriceX64:m,tick:c>p?Math.min(p+ae.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new re(0)},h=p,A=n[p],k=0,B=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Be)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(A,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Se.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},h,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=L.nextStartIndex;let{publicKey:q}=be(e,t,h);R=q,A=n[h];try{x=j.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<Ge?T.tickNext=Ge:T.tickNext>Ze&&(T.tickNext=Ze),T.sqrtPriceNextX64=oe.getSqrtPriceX64FromTick(T.tickNext);let I;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?I=y:I=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=un.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=x.liquidityNet;s&&(L=L.mul(vt)),g.liquidity=ce.addDelta(g.liquidity,L)}B=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=oe.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&A.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=ae.nextInitializedTickArray(g.tick,l,s,o,i);S&&p!==T&&(g.accounts.push(be(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Be,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,i){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),u=o.gte(Be);if(u){let l=te.mulDivFloor(o,fr.sub(new re(i.toString())),fr);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=oe.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(vt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=oe.getNextSqrtPriceX64FromOutput(e,n,o.mul(vt),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(o.mul(vt))&&(s.amountOut=o.mul(vt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=o.sub(s.amountIn):s.feeAmount=te.mulDivCeil(s.amountIn,new re(i),fr.sub(new re(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Oe=60,an=512,j=class{static getTickArrayAddressByTick(e,t,n,o){let i=j.getTickArrayStartIndexByTick(n,o),{publicKey:s}=be(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=Oe)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=ae.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*ae.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Oe,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*Oe,i=Math.floor(t/o)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Oe:e+t*Oe}static mergeTickArrayBitmap(e){let t=new Om(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,i){let s=Math.floor(o/(n*Oe));return[...j.searchLowBitFromStart(e,t,s-1,i,n),...j.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,an,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,o,i);for(let u of a){let{publicKey:c}=be(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,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>j.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===o)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>j.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===o)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Ge||e>Ze}static nextInitTick(e,t,n,o,i){if(ae.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<Oe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Oe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Oe;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=oe.getSqrtPriceX64FromTick(t),i=oe.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new _(1).div(t),i=ln.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=oe.getSqrtPriceX64FromTick(i),a=oe.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=oe.getSqrtPriceX64FromTick(t),i=oe.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new _(1).div(t),i=ln.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=oe.getSqrtPriceX64FromTick(i),a=oe.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}};var Xa=v([pe(8),D("bump"),St("index"),K(""),Qe("protocolFeeRate"),Qe("tradeFeeRate"),St("tickSpacing"),X(w(),8,"")]),Nm=v([Qe("blockTimestamp"),Y("sqrtPriceX64"),Y("cumulativeTimePriceX64"),X(Y(),1,"")]),Di=v([pe(8),qe("initialized"),K("poolId"),X(Nm,1e3,"observations"),X(Y(),5,"")]),Mm=v([D("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Y("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Y("rewardGrowthGlobalX64")]),cn=v([pe(8),D("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),St("tickSpacing"),Y("liquidity"),Y("sqrtPriceX64"),Fe("tickCurrent"),St("observationIndex"),St("observationUpdateDuration"),Y("feeGrowthGlobalX64A"),Y("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Y("swapInAmountTokenA"),Y("swapOutAmountTokenB"),Y("swapInAmountTokenB"),Y("swapOutAmountTokenA"),D("status"),X(D(),7,""),X(Mm,3,"rewardInfos"),X(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),X(w(),15*4-3,"padding")]),_m=v([Y("growthInsideLastX64"),w("rewardAmountOwed")]),yr=v([pe(8),D("bump"),K("nftMint"),K("poolId"),Fe("tickLower"),Fe("tickUpper"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(_m,3,"rewardInfos"),X(w(),8,"")]),LP=v([pe(8),D("bump"),K("poolId"),Fe("tickLowerIndex"),Fe("tickUpperIndex"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Y(),3,"rewardGrowthInside"),X(w(),8,"")]),vm=v([Fe("tick"),$s("liquidityNet"),Y("liquidityGross"),Y("feeGrowthOutsideX64A"),Y("feeGrowthOutsideX64B"),X(Y(),3,"rewardGrowthsOutsideX64"),X(Qe(),13,"")]),lo=v([pe(8),K("poolId"),Fe("startTickIndex"),X(vm,Oe,"ticks"),D("initializedTickCount"),X(D(),115,"")]),za=v([pe(329),X(K(),100,"whitelistMints")]),Ga=v([pe(8),K("poolId"),X(X(w(),8),Vi,"positiveTickArrayBitmap"),X(X(w(),8),Vi,"negativeTickArrayBitmap")]);var Qa=se("Raydium_Clmm"),It={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]},Te=class{static createPoolInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y){let f=v([Y("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Cn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...It.createPool,...g]);return new Tt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:o,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ue({fromPublicKey:o,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[Cn.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Di.span),space:Di.span,programId:n})],{publicKey:f}=Ma(n,a,d,p),{publicKey:b}=_i(n,f,d),{publicKey:g}=_i(n,f,p);return y.push(this.createPoolInstruction(n,f,o,a,m.publicKey,d,b,new U(i.programId||De),p,g,new U(s.programId||De),rt(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,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I){let L=v([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),D("optionBaseFlag"),qe("baseFlag")]),q=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,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:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:Cn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Ya,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},$);let G=Buffer.from([...It.openPosition,...$]);return new Tt({keys:F,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Wi.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(d,p,f),{publicKey:h}=be(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=lr(y),{publicKey:B}=lt(d,y),{publicKey:T}=sn(d,p,o,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Wi.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(d,p,f),{publicKey:h}=be(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=lr(y),{publicKey:B}=lt(d,y),{publicKey:T}=sn(d,p,o,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,c,s,a,u,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?rt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I){let L=v([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),D("optionBaseFlag"),qe("baseFlag")]),q=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,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:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:Cn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Ya,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...q],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new ja(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},$);let G=Buffer.from([...It.openPosition,...$]);return new Tt({keys:F,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=Wi.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(p,y,f),{publicKey:h}=be(p,y,b),{publicKey:A}=Pe(n.wallet,m,De),{publicKey:k}=lr(m),{publicKey:B}=lt(p,m),{publicKey:T}=sn(p,y,o,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,i,f,b,s,a,u,c,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?rt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i){let s=v([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Cn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...It.closePosition,...u]);return new Tt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o}){let i=new U(e.programId),{publicKey:s}=Pe(n.wallet,o.nftMint,De),{publicKey:a}=lt(i,o.nftMint),u=[];return u.push(this.closePositionInstruction(i,n.wallet,o.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=v([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),D("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,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:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:s,amountMaxB:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=be(u,c,l),{publicKey:p}=be(u,c,m),{publicKey:y}=Pe(o.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=sn(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,o.wallet,y,f,c,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?rt(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,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:o,base:i,baseAmount:s,otherAmountMax:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=be(u,c,l),{publicKey:p}=be(u,c,m),{publicKey:y}=Pe(o.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=sn(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,o.wallet,y,f,c,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?rt(u,c).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=v([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),D("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,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:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:new ja(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=v([Y("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...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()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,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:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:_o,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...It.decreaseLiquidity,...S]);return new Tt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=be(c,l,m),{publicKey:y}=be(c,l,d),{publicKey:f}=Pe(o.wallet,n.nftMint,u),{publicKey:b}=lt(c,n.nftMint),{publicKey:g}=sn(c,l,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?rt(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[V.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,s,a,u,c,l,m,d,p,y,f,b,g){let h=v([w("amount"),w("otherAmountThreshold"),Y("sqrtPriceLimitX64"),qe("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:_o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...It.swap,...B]);return new Tt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,rt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,s,a,u,c,l,m,d){let p=v([w("openTime"),w("endTime"),Y("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Cn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...It.initReward,...f]);return new Tt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a=_a(i,s,o.mint).publicKey,u=uo(i).publicKey,c=[this.initRewardInstruction(i,n.wallet,s,u,new U(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,s,a,u,c,l,m,d){let p=v([D("rewardIndex"),Y("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,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(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...It.setRewardEmissions,...f]);return new Tt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,u=new U(t.rewardInfos[d].vault),c=new U(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&Qa.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=uo(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,u,c,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,s,a){let u=v([D("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:_o,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...It.collectReward,...l]);return new Tt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,u=new U(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&Qa.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,u,o,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:o,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new U(e.programId),new U(e.id)],[m,d]=[new U(t.vault.A),new U(t.vault.B)],[p,y]=[new U(e.mintA.address),new U(e.mintB.address)],f=e.mintA.address===o.toString(),b=[this.swapInstruction(c,n.wallet,l,new U(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,u,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[V.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as Fm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Dm}from"@solana/spl-token";import{PublicKey as Vm}from"@solana/web3.js";import Ha from"bn.js";var Za=new Ha(25),Ja=new Ha(1e4);var Em=se("Raydium_liquidity_serum");function $a({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=Vm.createProgramAddressSync(i,r)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw Em.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 pk from"bn.js";function br({programId:r}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function mn({name:r,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function Wm({programId:r,marketId:e}){let{publicKey:t}=le([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function Ui({programId:r}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function eu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:u}){let c=mn({name:"amm_associated_seed",programId:a,marketId:t}),l=mn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Ui({programId:a}),p=mn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=mn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=mn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Wm({programId:a,marketId:t}),g=mn({name:"target_associated_seed",programId:a,marketId:t}),h=mn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=$a({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:Fm.default,configId:br({programId:a})}}var qi={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},gr=r=>{let e={},t=Dm.toBase58();return Object.keys(r).map(n=>{let o=r[n],[i,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:He({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:He({address:s,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new _(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new _(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new _(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:qi,week:qi,month:qi,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:br({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:He({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())})}}),e};import tt from"bn.js";var fo=class extends ke{constructor(t){super(t);this.stableLayout=new io({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let s=new tt(new _(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=sr(t[i?"mintB":"mintA"]),[u,c]=[new tt(new _(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new tt(new _(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new tt(new _(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=at;s.isZero()||(d=m==="base"?Do(s.mul(c),u):Do(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Do(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let f=new je(new tt(1)).add(o).mul(d).quotient,b=new ye(a,d),g=new ye(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:s,fixedSide:a,config:u,txVersion:c,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new Xe(n.lpMint.address)}),A=[y,f],k=[b,g],B=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(A.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=A,[I,L]=k,[q,F]=B,$=o!=null?o:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Nt=await m.handleTokenAccount({side:"in",amount:q,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:W}=Nt,Ye=Ie(Nt,["tokenAccount"]);G.addInstruction(Ye);let gn=await m.handleTokenAccount({side:"in",amount:F,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:yn}=gn,en=Ie(gn,["tokenAccount"]);G.addInstruction(en);let xo=await m.handleTokenAccount({side:"out",amount:0,mint:new Xe(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Dt}=xo,bn=Ie(xo,["tokenAccount"]);return G.addInstruction(bn),G.addInstruction({instructions:[Ca({poolInfo:n,poolKeys:$,userKeys:{baseTokenAccount:W,quoteTokenAccount:yn,lpTokenAccount:Dt,owner:this.scope.ownerPubKey},baseAmountIn:q,quoteAmountIn:F,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5AddLiquidity:V.AmmV4AddLiquidity],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),c===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,amountIn:i,config:s,txVersion:a,computeBudgetConfig:u}=t,c=o!=null?o:await this.getAmmPoolKeys(n.id),[l,m,d]=[new Xe(n.mintA.address),new Xe(n.mintB.address),new Xe(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:A}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:k}=x,B=Ie(x,["tokenAccount"]);g.addInstruction(B);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:T}=R,S=Ie(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[Oi({poolInfo:n,poolKeys:c,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(u),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Rn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(c);let g={};for(let W of this.scope.account.tokenAccountRawInfos)(g[W.accountInfo.mint.toString()]===void 0||Pe(this.scope.ownerPubKey,W.accountInfo.mint,Rn).publicKey.equals(W.pubkey))&&(g[W.accountInfo.mint.toString()]=W.pubkey);let h=g[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let A=o.add(a!=null?a:new tt(0)),k=t.mintA.address===he.WSOL.mint.toString(),B=t.mintB.address===he.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Xe(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Xe(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let W=ut[s.programId],Ye=ct({programId:new Xe(s.programId),poolId:new Xe(s.id),owner:this.scope.ownerPubKey,version:W}),yn,en=await this.scope.connection.getAccountInfo(Ye);if(en&&(yn=Jn(W).decode(en.data)),W!==6&&!yn){let{instruction:Wt,instructionType:Or}=$n({id:new Xe(s.id),programId:new Xe(s.programId),version:W,ledger:Ye,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Wt],instructionTypes:[Or]})}let Dt=[];for(let Wt of s.rewardInfos){let Or=Wt.mint.address===he.WSOL.mint.toString();if(g[Wt.mint.address])Dt.push(g[Wt.mint.address]);else{let{account:$i,instructionParams:es}=await this.scope.account.getOrCreateTokenAccount({mint:new Xe(Wt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Or,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});$i||this.logAndCreateError("farm reward account not found:",Wt.mint.address),es&&b.addInstruction(es),Dt.push($i)}}let bn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Nt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:bn,lpAccount:h,rewardAccounts:Dt},gn=ut[s.programId],xo=gn===6?eo(Nt):gn===5?to(Nt):no(Nt),Ku={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};b.addInstruction({instructions:[xo],instructionTypes:[Ku[gn]]})}let I=await this.getAmmPoolKeys(t.id),L=Oi({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[q,F]=t.mintA.address===n.mintA.address?[T,x]:[x,T],$=await this.scope.clmm.getClmmPoolKeys(t.id),G=await Te.openPositionFromBaseInstructions(E(C({poolInfo:n,poolKeys:$,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:q,tokenAccountB:F},withMetadata:"create"},i),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var q;let b=c.feePayer||((q=this.scope.owner)==null?void 0:q.publicKey),g=c.useSOLBalance&&o.mint.equals(tu),h=c.useSOLBalance&&i.mint.equals(tu),A=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=eu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId: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:I,instructionType:L}=Ra(E(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:Pe(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[I],instructionTypes:[L]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=br({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return ka.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:s}){let[a,u]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:c,quoteReserve:l}=t,m=[c,l],d=a==t.mintA.address?"base":"quote";d==="quote"&&m.reverse();let[p,y]=m,f=t.version===4,b;if(f)b=new _(y.toString()).div(p.toString());else{let I=Sa(this.stableLayout.stableModelData,c.toNumber(),l.toNumber(),!1);d==="quote"?b=new _(1e6).div(I*1e6):b=new _(I*1e6).div(1e6)}let g=n,h=new tt(0),A=new tt(0);if(!g.isZero())if(f){A=jn(g.mul(Za),Ja);let I=g.sub(A),L=p.add(I);h=y.mul(I).div(L)}else{A=g.mul(new tt(2)).div(new tt(1e4));let I=g.sub(A);d==="quote"?h=new tt(Ba(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber())):h=new tt(xa(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber()))}let k=new tt(new _(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new _(h.toString()).div(new _(g.sub(A).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new _(h.toString()).div(g.sub(A).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:A}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:s,fixedSide:a,txVersion:u,config:c,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=c||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===H.toBase58(),h=y&&b.address===H.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Xe(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Xe(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d});m.addInstruction(T||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:h,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[ur({version:x,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[x===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await Ne(this.scope.connection,t.map(l=>({pubkey:new Xe(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=ar.decode(m.accountInfo.data);i[String(t[l])]=E(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},u=await Ne(this.scope.connection,s.map(l=>({pubkey:new Xe(l)})),n);for(let l=0;l<s.length;l++){let m=u[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new tt(qm.decode(m.data).amount.toString())}let c={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);c[l]=E(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new _(p.toString()).div(new _(10).pow(m.quoteDecimal.toString())).div(new _(d.toString()).div(new _(10).pow(m.baseDecimal.toString())))})}return c}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=gr({[t]:n}),i=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as ie}from"@solana/web3.js";import dt from"bn.js";import{AccountLayout as nu,TOKEN_PROGRAM_ID as ou}from"@solana/spl-token";var yo=class extends ke{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var h;let{programId:t,owner:n=((h=this.scope.owner)==null?void 0:h.publicKey)||ie.default,mint1:o,mint2:i,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new dt(new ie(o.address).toBuffer()).gt(new dt(new ie(i.address).toBuffer()))?[i,o,new _(1).div(a)]:[o,i,a],b=oe.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Te.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(c),d.versionBuild({txVersion:m,extInfo:{address:E(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,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:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,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:[]}},Wa),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,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,h=n.useSOLBalance&&e.mintA.address===H.toString(),A=n.useSOLBalance&&e.mintB.address===H.toString(),[k,B]=s==="MintA"?[a,u]:[u,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}: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",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let I=t||await this.getClmmPoolKeys(e.id),L=await Te.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:E(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){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===H.toBase58(),h=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(T||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await Te.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=u.useSOLBalance&&t.mintA.address===H.toString(),g=u.useSOLBalance&&t.mintB.address===H.toString(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(A||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=Te.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===H.toString(),b=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(o==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(h||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(o==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=Te.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:o,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===H.toString(),f=i.useSOLBalance&&t.mintB.address===H.toString(),b,g,{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:l});b=h,A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===H.toString(),q;if(I.mint.address===t.mintA.address)q=b;else if(I.mint.address===t.mintB.address)q=g;else{let{account:F,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(I.mint.programId),mint:new ie(I.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:c,checkCreateATAOwner:l});q=F,$&&p.addInstruction($)}T.push(q)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await Te.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:u,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[V.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let I=await Te.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),R=C(C({},R),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Te.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:o,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!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()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(n.mint.address),mint:new ie(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new _(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:o,checkCreateATAOwner:i});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Te.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ie(n.mint.programId),mint:new ie(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let c=this.createTxBuilder(),l={};for(let m of o){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&c.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Te.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ie(m.mint.programId),mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),c.addInstruction(g)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!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(H),{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 dt(new _(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:o,checkCreateATAOwner:i});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Te.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){let c=this.createTxBuilder(),l={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===H.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Te.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});c.addInstruction(b),l=C(C({},l),b.address)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),u=t.useSOLBalance&&n.equals(H),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(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:o,checkCreateATAOwner:i});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Te.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!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(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(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:o,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Te.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=u.useSOLBalance&&e.mintA.address===H.toBase58(),b=u.useSOLBalance&&e.mintB.address===H.toBase58(),g;!s||s.equals(new _(0))?g=y?Rt.add(new dt(1)):Lt.sub(new dt(1)):g=oe.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?o:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let A;if(!A){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?0:o}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=B,T&&p.addInstruction(T)}(!h||!A)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:A,mintAUseSOLBalance:f,mintBUseSOLBalance:b,associatedOnly:l});let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(Te.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:A},inputMint:new ie(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:c})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)o?Pe(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(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===H.toString(),y=n.useSOLBalance&&d.mintB.address===H.toString(),f=c[d.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ie(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f=A,k&&l.addInstruction(k)}let b=c[d.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ie(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:o,checkCreateATAOwner:i});b=A,k&&l.addInstruction(k)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===H.toString(),B=c[A.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(A.mint.programId),mint:new ie(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:o});B=T,S&&l.addInstruction(S)}c[A.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let k=Te.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new dt(0),amountMinA:new dt(0),amountMinB:new dt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(uo(e).publicKey);return t?za.decode(t.data).whitelistMints.filter(o=>!o.equals(ie.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new dt(1))).map(s=>lt(new ie(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(s=>{if(!s)return;let a=yr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Ne(this.scope.connection,e.map(i=>({pubkey:new ie(i)})),t),o={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=cn.decode(s.accountInfo.data),u=oe.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=E(C({},a),{currentPrice:u,programId:s.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].ammConfig.toBase58())),o=await Ne(this.scope.connection,Array.from(n).map(u=>({pubkey:new ie(u)}))),i={};o.forEach(u=>{!u.accountInfo||(i[u.pubkey.toBase58()]=Xa.decode(u.accountInfo.data))});let s=await Se.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var m,d,p,y;let[c,l]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:He({address:c,decimals:e[u].mintDecimalsA,programId:t[c].programId.toBase58()||ou.toBase58(),extensions:{feeConfig:(m=t[c])!=null&&m.feeConfig?Jt((d=t[c])==null?void 0:d.feeConfig):void 0}}),mintB:He({address:l,decimals:e[u].mintDecimalsB,programId:t[l].programId.toBase58()||ou.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Jt((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[u].currentPrice,config:E(C({},i[e[u].ammConfig.toBase58()]),{id:e[u].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Se.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ie(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await Ne(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=Ua(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number(nu.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number(nu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let c=E(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:u.config});return{poolInfo:u,poolKeys:c,computePoolInfo:i[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as xr,TOKEN_PROGRAM_ID as Et,AccountLayout as od}from"@solana/spl-token";import iu from"bn.js";var Gi=new iu(1e6);function Um(r,e,t){return r.mul(e).add(t).sub(new iu(1)).div(t)}function ru(r,e,t){return r.mul(e).div(t)}var wr=class{static tradingFee(e,t){return Um(e,t,Gi)}static protocolFee(e,t){return ru(e,t,Gi)}static fundFee(e,t){return ru(e,t,Gi)}};import bo from"bn.js";function Ar(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Gm(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=Ar(r,e);return n.gt(Ln)&&(t=t.add(new bo(1)),e=r.div(t),n=Ar(r,t),n.gt(Ln)&&(e=e.add(new bo(1)))),[t,e]}var Ln=new bo(0),hr=class{static swapWithoutFees(e,t,n){let o=t.mul(n),i=t.add(e),[s,a]=Gm(o,i),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,o,i){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Ar(e.mul(n),t).gt(Ln)&&s.gt(Ln)&&(s=s.add(new bo(1))),Ar(e.mul(o),t).gt(Ln)&&a.gt(Ln)&&(a=a.add(new bo(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Pr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,o){let i=wr.tradingFee(e,o),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:u}=hr.swapWithoutFees(s,t,n),c=a.add(i);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:i}}};var Xm=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),zm=Buffer.from("amm_config","utf8"),Ym=Buffer.from("pool","utf8"),jm=Buffer.from("pool_lp_mint","utf8"),Qm=Buffer.from("pool_vault","utf8"),Hm=Buffer.from("observation","utf8");function On(r){return le([Xm],r)}function Zm(r,e){return le([zm,ed(e)],r)}function Jm(r,e,t,n){return le([Ym,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function $m(r,e){return le([jm,e.toBuffer()],r)}function su(r,e,t){return le([Qm,e.toBuffer(),t.toBuffer()],r)}function kr(r,e){return le([Hm,e.toBuffer()],r)}function ed(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function au({programId:r,mintA:e,mintB:t}){let n=Zm(r,0).publicKey,o=On(r).publicKey,i=Jm(r,n,e,t).publicKey,s=$m(r,i).publicKey,a=su(r,i,e).publicKey,u=su(r,i,t).publicKey,c=kr(r,i).publicKey;return{poolId:i,configId:n,authority:o,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as go}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Xi,TOKEN_2022_PROGRAM_ID as uu,ASSOCIATED_TOKEN_PROGRAM_ID as td}from"@solana/spl-token";var nd=se("Raydium_cpmm"),wo={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,o,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=v([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!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:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Xi,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:td,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:A},T),new go({keys:B,programId:r,data:Buffer.from([...wo.initialize,...T])})}function lu(r,e,t,n,o,i,s,a,u,c,l,m,d,p,y){let f=v([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Xi,isSigner:!1,isWritable:!1},{pubkey:uu,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 nd.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new go({keys:b,programId:r,data:Buffer.from([...wo.deposit,...g])})}function mu(r,e,t,n,o,i,s,a,u,c,l,m,d,p,y){let f=v([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Xi,isSigner:!1,isWritable:!1},{pubkey:uu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:vo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new go({keys:b,programId:r,data:Buffer.from([...wo.withdraw,...g])})}function Tr(r,e,t,n,o,i,s,a,u,c,l,m,d,p,y,f){let b=v([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey: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:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new go({keys:g,programId:r,data:Buffer.from([...wo.swapBaseInput,...h])})}function Ir(r,e,t,n,o,i,s,a,u,c,l,m,d,p,y,f){let b=v([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey: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:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new go({keys:g,programId:r,data:Buffer.from([...wo.swapBaseOutput,...h])})}import _e from"bn.js";var du=v([pe(8),D("bump"),qe("disableCreatePool"),St("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),Br=v([pe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var Ao=class extends ke{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Ne(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),o={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Br.decode(d.accountInfo.data);o[String(e[m])]=E(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await Ne(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=du.decode(y.data)}}let u={},c=await Ne(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=c[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new _e(od.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=E(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:u[d.vaultA.toString()],vaultBAmount:u[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new _(y.toString()).div(new _(10).pow(d.mintDecimalB)).div(new _(p.toString()).div(new _(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var u,c,l,m;let i=e[o],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return E(C({},n),{[o]:E(C({},i),{id:new z(o),configInfo:i.configInfo,version:7,authority:On(i.programId).publicKey,mintA:He({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[s])!=null&&u.feeConfig?Jt((c=t[s])==null?void 0:c.feeConfig):void 0}}),mintB:He({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Jt((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await kn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=He({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Jt(n[t.mintA.toBase58()].feeConfig):void 0}}),i=He({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Jt(n[t.mintB.toBase58()].feeConfig):void 0}}),s=He({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Et.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},u={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new _(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new _(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:On(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:o,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=Ie(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var q,F,$;let d=o.feePayer||((q=this.scope.owner)==null?void 0:q.publicKey),p=new _e(new z(c.mintA.address).toBuffer()).lte(new _e(new z(c.mintB.address).toBuffer())),[y,f]=p?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=p?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],h=o.useSOLBalance&&y.address===xr.toBase58(),A=o.useSOLBalance&&f.address===xr.toBase58(),[k,B]=[new z(y.address),new z(f.address)],T=this.createTxBuilder(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:d,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:i,checkCreateATAOwner:s});T.addInstruction(x||{});let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new z(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:d,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:i,checkCreateATAOwner:s});if(T.addInstruction(I||{}),S===void 0||R===void 0)throw Error("you don't has some token account");let L=au({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[cu(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,Pe(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new z((F=y.programId)!=null?F:Et),new z(($=f.programId)!=null?$:Et),L.observationId,b,g,n)],instructionTypes:[V.CpmmCreatePool]}),T.addCustomComputeBudget(u),T.versionBuild({txVersion:a,extInfo:{address:E(C({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:u,config:c,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:E(C({},t),{lpAmount:new _(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new je(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new _(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,A=t.mintA.address===xr.toString(),k=t.mintB.address===xr.toString(),B=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(i?o:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:h}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{});let{account:I,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let q=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Ye=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:q,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:F}=Ye,$=Ie(Ye,["tokenAccount"]);B.addInstruction($);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),W=new je(new _e(1)).sub(s);return B.addInstruction({instructions:[lu(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),F,x,I,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:W.mul(f).quotient,i?b.amount:h,i?h:b.amount)],instructionTypes:[V.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(u),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var F,$;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new je(new _e(1)).sub(i),c=await this.getRpcPoolInfo(t.id),[l,m]=[u.mul(o.mul(c.baseReserve).div(c.lpAmount)).quotient,u.mul(o.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[we(l,t.mintA.extensions.feeConfig,d,!1),we(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new z(t.mintA.address),new z(t.mintB.address)],A=g.equals(H),k=h.equals(H),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,I&&b.addInstruction(I),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let q=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[mu(new z(t.programId),this.scope.ownerPubKey,new z(q.authority),new z(t.id),L,B,T,new z(q.vault.A),new z(q.vault.B),g,h,new z(t.lpMint.address),o,l.sub((F=p.fee)!=null?F:new _e(0)),m.sub(($=y.fee)!=null?$:new _e(0)))],instructionTypes:[V.CpmmWithdrawLiquidity],lookupTableAddress:q.lookupTableAccount?[q.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var S,x,R,I,L,q;let{poolInfo:t,poolKeys:n,baseIn:o,swapResult:i,slippage:s=0,config:a,computeBudgetConfig:u,txVersion:c}=e,{bypassAssociatedCheck:l,checkCreateATAOwner:m,associatedOnly:d}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},a),p=this.createTxBuilder(),[y,f]=[new z(t.mintA.address),new z(t.mintB.address)];i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new _e((1-s)*1e4)).div(new _e(1e4));let b=t.mintA.address===H.toBase58(),g=t.mintB.address===H.toBase58(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new z((S=t.mintA.programId)!=null?S:Et),owner:this.scope.ownerPubKey,createInfo:b||!o?{payer:this.scope.ownerPubKey,amount:o?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new z((x=t.mintB.programId)!=null?x:Et),owner:this.scope.ownerPubKey,createInfo:g||o?{payer:this.scope.ownerPubKey,amount:o?0:i.sourceAmountSwapped}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:d,checkCreateATAOwner:m});B&&p.addInstruction(B),(!h||!k)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:d});let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return p.addInstruction({instructions:[o?Tr(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),h,k,new z(T.vault.A),new z(T.vault.B),new z((R=t.mintA.programId)!=null?R:Et),new z((I=t.mintB.programId)!=null?I:Et),y,f,kr(new z(t.programId),new z(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):Ir(new z(t.programId),this.scope.ownerPubKey,new z(T.authority),new z(T.config.id),new z(t.id),k,h,new z(T.vault.B),new z(T.vault.A),new z((L=t.mintB.programId)!=null?L:Et),new z((q=t.mintA.programId)!=null?q:Et),f,y,kr(new z(t.programId),new z(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[o?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut]}),p.addCustomComputeBudget(u),p.versionBuild({txVersion:c})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let i=n.toString()===e.mintB.address,s=Pr.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new _(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),u=s.destinationAmountSwapped.mul(new _e((1-o)*1e4)).div(new _e(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:u,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:s,baseIn:a}){var h,A,k,B,T,S,x,R;let u=1-Number(i.toSignificant())/100,c=new _e(new _(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=we(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((h=l.fee)!=null?h:new _e(0)),d=new _e(new _(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.toString(),"amountInFee:",(k=(A=l.fee)==null?void 0:A.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:at,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=rd(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=we(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new je(new _e(1)).add(i),g=we(b.mul(f.amount.sub((B=f.fee)!=null?B:new _e(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function rd(r,e,t,n){let o=r.mul(e).div(n);!o.isZero()&&!r.mul(e).mod(n).isZero()&&(o=o.add(new _e(1)));let i=r.mul(t).div(n);return!i.isZero()&&!r.mul(t).mod(n).isZero()&&(i=i.add(new _e(1))),{amountA:o,amountB:i}}import{PublicKey as pn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ke,TOKEN_2022_PROGRAM_ID as Yi,createTransferInstruction as wu}from"@solana/spl-token";import Cr from"bn.js";import{TOKEN_PROGRAM_ID as id,TOKEN_2022_PROGRAM_ID as sd,ASSOCIATED_TOKEN_PROGRAM_ID as ad}from"@solana/spl-token";import{PublicKey as J,TransactionInstruction as ud,SystemProgram as cd}from"@solana/web3.js";import dn from"bn.js";function ld(r,e,t,n,o,i,s,a,u,c,l,m,d,p,y){var T;let f=[],b=[P({pubkey:id,isWritable:!1}),P({pubkey:sd,isWritable:!1}),P({pubkey:ad,isWritable:!1}),P({pubkey:cd.programId,isWritable:!1}),P({pubkey:e,isSigner:!0})];b.push(P({pubkey:t})),b.push(P({pubkey:o}));let g=[u,c],h=[l,m],A=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=A[S]===x.mintA.address;if(b.push(P({pubkey:new J(x.programId),isWritable:!1})),S===g.length-1?b.push(P({pubkey:o})):b.push(P({pubkey:n})),b.push(P({pubkey:new J(A[S])})),b.push(P({pubkey:new J(A[S+1])})),x.version===6){let I=h[S];b.push(P({pubkey:new J(I.config.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(R?I.vault.A:I.vault.B)})),b.push(P({pubkey:new J(R?I.vault.B:I.vault.A)})),b.push(P({pubkey:new J(x.observationId)})),b.push(P({pubkey:vo})),b.push(P({pubkey:rt(new J(x.programId),new J(x.id)).publicKey})),f.push(md(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(P({pubkey:new J(L)}))}else if(x.version===5){let I=h[S];b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.authority),isWritable:!1})),b.push(P({pubkey:new J(I.marketProgramId)})),b.push(P({pubkey:new J(I.marketAuthority)})),b.push(P({pubkey:Ds,isWritable:!1})),b.push(P({pubkey:new J(I.openOrders)})),b.push(P({pubkey:new J(I.vault.A)})),b.push(P({pubkey:new J(I.vault.B)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.marketId)})),b.push(P({pubkey:new J(I.marketBids)})),b.push(P({pubkey:new J(I.marketAsks)})),b.push(P({pubkey:new J(I.marketEventQueue)})),b.push(P({pubkey:new J(I.marketBaseVault)})),b.push(P({pubkey:new J(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],L=x.status!==1;b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(I.authority),isWritable:!1})),b.push(P({pubkey:new J(L?I.id:I.marketProgramId)})),b.push(P({pubkey:new J(L?I.id:I.marketAuthority)})),b.push(P({pubkey:new J(L?I.id:I.openOrders)})),b.push(P({pubkey:new J(I.vault.A)})),b.push(P({pubkey:new J(I.vault.B)})),b.push(P({pubkey:new J(L?I.id:I.marketId)})),b.push(P({pubkey:new J(L?I.id:I.marketBids)})),b.push(P({pubkey:new J(L?I.id:I.marketAsks)})),b.push(P({pubkey:new J(L?I.id:I.marketEventQueue)})),b.push(P({pubkey:new J(L?I.id:I.marketBaseVault)})),b.push(P({pubkey:new J(L?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(P({pubkey:new J(I.authority)})),b.push(P({pubkey:new J(I.config.id)})),b.push(P({pubkey:new J(I.id)})),b.push(P({pubkey:new J(R?I.vault.A:I.vault.B)})),b.push(P({pubkey:new J(R?I.vault.B:I.vault.A)})),b.push(P({pubkey:new J(x.observationId)}))}else throw Error("pool type error")}let k=v([D("insId"),w("amountIn"),w("amountOut"),X(Y(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new ud({keys:b,programId:r,data:B})}function md(r,e){if(r)if(e){let t=new dn(r).div(new dn(25));return t.gt(dr)?t:dr}else{let t=new dn(r).mul(new dn(25));return t.lt(pr)?t:pr}else return e?dr:pr}function pu({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,s,a,u,c,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ee(m),p=t.equals(d.mintA.address)?Rt.add(it):Lt.sub(it);return Te.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new dn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[d?Tr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,m.vaultA,m.vaultB,m.mintProgramA,m.mintProgramA,new J(m.mintA.address),new J(m.mintB.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw):Ir(m.programId,e.wallet,m.authority,m.configId,m.id,e.destinationToken,e.sourceToken,m.vaultB,m.vaultA,m.mintProgramB,m.mintProgramA,new J(m.mintB.address),new J(m.mintA.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[ur({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new dn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?V.AmmV5SwapBaseIn:V.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[ld(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(c=n.minAmountOut.fee)==null?void 0:c.raw)!=null?l:new dn(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var fu={[ni.toBase58()]:3},yu={3:ni};var zi=v([pe(5),pe(8),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]),bu={3:zi};import{PublicKey as gu}from"@solana/web3.js";var Sr=se("Serum"),Kr=class{static getProgramId(e){let t=yu[e];return t||Sr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=fu[t];return n||Sr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=bu[e];return t||Sr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let s=n.concat(Buffer.from([o]),Buffer.alloc(7));i=gu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:i,nonce:o}}return Sr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:gu.default,nonce:o}}};var Ft=new Cr(0),ho=class extends ke{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(H));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let u=Z(t);for(let c=0;c<i.length;c++)u.gte(i[c].amount)?(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(i[c].amount)):(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),Qn({destination:a.addresses.newAccount,source:i[c].publicKey,amount:u,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:o})}async wrapWSol(e,t,n){let o=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),o.length&&i.addInstruction({instructions:[Qn({destination:o[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Kt({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),u=e.amountIn,c=e.amountOut,l=u.amount.token.mint.equals(H),m=c.amount.token.mint.equals(H),d=u.amount.token.mint,p=c.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Yi:Ke,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b=this.scope.account.getAssociatedTokenAccount(p,c.amount.token.isToken2022?Yi:Ke);m&&a.addInstruction({endInstructions:[Kt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ke})],endInstructionTypes:[V.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?Yi:Ke)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=pu({routeProgram:i,inputMint:d,swapInfo:E(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[wu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]}),k.addInstruction(A);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[wu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:o,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:o,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=Fs,clmm:n=Ws,cpmm:o=qs}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:ar.offsetOf("baseMint"),length:64}}),s=v([K("baseMint"),K("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),u=v([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:cn.span}],dataSlice:{offset:cn.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Br.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===pn.default.toString()?H:e,t=t.toString()===pn.default.toString()?H:t;let s={},a={},u={},c=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),u[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ke,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&i[y.id.toString()]===void 0?u[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&i[f.id.toString()]===void 0?u[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:c,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=gr(i),a={};Object.values(s).forEach(f=>{o.delete(f.mintA.address),a[f.mintA.address]={address:new pn(f.mintA.address),programId:Ke,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(f.mintB.address),a[f.mintB.address]={address:new pn(f.mintB.address),programId:Ke,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(u).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Ke)?(o.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),f.mintProgramB.equals(Ke)?(o.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let c=await kn({connection:this.scope.connection,mints:Array.from(o).map(f=>new pn(f))});a=C(C({},a),c);let l=this.scope.cpmm.toComputePoolInfos({pools:u,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>E(C({},f),{[b]:E(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:s,slippage:a,chainTime:u,epochInfo:c,feeConfig:l}){var g,h,A,k,B,T,S,x,R;let m=l===void 0?new Cr(0):e.raw.mul(new Cr(l.feeBps.toNumber())).div(new Cr(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=E(C({},t),{address:nt(t.address).toString()}),b=[];for(let I of n)try{b.push(E(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",I.version,I.id.toString(),L.message)}this.logDebug("direct done");for(let[I,L]of Object.entries(o)){let q={chainId:101,address:I,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},F=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:q,amountIn:p})}}catch(W){this.logDebug("route in error",G.version,G.id.toString(),W.message);return}}).sort((G,W)=>{var en,Dt,bn,Nt;let Ye=G===void 0?Ft:G.data.amountOut.amount.raw.sub((Dt=(en=G.data.amountOut.fee)==null?void 0:en.raw)!=null?Dt:Ft),yn=W===void 0?Ft:W.data.amountOut.amount.raw.sub((Nt=(bn=W.data.amountOut.fee)==null?void 0:bn.raw)!=null?Nt:Ft);return Ye.lt(yn)?1:-1})[0];if(F===void 0)continue;let $=new ye(sr(q),F.data.amountOut.amount.raw.sub((h=(g=F.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Ft));for(let G of L.out)try{let W=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:$});b.push(E(C({},W),{allTrade:!!(F.data.allTrade&&W.allTrade),amountIn:F.data.amountIn,amountOut:W.amountOut,minAmountOut:W.minAmountOut,currentPrice:void 0,executionPrice:new _(new $e({baseToken:F.data.amountIn.amount.token,denominator:F.data.amountIn.amount.raw,quoteToken:W.amountOut.amount.token,numerator:W.amountOut.amount.raw.sub((k=(A=W.amountOut.fee)==null?void 0:A.raw)!=null?k:Ft)}).toFixed()),priceImpact:new _(F.data.priceImpact.add(W.priceImpact).toFixed()),fee:[F.data.fee[0],W.fee[0]],routeType:"route",poolInfoList:[F.pool,G],remainingAccounts:[F.data.remainingAccounts[0],W.remainingAccounts[0]],minMiddleAmountFee:(B=W.amountOut.fee)!=null&&B.raw?new ye(F.data.amountOut.amount.token,((S=(T=F.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Ft).add((R=(x=W.amountOut.fee)==null?void 0:x.raw)!=null?R:Ft)):void 0,middleToken:F.data.amountOut.amount.token,poolReady:F.data.poolReady&&W.poolReady,poolType:[F.data.poolType,W.poolType],feeConfig:y,expirationTime:xt(F.data.expirationTime,W.expirationTime)}))}catch(W){this.logDebug("route out error",G.version,G.id.toString(),W.message)}}return b.filter(I=>I.allTrade).sort((I,L)=>I.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Ft)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:s,outputToken:a,amountIn:u}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:A}=Se.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new _(y.toFixed()),executionPrice:new _(f.toFixed()),priceImpact:new _(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:xt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:s});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:ro(E(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:ro(E(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(u.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:c,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:ro(E(C({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:ro(E(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(u.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(c=>c.version===6&&!t[c.id.toString()]).map(c=>c.id.toString()));if(o.size>0){let c=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(c).forEach(l=>{t[l]=c[l]})}if(new Set(e.filter(c=>c.version===4&&!n[c.id.toString()]).map(c=>c.id.toString())).size>0){let c=this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(c).forEach(l=>{n[l]=c[l]})}let s=new Set(e.filter(c=>c.version===4).map(c=>c.marketId)),a={};s.size>0&&(await Ne(this.scope.connection,Array.from(s).map(l=>({pubkey:new pn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=zi.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Kr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let u=[];return e.forEach(c=>{if(c.version===6){let l=t[c.id.toString()],m={programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:E(C({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};u.push(m)}else if(c.version===4){let l=n[c.id.toString()],m=C({programId:c.programId,id:c.id,mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Ui({programId:new pn(c.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:c.lpMint},a[c.marketId]);u.push(m)}else c.version===7&&u.push({programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),authority:On(c.programId).publicKey.toBase58(),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},mintLp:He({address:c.mintLp.toBase58(),programId:Ke.toBase58(),decimals:c.lpDecimals}),config:E(C({id:c.configId.toBase58()},c.configInfo),{protocolFeeRate:c.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:c.configInfo.tradeFeeRate.toNumber(),fundFeeRate:c.configInfo.fundFeeRate.toNumber(),createPoolFee:c.configInfo.createPoolFee.toString()})})}),u}};import{TOKEN_PROGRAM_ID as dd}from"@solana/spl-token";import{PublicKey as pd,Transaction as ji,TransactionInstruction as fd}from"@solana/web3.js";import Au from"bn.js";var ze=class extends ke{static getPdaPoolId(e,t){return le([ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return le([ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Au(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){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,o,l).publicKey));let u=await gt(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=u[d],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),h=ze.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new Au(0))).filter(x=>!x).length!==3,T=i>A&&i<k&&g.status===1,S=B&&T;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:ze.VERSION_PROJECT[m],openTime:A,endTime:k,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i=[];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(he.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!u.mintAddress.equals(he.WSOL.mint),associatedOnly:u.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(c)}n.addInstruction({instructions:[ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(he.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!m.mintAddress.equals(he.WSOL.mint),associatedOnly:m.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[ze.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:o,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return Zr(u,[o,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ji().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ji().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ji().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=v([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:dd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new fd({keys:i,programId:e,data:a})}},pt=ze;pt.CLAIMED_NUM=3,pt.POOL_LAYOUT=v([pe(8),D("bump"),D("status"),w("openTime"),w("endTime"),K("ammId"),X(v([D("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),pt.OWNER_LAYOUT=v([pe(8),D("bump"),D("version"),K("poolId"),K("owner"),w("lpAmount"),X(v([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new pd(e)),pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Po}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Iu}from"@solana/spl-token";import ko from"bn.js";import{TransactionInstruction as bd,SYSVAR_RENT_PUBKEY as gd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hu}from"@solana/spl-token";import{createInitializeAccountInstruction as Pu}from"@solana/spl-token";import{SystemProgram as fn,Transaction as ku}from"@solana/web3.js";function yd(r="accountFlags"){let e=new Zo(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 Qi=v([pe(5),yd("accountFlags"),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),pe(7)]);function wd({programId:r,marketInfo:e}){let t=v([D("version"),Qe("instruction"),w("baseLotSize"),w("quoteLotSize"),St("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:gd,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new bd({keys:n,programId:r,data:o})}async function Tu({connection:r,wallet:e,marketInfo:t}){let n=new ku,o=await r.getMinimumBalanceForRentExemption(165);n.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:hu}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:hu}),Pu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Pu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new ku;return i.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(Qi.span),space:Qi.span,programId:t.programId}),fn.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}),fn.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}),fn.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}),fn.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}),wd({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:i,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.InitMarket]}]}var Nn=class extends ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,txVersion:s,computeBudgetConfig:a}){let u=this.scope.ownerPubKey,c=Ue({fromPublicKey:u,programId:i}),l=Ue({fromPublicKey:u,programId:i}),m=Ue({fromPublicKey:u,programId:i}),d=Ue({fromPublicKey:u,programId:i}),p=Ue({fromPublicKey:u,programId:i}),y=Ue({fromPublicKey:u,programId:Iu}),f=Ue({fromPublicKey:u,programId:Iu}),b=0,g=new ko(100);function h(){let R=new ko(0);for(;;)try{return{vaultOwner:Po.createProgramAddressSync([c.publicKey.toBuffer(),R.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:R}}catch{if(R.iaddn(1),R.gt(new ko(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:k}=h(),B=new ko(Math.round(10**e.decimals*n)),T=new ko(Math.round(n*10**t.decimals*o));if(B.eq(at))throw Error("lot size is too small");if(T.eq(at))throw Error("tick size or lot size is too small");let S=await Tu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:c,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:k,baseLotSize:B,quoteLotSize:T}}),x=this.createTxBuilder();x.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let R of S.slice(1,S.length))x.addInstruction({instructions:R.transaction.instructions,signers:R.signer,instructionTypes:R.instructionTypes});return s===0?x.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Po(e.mint),quoteMin:new Po(t.mint)}}):x.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Po(e.mint),quoteMin:new Po(t.mint)}})}};import{PublicKey as Io}from"@solana/web3.js";import{TransactionInstruction as Bu,SYSVAR_CLOCK_PUBKEY as hd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as xu}from"@solana/spl-token";var Ad=v([D("instruction"),js("amount")]),To=v([D("instruction")]);function Rr({programId:r},e){let t=[{pubkey:xu,isSigner:!1,isWritable:!1},{pubkey:Ps,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(To.span);return To.encode({instruction:2},n),new Bu({keys:t,programId:r,data:n})}function Hi(r){let{poolConfig:e,userKeys:t,side:n}=r,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(To.span);To.encode({instruction:2},s);let a=[{pubkey:xu,isWritable:!1,isSigner:!1},{pubkey:hd,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Bu({programId:e.programId,keys:a,data:s})}import Su from"bn.js";var Pd={[zn.IDO_PROGRAM_ID_V1.toString()]:1,[zn.IDO_PROGRAM_ID_V2.toString()]:2,[zn.IDO_PROGRAM_ID_V3.toString()]:3,[zn.IDO_PROGRAM_ID_V4.toString()]:4},Mn=class extends ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i}){let s=this.createTxBuilder(),a=Pd[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ee(t),[c,l]=[!new Su(e.coin).isZero(),!new Su(e.pc).isZero()],m=u.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=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:o});!d&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&p&&s.addInstruction(p);let y=u.buyInfo.mint.address.equals(H),{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:o});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...c?[Rr({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Io(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Rr({programId:new Io(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Io(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Rr({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Io(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});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:d,quoteTokenAccount:f,ledgerAccount:new Io(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[Hi(E(C({},g),{side:"base"}))]:[],...l?[Hi(E(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as kd}from"@solana/web3.js";import{MintLayout as Td,TOKEN_2022_PROGRAM_ID as Zi,TOKEN_PROGRAM_ID as Ji}from"@solana/spl-token";var Bo=class extends ke{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(o,n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(zt.address,zt),this._mintGroup.official.add(zt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,E(C({},c),{priority:-1}))}),i.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?Zi.toBase58():Ji.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?Zi.toBase58():Ji.toBase58()})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?Zi.toBase58():Ji.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return zt;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new kd(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Td.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 Lr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:c="confirmed",enableJitoRpc:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new wt(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=c,this.enableJito=!!l,this.api=i,this._apiCacheTime=u||5*60*1e3,this.logger=se("Raydium"),this.farm=new oo({scope:this,moduleName:"Raydium_Farm"}),this.account=new Hn({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new fo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Bo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new ho({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new yo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ao({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Nn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Mn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let m=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:m,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Id({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:s,urlConfigs:a}=t,u=new jo({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:s}),c=new Lr(E(C({},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(Qo);return this._owner.publicKey}setOwner(e){return this._owner=e?new wt(e):void 0,this}get connection(){if(!this._connection)throw new Error(Xs);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw this.logger.error(Qo),new Error(Qo)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}async fetchJupTokenList(e,t){var i;let n=(i=this.apiData.jupTokenList)==null?void 0:i[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let o=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=E(C({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:o}}),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{}}}};export{Lr as Raydium};
|
|
2
2
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
3
3
|
//# sourceMappingURL=raydium.mjs.map
|